ZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IGQwMjkzODguLjgyN2NkMTggMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtMjEsMTIgKzIxLDEyIEBACiAjaWZkZWYgQ09ORklHX01NVQogI2lmZGVmIENPTkZJR19LUFJPQkVTCiBzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncypyZWdzLHVuc2lnbmVkIGludCBmc3Ipe2ludCAKLXJldD0oMHg2MGIrNTcxNC0weDFjNWQpO2lmKCF1c2VyX21vZGUocmVncykpe3ByZWVtcHRfZGlzYWJsZSgpO2lmKGtwcm9iZV9ydW5uaW5nCi0oKSYma3Byb2JlX2ZhdWx0X2hhbmRsZXIocmVncyxmc3IpKXJldD0oMHgxZGRkKzIxOS0weDFlYjcpO3ByZWVtcHRfZW5hYmxlKCk7fQotcmV0dXJuIHJldDt9CityZXQ9KDB4MTE0YSszMzk4LTB4MWU5MCk7aWYoIXVzZXJfbW9kZShyZWdzKSl7cHJlZW1wdF9kaXNhYmxlKCk7aWYoCitrcHJvYmVfcnVubmluZygpJiZrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLGZzcikpcmV0PSgweDFlYWIrNjc0LTB4MjE0Yyk7CitwcmVlbXB0X2VuYWJsZSgpO31yZXR1cm4gcmV0O30KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncypyZWdzLHVuc2lnbmVkIGludCBmc3Ipe3JldHVybgotKDB4OTdmKzIxNzYtMHgxMWZmKTt9CisoMHg3ZTArMTI3NC0weGNkYSk7fQogI2VuZGlmCiB2b2lkIHNob3dfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QqbW0sdW5zaWduZWQgbG9uZyBhZGRyKXtwZ2RfdCpwZ2Q7aWYoIW1tKW1tPSYKIGluaXRfbW07cHJpbnRrKEtFUk5fQUxFUlQiXHg3MFx4NjdceDY0XHgyMFx4M2RceDIwXHgyNVx4NzAiICJcbiIsbW0tPnBnZCk7cGdkPQpAQCAtMzQsMTAgKzM0LDEwIEBACiAiXHg1Ylx4MjVceDMwXHgzOFx4NmNceDc4XHg1ZFx4MjBceDJhXHg3MFx4NjdceDY0XHgzZFx4MjVceDMwXHgzOFx4NmNceDZjXHg3OCIsCiBhZGRyLChsb25nIGxvbmcpcGdkX3ZhbCgqcGdkKSk7ZG97cHVkX3QqcHVkO3BtZF90KnBtZDtwdGVfdCpwdGU7aWYocGdkX25vbmUoKnBnZAogKSlicmVhaztpZihwZ2RfYmFkKCpwZ2QpKXtwcmludGsoIlx4MjhceDYyXHg2MVx4NjRceDI5Iik7YnJlYWs7fXB1ZD1wdWRfb2Zmc2V0KAotcGdkLGFkZHIpO2lmKFBUUlNfUEVSX1BVRCE9KDB4MTIyKzExODItMHg1YmYpKXByaW50aygKK3BnZCxhZGRyKTtpZihQVFJTX1BFUl9QVUQhPSgweDE4YjIrMTEzNy0weDFkMjIpKXByaW50aygKICJceDJjXHgyMFx4MmFceDcwXHg3NVx4NjRceDNkXHgyNVx4MzBceDM4XHg2Y1x4NmNceDc4IiwobG9uZyBsb25nKXB1ZF92YWwoKnB1ZCkpCiA7aWYocHVkX25vbmUoKnB1ZCkpYnJlYWs7aWYocHVkX2JhZCgqcHVkKSl7cHJpbnRrKCJceDI4XHg2Mlx4NjFceDY0XHgyOSIpO2JyZWFrOwotfXBtZD1wbWRfb2Zmc2V0KHB1ZCxhZGRyKTtpZihQVFJTX1BFUl9QTUQhPSgweDQ1Zis1Nzg2LTB4MWFmOCkpcHJpbnRrKAorfXBtZD1wbWRfb2Zmc2V0KHB1ZCxhZGRyKTtpZihQVFJTX1BFUl9QTUQhPSgweDEwOGMrNTM1My0weDI1NzQpKXByaW50aygKICJceDJjXHgyMFx4MmFceDcwXHg2ZFx4NjRceDNkXHgyNVx4MzBceDM4XHg2Y1x4NmNceDc4IiwobG9uZyBsb25nKXBtZF92YWwoKnBtZCkpCiA7aWYocG1kX25vbmUoKnBtZCkpYnJlYWs7aWYocG1kX2JhZCgqcG1kKSl7cHJpbnRrKCJceDI4XHg2Mlx4NjFceDY0XHgyOSIpO2JyZWFrOwogfWlmKFBhZ2VIaWdoTWVtKHBmbl90b19wYWdlKHBtZF92YWwoKnBtZCk+PlBBR0VfU0hJRlQpKSlicmVhaztwdGU9cHRlX29mZnNldF9tYXAKQEAgLTQ3LDE4ICs0NywxOCBAQAogcHJpbnRrKCJceDJjXHgyMFx4MmFceDcwXHg3MFx4NzRceDY1XHgzZFx4MjVceDMwXHgzOFx4NmNceDZjXHg3OCIsKGxvbmcgbG9uZykKIHB0ZV92YWwocHRlW1BURV9IV1RBQkxFX1BUUlNdKSk7CiAjZW5kaWYKLXB0ZV91bm1hcChwdGUpO313aGlsZSgoMHg4YWMrNTY4NC0weDFlZTApKTtwcmludGsoIlxuIik7fQorcHRlX3VubWFwKHB0ZSk7fXdoaWxlKCgweDY3YisyMDU2LTB4ZTgzKSk7cHJpbnRrKCJcbiIpO30KICNlbHNlCQkJCQkKIHZvaWQgc2hvd19wdGUoc3RydWN0IG1tX3N0cnVjdCptbSx1bnNpZ25lZCBsb25nIGFkZHIpe30KICNlbmRpZgkJCQkJCiBzdGF0aWMgdm9pZCBfX2RvX2tlcm5lbF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0Km1tLHVuc2lnbmVkIGxvbmcgYWRkcix1bnNpZ25lZCAKIGludCBmc3Isc3RydWN0IHB0X3JlZ3MqcmVncyl7aWYoZml4dXBfZXhjZXB0aW9uKHJlZ3MpKXJldHVybjtidXN0X3NwaW5sb2NrcygKLSgweDY1MysxODI2LTB4ZDc0KSk7cHJpbnRrKEtFUk5fQUxFUlQKKygweDExYTIrMzQ2MS0weDFmMjYpKTtwcmludGsoS0VSTl9BTEVSVAogIlx4NTVceDZlXHg2MVx4NjJceDZjXHg2NVx4MjBceDc0XHg2Zlx4MjBceDY4XHg2MVx4NmVceDY0XHg2Y1x4NjVceDIwXHg2Ylx4NjVceDcyXHg2ZVx4NjVceDZjXHgyMFx4MjVceDczXHgyMFx4NjFceDc0XHgyMFx4NzZceDY5XHg3Mlx4NzRceDc1XHg2MVx4NmNceDIwXHg2MVx4NjRceDY0XHg3Mlx4NjVceDczXHg3M1x4MjBceDI1XHgzMFx4MzhceDZjXHg3OCIgIlxuIgogLChhZGRyPFBBR0VfU0laRSk/CiAiXHg0ZVx4NTVceDRjXHg0Y1x4MjBceDcwXHg2Zlx4NjlceDZlXHg3NFx4NjVceDcyXHgyMFx4NjRceDY1XHg3Mlx4NjVceDY2XHg2NVx4NzJceDY1XHg2ZVx4NjNceDY1IgogOiJceDcwXHg2MVx4NjdceDY5XHg2ZVx4NjdceDIwXHg3Mlx4NjVceDcxXHg3NVx4NjVceDczXHg3NCIsYWRkcik7c2hvd19wdGUobW0sCi1hZGRyKTtkaWUoIlx4NGZceDZmXHg3MFx4NzMiLHJlZ3MsZnNyKTtidXN0X3NwaW5sb2NrcygoMHgxNWM0KzE4ODQtMHgxZDIwKSk7CithZGRyKTtkaWUoIlx4NGZceDZmXHg3MFx4NzMiLHJlZ3MsZnNyKTtidXN0X3NwaW5sb2NrcygoMHg0NzkrMzk0NC0weDEzZTEpKTsKIGRvX2V4aXQoU0lHS0lMTCk7fXN0YXRpYyB2b2lkIF9fZG9fdXNlcl9mYXVsdChzdHJ1Y3QgdGFza19zdHJ1Y3QqdHNrLHVuc2lnbmVkIAogbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3IsdW5zaWduZWQgaW50IHNpZyxpbnQgY29kZSxzdHJ1Y3QgcHRfcmVncypyZWdzKXtzdHJ1Y3QKICBzaWdpbmZvIHNpOwpAQCAtNjksNyArNjksNyBAQAogLHRzay0+Y29tbSxzaWcsYWRkcixmc3IpO3Nob3dfcHRlKHRzay0+bW0sYWRkcik7c2hvd19yZWdzKHJlZ3MpO30KICNlbmRpZgogdHNrLT50aHJlYWQuYWRkcmVzcz1hZGRyO3Rzay0+dGhyZWFkLmVycm9yX2NvZGU9ZnNyO3Rzay0+dGhyZWFkLnRyYXBfbm89Ci0oMHg0NzQrODY4Ny0weDI2NTUpO3NpLnNpX3NpZ25vPXNpZztzaS5zaV9lcnJubz0oMHgxYTU0KzIwMjgtMHgyMjQwKTtzaS5zaV9jb2RlPQorKDB4YTI5KzM4NTQtMHgxOTI5KTtzaS5zaV9zaWdubz1zaWc7c2kuc2lfZXJybm89KDB4MTg3OSs4MjktMHgxYmI2KTtzaS5zaV9jb2RlPQogY29kZTtzaS5zaV9hZGRyPSh2b2lkIF9fdXNlciopYWRkcjtmb3JjZV9zaWdfaW5mbyhzaWcsJnNpLHRzayk7fXZvaWQgZG9fYmFkX2FyZWEKICh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzcixzdHJ1Y3QgcHRfcmVncypyZWdzKXtzdHJ1Y3QgdGFza19zdHJ1Y3QqdHNrCiA9Y3VycmVudDtzdHJ1Y3QgbW1fc3RydWN0Km1tPXRzay0+YWN0aXZlX21tO2lmKHVzZXJfbW9kZShyZWdzKSlfX2RvX3VzZXJfZmF1bHQoCkBAIC05MSw4ICs5MSw4IEBACiBzdGF0aWMgaW50IF9fa3Byb2JlcyBkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkcix1bnNpZ25lZCBpbnQgZnNyLHN0cnVjdCAKIHB0X3JlZ3MqcmVncyl7c3RydWN0IHRhc2tfc3RydWN0KnRzaztzdHJ1Y3QgbW1fc3RydWN0Km1tO2ludCBmYXVsdCxzaWcsY29kZTtpbnQgCiB3cml0ZT1mc3ImRlNSX1dSSVRFO3Vuc2lnbmVkIGludCBmbGFncz1GQVVMVF9GTEFHX0FMTE9XX1JFVFJZfAotRkFVTFRfRkxBR19LSUxMQUJMRXwod3JpdGU/RkFVTFRfRkxBR19XUklURTooMHgxMDhiKzUzNS0weDEyYTIpKTtpZigKLW5vdGlmeV9wYWdlX2ZhdWx0KHJlZ3MsZnNyKSlyZXR1cm4oMHhjMjgrNjc3NC0weDI2OWUpO3Rzaz1jdXJyZW50O21tPXRzay0+bW07aWYoCitGQVVMVF9GTEFHX0tJTExBQkxFfCh3cml0ZT9GQVVMVF9GTEFHX1dSSVRFOigweGRjOSs4MTUtMHgxMGY4KSk7aWYoCitub3RpZnlfcGFnZV9mYXVsdChyZWdzLGZzcikpcmV0dXJuKDB4YmQrNzY5OS0weDFlZDApO3Rzaz1jdXJyZW50O21tPXRzay0+bW07aWYoCiBpbnRlcnJ1cHRzX2VuYWJsZWQocmVncykpbG9jYWxfaXJxX2VuYWJsZSgpO2lmKCFtbXx8cGFnZWZhdWx0X2Rpc2FibGVkKCkpZ290byAKIG5vX2NvbnRleHQ7aWYoIWRvd25fcmVhZF90cnlsb2NrKCZtbS0+bW1hcF9zZW0pKXtpZighdXNlcl9tb2RlKHJlZ3MpJiYhCiBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5BUk1fcGMpKWdvdG8gbm9fY29udGV4dDtyZXRyeTpkb3duX3JlYWQoJm1tLT4KQEAgLTEwMSwyMyArMTAxLDIyIEBACiBpZighdXNlcl9tb2RlKHJlZ3MpJiYhc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+QVJNX3BjKSlnb3RvIG5vX2NvbnRleHQ7CiAjZW5kaWYKIH1mYXVsdD1fX2RvX3BhZ2VfZmF1bHQobW0sYWRkcixmc3IsZmxhZ3MsdHNrKTtpZigoZmF1bHQmVk1fRkFVTFRfUkVUUlkpJiYKLWZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKXJldHVybigweDQ3Yis3NTE0LTB4MjFkNSk7cGVyZl9zd19ldmVudCgKLVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsKDB4NmIyKzQ4ODAtMHgxOWMxKSxyZWdzLGFkZHIpO2lmKCEoZmF1bHQmCitmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlyZXR1cm4oMHgxNjg4KzExMzYtMHgxYWY4KTtwZXJmX3N3X2V2ZW50KAorUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUywoMHgxM2I1KzY0LTB4MTNmNCkscmVncyxhZGRyKTtpZighKGZhdWx0JgogVk1fRkFVTFRfRVJST1IpJiZmbGFncyZGQVVMVF9GTEFHX0FMTE9XX1JFVFJZKXtpZihmYXVsdCZWTV9GQVVMVF9NQUpPUil7dHNrLT4KLW1hal9mbHQrKztwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKLCgweDI2MSs2MjYyLTB4MWFkNikscmVncywKK21hal9mbHQrKztwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUFKLCgweDM1OCs2NzU3LTB4MWRiYykscmVncywKIGFkZHIpO31lbHNle3Rzay0+bWluX2ZsdCsrO3BlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4sCi0oMHhjOTYrMTU5OS0weDEyZDQpLHJlZ3MsYWRkcik7fWlmKGZhdWx0JlZNX0ZBVUxUX1JFVFJZKXtmbGFncyY9fgorKDB4YWIzKzQyNTYtMHgxYjUyKSxyZWdzLGFkZHIpO31pZihmYXVsdCZWTV9GQVVMVF9SRVRSWSl7ZmxhZ3MmPX4KIEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlk7Z290byByZXRyeTt9fXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7aWYobGlrZWx5KCEoZmF1bHQmKAotVk1fRkFVTFRfRVJST1J8Vk1fRkFVTFRfQkFETUFQfFZNX0ZBVUxUX0JBREFDQ0VTUykpKSlyZXR1cm4oMHg3ODgrMTQxOC0weGQxMik7aWYKLShmYXVsdCZWTV9GQVVMVF9PT00pe3BhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7cmV0dXJuKDB4MjkyKzIzNTYtMHhiYzYpO31pZighCitWTV9GQVVMVF9FUlJPUnxWTV9GQVVMVF9CQURNQVB8Vk1fRkFVTFRfQkFEQUNDRVNTKSkpKXJldHVybigweDFiMSs3NDEwLTB4MWVhMyk7CitpZihmYXVsdCZWTV9GQVVMVF9PT00pe3BhZ2VmYXVsdF9vdXRfb2ZfbWVtb3J5KCk7cmV0dXJuKDB4ZWJkKzEzODQtMHgxNDI1KTt9aWYoIQogdXNlcl9tb2RlKHJlZ3MpKWdvdG8gbm9fY29udGV4dDtpZihmYXVsdCZWTV9GQVVMVF9TSUdCVVMpe3NpZz1TSUdCVVM7Y29kZT0KIEJVU19BRFJFUlI7fWVsc2V7c2lnPVNJR1NFR1Y7Y29kZT1mYXVsdD09Vk1fRkFVTFRfQkFEQUNDRVNTP1NFR1ZfQUNDRVJSOgotU0VHVl9NQVBFUlI7fV9fZG9fdXNlcl9mYXVsdCh0c2ssYWRkcixmc3Isc2lnLGNvZGUscmVncyk7cmV0dXJuCi0oMHg2MzQrMzEwMC0weDEyNTApO25vX2NvbnRleHQ6X19kb19rZXJuZWxfZmF1bHQobW0sYWRkcixmc3IscmVncyk7cmV0dXJuCi0oMHgxMzkrNDYwOC0weDEzMzkpO30KK1NFR1ZfTUFQRVJSO31fX2RvX3VzZXJfZmF1bHQodHNrLGFkZHIsZnNyLHNpZyxjb2RlLHJlZ3MpO3JldHVybigweDQwNisxMjEtMHg0N2YpCis7bm9fY29udGV4dDpfX2RvX2tlcm5lbF9mYXVsdChtbSxhZGRyLGZzcixyZWdzKTtyZXR1cm4oMHgxYzcwKzE1NjYtMHgyMjhlKTt9CiAjZWxzZQkJCQkJCiBzdGF0aWMgaW50IGRvX3BhZ2VfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3Isc3RydWN0IHB0X3JlZ3MqcmVncwotKXtyZXR1cm4oMHg0OWQrNzkyNS0weDIzOTIpO30KKyl7cmV0dXJuKDB4M2VjKzIwMjMtMHhiZDMpO30KICNlbmRpZgkJCQkJCiAjaWZkZWYgQ09ORklHX01NVQogc3RhdGljIGludCBfX2twcm9iZXMgZG9fdHJhbnNsYXRpb25fZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3IsCkBAIC0xMzAsMjEgKzEyOSwyMSBAQAogYmFkX2FyZWE7aWYoIXB1ZF9wcmVzZW50KCpwdWQpKXNldF9wdWQocHVkLCpwdWRfayk7cG1kPXBtZF9vZmZzZXQocHVkLGFkZHIpOwogcG1kX2s9cG1kX29mZnNldChwdWRfayxhZGRyKTsKICNpZmRlZiBDT05GSUdfQVJNX0xQQUUKLWluZGV4PSgweDQ2KzcxMzctMHgxYzI3KTsKK2luZGV4PSgweDEzOTcrMTg5NC0weDFhZmQpOwogI2Vsc2UKLWluZGV4PShhZGRyPj5TRUNUSU9OX1NISUZUKSYoMHgxZWIzKzE4NjctMHgyNWZkKTsKK2luZGV4PShhZGRyPj5TRUNUSU9OX1NISUZUKSYoMHgxZDk2Kzc1Ni0weDIwODkpOwogI2VuZGlmCiBpZihwbWRfbm9uZShwbWRfa1tpbmRleF0pKWdvdG8gYmFkX2FyZWE7Y29weV9wbWQocG1kLHBtZF9rKTtyZXR1cm4KLSgweGJhZisyMjEtMHhjOGMpO2JhZF9hcmVhOmRvX2JhZF9hcmVhKGFkZHIsZnNyLHJlZ3MpO3JldHVybigweDQ4Mys0Mzg0LTB4MTVhMyk7Ci19CisoMHgxMDgrMTA1MS0weDUyMyk7YmFkX2FyZWE6ZG9fYmFkX2FyZWEoYWRkcixmc3IscmVncyk7cmV0dXJuKDB4MTYzKzQ5NzQtMHgxNGQxKQorO30KICNlbHNlCQkJCQkKIHN0YXRpYyBpbnQgZG9fdHJhbnNsYXRpb25fZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3Isc3RydWN0IAotcHRfcmVncypyZWdzKXtyZXR1cm4oMHgzZis5MTg3LTB4MjQyMik7fQorcHRfcmVncypyZWdzKXtyZXR1cm4oMHhkZmQrMjE0MS0weDE2NWEpO30KICNlbmRpZgkJCQkJCiBzdGF0aWMgaW50IGRvX3NlY3RfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3Isc3RydWN0IHB0X3JlZ3MqcmVncwogKXtpZihpbnRlcnJ1cHRzX2VuYWJsZWQocmVncykpbG9jYWxfaXJxX2VuYWJsZSgpO2RvX2JhZF9hcmVhKGFkZHIsZnNyLHJlZ3MpOwotcmV0dXJuKDB4Yzk3KzI1MDYtMHgxNjYxKTt9c3RhdGljIGludCBkb19iYWQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3IKLSxzdHJ1Y3QgcHRfcmVncypyZWdzKXtyZXR1cm4oMHgxNDhiKzE1NTctMHgxYTlmKTt9c3RydWN0IGZzcl9pbmZve2ludCgqZm4pKAorcmV0dXJuKDB4ZGUyKzQ3OTktMHgyMGExKTt9c3RhdGljIGludCBkb19iYWQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3IKKyxzdHJ1Y3QgcHRfcmVncypyZWdzKXtyZXR1cm4oMHhhY2MrMTMxMy0weGZlYyk7fXN0cnVjdCBmc3JfaW5mb3tpbnQoKmZuKSgKIHVuc2lnbmVkIGxvbmcgYWRkcix1bnNpZ25lZCBpbnQgZnNyLHN0cnVjdCBwdF9yZWdzKnJlZ3MpO2ludCBzaWc7aW50IGNvZGU7Y29uc3QgCiBjaGFyKm5hbWU7fTsKICNpZmRlZiBDT05GSUdfQVJNX0xQQUUKQEAgLTE1MywyMSArMTUyLDIxIEBACiAjaW5jbHVkZSAiZnNyLTJsZXZlbC5jIgogI2VuZGlmCiB2b2lkIF9faW5pdCBob29rX2ZhdWx0X2NvZGUoaW50IG5yLGludCgqZm4pKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgaW50LHN0cnVjdCAKLXB0X3JlZ3MqKSxpbnQgc2lnLGludCBjb2RlLGNvbnN0IGNoYXIqbmFtZSl7aWYobnI8KDB4YTg5KzY4NjYtMHgyNTViKXx8bnI+PQorcHRfcmVncyopLGludCBzaWcsaW50IGNvZGUsY29uc3QgY2hhcipuYW1lKXtpZihucjwoMHhhYzIrNDItMHhhZWMpfHxucj49CiBBUlJBWV9TSVpFKGZzcl9pbmZvKSlCVUcoKTtmc3JfaW5mb1tucl0uZm49Zm47ZnNyX2luZm9bbnJdLnNpZz1zaWc7ZnNyX2luZm9bbnJdLgogY29kZT1jb2RlO2Zzcl9pbmZvW25yXS5uYW1lPW5hbWU7fQogI2lmZGVmIENPTkZJR19NT0RFTV9DT0RFX0lTX01BUFBJTkcKIHN0YXRpYyBERUNMQVJFX1JXU0VNKHNocmlua2VyX3J3c2VtKTthdG9taWNfdCBfY29kZV9wYWdlX2NvdW50PUFUT01JQ19JTklUKAotKDB4ODRiKzc2NDAtMHgyNjIzKSk7c3RydWN0IGFkZHJfaW5mb3tzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7dW5zaWduZWQgbG9uZyB2YWRkcjsKKygweGQ4KzY1MTQtMHgxYTRhKSk7c3RydWN0IGFkZHJfaW5mb3tzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7dW5zaWduZWQgbG9uZyB2YWRkcjsKIHVuc2lnbmVkIGxvbmcga2FkZHI7dW5zaWduZWQgbG9uZyBwYWdlX2luZGV4O307ZW51bSBtb2RlbV9hY2Nlc3NfdGVjaG5vbG9neXtHU009Ci0oMHg3OGMrMzg0MS0weDE2OGQpLFVUUkFOPSgweDU4KzQ4Ny0weDIzZSksTFRFPSgweGRhMSs1ODM0LTB4MjQ2OSksQ09NPQotKDB4MjcxKzkxMDktMHgyNjAzKSxOUl9NT0RFTV9BQ0NFU1M9KDB4ZWYyKzQ1MTUtMHgyMDkxKX07c3RydWN0IGxpc3RfaGVhZCAKKygweDFiMCsyNTUzLTB4YmE5KSxVVFJBTj0oMHg0MDMrODg3NS0weDI2YWQpLExURT0oMHg2MTcrNzM0NC0weDIyYzUpLENPTT0KKygweGEwYSs0NTg4LTB4MWJmMyksTlJfTU9ERU1fQUNDRVNTPSgweDE3OSs3NjQxLTB4MWY0ZSl9O3N0cnVjdCBsaXN0X2hlYWQgCiBtb2RlbV9wYWdlX2xpc3RbTlJfTU9ERU1fQUNDRVNTXT17TElTVF9IRUFEX0lOSVQobW9kZW1fcGFnZV9saXN0WwotKDB4MThjMCsyMDE0LTB4MjA5ZSldKSxMSVNUX0hFQURfSU5JVChtb2RlbV9wYWdlX2xpc3RbKDB4Y2ZiKzI3MTAtMHgxNzkwKV0pLAotTElTVF9IRUFEX0lOSVQobW9kZW1fcGFnZV9saXN0WygweGIzYys1ODctMHhkODUpXSksTElTVF9IRUFEX0lOSVQoCi1tb2RlbV9wYWdlX2xpc3RbKDB4ODI2KzI2OTYtMHgxMmFiKV0pLH07dW5zaWduZWQgaW50IHBhZ2VfdXNlZFsKLSgweDEyNmIrMzYwLTB4MTNhYildO3N0cnVjdCBjb21wbGV0aW9uIHBhZ2VfY29tcGxldGlvblsoMHhhNDQrMjU1My0weDE0MTUpKgotKDB4NjBmKzI5NzMtMHgxMThjKV07c3RhdGljIHZvaWQgdW5tYXBfcHRlX3JhbmdlKHBtZF90KnBtZCx1bnNpZ25lZCBsb25nIGFkZHIsCisoMHhiNmMrNDc5OC0weDFlMmEpXSksTElTVF9IRUFEX0lOSVQobW9kZW1fcGFnZV9saXN0WygweDE1MjkrNDQ4MC0weDI2YTgpXSksCitMSVNUX0hFQURfSU5JVChtb2RlbV9wYWdlX2xpc3RbKDB4MjI2KzQ4OTAtMHgxNTNlKV0pLExJU1RfSEVBRF9JTklUKAorbW9kZW1fcGFnZV9saXN0WygweDRhNSs4MDI2LTB4MjNmYyldKSx9O3Vuc2lnbmVkIGludCBwYWdlX3VzZWRbCisoMHgxMDE4KzE1MTMtMHgxNWQ5KV07c3RydWN0IGNvbXBsZXRpb24gcGFnZV9jb21wbGV0aW9uWygweDEzYmMrMzA4MC0weDFmOWMpKgorKDB4YWM3KzU5NTktMHgyMWVlKV07c3RhdGljIHZvaWQgdW5tYXBfcHRlX3JhbmdlKHBtZF90KnBtZCx1bnNpZ25lZCBsb25nIGFkZHIsCiB1bnNpZ25lZCBsb25nIGVuZCl7cHRlX3QqcHRlO3B0ZT1wdGVfb2Zmc2V0X2tlcm5lbChwbWQsYWRkcik7ZG97cHRlX3QgcHRlbnQ9CiBwdGVwX2dldF9hbmRfY2xlYXIoJmluaXRfbW0sYWRkcixwdGUpO1dBUk5fT04oIXB0ZV9ub25lKHB0ZW50KSYmIXB0ZV9wcmVzZW50KAogcHRlbnQpKTt9d2hpbGUocHRlKyssYWRkcis9UEFHRV9TSVpFLGFkZHIhPWVuZCk7fXN0YXRpYyB2b2lkIHVubWFwX3BtZF9yYW5nZSgKQEAgLTE4MSwxNCArMTgwLDE0IEBACiBhZGRyLHVuc2lnbmVkIGxvbmcgZW5kKXtwZ2RfdCpwZ2Q7dW5zaWduZWQgbG9uZyBuZXh0O0JVR19PTihhZGRyPj1lbmQpO3BnZD0KIHBnZF9vZmZzZXRfayhhZGRyKTtkb3tuZXh0PXBnZF9hZGRyX2VuZChhZGRyLGVuZCk7aWYocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCiBjb250aW51ZTt1bm1hcF9wdWRfcmFuZ2UocGdkLGFkZHIsbmV4dCk7fXdoaWxlKHBnZCsrLGFkZHI9bmV4dCxhZGRyIT1lbmQpO312b2lkIAotc2hyaW5rX21vZGVtX21lbSh1bnNpZ25lZCBpbnQgYWNjZXNzX3R5cGUpe2ludCBpPSgweDE1ZjIrMjIzMC0weDFlYTgpO3Vuc2lnbmVkIAorc2hyaW5rX21vZGVtX21lbSh1bnNpZ25lZCBpbnQgYWNjZXNzX3R5cGUpe2ludCBpPSgweDE5OGMrMjI3Mi0weDIyNmMpO3Vuc2lnbmVkIAogbG9uZyB2YWRkcjtzdHJ1Y3QgYWRkcl9pbmZvKmFkZHIsKnRtcF9hZGRyO3N0cnVjdCBsaXN0X2hlYWQgdG1wX3BhZ2VfbGlzdDtmb3IoaT0KLSgweGQ4YSs1ODE5LTB4MjQ0NSk7aTxOUl9NT0RFTV9BQ0NFU1M7aSsrKXtpZihpPT1hY2Nlc3NfdHlwZSljb250aW51ZTtkb3duX3dyaXRlCisoMHg5ZGErNjM5My0weDIyZDMpO2k8TlJfTU9ERU1fQUNDRVNTO2krKyl7aWYoaT09YWNjZXNzX3R5cGUpY29udGludWU7ZG93bl93cml0ZQogKCZzaHJpbmtlcl9yd3NlbSk7bGlzdF9yZXBsYWNlX2luaXQoJm1vZGVtX3BhZ2VfbGlzdFtpXSwmdG1wX3BhZ2VfbGlzdCk7dXBfd3JpdGUKICgmc2hyaW5rZXJfcndzZW0pO2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLHRtcF9hZGRyLCZ0bXBfcGFnZV9saXN0LG5vZGUpewogbGlzdF9kZWxfaW5pdCgmYWRkci0+bm9kZSk7cGFnZV9jb21wbGV0aW9uW2FkZHItPnBhZ2VfaW5kZXhdLmRvbmU9Ci0oMHgyNis2Mzg4LTB4MTkxYSk7cGFnZV91c2VkW2FkZHItPnBhZ2VfaW5kZXgvQklUU19QRVJfTE9OR10mPX4oCi0oMHhmOTErMzU5LTB4MTBmNyk8PChhZGRyLT5wYWdlX2luZGV4JUJJVFNfUEVSX0xPTkcpKTt2YWRkcj1hZGRyLT52YWRkciYKKygweGMyMCsyOTAzLTB4MTc3Nyk7cGFnZV91c2VkW2FkZHItPnBhZ2VfaW5kZXgvQklUU19QRVJfTE9OR10mPX4oCisoMHgxYjQrMTU1MC0weDdjMSk8PChhZGRyLT5wYWdlX2luZGV4JUJJVFNfUEVSX0xPTkcpKTt2YWRkcj1hZGRyLT52YWRkciYKIFBBR0VfTUFTSztpZih2YWRkcjxjcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0fHx2YWRkcj5jcHBzX2dsb2JhbF92YXIuCiBtb2RlbV90ZXh0X2VuZCl7cGFuaWMoCiAiXHg2MVx4NjRceDY0XHg3Mlx4NWZceDY5XHg2ZVx4NjZceDZmXHgzYVx4MjBceDI1XHgzMFx4MzhceDc4XHgyMFx4NjlceDczXHgyMFx4MjBceDY0XHg2NVx4NzNceDc0XHg3Mlx4NmZceDc5IgpAQCAtMTk2LDUyICsxOTUsNTMgQEAKIFBBR0VfU0laRSk7Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh2YWRkcix2YWRkcitQQUdFX1NJWkUpOwogI2lmZGVmIENPTkZJR19ERUJVR19ST0RBVEEKIHVuc2lnbmVkIGludCBmbGFncztsb2NhbF9pcnFfc2F2ZShmbGFncyk7c2V0X21lbW9yeV9ydyhhZGRyLT5rYWRkciwKLSgweGMxMisyODY5LTB4MTc0NikpO2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKygweGY5NCsyMjIxLTB4MTg0MCkpO2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICNlbmRpZgogZnJlZV9wYWdlKGFkZHItPmthZGRyKTtrZnJlZShhZGRyKTthdG9taWNfZGVjKCZfY29kZV9wYWdlX2NvdW50KTt9O319CiBFWFBPUlRfU1lNQk9MKHNocmlua19tb2RlbV9tZW0pO3BoeXNfYWRkcl90IHZpcnRfaXNfbWFwcGluZyh1bnNpZ25lZCBsb25nIGFkZHIpewogcGdkX3QqcGdkO3BtZF90KnBtZDtwdGVfdCpwdGVwLHB0ZTt1bnNpZ25lZCBsb25nIHBmbjtwZ2Q9cGdkX29mZnNldF9rKGFkZHIpO2lmKCEKIHBnZF9ub25lKCpwZ2QpKXtwbWQ9cG1kX29mZnNldChwZ2QsYWRkcik7aWYoIXBtZF9ub25lKCpwbWQpKXtwdGVwPXB0ZV9vZmZzZXRfbWFwCiAocG1kLGFkZHIpO3B0ZT0qcHRlcDtpZihwdGVfcHJlc2VudChwdGUpKXtwZm49cHRlX3BmbihwdGUpO3JldHVybiBfX3Bmbl90b19waHlzKAotcGZuKTt9fX1yZXR1cm4oMHhjMjArNjMxNC0weDI0Y2EpO31zdGF0aWMgaW50IHN5bmNfcGdkKHVuc2lnbmVkIGxvbmcgYWRkciwKLXVuc2lnbmVkIGludCBmc3Isc3RydWN0IHB0X3JlZ3MqcmVncyl7dW5zaWduZWQgaW50IGluZGV4O3BnZF90KnBnZCwqcGdkX2s7cHVkX3QqCi1wdWQsKnB1ZF9rO3BtZF90KnBtZCwqcG1kX2s7aW5kZXg9cGdkX2luZGV4KGFkZHIpO3BnZD1jcHVfZ2V0X3BnZCgpK2luZGV4O3BnZF9rPQorcGZuKTt9fX1yZXR1cm4oMHg4MzYrNzI3LTB4YjBkKTt9c3RhdGljIGludCBzeW5jX3BnZCh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQKKyBpbnQgZnNyLHN0cnVjdCBwdF9yZWdzKnJlZ3Mpe3Vuc2lnbmVkIGludCBpbmRleDtwZ2RfdCpwZ2QsKnBnZF9rO3B1ZF90KnB1ZCwqCitwdWRfaztwbWRfdCpwbWQsKnBtZF9rO2luZGV4PXBnZF9pbmRleChhZGRyKTtwZ2Q9Y3B1X2dldF9wZ2QoKStpbmRleDtwZ2Rfaz0KIGluaXRfbW0ucGdkK2luZGV4O2lmKHBnZF9ub25lKCpwZ2RfaykpZ290byBiYWRfYXJlYTtpZighcGdkX3ByZXNlbnQoKnBnZCkpCiBzZXRfcGdkKHBnZCwqcGdkX2spO3B1ZD1wdWRfb2Zmc2V0KHBnZCxhZGRyKTtwdWRfaz1wdWRfb2Zmc2V0KHBnZF9rLGFkZHIpO2lmKAogcHVkX25vbmUoKnB1ZF9rKSlnb3RvIGJhZF9hcmVhO2lmKCFwdWRfcHJlc2VudCgqcHVkKSlzZXRfcHVkKHB1ZCwqcHVkX2spO3BtZD0KIHBtZF9vZmZzZXQocHVkLGFkZHIpO3BtZF9rPXBtZF9vZmZzZXQocHVkX2ssYWRkcik7CiAjaWZkZWYgQ09ORklHX0FSTV9MUEFFCi1pbmRleD0oMHgxODE1KzYxNC0weDFhN2IpOworaW5kZXg9KDB4MWE0Kzg4MDMtMHgyNDA3KTsKICNlbHNlCi1pbmRleD0oYWRkcj4+U0VDVElPTl9TSElGVCkmKDB4YzI5KzUzMjAtMHgyMGYwKTsKK2luZGV4PShhZGRyPj5TRUNUSU9OX1NISUZUKSYoMHhhMDQrOTU2LTB4ZGJmKTsKICNlbmRpZgogaWYocG1kX25vbmUocG1kX2tbaW5kZXhdKSlnb3RvIGJhZF9hcmVhO2NvcHlfcG1kKHBtZCxwbWRfayk7cmV0dXJuCi0oMHgxNjkrMjMwLTB4MjRmKTtiYWRfYXJlYTpkb19iYWRfYXJlYShhZGRyLGZzcixyZWdzKTtyZXR1cm4oMHgxOGErNzI2OS0weDFkZWYpOwotfXVuc2lnbmVkIGxvbmcqcmVhZF9jb2RlX2ZpbGUodW5zaWduZWQgbG9uZyBwYWdlX2luZGV4KXt1bnNpZ25lZCBsb25nKmNvZGVfYnVmOwotc3NpemVfdCByZXN1bHQ7Y29kZV9idWY9Z2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpO2lmKCFjb2RlX2J1ZilwYW5pYygKKygweDZkNis1MjM3LTB4MWI0Yik7YmFkX2FyZWE6ZG9fYmFkX2FyZWEoYWRkcixmc3IscmVncyk7cmV0dXJuCisoMHgzMmQrNDM4Mi0weDE0NGIpO311bnNpZ25lZCBsb25nKnJlYWRfY29kZV9maWxlKHVuc2lnbmVkIGxvbmcgcGFnZV9pbmRleCl7Cit1bnNpZ25lZCBsb25nKmNvZGVfYnVmO3NzaXplX3QgcmVzdWx0O2NvZGVfYnVmPWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTtpZighCitjb2RlX2J1ZilwYW5pYygKICJceDZkXHg2NVx4NmRceDY1XHg2Zlx4NzJceDc5XHgyMFx4NmVceDZmXHg3NFx4MjBceDY1XHg2ZVx4NmZceDc1XHg2N1x4NjhceDIxXHgyMSIKICk7YXRvbWljX2luYygmX2NvZGVfcGFnZV9jb3VudCk7aWYoSVNfRVJSKGNwcHNfZ2xvYmFsX3Zhci5mcF9jb2RlKXx8CiBjcHBzX2dsb2JhbF92YXIuZnBfY29kZT09TlVMTCl7cGFuaWMoCiAiXHg2Zlx4NzBceDY1XHg2ZVx4MjBceDY2XHg2OVx4NmNceDY1XHgyMFx4NjVceDcyXHg3Mlx4NmZceDcyIiAiXG4iKTt9CiBtbV9zZWdtZW50X3Qgb2xkX2ZzO29sZF9mcz1nZXRfZnMoKTtzZXRfZnMoS0VSTkVMX0RTKTtsb2ZmX3QgcG9zO3Bvcz1wYWdlX2luZGV4KgogUEFHRV9TSVpFK2NwcHNfZ2xvYmFsX3Zhci5tb2RlbV9vZmZzZXQ7cmVzdWx0PXZmc19yZWFkKGNwcHNfZ2xvYmFsX3Zhci5mcF9jb2RlLCgKLWNoYXIqKWNvZGVfYnVmLFBBR0VfU0laRSwmcG9zKTtpZihyZXN1bHQ8KDB4YTg2KzI3NjctMHgxNTU1KSl7cGFuaWMoCitjaGFyKiljb2RlX2J1ZixQQUdFX1NJWkUsJnBvcyk7aWYocmVzdWx0PCgweDE1MCs0NjA3LTB4MTM0Zikpe3BhbmljKAogIlx4NzJceDY1XHg2MVx4NjRceDIwXHg2M1x4NmZceDY0XHg2NVx4MjBceDY2XHg2OVx4NmNceDY1XHgyMFx4NjVceDcyXHg3Mlx4NmZceDcyIiAiXG4iCiApO30KICNpZmRlZiBDT05GSUdfREVCVUdfUk9EQVRBCiB1bnNpZ25lZCBpbnQgZmxhZ3M7bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO3NldF9tZW1vcnlfcm8oKHVuc2lnbmVkIGxvbmcpY29kZV9idWYsCi0oMHg2MGMrMjQzNi0weGY4ZikpO2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKygweDExYTkrNTk5LTB4MTNmZikpO2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICNlbmRpZgogc2V0X2ZzKG9sZF9mcyk7cmV0dXJuIGNvZGVfYnVmO312b2lkIHJlYWRfY29kZV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgYWRkciwKIHVuc2lnbmVkIGludCBmc3Isc3RydWN0IHB0X3JlZ3MqcmVncyl7dW5zaWduZWQgbG9uZyBvZmZzZXQ7dW5zaWduZWQgbG9uZyB2YWRkcjsKIGNvbnN0IHN0cnVjdCBtZW1fdHlwZSptdHlwZTt1bnNpZ25lZCBsb25nKnZpcl9jb2RlYnVmO3Vuc2lnbmVkIGxvbmcgcGFnZV9pbmRleDsKLXVuc2lnbmVkIGxvbmcgcGFnZV9zaGlmdDtpZih2aXJ0X2lzX21hcHBpbmcoYWRkciZQQUdFX01BU0spIT0oMHgxNzIrOTQ3OC0weDI2NzgpCit1bnNpZ25lZCBsb25nIHBhZ2Vfc2hpZnQ7aWYodmlydF9pc19tYXBwaW5nKGFkZHImUEFHRV9NQVNLKSE9KDB4MTNkZis1NTktMHgxNjBlKQogKXtzeW5jX3BnZChhZGRyJlBBR0VfTUFTSyxmc3IscmVncyk7cmV0dXJuO312YWRkcj1hZGRyJlBBR0VfTUFTSztvZmZzZXQ9dmFkZHImKH4KIGNwcHNfZ2xvYmFsX3Zhci5jcGtvX3RleHRfc3RhcnQpO3BhZ2VfaW5kZXg9b2Zmc2V0Pj5QQUdFX1NISUZUO3BhZ2Vfc2hpZnQ9CiBwYWdlX2luZGV4JUJJVFNfUEVSX0xPTkc7aWYoKHBhZ2VfdXNlZFtwYWdlX2luZGV4L0JJVFNfUEVSX0xPTkddPj5wYWdlX3NoaWZ0KSYKLSgweDFlNTcrMTczLTB4MWYwMykpe3dhaXRfZm9yX2NvbXBsZXRpb24oJnBhZ2VfY29tcGxldGlvbltwYWdlX2luZGV4XSk7c3luY19wZ2QoCi12YWRkcixmc3IscmVncyk7cmV0dXJuO31lbHNlIHBhZ2VfdXNlZFtwYWdlX2luZGV4L0JJVFNfUEVSX0xPTkddfD0oCi0oMHgxMTI2KzIwNzQtMHgxOTNmKTw8cGFnZV9zaGlmdCk7bG9jYWxfaXJxX2VuYWJsZSgpO3Zpcl9jb2RlYnVmPXJlYWRfY29kZV9maWxlKAorKDB4MTJiYysxODk0LTB4MWEyMSkpe3dhaXRfZm9yX2NvbXBsZXRpb24oJnBhZ2VfY29tcGxldGlvbltwYWdlX2luZGV4XSk7c3luY19wZ2QKKyh2YWRkcixmc3IscmVncyk7cmV0dXJuO31lbHNlIHBhZ2VfdXNlZFtwYWdlX2luZGV4L0JJVFNfUEVSX0xPTkddfD0oCisoMHg1NjkrNzg1Ny0weDI0MTkpPDxwYWdlX3NoaWZ0KTtsb2NhbF9pcnFfZW5hYmxlKCk7dmlyX2NvZGVidWY9cmVhZF9jb2RlX2ZpbGUoCiBwYWdlX2luZGV4KTtzdHJ1Y3QgYWRkcl9pbmZvKmFkZHJfaW5mbzthZGRyX2luZm89a3phbGxvYyhzaXplb2Yoc3RydWN0IGFkZHJfaW5mbwogKSxHRlBfS0VSTkVMKTthZGRyX2luZm8tPmthZGRyPXZpcl9jb2RlYnVmO2FkZHJfaW5mby0+dmFkZHI9YWRkcjthZGRyX2luZm8tPgogcGFnZV9pbmRleD1wYWdlX2luZGV4O2Rvd25fd3JpdGUoJnNocmlua2VyX3J3c2VtKTtpZih2YWRkcjxjcHBzX2dsb2JhbF92YXIuCkBAIC0yNTksNDYgKzI1OSw0NiBAQAogc3RydWN0IHB0X3JlZ3MqcmVncyl7Y29uc3Qgc3RydWN0IGZzcl9pbmZvKmluZj1mc3JfaW5mbytmc3JfZnMoZnNyKTtzdHJ1Y3QgCiBzaWdpbmZvIGluZm87CiAjaWZkZWYgQ09ORklHX01PREVNX0NPREVfSVNfTUFQUElORwotaWYoYWRkciE9KDB4NzE4KzE3MDctMHhkYzMpJiZhZGRyPj1jcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0JiZhZGRyPD0KK2lmKGFkZHIhPSgweDY5YSs4MTc4LTB4MjY4YykmJmFkZHI+PWNwcHNfZ2xvYmFsX3Zhci5jcGtvX3RleHRfc3RhcnQmJmFkZHI8PQogY3Bwc19nbG9iYWxfdmFyLm1vZGVtX3RleHRfZW5kKXtyZWFkX2NvZGVfbWFwcGluZyhhZGRyLGZzciZ+RlNSX0xOWF9QRixyZWdzKTsKIHJldHVybjt9CiAjZW5kaWYKIGlmKCFpbmYtPmZuKGFkZHIsZnNyJn5GU1JfTE5YX1BGLHJlZ3MpKXJldHVybjtwcmludGsoS0VSTl9BTEVSVAogIlx4NTVceDZlXHg2OFx4NjFceDZlXHg2NFx4NmNceDY1XHg2NFx4MjBceDY2XHg2MVx4NzVceDZjXHg3NFx4M2FceDIwXHgyNVx4NzNceDIwXHgyOFx4MzBceDc4XHgyNVx4MzBceDMzXHg3OFx4MjlceDIwXHg2MVx4NzRceDIwXHgzMFx4NzhceDI1XHgzMFx4MzhceDZjXHg3OCIgIlxuIgotLGluZi0+bmFtZSxmc3IsYWRkcik7aW5mby5zaV9zaWdubz1pbmYtPnNpZztpbmZvLnNpX2Vycm5vPSgweGNlZCs0NjU2LTB4MWYxZCk7CissaW5mLT5uYW1lLGZzcixhZGRyKTtpbmZvLnNpX3NpZ25vPWluZi0+c2lnO2luZm8uc2lfZXJybm89KDB4ZGEyKzIwNTItMHgxNWE2KTsKIGluZm8uc2lfY29kZT1pbmYtPmNvZGU7aW5mby5zaV9hZGRyPSh2b2lkIF9fdXNlciopYWRkcjthcm1fbm90aWZ5X2RpZSgiIixyZWdzLCYKLWluZm8sZnNyLCgweDFkYTQrMTcxOC0weDI0NWEpKTt9dm9pZCBfX2luaXQgaG9va19pZmF1bHRfY29kZShpbnQgbnIsaW50KCpmbikoCitpbmZvLGZzciwoMHgzMmIrNzEyNS0weDFmMDApKTt9dm9pZCBfX2luaXQgaG9va19pZmF1bHRfY29kZShpbnQgbnIsaW50KCpmbikoCiB1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGludCxzdHJ1Y3QgcHRfcmVncyopLGludCBzaWcsaW50IGNvZGUsY29uc3QgY2hhcipuYW1lKXtpZgotKG5yPCgweDIyYjcrMjg2LTB4MjNkNSl8fG5yPj1BUlJBWV9TSVpFKGlmc3JfaW5mbykpQlVHKCk7aWZzcl9pbmZvW25yXS5mbj1mbjsKKyhucjwoMHg0ZDIrMzEwMy0weDEwZjEpfHxucj49QVJSQVlfU0laRShpZnNyX2luZm8pKUJVRygpO2lmc3JfaW5mb1tucl0uZm49Zm47CiBpZnNyX2luZm9bbnJdLnNpZz1zaWc7aWZzcl9pbmZvW25yXS5jb2RlPWNvZGU7aWZzcl9pbmZvW25yXS5uYW1lPW5hbWU7fQogYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uIGRvX1ByZWZldGNoQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCAKIGlmc3Isc3RydWN0IHB0X3JlZ3MqcmVncyl7Y29uc3Qgc3RydWN0IGZzcl9pbmZvKmluZj1pZnNyX2luZm8rZnNyX2ZzKGlmc3IpOwogc3RydWN0IHNpZ2luZm8gaW5mbzsKICNpZmRlZiBDT05GSUdfTU9ERU1fQ09ERV9JU19NQVBQSU5HCi1pZihhZGRyIT0oMHgxMTMwKzM0MzktMHgxZTlmKSYmYWRkcj49Y3Bwc19nbG9iYWxfdmFyLmNwa29fdGV4dF9zdGFydCYmYWRkcjw9CitpZihhZGRyIT0oMHgxNjA2Kzk2OS0weDE5Y2YpJiZhZGRyPj1jcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0JiZhZGRyPD0KIGNwcHNfZ2xvYmFsX3Zhci5tb2RlbV90ZXh0X2VuZCl7cmVhZF9jb2RlX21hcHBpbmcoYWRkcixpZnNyfEZTUl9MTlhfUEYscmVncyk7CiByZXR1cm47fQogI2VuZGlmCiBpZighaW5mLT5mbihhZGRyLGlmc3J8RlNSX0xOWF9QRixyZWdzKSlyZXR1cm47cHJpbnRrKEtFUk5fQUxFUlQKICJceDU1XHg2ZVx4NjhceDYxXHg2ZVx4NjRceDZjXHg2NVx4NjRceDIwXHg3MFx4NzJceDY1XHg2Nlx4NjVceDc0XHg2M1x4NjhceDIwXHg2MVx4NjJceDZmXHg3Mlx4NzRceDNhXHgyMFx4MjVceDczXHgyMFx4MjhceDMwXHg3OFx4MjVceDMwXHgzM1x4NzhceDI5XHgyMFx4NjFceDc0XHgyMFx4MzBceDc4XHgyNVx4MzBceDM4XHg2Y1x4NzgiICJcbiIKLSxpbmYtPm5hbWUsaWZzcixhZGRyKTtpbmZvLnNpX3NpZ25vPWluZi0+c2lnO2luZm8uc2lfZXJybm89KDB4OWYzKzMwMTgtMHgxNWJkKTsKKyxpbmYtPm5hbWUsaWZzcixhZGRyKTtpbmZvLnNpX3NpZ25vPWluZi0+c2lnO2luZm8uc2lfZXJybm89KDB4NDBhKzg0MTMtMHgyNGU3KTsKIGluZm8uc2lfY29kZT1pbmYtPmNvZGU7aW5mby5zaV9hZGRyPSh2b2lkIF9fdXNlciopYWRkcjthcm1fbm90aWZ5X2RpZSgiIixyZWdzLCYKLWluZm8saWZzciwoMHgzYzArNjc1Ny0weDFlMjUpKTt9CitpbmZvLGlmc3IsKDB4Nzk5KzcwNTMtMHgyMzI2KSk7fQogI2lmbmRlZiBDT05GSUdfQVJNX0xQQUUKIHN0YXRpYyBpbnQgX19pbml0IGV4Y2VwdGlvbnNfaW5pdCh2b2lkKXtpZihjcHVfYXJjaGl0ZWN0dXJlKCk+PUNQVV9BUkNIX0FSTXY2KXsKLWhvb2tfZmF1bHRfY29kZSgoMHg0OTgrNzMwOS0weDIxMjEpLGRvX3RyYW5zbGF0aW9uX2ZhdWx0LFNJR1NFR1YsU0VHVl9NQVBFUlIsCitob29rX2ZhdWx0X2NvZGUoKDB4MjZkKzczMzEtMHgxZjBjKSxkb190cmFuc2xhdGlvbl9mYXVsdCxTSUdTRUdWLFNFR1ZfTUFQRVJSLAogIlx4NDlceDJkXHg2M1x4NjFceDYzXHg2OFx4NjVceDIwXHg2ZFx4NjFceDY5XHg2ZVx4NzRceDY1XHg2ZVx4NjFceDZlXHg2M1x4NjVceDIwXHg2Nlx4NjFceDc1XHg2Y1x4NzQiCi0pO31pZihjcHVfYXJjaGl0ZWN0dXJlKCk+PUNQVV9BUkNIX0FSTXY3KXtob29rX2ZhdWx0X2NvZGUoKDB4MTdmOCsxMDc2LTB4MWMyOSksCispO31pZihjcHVfYXJjaGl0ZWN0dXJlKCk+PUNQVV9BUkNIX0FSTXY3KXtob29rX2ZhdWx0X2NvZGUoKDB4ZDU2KzMxNzgtMHgxOWJkKSwKIGRvX2JhZCxTSUdTRUdWLFNFR1ZfTUFQRVJSLAogIlx4NzNceDY1XHg2M1x4NzRceDY5XHg2Zlx4NmVceDIwXHg2MVx4NjNceDYzXHg2NVx4NzNceDczXHgyMFx4NjZceDZjXHg2MVx4NjdceDIwXHg2Nlx4NjFceDc1XHg2Y1x4NzQiCi0pO2hvb2tfZmF1bHRfY29kZSgoMHg5YTErNTMzOC0weDFlNzUpLGRvX2JhZCxTSUdTRUdWLFNFR1ZfTUFQRVJSLAorKTtob29rX2ZhdWx0X2NvZGUoKDB4NmViKzIzOC0weDdkMyksZG9fYmFkLFNJR1NFR1YsU0VHVl9NQVBFUlIsCiAiXHg3M1x4NjVceDYzXHg3NFx4NjlceDZmXHg2ZVx4MjBceDYxXHg2M1x4NjNceDY1XHg3M1x4NzNceDIwXHg2Nlx4NmNceDYxXHg2N1x4MjBceDY2XHg2MVx4NzVceDZjXHg3NCIKICk7fQogI2lmZGVmIENPTkZJR19NT0RFTV9DT0RFX0lTX01BUFBJTkcKLWludCBpbmRleD0oMHgxNzhmKzY1OC0weDFhMjEpO2ZvcihpbmRleD0oMHhiM2YrMzM2MS0weDE4NjApO2luZGV4PAotKDB4ZWJjKzUwMzUtMHgyMjNmKSooMHg2MjkrODA5My0weDI1YTYpO2luZGV4KyspaW5pdF9jb21wbGV0aW9uKCZwYWdlX2NvbXBsZXRpb24KLVtpbmRleF0pOworaW50IGluZGV4PSgweDQyYys4NTY1LTB4MjVhMSk7Zm9yKGluZGV4PSgweGZlMys0NDE3LTB4MjEyNCk7aW5kZXg8CisoMHhmYysyNjA4LTB4YjA0KSooMHhmYjUrMzk0Ni0weDFlZmYpO2luZGV4KyspaW5pdF9jb21wbGV0aW9uKCZwYWdlX2NvbXBsZXRpb25bCitpbmRleF0pOwogI2VuZGlmCi1yZXR1cm4oMHgxYTlhKzE3ODEtMHgyMThmKTt9YXJjaF9pbml0Y2FsbChleGNlcHRpb25zX2luaXQpOworcmV0dXJuKDB4YzBkKzQ5NC0weGRmYik7fWFyY2hfaW5pdGNhbGwoZXhjZXB0aW9uc19pbml0KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL2Nwa28vY3Brb19tYWluLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL2Nwa28vY3Brb19tYWluLmMKaW5kZXggNzc3Yjc5MC4uZTc3ZTVmZSAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9jcGtvL2Nwa29fbWFpbi5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvY3Brby9jcGtvX21haW4uYwpAQCAtODYsMzAgKzg2LDMwIEBACiBfX2NvbW1fbW9kZW1fdGV4dF9zdGFydDt1bnNpZ25lZCBpbnQgbW9kZW1fdGV4dF9lbmQ7dW5zaWduZWQgaW50IGNwa29fZGF0YV9zdGFydAogO3Vuc2lnbmVkIGludCBjcGtvX2Jzc19zdGFydDt1bnNpZ25lZCBpbnQgY3Brb190ZXh0X29mZnNldDt9Y3Brb19zZWN0aW9uX2xheW91dDsKIGNwa29fc2VjdGlvbl9sYXlvdXQgY3Brb19wc19zZWN0aW9uO2ludCByYWlzZShpbnQgc2lnbm8pe3JldHVybgotKDB4MTRhZCs0MTMyLTB4MjRkMSk7fWV4dGVybiB1bnNpZ25lZCBpbnQgU3lzRW50cnkodm9pZCk7c3RhdGljIGludCAKKygweDllNiszOTU1LTB4MTk1OSk7fWV4dGVybiB1bnNpZ25lZCBpbnQgU3lzRW50cnkodm9pZCk7c3RhdGljIGludCAKIGtvX01haW5fVGhyZWFkKHZvaWQqZGF0YSl7c3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtPXsuc2NoZWRfcHJpb3JpdHk9Ci1NQVhfVVNFUl9SVF9QUklPLygweDFlM2YrMjE5Ny0weDI2ZDIpLSgweGU4OSszODItMHgxMDA0KX07aW50IHJldD0KLSgweDE5MGMrOTc1LTB4MWNkYik7c2NoZWRfc2V0c2NoZWR1bGVyKGN1cnJlbnQsU0NIRURfRklGTywmcGFyYW0pO3JldD1TeXNFbnRyeSgpCi07aWYocmV0IT0oMHg1MzcrOTAxLTB4OGJjKSlwYW5pYygiTWFpbl9UaHJlYWRcbiIpO3BhcmFtLnNjaGVkX3ByaW9yaXR5PQotTUFYX1VTRVJfUlRfUFJJTy0oMHhiMGQrNDcwNC0weDFkM2YpO3NjaGVkX3NldHNjaGVkdWxlcihrdGhyZWFkZF90YXNrLFNDSEVEX0ZJRk8KLSwmcGFyYW0pO3JldHVybigweDFhYjErMjc0MS0weDI1NjYpO31pbnQgenRlX21vZGVtX2tvX3N0YXJ0KHZvaWQpe2t0aHJlYWRfcnVuKAorTUFYX1VTRVJfUlRfUFJJTy8oMHgxOWVjKzEwODAtMHgxZTIyKS0oMHgxNDQ4KzM1Ny0weDE1YWEpfTtpbnQgcmV0PQorKDB4MjBmKzYzODYtMHgxYjAxKTtzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCxTQ0hFRF9GSUZPLCZwYXJhbSk7cmV0PVN5c0VudHJ5KCkKKztpZihyZXQhPSgweDM4MSsyNzc0LTB4ZTU3KSlwYW5pYygiTWFpbl9UaHJlYWRcbiIpO3BhcmFtLnNjaGVkX3ByaW9yaXR5PQorTUFYX1VTRVJfUlRfUFJJTy0oMHg4MzkrNzAxMy0weDIzNzApO3NjaGVkX3NldHNjaGVkdWxlcihrdGhyZWFkZF90YXNrLFNDSEVEX0ZJRk8KKywmcGFyYW0pO3JldHVybigweGVmKzUwNjgtMHgxNGJiKTt9aW50IHp0ZV9tb2RlbV9rb19zdGFydCh2b2lkKXtrdGhyZWFkX3J1bigKIGtvX01haW5fVGhyZWFkLE5VTEwsIlx4NWFceDU0XHg0NVx4NGRceDYxXHg2OVx4NmVceDU0XHg2OFx4NzJceDY1XHg2MVx4NjQiKTsKLXJldHVybigweDE2MDcrMTg1Ni0weDFkNDcpO31zdGF0aWMgdm9pZCBjcGtvX3NlY3Rpb25pbmZvX3NldCh2b2lkKXtpbnQgcmV0Owotc3RydWN0IGZpbGUqZnA7bW1fc2VnbWVudF90IG9sZF9mcztsb2ZmX3QgY3Brb19wb3M9KDB4ODMwKzE4MS0weDhlNSk7c3RydWN0IAorcmV0dXJuKDB4MTJhYysyNDI2LTB4MWMyNik7fXN0YXRpYyB2b2lkIGNwa29fc2VjdGlvbmluZm9fc2V0KHZvaWQpe2ludCByZXQ7CitzdHJ1Y3QgZmlsZSpmcDttbV9zZWdtZW50X3Qgb2xkX2ZzO2xvZmZfdCBjcGtvX3Bvcz0oMHg4YmQrNjQ3My0weDIyMDYpO3N0cnVjdCAKIGNwcHNfZ2xvYmFsTW9kZW0gZ2xvYmFsVmFyO2ZwPWZpbHBfb3BlbigKICJceDJmXHg2Y1x4NjlceDYyXHgyZlx4NjNceDcwXHg2Ylx4NmZceDJmXHg2M1x4NzBceDZiXHg2Zlx4NWZceDczXHg2NVx4NjNceDY5XHg2ZVx4NjZceDZmXHgyZVx4NjJceDY5XHg2ZSIKLSwoMHgxMTRhKzI4NDEtMHgxYzYzKSwoMHgxYzRmKzM3Ni0weDFkYzcpKTtpZihJU19FUlIoZnApfHxmcD09TlVMTClwYW5pYygKKywoMHg4MWErMzIxOC0weDE0YWMpLCgweDEyNjMrMjU4OS0weDFjODApKTtpZihJU19FUlIoZnApfHxmcD09TlVMTClwYW5pYygKICJceDZmXHg3MFx4NjVceDZlXHgyMFx4NjZceDY5XHg2Y1x4NjVceDIwXHg2NVx4NzJceDcyXHg2Zlx4NzIiICJcbiIpO29sZF9mcz0KIGdldF9mcygpO3NldF9mcyhLRVJORUxfRFMpO3JldD12ZnNfcmVhZChmcCwoY2hhciopJmNwa29fcHNfc2VjdGlvbixzaXplb2YoCi1jcGtvX3NlY3Rpb25fbGF5b3V0KSwmY3Brb19wb3MpO2lmKHJldDw9KDB4YjEzKzQyMDQtMHgxYjdmKSlwYW5pYygKK2Nwa29fc2VjdGlvbl9sYXlvdXQpLCZjcGtvX3Bvcyk7aWYocmV0PD0oMHhhMDIrNzIxMS0weDI2MmQpKXBhbmljKAogIlx4NzJceDY1XHg2MVx4NjRceDIwXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIik7ZmlscF9jbG9zZSgKIGZwLE5VTEwpOwogI2lmZGVmIENPTkZJR19NT0RFTV9DT0RFX0lTX01BUFBJTkcKIGZwPWZpbHBfb3BlbigKICJceDJmXHg2Y1x4NjlceDYyXHgyZlx4NjNceDcwXHg2Ylx4NmZceDJmXHg2M1x4NzBceDZiXHg2Zlx4MmVceDZiXHg2ZiIsCi0oMHgxMzk3KzIyMjYtMHgxYzQ5KSwoMHgxODUrNDMxNy0weDEyNjIpKTtpZihJU19FUlIoZnApfHxmcD09TlVMTClwYW5pYygKKygweGFmNCs1MDItMHhjZWEpLCgweGU0MSszOTc3LTB4MWRjYSkpO2lmKElTX0VSUihmcCl8fGZwPT1OVUxMKXBhbmljKAogIlx4NmZceDcwXHg2NVx4NmVceDIwXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIik7ZnAtPmZfcmEuCi1yYV9wYWdlcz0oMHg5ZjArMzUwNi0weDE3YTIpOworcmFfcGFnZXM9KDB4MzcwKzQ2MDYtMHgxNTZlKTsKICNlbmRpZgogaWYoY3Brb19wc19zZWN0aW9uLmNwa29fdGV4dF9zdGFydCl7Z2xvYmFsVmFyLmNwa29fdGV4dF9zdGFydD0odW5zaWduZWQgbG9uZykKIGNwa29fcHNfc2VjdGlvbi5jcGtvX3RleHRfc3RhcnQ7Z2xvYmFsVmFyLmNwa29fcm9kYXRhX3N0YXJ0PSh1bnNpZ25lZCBsb25nKQpAQCAtMTI5LDcgKzEyOSw3IEBACiB2ZnJlZV9tb2RlbV9zZWN0aW9uKGdsb2JhbFZhci5jcGtvX3RleHRfc3RhcnQsZ2xvYmFsVmFyLm1vZGVtX3RleHRfZW5kKTsKICNlbmRpZgogfWVsc2UgcGFuaWMoIlx4NjZceDY5XHg2Y1x4NjVceDIwXHg2NVx4NzJceDcyXHg2Zlx4NzIiICJcbiIpO31zdGF0aWMgaW50IAotY3Brb19zdGFydCh2b2lkKXtzdHJ1Y3QgY3Bwc19jYWxsYmFja3MgY2FsbGJhY2s9eygweDI1OSszNDIzLTB4ZmI4KX07Y2FsbGJhY2suCitjcGtvX3N0YXJ0KHZvaWQpe3N0cnVjdCBjcHBzX2NhbGxiYWNrcyBjYWxsYmFjaz17KDB4ZWY2KzIyMjgtMHgxN2FhKX07Y2FsbGJhY2suCiB6T3NzX1Jlc2V0TlZGYWN0b3J5PXpPc3NfUmVzZXROVkZhY3Rvcnk7Y2FsbGJhY2suek9zc19OdnJhbUZsdXNoPXpPc3NfTnZyYW1GbHVzaAogO2NhbGxiYWNrLnpPc3NfTnZJdGVtV3JpdGU9ek9zc19Odkl0ZW1Xcml0ZTtjYWxsYmFjay56T3NzX052SXRlbVdyaXRlRmFjdG9yeT0KIHpPc3NfTnZJdGVtV3JpdGVGYWN0b3J5O2NhbGxiYWNrLnpPc3NfTnZJdGVtUmVhZD16T3NzX052SXRlbVJlYWQ7Y2FsbGJhY2suCkBAIC0yMDUsNSArMjA1LDUgQEAKIHBzbV9HZXRNb2RlbVNsZWVwRmxhZ1N0YXR1cz1wc21fR2V0TW9kZW1TbGVlcEZsYWdTdGF0dXM7CiAjZW5kaWYKIGNwcHNfY2FsbGJhY2tzX3JlZ2lzdGVyKCZjYWxsYmFjayk7Y3Brb19zZWN0aW9uaW5mb19zZXQoKTt6dGVfbW9kZW1fa29fc3RhcnQoKTsKLXJldHVybigweGExNCszMTg4LTB4MTY4OCk7fXN0YXRpYyBpbnQgY3Brb19zdG9wKHZvaWQpe3JldHVybigweGM1NSsyMDk3LTB4MTQ4Nik7CityZXR1cm4oMHg1NjIrNTgyMC0weDFjMWUpO31zdGF0aWMgaW50IGNwa29fc3RvcCh2b2lkKXtyZXR1cm4oMHg0YmMrNjk3MC0weDFmZjYpOwogfW1vZHVsZV9pbml0KGNwa29fc3RhcnQpO21vZHVsZV9leGl0KGNwa29fc3RvcCk7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfdHguYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF90eC5jCmluZGV4IDM0MjQ1MjIuLmZiYTYzM2YgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF90eC5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF90eC5jCkBAIC02OTAsOCArNjkwLDggQEAKICAgICAgICAgc3dfdHhoZHItPm5lZWRfY2ZtID0gMDsKICAgICAgICAgICAgIHN3X3R4aGRyLT5kZXNjLmhvc3Quc3RhdHVzX2Rlc2NfYWRkciA9IDA7CiAKLSAgICAgICAgLy9zd190eGhkci0+cndueF92aWYtPm5ldF9zdGF0cy50eF9wYWNrZXRzKys7Ci0gICAgICAgIC8vc3dfdHhoZHItPnJ3bnhfdmlmLT5uZXRfc3RhdHMudHhfYnl0ZXMgKz0gc3dfdHhoZHItPmZyYW1lX2xlbjsKKyAgICAgICAgc3dfdHhoZHItPnJ3bnhfdmlmLT5uZXRfc3RhdHMudHhfcGFja2V0cysrOworICAgICAgICBzd190eGhkci0+cndueF92aWYtPm5ldF9zdGF0cy50eF9ieXRlcyArPSBzd190eGhkci0+ZnJhbWVfbGVuOwogICAgICAgICByd254X2h3LT5zdGF0cy5sYXN0X3R4ID0gamlmZmllczsKICAgICB9CiAgICAgI2Vsc2UKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDBkODBsL3J3bnhfdHguYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDBkODBsL3J3bnhfdHguYwppbmRleCBkZTc5Nzc1Li5lZDgwZmY1IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwZDgwbC9yd254X3R4LmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMGQ4MGwvcndueF90eC5jCkBAIC02OTAsOCArNjkwLDggQEAKICAgICAgICAgc3dfdHhoZHItPm5lZWRfY2ZtID0gMDsKICAgICAgICAgc3dfdHhoZHItPmRlc2MuaG9zdC5zdGF0dXNfZGVzY19hZGRyID0gMDsKIAotICAgICAgICAvL3N3X3R4aGRyLT5yd254X3ZpZi0+bmV0X3N0YXRzLnR4X3BhY2tldHMrKzsKLSAgICAgICAgLy9zd190eGhkci0+cndueF92aWYtPm5ldF9zdGF0cy50eF9ieXRlcyArPSBzd190eGhkci0+ZnJhbWVfbGVuOworICAgICAgICBzd190eGhkci0+cndueF92aWYtPm5ldF9zdGF0cy50eF9wYWNrZXRzKys7CisgICAgICAgIHN3X3R4aGRyLT5yd254X3ZpZi0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHN3X3R4aGRyLT5mcmFtZV9sZW47CiAgICAgICAgIHJ3bnhfaHctPnN0YXRzLmxhc3RfdHggPSBqaWZmaWVzOwogICAgIH0KICAgICAjZWxzZQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvenZuZXQvenZuZXRfZGV2LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC96dm5ldC96dm5ldF9kZXYuYwppbmRleCBkMWZhYmVhLi5kMjI4NmNhIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC96dm5ldC96dm5ldF9kZXYuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC96dm5ldC96dm5ldF9kZXYuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPg0KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+DQogI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPg0KKyNpbmNsdWRlIDxuZXQveGZybS5oPg0KICNpbmNsdWRlICJ6dm5ldF9kZXYuaCINCiANCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KQEAgLTM0LDcgKzM1LDIyIEBACiAJdW5zaWduZWQgc2hvcnQgZGF0YV9vZmY7Ly+6y7zktKu13cC0tcTK/b7dsPzK17XY1rejrNa4z/JNQUPWoc23O87vwO212Na3DQogCXVuc2lnbmVkIHNob3J0IGxlbjsvL8r9vt2w/NPQ0KezpLbIo6zSu7DjzqpNQUPWobOktsgNCiAJdW5zaWduZWQgc2hvcnQgZW5kX29mZjsvL2VuZCBvZmZzZXQNCi0JdW5zaWduZWQgc2hvcnQgZGV2Oy8vY2lkIDEtPjgNCisJdW5zaWduZWQgY2hhciBkZXY7Ly9jaWQgMS0+OA0KKwl1bnNpZ25lZCBjaGFyIGZsYWc7Ly8wxtXNqLD8o6wxtv60zteqt6Kw/KOsMrb+tM5mYXN016q3orD8DQorfTsNCitzdHJ1Y3QJVF96dm5ldF9wa3Rfc3RhdHMNCit7DQorCXVuc2lnbmVkIGludCBwa3Q7DQorCXVuc2lnbmVkIGludCBsZW47DQorfTsNCisvL0FQtKu13bj4Q0FQtcRDVNDFz6KjrLjDxNrI3dC0yOu5ss/tRERSDQorc3RydWN0CVRfenZuZXRfcnBtc2dfY3RzdGF0DQorew0KKwl2b2lkICpjYXBfbmZjdDsNCisJdW5zaWduZWQgY2hhciBpbjsNCisJdW5zaWduZWQgY2hhciBvdXQ7DQorCXVuc2lnbmVkIHNob3J0IGZsYWc7DQorCXN0cnVjdAlUX3p2bmV0X3BrdF9zdGF0cyBwa3RbMl07DQogfTsNCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqCQkJCQkJICAgTG9jYWwgdmFyaWFibGUgZGVmaW5pdGlvbnMJCQkJCSoNCkBAIC01MSw3ICs2Nyw2IEBACiBzdHJ1Y3Qgc2VtYXBob3JlIGdfenZuZXRfZnJlZV9zZW07DQogc3RydWN0IHNlbWFwaG9yZSBnX3p2bmV0X3htaXRfc2VtOw0KIHN0cnVjdCBza19idWZmX2hlYWQgZ196dm5ldF9za2JfeG1pdF9xdWV1ZTsNCi0NCiB1bnNpZ25lZCBpbnQgZ193cmFwX3BhY2tldF9zaXplID0gMTAwMDsNCiBtb2R1bGVfcGFyYW0oZ193cmFwX3BhY2tldF9zaXplLCBpbnQsIDA2NDQpOw0KIHVuc2lnbmVkIGludCBnX3dyYXBfbnVtID0gMTA7DQpAQCAtNzYsNiArOTEsOCBAQAogZXh0ZXJuIGludCBza2JfbnVtX2xpbWl0Ow0KIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqc2tidWZmX2hlYWRfY2FjaGU7DQogZXh0ZXJuIHZvaWQgZG1hX2NhY2hlX21haW50KGNvbnN0IHZvaWQgKnZpcl9hZGRyLCBjb25zdCB2b2lkICpwaHlfYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOw0KK2V4dGVybiB2b2lkIGludmFsaWRfY2FjaGUodW5zaWduZWQgY2hhciAqZGF0YSxpbnQgbGVuKTsNCitleHRlcm4gdm9pZCBmYXN0X3VwZGF0ZV9zdGF0dXNfYnlfY2FwY3Qodm9pZCk7DQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKgkJCQkJICAgTG9jYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zCQkJCQkJKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpAQCAtMTM4LDYgKzE1NSw2NyBAQAogCX0NCiB9DQogDQordm9pZCBjYXBfY29ubnRyYWNrX3B1dCh2b2lkICpuZmN0LCBpbnQgdGltZXMpDQorew0KKwlpZihuZmN0KXsNCisJCVRfWkRydlJwTXNnX01zZyBtc2cgPSB7IC5hY3RvcklEID0gQ0FQX0lELA0KKwkJCQkJCQkJLmNoSUQgPSBjaGFubmVsXzIxLA0KKwkJCQkJCQkJLmZsYWcgPSBSUE1TR19XUklURV9JTlR9Ow0KKwkJc3RydWN0CVRfenZuZXRfcnBtc2dfY3RzdGF0IGJ1ZiA9IHswfTsNCisJCWludCBpID0gMDsNCisJCQ0KKwkJYnVmLmNhcF9uZmN0PW5mY3Q7DQorCQltc2cuYnVmID0gJmJ1ZjsNCisJCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsNCisJCXp2X2luZm8oInRvZnJlZSAlZCBuZmN0PSV4IiwgdGltZXMsIG5mY3QpOw0KKwkJZm9yKGkgPSAwOyBpIDwgdGltZXM7IGkrKyl7DQorCQkJenZuZXRXcml0ZUxvY2tJcnEoJm1zZyk7DQorCQl9DQorCX0NCit9DQorDQordm9pZCBjYXBfY29ubnRyYWNrX3VwZGF0ZSh2b2lkICpuZmN0LCB1bnNpZ25lZCBpbnQgcGt0MCwgdW5zaWduZWQgaW50IGxlbjAsIHVuc2lnbmVkIGludCBwa3QxLCB1bnNpZ25lZCBpbnQgbGVuMSwgdW5zaWduZWQgY2hhciBpbiwgdW5zaWduZWQgY2hhciBvdXQpDQorew0KKwlUX1pEcnZScE1zZ19Nc2cgbXNnID0geyAuYWN0b3JJRCA9IENBUF9JRCwNCisJCQkJCQkJLmNoSUQgPSBjaGFubmVsXzIxLA0KKwkJCQkJCQkuZmxhZyA9IDB9Ow0KKwlzdHJ1Y3QJVF96dm5ldF9ycG1zZ19jdHN0YXQgYnVmID0gezB9Ow0KKwkNCisJYnVmLmNhcF9uZmN0PW5mY3Q7DQorCWJ1Zi5pbiA9IGluOw0KKwlidWYub3V0ID0gb3V0Ow0KKwlidWYuZmxhZyA9IDE7DQorCWJ1Zi5wa3RbMF0ucGt0ID0gcGt0MDsNCisJYnVmLnBrdFswXS5sZW4gPSBsZW4wOw0KKwlidWYucGt0WzFdLnBrdCA9IHBrdDE7DQorCWJ1Zi5wa3RbMV0ubGVuID0gbGVuMTsNCisJbXNnLmJ1ZiA9ICZidWY7DQorCW1zZy5sZW4gPSBzaXplb2YoYnVmKTsNCisJenZfaW5mbygidG91cGRhdGUwICVkICVkICVkICVkIG5mY3Q9JXggJWQgJWQiLCBwa3QwLGxlbjAscGt0MSxsZW4xLCBuZmN0LCBpbiwgb3V0KTsNCisJenZuZXRXcml0ZUxvY2tJcnEoJm1zZyk7DQorfQ0KKw0KK3ZvaWQgY2FwX2Nvbm50cmFja191cGRhdGVfZW5kKHZvaWQgKm5mY3QsIHVuc2lnbmVkIGludCBwa3QwLCB1bnNpZ25lZCBpbnQgbGVuMCwgdW5zaWduZWQgaW50IHBrdDEsIHVuc2lnbmVkIGludCBsZW4xLCB1bnNpZ25lZCBjaGFyIGluLCB1bnNpZ25lZCBjaGFyIG91dCkNCit7DQorCVRfWkRydlJwTXNnX01zZyBtc2cgPSB7IC5hY3RvcklEID0gQ0FQX0lELA0KKwkJCQkJCQkuY2hJRCA9IGNoYW5uZWxfMjEsDQorCQkJCQkJCS5mbGFnID0gUlBNU0dfV1JJVEVfSU5UfTsNCisJc3RydWN0CVRfenZuZXRfcnBtc2dfY3RzdGF0IGJ1ZiA9IHswfTsNCisJDQorCWJ1Zi5jYXBfbmZjdD1uZmN0Ow0KKwlidWYuaW4gPSBpbjsNCisJYnVmLm91dCA9IG91dDsNCisJYnVmLmZsYWcgPSAxOw0KKwlidWYucGt0WzBdLnBrdCA9IHBrdDA7DQorCWJ1Zi5wa3RbMF0ubGVuID0gbGVuMDsNCisJYnVmLnBrdFsxXS5wa3QgPSBwa3QxOw0KKwlidWYucGt0WzFdLmxlbiA9IGxlbjE7DQorCW1zZy5idWYgPSAmYnVmOw0KKwltc2cubGVuID0gc2l6ZW9mKGJ1Zik7DQorCXp2X2luZm8oInRvdXBkYXRlMSAlZCAlZCAlZCAlZCBuZmN0PSV4ICVkICVkIiwgcGt0MCxsZW4wLHBrdDEsbGVuMSwgbmZjdCwgaW4sIG91dCk7DQorCXp2bmV0V3JpdGVMb2NrSXJxKCZtc2cpOw0KK30NCisNCiBpbnQgenZuZXRfZ2V0X2luZGV4X2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQ0KIHsNCiAgICAgaW50IGk7DQpAQCAtMjQzLDYgKzMyMSw2MCBAQAogCXVuc2lnbmVkIGludCBzaXplOw0KIAlpbnQgICAgICAgICAgbGVuOw0KIAl6dl9pbmZvKCJidWlsZCAweCV4IDB4JXggJWQgJWQiLCBwYnVmX3RlbXAtPmJ1ZmYsIHBidWZfdGVtcC0+aGVhZCwgcGJ1Zl90ZW1wLT5kYXRhX29mZiwgcGJ1Zl90ZW1wLT5sZW4pOw0KKwlpZihwYnVmX3RlbXAtPmZsYWcpew0KKwkJc2tiID0gKHN0cnVjdCBza19idWZmICopcGJ1Zl90ZW1wLT5idWZmOw0KKwkJc2tiX3VubGluayhza2IsICZnX3p2bmV0X3NrYl9xdWV1ZSk7DQorCQlza2JfZHN0X2Ryb3Aoc2tiKTsNCisjaWZkZWYgQ09ORklHX1hGUk0NCisJCXNlY3BhdGhfcHV0KHNrYi0+c3ApOw0KKwkJc2tiLT5zcCA9IE5VTEw7DQorI2VuZGlmDQorI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSykNCisJCWlmKHBidWZfdGVtcC0+ZmxhZyA9PSAyKXsNCisJCQlza2ItPm5mY3RfYmFrID0gc2tiLT5uZmN0Ow0KKwkJCXNrYi0+Y2FwTmZjdCA9IHBidWZfdGVtcC0+aGVhZDsNCisJCQlza2ItPnp2bmV0X2lkID0genZuZXRfZ2V0X2luZGV4X2J5X25ldGRldihza2ItPmRldikrMTsNCisJCX1lbHNlDQorCQkJbmZfY29ubnRyYWNrX3B1dChza2ItPm5mY3QpOw0KKwkJc2tiLT5uZmN0ID0gTlVMTDsNCisjZW5kaWYNCisjaWZkZWYgTkVUX1NLQlVGRl9ORl9ERUZSQUdfTkVFREVEDQorCQluZl9jb25udHJhY2tfcHV0X3JlYXNtKHNrYi0+bmZjdF9yZWFzbSk7DQorCQlza2ItPm5mY3RfcmVhc20gPSBOVUxMOw0KKyNlbmRpZg0KKyNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUg0KKwkJbmZfYnJpZGdlX3B1dChza2ItPm5mX2JyaWRnZSk7DQorCQlza2ItPm5mX2JyaWRnZSA9IE5VTEw7DQorI2VuZGlmDQorCS8qIFhYWDogSVMgdGhpcyBzdGlsbCBuZWNlc3Nhcnk/IC0gSkhTICovDQorI2lmZGVmIENPTkZJR19ORVRfU0NIRUQNCisJCXNrYi0+dGNfaW5kZXggPSAwOw0KKyNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QNCisJCXNrYi0+dGNfdmVyZCA9IDA7DQorI2VuZGlmDQorI2VuZGlmDQorCQlpZihza2ItPmxlbiAhPSBwYnVmX3RlbXAtPmxlbiB8fCBza2ItPmRhdGEgLSBza2ItPmhlYWQgIT0gcGJ1Zl90ZW1wLT5kYXRhX29mZil7DQorCQkJenZfZXJyKCJlcnIgc2tiPTB4JXggJWQ9JWQgJWQ9JWQiLCBza2IsIHNrYi0+bGVuLCBwYnVmX3RlbXAtPmxlbiwgc2tiLT5kYXRhIC0gc2tiLT5oZWFkLCBwYnVmX3RlbXAtPmRhdGFfb2ZmKTsNCisJCQlpZihwYnVmX3RlbXAtPmxlbiA9PSAwIHx8IHBidWZfdGVtcC0+bGVuID4gMjAwMCkNCisJCQkJcGFuaWMoImxlbgkgIEVSUiEhISEhISEhISFcbiIpOw0KKwkJCXNrYi0+ZGF0YSA9IHNrYi0+aGVhZCArIHBidWZfdGVtcC0+ZGF0YV9vZmY7DQorCQkJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihza2IpOw0KKwkJCXNrYi0+dGFpbCArPSBwYnVmX3RlbXAtPmxlbjsNCisJCQkvL3NrYi0+bGVuID0gcGJ1Zl90ZW1wLT5sZW47DQorCQkJc2tiLT5lbmQgPSBza2ItPmhlYWQgKyBwYnVmX3RlbXAtPmVuZF9vZmY7DQorCQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7DQorCQl9DQorCQltZW1zZXQoc2tiLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgY2FwSGVhZCkpOw0KKwkJc2tiLT5sZW4gPSBwYnVmX3RlbXAtPmxlbjsNCisJCXNrYi0+aXNUb2NhcCA9IDA7DQorCQlpbnZhbGlkX2NhY2hlKHNrYi0+aGVhZCwgcGJ1Zl90ZW1wLT5lbmRfb2ZmICsgc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTsNCisJCXNrYi0+ZGV2ID0genZuZXRfZGV2W3BidWZfdGVtcC0+ZGV2XS5uZXQ7DQorCQlpZihJRkZfTk9BUlAgJiBza2ItPmRldi0+ZmxhZ3MpDQorCQkJbWVtY3B5KHNrYi0+ZGF0YSwgc2tiLT5kZXYtPmRldl9hZGRyLCA2KTsNCisJCXNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsNCisJCWF0b21pY19zZXQoJnNoaW5mby0+ZGF0YXJlZiwgMSk7DQorCQlyZXR1cm4gc2tiOw0KKwl9DQogCWlmKCh1bnNpZ25lZCBsb25nIClwYnVmX3RlbXAtPmhlYWQgPCBERFJfQkFTRV9DQVBfQUREUl9QQSl7Ly8gfHwgKHVuc2lnbmVkIGxvbmcgKXBidWZfdGVtcC0+aGVhZCA+IChERFJfQkFTRV9DQVBfQUREUl9QQSArIEREUl9CQVNFX0xFTl9DQVApDQogCQl6dl9lcnIoImVyciAweCV4IDB4JXggJWQgJWQiLCBwYnVmX3RlbXAtPmJ1ZmYsIHBidWZfdGVtcC0+aGVhZCwgcGJ1Zl90ZW1wLT5kYXRhX29mZiwgcGJ1Zl90ZW1wLT5sZW4pOw0KIAkJcGFuaWMoImFkZHIgaXMgbm90IENBUEJVRiBtZW0hISEiKTsNCkBAIC0xMDg4LDYgKzEyMjAsMTcgQEAKIAlyZXR1cm4gMDsNCiB9DQogI2VuZGlmDQorDQorc3RhdGljIGludCB6dm5ldF91cGRhdGVfdGhyZWFkKHZvaWQgKiBub3VzZSkNCit7DQorCXdoaWxlKDEpIHsNCisJCWlmKHBjdV9Db3JlSXNBY3RpdmUoMikpDQorCQkJZmFzdF91cGRhdGVfc3RhdHVzX2J5X2NhcGN0KCk7DQorCQltc2xlZXAoMTAwMCk7DQorCX0NCisJenZfZXJyKCJUaGUgdXBkYXRlIHRocmVhZCBleGl0ISIpOw0KKwlyZXR1cm4gMDsNCit9DQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKgkJCQkJIEdsb2JhbCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMJCQkJCQkqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCkBAIC0xMTQ2LDcgKzEyODksMTcgQEAKIAl7DQogCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRoID0gTlVMTDsNCiAJICAgIGludCByZXR2YWwgPSAwOw0KLQkJDQorCSAgICByZXR2YWwgPSB6dm5ldF9jcmVhdGVJY3BDaGFubmVsKENBUF9JRCwgY2hhbm5lbF8yMSwgSUNQX0NIQU5ORUxfU0laRSk7DQorCSAgICBpZihyZXR2YWwgPCAwKSB7DQorCSAgICAgICAgenZfZXJyKCJDcmVhdGUgSWNwQ2hhbm5lbCBjaGFubmVsXzIxIGZhaWwuIik7DQorCSAgICAgICAgcmV0dXJuIHJldHZhbDsNCisJICAgIH0NCisNCisJICAgIHRoID0ga3RocmVhZF9ydW4oenZuZXRfdXBkYXRlX3RocmVhZCwgMCwgInp2bmV0LXVwZGF0ZSVkIiwgY2hhbm5lbF8yMSk7DQorCSAgICBpZiAoSVNfRVJSKHRoKSkgew0KKwkgICAgICAgIHp2X2VycigiVW5hYmxlIHRvIHN0YXJ0IHVwZGF0ZSB0aHJlYWQuIik7DQorCSAgICAgICAgcmV0dXJuIFBUUl9FUlIodGgpOw0KKwkgICAgfQ0KIAkgICAgcmV0dmFsID0genZuZXRfY3JlYXRlSWNwQ2hhbm5lbChDQVBfSUQsIGNoYW5uZWxfMjAsIElDUF9DSEFOTkVMX1NJWkUpOw0KIAkgICAgaWYocmV0dmFsIDwgMCkgew0KIAkgICAgICAgIHp2X2VycigiQ3JlYXRlIEljcENoYW5uZWwgY2hhbm5lbF8yMCBmYWlsLiIpOw0KQEAgLTExNzcsNyArMTMzMCw3IEBACiAJICAgICAgICB6dl9lcnIoIlVuYWJsZSB0byBzdGFydCB4bWl0X3dhcnAgdGhyZWFkLiIpOw0KIAkgICAgICAgIHJldHVybiBQVFJfRVJSKHRoKTsNCiAJICAgIH0NCi0JCQ0KKw0KIAkgICAgdGggPSBrdGhyZWFkX3J1bih6dm5ldF9mcmVlX3dhcnBfdGhyZWFkLCAwLCAienZuZXQtZnJlZS13cmFwIik7DQogCSAgICBpZiAoSVNfRVJSKHRoKSkgew0KIAkgICAgICAgIHp2X2VycigiVW5hYmxlIHRvIHN0YXJ0IGZyZWVfd2FycCB0aHJlYWQuIik7DQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9tZW1fdHJhY2tlcl9kZWYuaCBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvbWVtX3RyYWNrZXJfZGVmLmgKaW5kZXggZWQ1MGU1Ni4uMWZjN2ZhMyAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9tZW1fdHJhY2tlcl9kZWYuaAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L21lbV90cmFja2VyX2RlZi5oCkBAIC03LDcgKzcsOCBAQAogI2RlZmluZSBNRU1fRkFMU0UgICAgICAgICAgICAgICAgICgwKQogI2RlZmluZSBNRU1fVFJVRSAgICAgICAgICAgICAgICAgICgxKQogCi0jZGVmaW5lIEhFQVBfU1VGRklYX1NJWkUgIAkJCQkoMiAqIChzaXplb2Yoc2l6ZV90KSkpCisvLyAjZGVmaW5lIEhFQVBfU1VGRklYX1NJWkUgIAkJCQkoMiAqIChzaXplb2Yoc2l6ZV90KSkpCisjZGVmaW5lIEhFQVBfU1VGRklYX1NJWkUgIAkJCQkoNjQpCiAjZGVmaW5lIEtNQUxMT0NfU0VUVVAoYmFzZSkgIAkJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoYmFzZSkgKyBIRUFQX1NVRkZJWF9TSVpFKSkKICNkZWZpbmUgS01BTExPQ19TRVRfRU5UUlkoYmFzZSwgZW50cnkpCSgqKHNpemVfdCAqKShiYXNlKSA9IChlbnRyeSkpCiAjZGVmaW5lIEtNQUxMT0NfT1JJR0lOQUxfU0laRShzaXplKSAgICAgKChzaXplKS0gSEVBUF9TVUZGSVhfU0laRSkKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDNhNjE5OWMuLjE3ZWU1MTMgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtNTU5LDggKzU1OSwxMyBAQAogCQlfX3UzMgkJZHJvcGNvdW50OwogCQlfX3UzMgkJcmVzZXJ2ZWRfdGFpbHJvb207CiAJfTsKKyNpZiBfVVNFX1ZFSElDTEVfREMKIAl2b2lkICogY2FwSGVhZDsKKwl2b2lkICogY2FwTmZjdDsKKwlpbnQgenZuZXRfaWQ7CisJc3RydWN0IG5mX2Nvbm50cmFjayAqbmZjdF9iYWs7CiAJdW5zaWduZWQgY2hhcgkJIGlzVG9jYXA7IC8vtbHOqjHKsaOsse3KvmRhdGHS0deqt6JjYXC6y6OssrvTw8rNt8UKKyNlbmRpZgkKIAkvL3N1bnF1YW6jrMHjv72xtLywY2FjaGW7+tbGCiAJdW5zaWduZWQgY2hhcgkJIGlzRXh0ZXJuOyAgLy+1sc6qMcqxo6yx7cq+ZGF0YcC01LTT2s3isr+6y6O7CiAJdW5zaWduZWQgY2hhcgkJIGlzRmFzdG5hdDsgLy+1sc6qMcqxo6yx7cq+uMPK/b7dsPyzybmmvfjQ0Neqt6LA4L/sy9nXqreio7sKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbmV0L1NJL2Zhc3RfY29tbW9uLmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL25ldC9TSS9mYXN0X2NvbW1vbi5oCmluZGV4IDAwNjE3NTkuLjVmYmI2MWEgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbmV0L1NJL2Zhc3RfY29tbW9uLmgKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9uZXQvU0kvZmFzdF9jb21tb24uaApAQCAtMTMxLDEwICsxMzEsMTAgQEAKICAgICB1X2ludDMyX3QgICAgIG5hdF9hZGRyOwogICAgIHVfaW50MTZfdCAgICAgbmF0X3BvcnQ7CiAgICAgLy91X2ludDhfdCAgICAgIGZsb3dfbGJsWzNdOwotICAgIHVfaW50OF90ICAgICAgdHlwZTsKICAgICB1X2ludDhfdCAgICAgIGRtYWNbRVRIX0FMRU5dOworICAgIHVfaW50OF90ICAgICAgdHlwZTsKICAgICB1X2ludDhfdCAgICAgIHRvczsKLSAgICB1X2ludDhfdCAgICAgIHBhZDsKKyAgICAvL3VfaW50OF90ICAgICAgcGFkOwogICAgIHVfaW50MzJfdCAgICAgcHJpb3JpdHk7CiAgICAgdV9pbnQzMl90ICAgICBtYXJrOwogICAgIHN0cnVjdCBuZXRfZGV2aWNlICppbmRldjsKQEAgLTE0Myw5ICsxNDMsMTMgQEAKIAogICAgIC8vyOe5+8rHZXRowODQzaOs1PK0y7SmsaO05k1BQ823o6zS1L/sy9nKtc/WTUFDzbe4s9a1CiAgICAgdV9pbnQ4X3QgICAgICAgICAgICBoaF9mbGFnOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGhoX2RhdGFbMTRdOwotICAgIAogICAgIHVfaW50OF90ICAgICAgIGlzX25vdF9uYXQ7IC8vzqoxo6yx7cq+srvWp7PWTkFUCisgICAgdW5zaWduZWQgY2hhciAgICAgICAgaGhfZGF0YVsxNF07CisjaWYgX1VTRV9WRUhJQ0xFX0RDCisgICAgYXRvbWljX3QgcGt0OworICAgIGF0b21pY190IGxlbjsKKyAgICB1X2ludDhfdCB6dm5ldF9pZDsKKyNlbmRpZgogfWZhc3RfZW50cnlfZGF0YV90OwogCiB0eXBlZGVmIHN0cnVjdCBmYXN0X2VudHJ5X3N7CkBAIC0xNjAsNiArMTY0LDEwIEBACiAgICAgaW50IGFja2Ryb3BfbnVtOyAgICAgICAgICAgICAgICAvL9LRtqrG+rXEYWNrsajOxLj2yv0KICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcHJlZHJvcF9za2I7ICAgIC8vvMfCvNfuvfzSu7TOu7q05rXEYWtjsajOxAogICAgIHVuc2lnbmVkIGxvbmcgYWNrc3RhcnRfdGljazsgICAgLy/Su7j2tqphY2uw/Nbcxtq1xMbwyrzKsb/MteMKKyNpZiBfVVNFX1ZFSElDTEVfREMKKwlzdHJ1Y3QgZmFzdF9lbnRyeV9zICpmd2RfZW50cnk7CisJdm9pZCAqY2FwX25mY3Q7CisjZW5kaWYKIH1mYXN0X2VudHJ5X3Q7CiAKIHR5cGVkZWYgc3RydWN0IGZhc3RfbGlzdF9zewpAQCAtMzYyLDYgKzM3MCw4IEBACiB1aW50MzJfdCBpcHY0X3BzZXVkb19oZWFkZXJfY2hlY2tzdW0oY29uc3Qgc3RydWN0IGlwaGRyICppcCwgdWludDE2X3QgbGVuKTsKIAogdWludDE2X3QgaXBfY2hlY2tzdW1fYWRqdXN0KHVpbnQxNl90IGNoZWNrc3VtLCB1aW50MzJfdCBvbGRfaGRyX3N1bSwgdWludDMyX3QgbmV3X2hkcl9zdW0pOwotCitleHRlcm4gdm9pZCBjYXBfY29ubnRyYWNrX3B1dCh2b2lkICpuZmN0LCBpbnQgdGltZXMpOworZXh0ZXJuIHZvaWQgY2FwX2Nvbm50cmFja191cGRhdGUodm9pZCAqbmZjdCwgdW5zaWduZWQgaW50IHBrdDAsIHVuc2lnbmVkIGludCBsZW4wLCB1bnNpZ25lZCBpbnQgcGt0MSwgdW5zaWduZWQgaW50IGxlbjEsIHVuc2lnbmVkIGNoYXIgaW4sIHVuc2lnbmVkIGNoYXIgb3V0KTsKK2V4dGVybiB2b2lkIGNhcF9jb25udHJhY2tfdXBkYXRlX2VuZCh2b2lkICpuZmN0LCB1bnNpZ25lZCBpbnQgcGt0MCwgdW5zaWduZWQgaW50IGxlbjAsIHVuc2lnbmVkIGludCBwa3QxLCB1bnNpZ25lZCBpbnQgbGVuMSwgdW5zaWduZWQgY2hhciBpbiwgdW5zaWduZWQgY2hhciBvdXQpOwogI2VuZGlmIC8vX0ZBU1RfQ09NTU9OX0gKIApkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYWU1OTRkZi4uZGEyNDU0ZAotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCkBAIC0xNTcsNiArMTU3LDcgQEAKICAgICBzdHJ1Y3QgY29ubl9za2JpbmZvIHBhY2tldF9pbmZvW0lQX0NUX0RJUl9NQVhdOwogICAgIHN0cnVjdCBmYXN0X2N0X2V4dCBmYXN0X2N0OwogICAgIHN0cnVjdCBjb25uX3NlcV90cmFjayBjb25uX3BrdGxvc3NbSVBfQ1RfRElSX01BWF07CisJdm9pZCAqZmFzdF9lbnRyeTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2Nvbm4gKgpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbW0vbWVtX3RyYWNrZXIuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L21tL21lbV90cmFja2VyLmMKaW5kZXggMzk2Mzc2My4uYzgyM2U5YyAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbW0vbWVtX3RyYWNrZXIuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9tbS9tZW1fdHJhY2tlci5jCkBAIC0yNCw2ICsyNCw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAguuq2qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjdW5kZWYgQ09ORklHX0tBTExTWU1TCisKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKICNkZWZpbmUgTUVNX1RSQUNLRVJfTUFYX1NUQUNLX0xFTiAgCSgxMDApICAvKtW7uq/K/bnsvKO1xNfWt/u49sr9yc/P3qO7Ki8KICNlbmRpZiAKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L21tL3Nsb2IuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L21tL3Nsb2IuYwppbmRleCBmMjZjOGQ0Li4wZWE1YjM4IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9tbS9zbG9iLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbW0vc2xvYi5jCkBAIC05NTIsNyArOTUyLDcgQEAKIAkJc2xvYl9saXN0ID0gZ2V0X3Nsb2JfcGFnZV9saXN0X2hlYWQoc3ApOwogCiAjaWZkZWYgQ09ORklHX0tNQUxMT0NfVFJBQ0tFUgotCQlyZXR1cm4gIChzbG9iX2ZpbmRfZ2VuZXJhbF9zaXplKHNwKSAtIDIgKiBzaXplb2Yoc2l6ZV90KSk7CisJCXJldHVybiAgKHNsb2JfZmluZF9nZW5lcmFsX3NpemUoc3ApIC0gSEVBUF9TVUZGSVhfU0laRSk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR19TTE9CX01BUktfSEVBRApkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L2NvcmUvU0kvZXh0X21lbS5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L2NvcmUvU0kvZXh0X21lbS5jCmluZGV4IGUxMWI5MTguLjFiMWQzZTQgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL1NJL2V4dF9tZW0uYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvY29yZS9TSS9leHRfbWVtLmMKQEAgLTQxNSw3ICs0MTUsMTEgQEAKIAlib29sIGZhc3RwYXRoOw0KIA0KIAkvL732ysrTw9PawLTX1FBTQlVGtcTE2rTmtcS/vbG0DQotCWlmKHNrYi0+aXNFeHRlcm4gPT0gMCAmJiBza2ItPmNhcEhlYWQgPT0gTlVMTCkNCisJaWYoc2tiLT5pc0V4dGVybiA9PSAwIA0KKyNpZiBfVVNFX1ZFSElDTEVfREMNCisJCSYmIHNrYi0+Y2FwSGVhZCA9PSBOVUxMDQorI2VuZGlmDQorCQkpDQogCQlyZXR1cm4gMDsNCiAJDQogCWlmIChza2Jfc2hhcmVkKHNrYikpDQpAQCAtNTE5LDcgKzUyMyw5IEBACiAJc2tiLT5pc0Zhc3RuYXQ9IDA7DQogCXNrYi0+aXNGYXN0YnI9IDA7DQogCXNrYi0+aXN2bGFuPSAwOw0KKyNpZiBfVVNFX1ZFSElDTEVfREMNCiAJc2tiLT5jYXBIZWFkID0gTlVMTDsNCisjZW5kaWYNCiAJYXRvbWljX3NldCgmc2tiX3NoaW5mbyhza2IpLT5kYXRhcmVmLCAxKTsNCiAJc2tiZGF0YV9hbGxvY190cmFjayhza2IpOw0KIAkvL3ByaW50X3N1bihTVU5fREJHLCJjb3B5ICBwc2J1ZiAgdG8gIHNrYnVmZiAhISEgXG4iKTsNCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvY29yZS9mYXN0cHJvYy9mYXN0X2NvbW1vbi5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L2NvcmUvZmFzdHByb2MvZmFzdF9jb21tb24uYwppbmRleCBjM2EzYTUwLi43YTMyYTM0IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvY29yZS9mYXN0cHJvYy9mYXN0X2NvbW1vbi5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL2Zhc3Rwcm9jL2Zhc3RfY29tbW9uLmMKQEAgLTQxNyw4ICs0MTcsMTcgQEAKIAogZXh0ZXJuIHZvaWQgbmV0X2RiZ19wZXJmX2Rldl9yZWN2KGNoYXIgKiBwYWNrZXRfYWRkcixjaGFyKiBub2RlX3N0cik7CiBleHRlcm4gdm9pZCBuZXRfZGJnX3BlcmZfY2xlYXJfbGFzdF9pdGVtKHN0cnVjdCBza19idWZmICpza2IpOwotCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqILqvyv3Ktc/WICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNpZiBfVVNFX1ZFSElDTEVfREMKK3N0YXRpYyB2b2lkIGZhc3RfZW50cnlfdW5saW5rX2NhcChmYXN0X2VudHJ5X3QgKmVudHJ5KXsKKwlpZihlbnRyeS0+ZndkX2VudHJ5KXsKKwkJV0FSTl9PTihlbnRyeS0+ZndkX2VudHJ5LT5md2RfZW50cnkgIT0gZW50cnkpOworCQllbnRyeS0+ZndkX2VudHJ5LT5md2RfZW50cnkgPSBOVUxMOworCQllbnRyeS0+ZndkX2VudHJ5ID0gTlVMTDsKKwl9CisJZW50cnktPmN0LT5mYXN0X2VudHJ5ID0gTlVMTDsKK30KKyNlbmRpZgogc3RhdGljIHZvaWQgZmFzdF9iaCAodW5zaWduZWQgbG9uZyBwYXJhbSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICp0eHEgPSAoc3RydWN0IHNrX2J1ZmZfaGVhZCAqKXBhcmFtOwpAQCAtNjA4LDYgKzYxNyw5IEBACiAgICAgfQogCQogCWlmIChmcmVlX2VudHJ5KSB7CisjaWYgX1VTRV9WRUhJQ0xFX0RDCisJCWNhcF9jb25udHJhY2tfcHV0KGVudHJ5LT5jYXBfbmZjdCwgMSk7CisjZW5kaWYKICAgICAJLy9rZnJlZShlbnRyeSk7CiAjaWZkZWYgQ09ORklHX1NMT0JfT1BUCiAJCWtmcmVlKGVudHJ5KTsJCkBAIC03MDksNiArNzIxLDkgQEAKICAgICBlbnRyeS0+Y3QtPnRpbWVvdXQuZnVuY3Rpb24oKHVuc2lnbmVkIGxvbmcpZW50cnktPmN0KTsKICAgICAvL7K71NnS/dPDY3TBywogICAgIG5mX2N0X3B1dChlbnRyeS0+Y3QpOworI2lmIF9VU0VfVkVISUNMRV9EQworCWZhc3RfZW50cnlfdW5saW5rX2NhcChlbnRyeSk7CisjZW5kaWYKICAgICBmbl9saXN0X2RlbChsaXN0X2hlYWQsIGVudHJ5LCBmcmVlX2VudHJ5KTsKIH0KIApAQCAtMjY0NSw3ICsyNjYwLDQ0IEBACiAgICAgcmN1X3JlYWRfdW5sb2NrKCk7CiAgICAgcmV0dXJuIGRzdDsKIH0KKyNpZiBfVVNFX1ZFSElDTEVfREMKK3ZvaWQgZmFzdF91cGRhdGVfc3RhdHVzX2J5X2NhcGN0KHZvaWQpCit7CisJZmFzdF9lbnRyeV90ICplbnRyeSwgKm5leHQ7CisJdW5zaWduZWQgaW50IHBrdDA9MCxsZW4wPTAscGt0MT0wLGxlbjE9MDsKKwl2b2lkICpuZmN0ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIGluPTAsIG91dD0wOwogCisJc3Bpbl9sb2NrX2JoKCZmYXN0bmF0X3NwaW5sb2NrKTsKKwlmb3IoZW50cnkgPSB3b3JraW5nX2xpc3QubmV4dDsgZW50cnk7IGVudHJ5ID0gbmV4dCkKKwl7CisJCW5leHQgPSBlbnRyeS0+bmV4dDsKKwkJaWYocGt0MCB8fCBsZW4wIHx8IHBrdDEgfHwgbGVuMSl7CisJCQljYXBfY29ubnRyYWNrX3VwZGF0ZShuZmN0LCBwa3QwLCBsZW4wLCBwa3QxLCBsZW4xLCBpbiwgb3V0KTsKKwkJCXBrdDAgPSAwOworCQkJbGVuMCA9IDA7CisJCQlwa3QxID0gMDsKKwkJCWxlbjEgPSAwOworCQl9CisJCWlmKGVudHJ5LT5jYXBfbmZjdCAmJiBlbnRyeS0+ZGF0YVswXS56dm5ldF9pZCAmJiBlbnRyeS0+ZGF0YVsxXS56dm5ldF9pZCl7CisJCQlwa3QwID0gYXRvbWljX3JlYWQoJmVudHJ5LT5kYXRhWzBdLnBrdCk7CisJCQlsZW4wID0gYXRvbWljX3JlYWQoJmVudHJ5LT5kYXRhWzBdLmxlbik7CisJCQlwa3QxID0gYXRvbWljX3JlYWQoJmVudHJ5LT5kYXRhWzFdLnBrdCk7CisJCQlsZW4xID0gYXRvbWljX3JlYWQoJmVudHJ5LT5kYXRhWzFdLmxlbik7CisJCQluZmN0ID0gZW50cnktPmNhcF9uZmN0OworCQkJaW4gPSBlbnRyeS0+ZGF0YVsxXS56dm5ldF9pZDsKKwkJCW91dCA9IGVudHJ5LT5kYXRhWzBdLnp2bmV0X2lkOworCQkJYXRvbWljX3NldCgmZW50cnktPmRhdGFbMF0ucGt0LCAwKTsKKwkJCWF0b21pY19zZXQoJmVudHJ5LT5kYXRhWzBdLmxlbiwgMCk7CisJCQlhdG9taWNfc2V0KCZlbnRyeS0+ZGF0YVsxXS5wa3QsIDApOworCQkJYXRvbWljX3NldCgmZW50cnktPmRhdGFbMV0ubGVuLCAwKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmZmFzdG5hdF9zcGlubG9jayk7CisJaWYocGt0MCB8fCBsZW4wIHx8IHBrdDEgfHwgbGVuMSkKKwkJY2FwX2Nvbm50cmFja191cGRhdGVfZW5kKG5mY3QsIHBrdDAsIGxlbjAsIHBrdDEsIGxlbjEsIGluLCBvdXQpOworfQorI2VuZGlmCiAvKmZhc3Sz9cq8u68qLwogc3RhdGljIGludCBfX2luaXQKIHRzcF9mYXN0X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL2Zhc3Rwcm9jL2Zhc3RuYXQuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL2Zhc3Rwcm9jL2Zhc3RuYXQuYwppbmRleCBkYjhmMmUwLi4yMWRhNjc4IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvY29yZS9mYXN0cHJvYy9mYXN0bmF0LmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L2NvcmUvZmFzdHByb2MvZmFzdG5hdC5jCkBAIC00MSw2ICs0MSw3IEBACiBleHRlcm4gc3RydWN0IHNrX2J1ZmZfaGVhZCBmYXN0X3R4cTsKIGV4dGVybiBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZmFzdF90eF9iaDsKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioguq/K/cnqw/cgKioqKioqKioqKioqKioqKioqKioqKioqICovCitleHRlcm4gaW50IHp2bmV0X2dldF9pbmRleF9ieV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CiAKIAogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKiC6r8r9yrXP1iAqKioqKioqKioqKioqKioqKioqKioqKiogKi8KQEAgLTE4NCw3ICsxODUsOCBAQAogICAgIHVfaW50MzJfdCBza2lwX25hdCA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMOwogCXN0cnVjdCBuZl9jb25uX2NvdW50ZXIgKmFjY3QgPSBOVUxMOwotICAgIAorCWludCB6dm5ldF9pZCA9IC0xOworCiAjaWYgMC8vI2lmICFGQVNUTkFUX1NVTgogICAgIGlmKCEoZGV2ID0gc2tiLT5kZXYpIHx8ICEoaW5fZGV2ID0gKHN0cnVjdCBpbl9kZXZpY2UgKikoZGV2LT5pcF9wdHIpKSB8fCAhKGluX2Rldi0+aWZhX2xpc3QpKQogICAgIHsKQEAgLTIyMyw3ICsyMjUsNiBAQAogICAgICAgICAvL3ByaW50X3N1bihTVU5fREJHLCAiZmFzdF9uYXRfZmluZCAgRVJSICAhISFcbiIpOwogICAgICAgICBnb3RvIGVycl9vdXQ7CiAgICAgfQotCiAgICAgZGV2ID0gbmF0X2VudHJ5X2RhdGEtPm91dGRldjsKICAgICAvKrzssumw/LOktsjKx7fxs6y5/bP2v9rJ6LG4TVRVKi8KICAgICBpZiAoIWRldiB8fCAoc2tiLT5sZW4gPiBkZXYtPm10dSkpCkBAIC0yMzQsNyArMjM1LDcgQEAKICAgICAgICAgLy9wcmludF9zdW4oU1VOX0RCRywgImZhc3RfbmF0X3JlY3Ygb3V0ZGV2IG10dSBFUlIgISEhXG4iKTsKICAgICAgICAgZ290byBlcnJfb3V0OwogICAgIH0KLSAgICAKKwogICAgIC8vu9i0q7XEsPzWsb3Tys23xbKivMbK/QogICAgIGlmIChzdHJjbXAoc2tiLT5kZXYtPm5hbWUsIGRldi0+bmFtZSkgPT0gMCkKICAgICB7CkBAIC0yNjUsNyArMjY2LDI3MSBAQAogICAgIH0KIAogICAgIC8vdGNwZHVtcGluX3NxKHNrYik7Ci0KKyNpZiBfVVNFX1ZFSElDTEVfREMKKyAgICB6dm5ldF9pZCA9IHp2bmV0X2dldF9pbmRleF9ieV9uZXRkZXYoc2tiLT5pbmRldik7CisJaWYobmF0X2VudHJ5LT5md2RfZW50cnkpeworCQlmYXN0X2VudHJ5X2RhdGFfdCAqY2FwX2VudHJ5X2RhdGEgPSAmbmF0X2VudHJ5LT5md2RfZW50cnktPmRhdGFbbmF0X2VudHJ5X2RhdGEtPnR1cGxlaGFzaC50dXBsZS5kc3QuZGlyXTsKKwkJaWYoenZuZXRfaWQgPCAwICYmIGNhcF9lbnRyeV9kYXRhLT5oaF9mbGFnICYmCisJCQkoX19uZl9jdF90dXBsZV9zcmNfZXF1YWwoJmNhcF9lbnRyeV9kYXRhLT50dXBsZWhhc2gudHVwbGUsICZuYXRfZW50cnlfZGF0YS0+dHVwbGVoYXNoLnR1cGxlKSB8fAorCQkJX19uZl9jdF90dXBsZV9kc3RfZXF1YWwoJmNhcF9lbnRyeV9kYXRhLT50dXBsZWhhc2gudHVwbGUsICZuYXRfZW50cnlfZGF0YS0+dHVwbGVoYXNoLnR1cGxlKSkpeworCQkJaW50IGNhcF9mbGFnID0gLTE7CisJCQl1X2ludDMyX3QgbmF0X2FkZHI7CisJCQl1X2ludDE2X3QgbmF0X3BvcnQ7CisJCQlkZXYgPSBjYXBfZW50cnlfZGF0YS0+b3V0ZGV2OworCQkJaWYoIV9fbmZfY3RfdHVwbGVfc3JjX2VxdWFsKCZjYXBfZW50cnlfZGF0YS0+dHVwbGVoYXNoLnR1cGxlLCAmbmF0X2VudHJ5X2RhdGEtPnR1cGxlaGFzaC50dXBsZSkpeworCQkJCWNhcF9mbGFnID0gMTsKKwkJCQluYXRfYWRkciA9IGNhcF9lbnRyeV9kYXRhLT50dXBsZWhhc2gudHVwbGUuc3JjLnUzLmlwOworCQkJCW5hdF9wb3J0ID0gY2FwX2VudHJ5X2RhdGEtPnR1cGxlaGFzaC50dXBsZS5zcmMudS5hbGw7CisJCQl9IGVsc2UgaWYoIV9fbmZfY3RfdHVwbGVfZHN0X2VxdWFsKCZjYXBfZW50cnlfZGF0YS0+dHVwbGVoYXNoLnR1cGxlLCAmbmF0X2VudHJ5X2RhdGEtPnR1cGxlaGFzaC50dXBsZSkpeworCQkJCWNhcF9mbGFnID0gMDsKKwkJCQluYXRfYWRkciA9IGNhcF9lbnRyeV9kYXRhLT50dXBsZWhhc2gudHVwbGUuZHN0LnUzLmlwOworCQkJCW5hdF9wb3J0ID0gY2FwX2VudHJ5X2RhdGEtPnR1cGxlaGFzaC50dXBsZS5kc3QudS5hbGw7CisJCQl9CisJCQlpZiAoIShza2IyID0gZmFzdF9leHBhbmRfaGVhZHJvb20oc2tiLCBkZXYpKSl7CisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlpZihza2IyICE9IHNrYil7CisJCQkJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYjItPmRhdGE7CisJCQkJc2tiID0gc2tiMjsKKwkJCX0KKwkJCWZhc3RfdGNwZHVtcChza2IpOworCQkJLy/I57n716Ww/MP81tCjrMr9vt274WNsb25lo6xmYXN0s8m5ptDo0qq4xLHkZGF0YcTayN2jrNDo0qrW2NDCY29wedK7t90KKwkJCWlmIChza2JfY2xvbmVkKHNrYikgJiYgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKXsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlwcmludGsoInBza2JfZXhwYW5kX2hlYWQwIHNrYiBmYWlsZWQsIGZyZWUgc2tiXG4iKTsKKwkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCQorCQkJLyq9+NDQtqqw/Lj619kqLworCQkJaWYoSVBQUk9UT19UQ1AgPT0gaXBoLT5wcm90b2NvbCkKKwkJCQlwYWNrZXRfbG9zdF90cmFjayhza2IsIG5hdF9lbnRyeS0+Y3QpOworCQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJCQlza2ItPmlzRmFzdG5hdCA9IDE7CisJCQlpZiAoY2FwX2ZsYWcgPj0gMCl7CisJCQkJaWYgKElQUFJPVE9fVENQID09IGlwaC0+cHJvdG9jb2wpeworCQkJCQl0Y3BoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLT5kYXRhICsgaXBoLT5paGwgKiA0KTsKKwkJCQkJY2tzdW0gPSAmdGNwaC0+Y2hlY2s7CisJCQkJCW9sZHBvcnQgPSBjYXBfZmxhZyA/ICgmdGNwaC0+c291cmNlKTogKCZ0Y3BoLT5kZXN0KTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoSVBQUk9UT19VRFAgPT0gaXBoLT5wcm90b2NvbCl7CisJCQkJCXVkcGggPSAoc3RydWN0IHVkcGhkciAqKShza2ItPmRhdGEgKyBpcGgtPmlobCAqIDQpOworCQkJCQlja3N1bSA9ICZ1ZHBoLT5jaGVjazsKKwkJCQkJb2xkcG9ydCA9IGNhcF9mbGFnID8gKCZ1ZHBoLT5zb3VyY2UpOiAoJnVkcGgtPmRlc3QpOworCQkJCX0KKwkJCQlvbGRpcCA9IGNhcF9mbGFnPyAoJmlwaC0+c2FkZHIpIDogKCZpcGgtPmRhZGRyKTsKKwkJCQlpZiAoY2tzdW0gIT0gTlVMTCAmJiAoMCE9KmNrc3VtIHx8IElQUFJPVE9fVENQID09IGlwaC0+cHJvdG9jb2wpKXsKKwkJCQkJaW5ldF9wcm90b19jc3VtX3JlcGxhY2U0KGNrc3VtLCBza2IsICpvbGRpcCwgbmF0X2FkZHIsIDApOworCQkJCQlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoY2tzdW0sIHNrYiwgKm9sZHBvcnQsIG5hdF9wb3J0LCAwKTsKKwkJCQl9CisJCQkJY3N1bV9yZXBsYWNlNCgmaXBoLT5jaGVjaywgKm9sZGlwLCBuYXRfYWRkcik7CisJCQkJaWYob2xkcG9ydCkKKwkJCQkqb2xkcG9ydCA9IG5hdF9wb3J0OworCQkJCSpvbGRpcCA9IG5hdF9hZGRyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChJUFBST1RPX1RDUCA9PSBpcGgtPnByb3RvY29sKQorCQkJCXsKKwkJCQkJdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0+ZGF0YSArIGlwaC0+aWhsICogNCk7CisJCQkJfQorCQkJfQorCQkJc2tiLT5wcmlvcml0eSA9IGNhcF9lbnRyeV9kYXRhLT5wcmlvcml0eTsKKwkJCXNrYi0+bWFyayA9IGNhcF9lbnRyeV9kYXRhLT5tYXJrOworCQkJaWYgKG5hdF9lbnRyeV9kYXRhLT50dXBsZWhhc2gudHVwbGUuZHN0LmRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpeworCQkJCW5hdF9lbnRyeS0+Y3QtPnBhY2tldF9pbmZvW0lQX0NUX0RJUl9PUklHSU5BTF0ucGFja2V0cysrOworCQkJCW5hdF9lbnRyeS0+Y3QtPnBhY2tldF9pbmZvW0lQX0NUX0RJUl9PUklHSU5BTF0uYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJbmF0X2VudHJ5LT5md2RfZW50cnktPmN0LT5wYWNrZXRfaW5mb1tJUF9DVF9ESVJfT1JJR0lOQUxdLnBhY2tldHMrKzsKKwkJCQluYXRfZW50cnktPmZ3ZF9lbnRyeS0+Y3QtPnBhY2tldF9pbmZvW0lQX0NUX0RJUl9PUklHSU5BTF0uYnl0ZXMgKz0gc2tiLT5sZW47CisJCQl9IGVsc2UgaWYgKG5hdF9lbnRyeV9kYXRhLT50dXBsZWhhc2gudHVwbGUuZHN0LmRpciA9PSBJUF9DVF9ESVJfUkVQTFkpeworCQkJCW5hdF9lbnRyeS0+Y3QtPnBhY2tldF9pbmZvW0lQX0NUX0RJUl9SRVBMWV0ucGFja2V0cysrOworCQkJCW5hdF9lbnRyeS0+Y3QtPnBhY2tldF9pbmZvW0lQX0NUX0RJUl9SRVBMWV0uYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJbmF0X2VudHJ5LT5md2RfZW50cnktPmN0LT5wYWNrZXRfaW5mb1tJUF9DVF9ESVJfUkVQTFldLnBhY2tldHMrKzsKKwkJCQluYXRfZW50cnktPmZ3ZF9lbnRyeS0+Y3QtPnBhY2tldF9pbmZvW0lQX0NUX0RJUl9SRVBMWV0uYnl0ZXMgKz0gc2tiLT5sZW47CisJCQl9IGVsc2UgeworCQkJCXByaW50aygiZmFzdG5hdCBwYWNrZXQgZXJyb3JcbiIpOworCQkJfQorCQkJeworCQkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCQkJCWlmIChuYXRfZW50cnlfZGF0YS0+dHVwbGVoYXNoLnR1cGxlLmRzdC5kaXIgPT0gSVBfQ1RfRElSX09SSUdJTkFMKQorCQkJCQljdGluZm8gPSBJUF9DVF9FU1RBQkxJU0hFRDsKKwkJCQllbHNlIAorCQkJCQljdGluZm8gPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWTsKKwkJCQlhY2N0ID0gbmZfY29ubl9hY2N0X2ZpbmQobmF0X2VudHJ5LT5jdCk7CisJCQkJaWYgKGFjY3QpIHsKKwkJCQkJYXRvbWljNjRfaW5jKCZhY2N0W0NUSU5GTzJESVIoY3RpbmZvKV0ucGFja2V0cyk7CisJCQkJCWF0b21pYzY0X2FkZChza2ItPmxlbiwgJmFjY3RbQ1RJTkZPMkRJUihjdGluZm8pXS5ieXRlcyk7CisJCQkJfQorCQkJCWFjY3QgPSBuZl9jb25uX2FjY3RfZmluZChuYXRfZW50cnktPmZ3ZF9lbnRyeS0+Y3QpOworCQkJCWlmIChhY2N0KSB7CisJCQkJCWF0b21pYzY0X2luYygmYWNjdFtDVElORk8yRElSKGN0aW5mbyldLnBhY2tldHMpOworCQkJCQlhdG9taWM2NF9hZGQoc2tiLT5sZW4sICZhY2N0W0NUSU5GTzJESVIoY3RpbmZvKV0uYnl0ZXMpOworCQkJCX0KKwkJCQlhdG9taWNfaW5jKCZuYXRfZW50cnlfZGF0YS0+cGt0KTsKKwkJCQlhdG9taWNfYWRkKHNrYi0+bGVuLCAmbmF0X2VudHJ5X2RhdGEtPmxlbik7CisJCQkJaWYoYXRvbWljX3JlYWQoJm5hdF9lbnRyeV9kYXRhLT5sZW4pID4gMTAwMDAwMCl7CisJCQkJCWNhcF9jb25udHJhY2tfdXBkYXRlX2VuZChuYXRfZW50cnktPmNhcF9uZmN0LAorCQkJCQkJYXRvbWljX3JlYWQoJm5hdF9lbnRyeS0+ZGF0YVswXS5wa3QpLGF0b21pY19yZWFkKCZuYXRfZW50cnktPmRhdGFbMF0ubGVuKSwKKwkJCQkJCWF0b21pY19yZWFkKCZuYXRfZW50cnktPmRhdGFbMV0ucGt0KSxhdG9taWNfcmVhZCgmbmF0X2VudHJ5LT5kYXRhWzFdLmxlbiksCisJCQkJCQluYXRfZW50cnktPmRhdGFbMV0uenZuZXRfaWQsbmF0X2VudHJ5LT5kYXRhWzBdLnp2bmV0X2lkKTsKKwkJCQkJCXNwaW5fbG9ja19iaCgmZmFzdG5hdF9zcGlubG9jayk7CisJCQkJCQlhdG9taWNfc2V0KCZuYXRfZW50cnktPmRhdGFbMF0ucGt0LCAwKTsKKwkJCQkJCWF0b21pY19zZXQoJm5hdF9lbnRyeS0+ZGF0YVswXS5sZW4sIDApOworCQkJCQkJYXRvbWljX3NldCgmbmF0X2VudHJ5LT5kYXRhWzFdLnBrdCwgMCk7CisJCQkJCQlhdG9taWNfc2V0KCZuYXRfZW50cnktPmRhdGFbMV0ubGVuLCAwKTsKKwkJCQkJCXNwaW5fdW5sb2NrX2JoKCZmYXN0bmF0X3NwaW5sb2NrKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoZmFzdG5hdF9sZXZlbCA9PSBGQVNUX05FVF9ERVZJQ0UpeworCQkJCWlmIChuYXRfZW50cnlfZGF0YS0+aW5kZXYpeworCQkJCQluYXRfZW50cnlfZGF0YS0+aW5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQkJbmF0X2VudHJ5X2RhdGEtPmluZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCQl9CisJCQkJaWYgKGNhcF9lbnRyeV9kYXRhLT5pbmRldil7CisJCQkJCWNhcF9lbnRyeV9kYXRhLT5pbmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCQljYXBfZW50cnlfZGF0YS0+aW5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQkJCX0KKwkJCQlpZihza2ItPmluZGV2ICYmIG5hdF9lbnRyeV9kYXRhLT5pbmRldiAhPSBza2ItPmluZGV2ICYmIGNhcF9lbnRyeV9kYXRhLT5pbmRldiAhPSBza2ItPmluZGV2ICl7CisJCQkJCXNrYi0+aW5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQkJc2tiLT5pbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJfQorCQkJfQorCQkJc2tiLT5kZXYgPSBkZXY7CisJCQlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKKwkJCS8vaWYgKGNhcF9lbnRyeV9kYXRhLT5oaF9mbGFnKQorCQkJbWVtY3B5KHNrYi0+ZGF0YSwgY2FwX2VudHJ5X2RhdGEtPmhoX2RhdGEsIEVUSF9ITEVOKTsKKwkJCS8quPzQwsG0vdOzrMqxKi8KKwkJCWlmIChJUFBST1RPX1RDUCA9PSBpcGgtPnByb3RvY29sKXsKKwkJCQltb2RfdGltZXIoJm5hdF9lbnRyeS0+dGltZW91dCwgamlmZmllcyArIHRjcF90aW1lb3V0c1tuYXRfZW50cnktPmN0LT5wcm90by50Y3Auc3RhdGVdKTsKKwkJCQltb2RfdGltZXIoJm5hdF9lbnRyeS0+ZndkX2VudHJ5LT50aW1lb3V0LCBqaWZmaWVzICsgdGNwX3RpbWVvdXRzW25hdF9lbnRyeS0+ZndkX2VudHJ5LT5jdC0+cHJvdG8udGNwLnN0YXRlXSk7CisJCQkJdXBkYXRlX3RjcF90aW1lb3V0KG5hdF9lbnRyeSwgbmF0X2VudHJ5X2RhdGEsIHRjcGgpOworCQkJCXVwZGF0ZV90Y3BfdGltZW91dChuYXRfZW50cnktPmZ3ZF9lbnRyeSwgY2FwX2VudHJ5X2RhdGEsIHRjcGgpOworCQkgCisJCQkJaWYoYWNrZmlsdGVyKHNrYiwgbmF0X2VudHJ5LCAmd29ya2luZ19saXN0KSA9PSAxIHx8IGFja2ZpbHRlcihza2IsIG5hdF9lbnRyeS0+ZndkX2VudHJ5LCAmd29ya2luZ19saXN0KSA9PSAxKXsKKwkJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJCS8vc3Bpbl91bmxvY2tfYmgoJmZhc3RuYXRfc3BpbmxvY2spOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChJUFBST1RPX1VEUCA9PSBpcGgtPnByb3RvY29sKXsKKwkJCQkvKnVkcCovCisJCQkJaWYgKGZhc3RfdGVzdF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCBuYXRfZW50cnktPmN0LT5zdGF0dXMpKXsKKwkJCQkJbW9kX3RpbWVyKCZuYXRfZW50cnktPnRpbWVvdXQsIGppZmZpZXMgKyBmYXN0X3VkcF90aW1lb3V0X3N0cmVhbSk7CisJCQkJCW1vZF90aW1lcigmbmF0X2VudHJ5LT5md2RfZW50cnktPnRpbWVvdXQsIGppZmZpZXMgKyBmYXN0X3VkcF90aW1lb3V0X3N0cmVhbSk7CisJCQkJfWVsc2V7CisJCQkJCW1vZF90aW1lcigmbmF0X2VudHJ5LT50aW1lb3V0LCBqaWZmaWVzICsgZmFzdF91ZHBfdGltZW91dCk7CisJCQkJCW1vZF90aW1lcigmbmF0X2VudHJ5LT5md2RfZW50cnktPnRpbWVvdXQsIGppZmZpZXMgKyBmYXN0X3VkcF90aW1lb3V0KTsKKwkJCQl9CisJCQl9CisJCQlpZiAoc2tiLT5kZXYtPmZsYWdzICYgSUZGX1VQKXsKKwkJCQlpZiAoc2tiLT5kZXYtPnR5cGUgPT0gQVJQSFJEX1BQUCB8fCBza2ItPmRldi0+dHlwZSA9PSBBUlBIUkRfTk9ORSkKKwkJCQkJc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7CisJCQkJc2tiLT5ub3dfbG9jYXRpb24gfD0gRkFTVE5BVF9TVUNDOworCQkJCWlmKHVubGlrZWx5KHNrYi0+ZGV2LT50eXBlID09IEFSUEhSRF9OT05FKSl7CisJCQkJCXN0cnVjdCBpcHY2aGRyIGhlYWRlciA9IHswfTsKKwkJCQkJY29uc3Qgc3RydWN0IGlwaGRyICpvbGRfaGVhZGVyID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwkJCQkJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOworCQkJCQlpbnQgcmMgPSAtRU5PTUVNOworCQkJCQorCQkJCQloZWFkZXIudmVyc2lvbiA9IDY7CisJCQkJCWhlYWRlci5wYXlsb2FkX2xlbiA9IGh0b25zKG50b2hzKG9sZF9oZWFkZXItPnRvdF9sZW4pIC0gc2l6ZW9mKHN0cnVjdCBpcGhkcikpOworCQkJCQloZWFkZXIubmV4dGhkciA9IG9sZF9oZWFkZXItPnByb3RvY29sOworCQkJCQloZWFkZXIuaG9wX2xpbWl0ID0gb2xkX2hlYWRlci0+dHRsOworCQkJCQloZWFkZXIuc2FkZHIgPSBnX2lwdjZfbG9jYWxfc3VibmV0OworCQkJCQloZWFkZXIuZGFkZHIgPSBnX3BsYXRfc3VibmV0OworCQkJCQloZWFkZXIuZGFkZHIuczZfYWRkcjMyWzNdID0gb2xkX2hlYWRlci0+ZGFkZHI7CisJCQkJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKKwkJCQkJbWVtY3B5KHNrYi0+ZGF0YSwgJmhlYWRlciwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CisJCQkJCWlmICghKHNrYjIgPSBmYXN0X2V4cGFuZF9oZWFkcm9vbShza2IsIGdfeGxhdF9kZXYpKSl7CisJCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQkJCXJldHVybiAxOworCQkJCQl9CisJCQkJCWlmKHNrYjIgIT0gc2tiKQorCQkJCQkJc2tiID0gc2tiMjsKKwkJCQkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CisJCQkJCXNrYi0+ZGV2ID0gZ194bGF0X2RldjsKKwkJCQl9CisJCQkJaWYgKGZhc3RuYXRfbGV2ZWwgPT0gRkFTVF9ORVRfREVWSUNFKXsKKwkJCQkJaWYoc3BlZWRNb2RlID09IDApCisJCQkJCQlkZXZfcXVldWVfeG1pdChza2IpOworCQkJCQllbHNlIGlmKHNrYi0+ZGV2LT5uZXRkZXZfb3BzICYmIHNrYi0+ZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdAorCQkJCQkJJiYgc2tiLT5kZXYtPm5ldGRldl9vcHMtPm5kb19zZWxlY3RfcXVldWUgPT0gTlVMTCAgCisJCQkJCQkmJiAoc2tiLT5kZXYtPnR5cGUgIT0gQVJQSFJEX1BQUCkpeworCQkJCQkJaW50IHJjID0gLUVOT01FTTsKKwkJCQkJCXJjID0gc2tiLT5kZXYtPm5ldGRldl9vcHMtPm5kb19zdGFydF94bWl0KHNrYiwgc2tiLT5kZXYpOworCQkJCQkJaWYgKCFkZXZfeG1pdF9jb21wbGV0ZShyYykpIHsKKwkJCQkJCQlza2ItPmRldi0+c3RhdHNfZGJnLnR4X2Ryb3BwZWQrKzsKKwkJCQkJCQlza2ItPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJCQkJCXNrYmluZm9fYWRkKE5VTEwsU0tCX0VSUkZSRUUpOworCQkJCQkJCWtmcmVlX3NrYihza2IpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UgaWYoc2tiLT5kZXYtPnR5cGUgPT0gQVJQSFJEX1BQUCl7CisJCQkJCQlza2JfcXVldWVfdGFpbCgmZmFzdF90eHEsIHNrYik7CisJCQkJCQl0YXNrbGV0X3NjaGVkdWxlKCZmYXN0X3R4X2JoKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQlkZXZfcXVldWVfeG1pdChza2IpOworCQkJCX0KKwkJCQllbHNlIGlmIChmYXN0bmF0X2xldmVsID09IEZBU1RfTkVUX0NPUkUpCisJCQkJCWRldl9xdWV1ZV94bWl0KHNrYik7CisJCQkJbmF0X2VudHJ5X2RhdGEtPnBhY2tldF9udW0rKzsKKwkJCQljYXBfZW50cnlfZGF0YS0+cGFja2V0X251bSsrOworCQkJfQorCQkJZWxzZQorCQkJCWtmcmVlX3NrYihza2IpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX1lbHNleworCQlpZih1bmxpa2VseShmYXN0YnJfbGV2ZWwgIT0gMSkpeworCQkJaWYoc2tiLT5uZmN0X2JhayAmJiBza2ItPmNhcE5mY3QpeworCQkJCXN0cnVjdCBuZl9jb25uICpjdF9md2QgPSAoc3RydWN0IG5mX2Nvbm4gKilza2ItPm5mY3RfYmFrOworCQkJCWlmIChjdF9md2QtPmZhc3RfZW50cnkpeworCQkJCQlmYXN0X2VudHJ5X3QgKm5hdF9lbnRyeV9md2QgPSAoZmFzdF9lbnRyeV90ICopY3RfZndkLT5mYXN0X2VudHJ5OworCQkJCQlpZiAobmF0X2VudHJ5X2Z3ZCl7CisJCQkJCQkvKnNrYtLRvq3IxrvYwLTBy6OssPO2qNDCwM9mYXN0o6y8x8K8Y2FwY3QqLworCQkJCQkJc3Bpbl9sb2NrX2JoKCZmYXN0bmF0X3NwaW5sb2NrKTsKKwkJCQkJCW5hdF9lbnRyeV9md2QtPmZ3ZF9lbnRyeSA9IG5hdF9lbnRyeTsKKwkJCQkJCW5hdF9lbnRyeV9md2QtPmNhcF9uZmN0ID0gc2tiLT5jYXBOZmN0OworCQkJCQkJbmF0X2VudHJ5LT5md2RfZW50cnkgPSBuYXRfZW50cnlfZndkOworCQkJCQkJbmF0X2VudHJ5LT5jYXBfbmZjdCA9IHNrYi0+Y2FwTmZjdDsKKwkJCQkJCWF0b21pY19zZXQoJm5hdF9lbnRyeS0+ZGF0YVswXS5wa3QsIDApOworCQkJCQkJYXRvbWljX3NldCgmbmF0X2VudHJ5LT5kYXRhWzBdLmxlbiwgMCk7CisJCQkJCQlhdG9taWNfc2V0KCZuYXRfZW50cnktPmRhdGFbMV0ucGt0LCAwKTsKKwkJCQkJCWF0b21pY19zZXQoJm5hdF9lbnRyeS0+ZGF0YVsxXS5sZW4sIDApOworCQkJCQkJYXRvbWljX3NldCgmbmF0X2VudHJ5X2Z3ZC0+ZGF0YVswXS5wa3QsIDApOworCQkJCQkJYXRvbWljX3NldCgmbmF0X2VudHJ5X2Z3ZC0+ZGF0YVswXS5sZW4sIDApOworCQkJCQkJYXRvbWljX3NldCgmbmF0X2VudHJ5X2Z3ZC0+ZGF0YVsxXS5wa3QsIDApOworCQkJCQkJYXRvbWljX3NldCgmbmF0X2VudHJ5X2Z3ZC0+ZGF0YVsxXS5sZW4sIDApOworCQkJCQkJc3Bpbl91bmxvY2tfYmgoJmZhc3RuYXRfc3BpbmxvY2spOworCQkJCQkJc2tiLT5jYXBOZmN0ID0gTlVMTDsKKwkJCQkJCWlmKHp2bmV0X2lkID49IDAgJiYgbmF0X2VudHJ5X2RhdGEtPnp2bmV0X2lkID09IDApeworCQkJCQkJCW5hdF9lbnRyeV9kYXRhLT56dm5ldF9pZCA9IHp2bmV0X2lkKzE7CisJCQkJCQkJaWYobmF0X2VudHJ5X2RhdGEtPnR1cGxlaGFzaC50dXBsZS5kc3QuZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCl7CisJCQkJCQkJCW5hdF9lbnRyeS0+ZGF0YVtJUF9DVF9ESVJfUkVQTFldLnp2bmV0X2lkID0gc2tiLT56dm5ldF9pZDsKKwkJCQkJCQkJbmF0X2VudHJ5X2Z3ZC0+ZGF0YVtJUF9DVF9ESVJfT1JJR0lOQUxdLnp2bmV0X2lkID0gbmF0X2VudHJ5LT5kYXRhW0lQX0NUX0RJUl9PUklHSU5BTF0uenZuZXRfaWQ7CisJCQkJCQkJCW5hdF9lbnRyeV9md2QtPmRhdGFbSVBfQ1RfRElSX1JFUExZXS56dm5ldF9pZCA9IG5hdF9lbnRyeS0+ZGF0YVtJUF9DVF9ESVJfUkVQTFldLnp2bmV0X2lkOworCQkJCQkJCX1lbHNleworCQkJCQkJCQluYXRfZW50cnktPmRhdGFbSVBfQ1RfRElSX09SSUdJTkFMXS56dm5ldF9pZCA9IHNrYi0+enZuZXRfaWQ7CisJCQkJCQkJCW5hdF9lbnRyeV9md2QtPmRhdGFbSVBfQ1RfRElSX09SSUdJTkFMXS56dm5ldF9pZCA9IG5hdF9lbnRyeS0+ZGF0YVtJUF9DVF9ESVJfT1JJR0lOQUxdLnp2bmV0X2lkOworCQkJCQkJCQluYXRfZW50cnlfZndkLT5kYXRhW0lQX0NUX0RJUl9SRVBMWV0uenZuZXRfaWQgPSBuYXRfZW50cnktPmRhdGFbSVBfQ1RfRElSX1JFUExZXS56dm5ldF9pZDsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlpZih6dm5ldF9pZCA8IDApeworCQkJCS8qt6K4+Hp2bmV0tcTK/b7do6zX37W9ZmFzdKOsvMfCvGN0us1mYXN0sPO2qCovCisJCQkJbmZfY29ubnRyYWNrX3B1dChza2ItPm5mY3QpOworCQkJCXNrYi0+bmZjdCA9ICZuYXRfZW50cnktPmN0LT5jdF9nZW5lcmFsOworCQkJCW5mX2Nvbm50cmFja19nZXQoc2tiLT5uZmN0KTsKKwkJCQluYXRfZW50cnktPmN0LT5mYXN0X2VudHJ5ID0gbmF0X2VudHJ5OworCQkJfQorCQl9CisJfQorI2VuZGlmCiAgICAgaWYgKCEoc2tiMiA9IGZhc3RfZXhwYW5kX2hlYWRyb29tKHNrYiwgZGV2KSkpewogICAgICAgICByY3VfcmVhZF91bmxvY2soKTsKICAgICAgICAgcmV0dXJuIDE7CkBAIC0zOTksMTEgKzY2NCwyMCBAQAogCiAgICAgLy/Wu9PQtbHT0E1BQ8231KS4s9a1yrGjrLLF17y4s9a1o6y38dTyzqpJUM23CiAgICAgc2tiX3B1c2goc2tiLCBFVEhfSExFTik7Ci0gICAgaWYgKG5hdF9lbnRyeV9kYXRhLT5oaF9mbGFnKQorICAgIGlmIChuYXRfZW50cnlfZGF0YS0+aGhfZmxhZyA9PSAxKQogICAgIHsKICAgICAgICAgbWVtY3B5KHNrYi0+ZGF0YSwgbmF0X2VudHJ5X2RhdGEtPmhoX2RhdGEsIEVUSF9ITEVOKTsKICAgICB9Ci0KKyNpZiBfVVNFX1ZFSElDTEVfREMKKwllbHNleworCQlpZiAoZmFzdGJyX2xldmVsICE9IDEgJiYgenZuZXRfaWQgPj0gMCAmJiBuYXRfZW50cnlfZGF0YS0+aGhfZmxhZyA9PSAwKXsKKwkJCXNwaW5fbG9ja19iaCgmZmFzdG5hdF9zcGlubG9jayk7CisJCQltZW1jcHkobmF0X2VudHJ5X2RhdGEtPmhoX2RhdGEsIHNrYi0+ZGF0YSwgRVRIX0hMRU4pOworCQkJbmF0X2VudHJ5X2RhdGEtPmhoX2ZsYWcgPSAyOworCQkJc3Bpbl91bmxvY2tfYmgoJmZhc3RuYXRfc3BpbmxvY2spOworCQl9CisJfQorI2VuZGlmCiAjaWYgMAogICAgIGlmKCEoZGV2LT5mbGFncyAmIElGRl9QT0lOVE9QT0lOVCkpCiAgICAgewpAQCAtNDU1LDcgKzcyOSw3IEBACiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNrYi0+bm93X2xvY2F0aW9uIHw9IEZBU1ROQVRfU1VDQzsKLQkJCisKIAkJaWYodW5saWtlbHkoc2tiLT5kZXYtPnR5cGUgPT0gQVJQSFJEX05PTkUpKXsKIAkJCXN0cnVjdCBpcHY2aGRyIGhlYWRlciA9IHswfTsKIAkJCWNvbnN0IHN0cnVjdCBpcGhkciAqb2xkX2hlYWRlciA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvY29yZS9za2J1ZmYuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IDZhYWYyM2UuLjFmNmYwNWYgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL3NrYnVmZi5jCkBAIC02MzQsNiArNjM0LDEwIEBACiAJfQogI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSykKIAluZl9jb25udHJhY2tfcHV0KHNrYi0+bmZjdCk7CisjaWYgX1VTRV9WRUhJQ0xFX0RDCisJbmZfY29ubnRyYWNrX3B1dChza2ItPm5mY3RfYmFrKTsKKwljYXBfY29ubnRyYWNrX3B1dChza2ItPmNhcE5mY3QsMik7CisjZW5kaWYKICNlbmRpZgogI2lmZGVmIE5FVF9TS0JVRkZfTkZfREVGUkFHX05FRURFRAogCW5mX2Nvbm50cmFja19wdXRfcmVhc20oc2tiLT5uZmN0X3JlYXNtKTsKQEAgLTg0Miw3ICs4NDYsMTIgQEAKIAlDKHRydWVzaXplKTsKIAkKIAkvL7bU09pkYXRhtcTQwtT2yvTQ1KOsc2tiv72xtMqx0qq8zLPQo6zS8s6qwb249nNrYta4z/K1xMrHzazSu7j2ZGF0Ycf40/IKKyNpZiBfVVNFX1ZFSElDTEVfREMKIAlDKGNhcEhlYWQpOworCW4tPm5mY3RfYmFrID0gTlVMTDsKKwluLT5jYXBOZmN0ID0gTlVMTDsKKwluLT56dm5ldF9pZCA9IDA7CisjZW5kaWYKIAlDKGlzRXh0ZXJuKTsKIAlDKGlzRmFzdGJyKTsKIAlDKGlzRmFzdG5hdCk7CkBAIC0xMTY2LDkgKzExNzUsMTcgQEAKIAkJZmFzdHBhdGggPSBhdG9taWNfcmVhZCgmc2tiX3NoaW5mbyhza2IpLT5kYXRhcmVmKSA9PSBkZWx0YTsKIAl9CiAjaWZuZGVmIENPTkZJR19TUEVFRF9PUFQKLQlpZiAoZmFzdHBhdGggJiYgc2tiLT5pc0V4dGVybj09MCAmJiBza2ItPmNhcEhlYWQgPT0gTlVMTCAmJiBzaXplICsgc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pIDw9IGtzaXplKHNrYi0+aGVhZCkpIAorCWlmIChmYXN0cGF0aCAmJiBza2ItPmlzRXh0ZXJuPT0wIAorI2lmIF9VU0VfVkVISUNMRV9EQworCSYmIHNrYi0+Y2FwSGVhZCA9PSBOVUxMIAorI2VuZGlmCisJJiYgc2l6ZSArIHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSA8PSBrc2l6ZShza2ItPmhlYWQpKSAKICNlbHNlCi0JaWYgKGZhc3RwYXRoICYmIHNrYi0+aXNFeHRlcm49PTAgJiYgc2tiLT5jYXBIZWFkID09IE5VTEwgJiYgc2l6ZSArIHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSA8PSBza2Jfc3lzX3Bvb2xfc2l6ZShza2ItPmhlYWQpKSAKKwlpZiAoZmFzdHBhdGggJiYgc2tiLT5pc0V4dGVybj09MCAKKyNpZiBfVVNFX1ZFSElDTEVfREMKKwkmJiBza2ItPmNhcEhlYWQgPT0gTlVMTCAKKyNlbmRpZgorCSYmIHNpemUgKyBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykgPD0gc2tiX3N5c19wb29sX3NpemUoc2tiLT5oZWFkKSkgCiAjZW5kaWYKIAl7CW1lbW1vdmUoc2tiLT5oZWFkICsgc2l6ZSwgc2tiX3NoaW5mbyhza2IpLAogCQkJb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbywKQEAgLTEyMDIsNyArMTIxOSwxMSBAQAogCSAgICAgICBza2Jfc2hpbmZvKHNrYiksCiAJICAgICAgIG9mZnNldG9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8sIGZyYWdzW3NrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3NdKSk7CiAKLQlpZiAoZmFzdHBhdGggJiYgc2tiLT5jYXBIZWFkID09IE5VTEwpIHsKKwlpZiAoZmFzdHBhdGggCisjaWYgX1VTRV9WRUhJQ0xFX0RDCisJCSYmIHNrYi0+Y2FwSGVhZCA9PSBOVUxMCisjZW5kaWYKKwkJKSB7CiAJCXsKIAkJCWlmKHNrYi0+aXNFeHRlcm4gPT0gMSkKIAkJCXsKQEAgLTEyNTUsNyArMTI3Niw5IEBACiAJc2tiLT5jbG9uZWQgICA9IDA7CiAJc2tiLT5oZHJfbGVuICA9IDA7CiAJc2tiLT5ub2hkciAgICA9IDA7CisjaWYgX1VTRV9WRUhJQ0xFX0RDCiAJc2tiLT5jYXBIZWFkID0gTlVMTDsKKyNlbmRpZgogCXNrYi0+aXNFeHRlcm4gPSAwOwogCXNrYi0+aXNGYXN0bmF0PSAwOwogCXNrYi0+aXNGYXN0YnI9IDA7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAxMWFmN2E3Li41MzdlMDcyCi0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTkwNSw3ICs5MDUsNyBAQAogI2lmZGVmIENPTkZJR19UU1BfRkFTVEJJSAogCWN0LT5pc2JpaCA9IDA7CiAjZW5kaWYKLQorCWN0LT5mYXN0X2VudHJ5ID0gTlVMTDsKIAlyZXR1cm4gJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXTsKIH0KIAo=