ZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDg3OWExN2YuLjNmZDZlYWMgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtMjEzLDYgKzIxMywxNCBAQAogIgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBNaW5kc3BlZWQgQ29tY2VydG8gU3lzdGVtcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElTVF9DT01DRVJUTzEwMD0iCVwKKyAgICAgICAgcGFja2V0LWlhZCAgICAgIGFzaWMgICAgICAgICAgIHJvdXRlciAgICAgICAgICBmZXJvdXRlciAgICAgICAgIFwKKyAgICAgICAgbW9jYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgWHNjYWxlIFN5c3RlbXMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMjMwLDYgKzIzOCw3IEBACiAJJHtMSVNUX1NBfQkJCQkJCQlcCiAJJHtMSVNUX0FSTTd9ICR7TElTVF9BUk05fSAke0xJU1RfQVJNMTB9ICR7TElTVF9BUk0xMX0JCVwKIAkke0xJU1RfcHhhfSAke0xJU1RfaXhwfQkJCQkJCVwKKyAgICAgICAgJHtMSVNUX0NPTUNFUlRPMTAwfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMzM1LDcgKzM0NCw3IEBACiBkbwogCWNhc2UgIiRhcmciIGluCiAJcHBjfDV4eHw1eHh4fDh4eHw4MjIwfDgyNHh8ODI2MHw4M3h4fDg1eHh8NHh4fDd4eHw3NHh4fCBcCi0JYXJtfFNBfEFSTTd8QVJNOXxBUk0xMHxBUk0xMXxweGF8aXhwfCBcCisJYXJtfFNBfEFSTTd8QVJNOXxBUk0xMHxBUk0xMXxweGF8aXhwfENPTUNFUlRPMTAwfCBcCiAJbWljcm9ibGF6ZXwgXAogCW1pcHN8bWlwc19lbHwgXAogCW5pb3N8bmlvczJ8IFwKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYTI4MjM0Mi4uOWNmNzk1MiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEyNSw3ICsxMjUsNyBAQAogQ1JPU1NfQ09NUElMRSA9IHBvd2VycGMtbGludXgtCiBlbmRpZgogaWZlcSAoJChBUkNIKSxhcm0pCi1DUk9TU19DT01QSUxFID0gYXJtLWxpbnV4LQorQ1JPU1NfQ09NUElMRSA9IGFybS1vcGVud3J0LWxpbnV4LQogZW5kaWYKIGlmZXEgKCQoQVJDSCksaTM4NikKIGlmZXEgKCQoSE9TVEFSQ0gpLGkzODYpCkBAIC0yMDYsNiArMjA2LDcgQEAKIExJQlMgKz0gZHJpdmVycy9saWJkcml2ZXJzLmEKIExJQlMgKz0gZHJpdmVycy9uYW5kL2xpYm5hbmQuYQogTElCUyArPSBkcml2ZXJzL25hbmRfbGVnYWN5L2xpYm5hbmRfbGVnYWN5LmEKK0xJQlMgKz0gZHJpdmVycy9jMjAwMF9ldGgvbGliY29tY2VydG9fcGZlLmEKIExJQlMgKz0gZHJpdmVycy9zazk4bGluL2xpYnNrOThsaW4uYQogTElCUyArPSBwb3N0L2xpYnBvc3QuYSBwb3N0L2NwdS9saWJjcHUuYQogTElCUyArPSBjb21tb24vbGliY29tbW9uLmEKQEAgLTIxNSw3ICsyMTYsMTEgQEAKIC5QSE9OWSA6ICQoTElCUykKIAogIyBBZGQgR0NDIGxpYgotUExBVEZPUk1fTElCUyArPSAtTCAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpICQoQ0ZMQUdTKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZWApIC1sZ2NjCisjUExBVEZPUk1fTElCUyArPSAtTCAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpICQoQ0ZMQUdTKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZWApIC1sZ2NjCitQTEFURk9STV9MSUJTICs9IC1MICQoc2hlbGwgZGlybmFtZSBgJChDQykgJChDRkxBR1MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKK2lmbmVxICgkKEFSQ0gpLGFybSkKK1BMQVRGT1JNX0xJQlMgKz0gLWxnY2MKK2VuZGlmCiAKICMgVGhlICJ0b29scyIgYXJlIG5lZWRlZCBlYXJseSwgc28gcHV0IHRoaXMgZmlyc3QKICMgRG9uJ3QgaW5jbHVkZSBzdHVmZiBhbHJlYWR5IGRvbmUgaW4gJChMSUJTKQpAQCAtMjMwLDYgKzIzNSwyNyBAQAogVV9CT09UX05BTkQgPSAkKG9iail1LWJvb3QtbmFuZC5iaW4KIGVuZGlmCiAKKyNGb3IgYzFrIEFSQU0gaW1hZ2VzIG5vIG5lZWQgdG8gZG8gYWRkcmVzcyBjaGFuZ2UKK0NIQU5HRV9BRERSRVNTPXkKK2lmZXEgKCQoQk9BUkQpLGMxa2V2bSkKK0NIQU5HRV9BRERSRVNTPW4KK2VuZGlmCitpZmVxICgkKEJPQVJEKSxjMWthc2ljKQorQ0hBTkdFX0FERFJFU1M9bgorZW5kaWYKK2lmZXEgKCQoQk9BUkQpLGMya2V2bSkKK0NIQU5HRV9BRERSRVNTPW4KK2VuZGlmCitpZmVxICgkKEJPQVJEKSxjMmthc2ljKQorQ0hBTkdFX0FERFJFU1M9bgorZW5kaWYKK2lmZXEgKCQoQk9BUkQpLGMxa21mY24tZXZtKQorQ0hBTkdFX0FERFJFU1M9bgorZW5kaWYKK2lmZXEgKCQoQk9BUkQpLGMxa204MzI0MCkKK0NIQU5HRV9BRERSRVNTPW4KK2VuZGlmCisKIF9fT0JKUyA6PSAkKHN1YnN0ICQob2JqKSwsJChPQkpTKSkKIF9fTElCUyA6PSAkKHN1YnN0ICQob2JqKSwsJChMSUJTKSkKIApAQCAtMjU5LDYgKzI4NSwxNSBAQAogJChvYmopdS1ib290LmRpczoJJChvYmopdS1ib290CiAJCSQoT0JKRFVNUCkgLWQgJDwgPiAkQAogCisKKworJChvYmopdS1ib290X2FyYW0uZWxmOgkkKG9iail1LWJvb3QKK2lmZXEgKCQoQ0hBTkdFX0FERFJFU1MpLHkpCisJCSQoT0JKQ09QWSkgJHtPQkpDRkxBR1N9IC0tY2hhbmdlLWFkZHJlc3NlcyAtMHg3NjBmZmUwMCAkPCAkQAorZWxzZQorCQljcCB1LWJvb3QgdS1ib290X2FyYW0uZWxmCitlbmRpZgorCiAkKG9iail1LWJvb3Q6CQlkZXBlbmQgdmVyc2lvbiAkKFNVQkRJUlMpICQoT0JKUykgJChMSUJTKSAkKExEU0NSSVBUKQogCQlVTkRFRl9TWU09YCQoT0JKRFVNUCkgLXggJChMSUJTKSB8c2VkICAtbiAtZSAncy8uKlwoX191X2Jvb3RfY21kXy4qXCkvLXVcMS9wJ3xzb3J0fHVuaXFgO1wKIAkJY2QgJChMTkRJUikgJiYgJChMRCkgJChMREZMQUdTKSAkJFVOREVGX1NZTSAkKF9fT0JKUykgXApAQCAtMTc3NSw2ICsxODEwLDQ0IEBACiBtcDJ1c2JfY29uZmlnCToJdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBtcDJ1c2IgTlVMTCBhdDkxcm05MjAwCiAKK3RzYXZvNTE1X2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCB0c2F2bzUxNSBtaW5kc3BlZWQgY29tY2VydG8KKwordHNhdm81MTVfbm9yX2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCB0c2F2bzUxNV9ub3IgbWluZHNwZWVkIGNvbWNlcnRvCisKK3RzYXZvNTMwX2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCB0c2F2bzUzMCBtaW5kc3BlZWQgY29tY2VydG8KKwordHNhdm81MzBfbm9yX2NvbmZpZyAgICAgOiAgICAgICB1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgdHNhdm81MzBfbm9yIG1pbmRzcGVlZCBjb21jZXJ0bworCittZWdhbW9tYmFzYTUxNV9jb25maWcJOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgdHNhdm81MTUgbWluZHNwZWVkIGNvbWNlcnRvCisKK21lZ2Ftb21iYXNhNTE1X3NkYzFfY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG1lZ2Ftb21iYXNhNTE1X3NkYzEgbWluZHNwZWVkIGNvbWNlcnRvCisKK21lZ2Ftb21iYXNhNTE1XzI1Nk1fY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG1lZ2Ftb21iYXNhNTE1XzI1Nk0gbWluZHNwZWVkIGNvbWNlcnRvCisKK21hbGluZGlfY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IG1hbGluZGkgbWluZHNwZWVkIGNvbWNlcnRvCisKK2lwb3RzNDgtODAwX2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBpcG90czQ4LTgwMCBtaW5kc3BlZWQgY29tY2VydG8KKworaXBvdHM0OC01MTVfY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjB0IGlwb3RzNDgtNTE1IG1pbmRzcGVlZCBjb21jZXJ0bworCit1ZGV2NTE1X2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCB1ZGV2NTE1IG1pbmRzcGVlZCBjb21jZXJ0bworCit1ZGV2ODAwX2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCB1ZGV2ODAwIG1pbmRzcGVlZCBjb21jZXJ0bworCituYWlyb2JpX2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTIwdCBuYWlyb2JpIG1pbmRzcGVlZCBjb21jZXJ0bwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIEFSTSBJbnRlZ3JhdG9yIGJvYXJkcyAtIHNlZSBkb2MvUkVBRE1FLWludGVncmF0b3IgZm9yIG1vcmUgaW5mby4KQEAgLTIwMzcsNiArMjExMCw0MTkgQEAKIG9tYXAyNDIwaDRfY29uZmlnIDogICAgdW5jb25maWcKIAlAJChNS0NPTkZJRykgJChAOl9jb25maWc9KSBhcm0gYXJtMTEzNiBvbWFwMjQyMGg0CiAKK3N1cGVybW9tYmFzYTkxMF9jb25maWcJOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTExMzYgc3VwZXJtb21iYXNhOTEwIG1pbmRzcGVlZCBjb21jZXJ0bworCittYXRpc3NlX2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtMTEzNiBzdXBlcm1vbWJhc2E5MTAgbWluZHNwZWVkIGNvbWNlcnRvCisKK3h0cmFjdF9lYiA9ICQoc3Vic3QgLWViLCwkKHN1YnN0IF9jb25maWcsLCQxKSkKKworcGFja2V0LWlhZC1lYl9jb25maWcgXAorcGFja2V0LWlhZF9jb25maWcJOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQGlmIFsgIiQoZmluZHN0cmluZyBlYl8sICRAKSIgXSA7IHRoZW4gXAorCQllY2hvICIjZGVmaW5lIEJFOF9NT0RFIDEiID4+ICQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIuLi4gY29uZmlndXJlZCBmb3IgcGFja2V0LWlhZC1lYiI7IFwKKwlmaTsKKwlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF9lYiwkQCkgYXJtIGFybTExMzYgcGFja2V0LWlhZCBtaW5kc3BlZWQgY29tY2VydG8KKwlAZWNobyAiI2RlZmluZSBDRkdfQVJNX0NMT0NLICAgICAgNDUwMDAwMDAwICAgICAvKiA0NTAgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1TUh6ICovIiA+PiQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5oCisJQGlmIFsgIiQoZmluZHN0cmluZyBlYl8sICRAKSIgXSA7IHRoZW4gXAorCQllY2hvICJCRThfTU9ERSA9IHkiID4+ICQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5tayA7IFwKKwlmaTsKKworcGFja2V0LWlhZC1uYW5kLWViX2NvbmZpZyBcCitwYWNrZXQtaWFkLW5hbmRfY29uZmlnCToJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBpZiBbICIkKGZpbmRzdHJpbmcgZWJfLCAkQCkiIF0gOyB0aGVuIFwKKwkJZWNobyAiI2RlZmluZSBCRThfTU9ERSAxIiA+PiAkKFRPUERJUikvaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiLi4uIGNvbmZpZ3VyZWQgZm9yIHBhY2tldC1pYWQtbmFuZC1lYiI7IFwKKwlmaTsKKwlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF9lYiwkQCkgYXJtIGFybTExMzYgcGFja2V0LWlhZCBtaW5kc3BlZWQgY29tY2VydG8KKwlAZWNobyAiI2RlZmluZSBDRkdfQVJNX0NMT0NLICAgICAgNDUwMDAwMDAwICAgICAvKiA0NTAgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1TUh6ICovIiA+PiQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5oCisJQGlmIFsgIiQoZmluZHN0cmluZyBlYl8sICRAKSIgXSA7IHRoZW4gXAorCQllY2hvICJCRThfTU9ERSA9IHkiID4+ICQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5tayA7IFwKKwlmaTsKKworcGFja2V0LWlhZC1jNTBfY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm0xMTM2IHBhY2tldC1pYWQgbWluZHNwZWVkIGNvbWNlcnRvCisKK2FzaWMtZWJfY29uZmlnIFwKK2FzaWNfY29uZmlnCToJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBpZiBbICIkKGZpbmRzdHJpbmcgZWJfLCAkQCkiIF0gOyB0aGVuIFwKKwkJZWNobyAiI2RlZmluZSBCRThfTU9ERSAxIiA+PiAkKFRPUERJUikvaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiLi4uIGNvbmZpZ3VyZWQgZm9yIGFzaWMtZWIiOyBcCisJZmk7CisJQCQoTUtDT05GSUcpIC1hICQoY2FsbCB4dHJhY3RfZWIsJEApIGFybSBhcm0xMTM2IGFzaWMgbWluZHNwZWVkIGNvbWNlcnRvCisJQGlmIFsgIiQoZmluZHN0cmluZyBlYl8sICRAKSIgXSA7IHRoZW4gXAorCQllY2hvICJCRThfTU9ERSA9IHkiID4+ICQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5tayA7IFwKKwlmaTsKKworcm91dGVyLWViX2NvbmZpZyBcCityb3V0ZXJfY29uZmlnCToJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBpZiBbICIkKGZpbmRzdHJpbmcgZWJfLCAkQCkiIF0gOyB0aGVuIFwKKwkJZWNobyAiI2RlZmluZSBCRThfTU9ERSAxIiA+PiAkKFRPUERJUikvaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiLi4uIGNvbmZpZ3VyZWQgZm9yIHJvdXRlci1lYiI7IFwKKwlmaTsKKwlAJChNS0NPTkZJRykgLWEgJChjYWxsIHh0cmFjdF9lYiwkQCkgYXJtIGFybTExMzYgcm91dGVyIG1pbmRzcGVlZCBjb21jZXJ0bworCUBlY2hvICIjZGVmaW5lIENGR19BUk1fQ0xPQ0sgICAgICA0NTAwMDAwMDAgICAgIC8qIDQ1MCBNSHosIG11c3QgYmUgbXVsdGlwbGUgb2YgMjVNSHogKi8iID4+JChUT1BESVIpL2luY2x1ZGUvY29uZmlnLmgKKwlAaWYgWyAiJChmaW5kc3RyaW5nIGViXywgJEApIiBdIDsgdGhlbiBcCisJCWVjaG8gIkJFOF9NT0RFID0geSIgPj4gJChUT1BESVIpL2luY2x1ZGUvY29uZmlnLm1rIDsgXAorCWZpOworCityb3V0ZXItbmFuZC1lYl9jb25maWcgXAorcm91dGVyLW5hbmRfY29uZmlnCToJdW5jb25maWcKKwlAbWtkaXIgLXAgJChvYmopaW5jbHVkZQorCUBpZiBbICIkKGZpbmRzdHJpbmcgZWJfLCAkQCkiIF0gOyB0aGVuIFwKKwkJZWNobyAiI2RlZmluZSBCRThfTU9ERSAxIiA+PiAkKFRPUERJUikvaW5jbHVkZS9jb25maWcuaCA7IFwKKwkJZWNobyAiLi4uIGNvbmZpZ3VyZWQgZm9yIHJvdXRlci1uYW5kLWViIjsgXAorCWZpOworCUAkKE1LQ09ORklHKSAtYSAkKGNhbGwgeHRyYWN0X2ViLCRAKSBhcm0gYXJtMTEzNiByb3V0ZXIgbWluZHNwZWVkIGNvbWNlcnRvCisJQGVjaG8gIiNkZWZpbmUgQ0ZHX0FSTV9DTE9DSyAgICAgIDQ1MDAwMDAwMCAgICAgLyogNDUwIE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAyNU1IeiAqLyIgPj4kKFRPUERJUikvaW5jbHVkZS9jb25maWcuaAorCUBpZiBbICIkKGZpbmRzdHJpbmcgZWJfLCAkQCkiIF0gOyB0aGVuIFwKKwkJZWNobyAiQkU4X01PREUgPSB5IiA+PiAkKFRPUERJUikvaW5jbHVkZS9jb25maWcubWsgOyBcCisJZmk7CisKK3JvdXRlci1jNTBfY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm0xMTM2IHJvdXRlciBtaW5kc3BlZWQgY29tY2VydG8KKworZmVyb3V0ZXJfY29uZmlnCToJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBhcm0xMTM2IGZlcm91dGVyIG1pbmRzcGVlZCBjb21jZXJ0bworCittb2NhX2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtMTEzNiBtb2NhIG1pbmRzcGVlZCBjb21jZXJ0bworCitwYWNrZXQtaWFkLWViX2FyYW1fY29uZmlnIFwKK3BhY2tldC1pYWRfYXJhbV9jb25maWcJOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQGlmIFsgIiQoZmluZHN0cmluZyBlYl8sICRAKSIgXSA7IHRoZW4gXAorCQllY2hvICIjZGVmaW5lIEJFOF9NT0RFIDEiID4+ICQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIuLi4gY29uZmlndXJlZCBmb3IgcGFja2V0LWlhZC1lYl9hcmFtIjsgXAorCWZpOworCUAkKE1LQ09ORklHKSAtYSAkKGNhbGwgeHRyYWN0X2ViLCRAKSBhcm0gYXJtMTEzNiBwYWNrZXQtaWFkIG1pbmRzcGVlZCBjb21jZXJ0bworCUBlY2hvICIjZGVmaW5lIENGR19BUk1fQ0xPQ0sgICAgICA0NTAwMDAwMDAgICAgIC8qIDQ1MCBNSHosIG11c3QgYmUgbXVsdGlwbGUgb2YgMjVNSHogKi8iID4+JChUT1BESVIpL2luY2x1ZGUvY29uZmlnLmgKKwlAaWYgWyAiJChmaW5kc3RyaW5nIGViXywgJEApIiBdIDsgdGhlbiBcCisJCWVjaG8gIkJFOF9NT0RFID0geSIgPj4gJChUT1BESVIpL2luY2x1ZGUvY29uZmlnLm1rIDsgXAorCWZpOworCithc2ljLWViX2FyYW1fY29uZmlnIFwKK2FzaWNfYXJhbV9jb25maWcJOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQGlmIFsgIiQoZmluZHN0cmluZyBlYl8sICRAKSIgXSA7IHRoZW4gXAorCQllY2hvICIjZGVmaW5lIEJFOF9NT0RFIDEiID4+ICQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIuLi4gY29uZmlndXJlZCBmb3IgYXNpYy1lYl9hcmFtIjsgXAorCWZpOworCUAkKE1LQ09ORklHKSAtYSAkKGNhbGwgeHRyYWN0X2ViLCRAKSBhcm0gYXJtMTEzNiBhc2ljIG1pbmRzcGVlZCBjb21jZXJ0bworCUBpZiBbICIkKGZpbmRzdHJpbmcgZWJfLCAkQCkiIF0gOyB0aGVuIFwKKwkJZWNobyAiQkU4X01PREUgPSB5IiA+PiAkKFRPUERJUikvaW5jbHVkZS9jb25maWcubWsgOyBcCisJZmk7CisKK3JvdXRlci1lYl9hcmFtX2NvbmZpZyBcCityb3V0ZXJfYXJhbV9jb25maWcJOgl1bmNvbmZpZworCUBta2RpciAtcCAkKG9iailpbmNsdWRlCisJQGlmIFsgIiQoZmluZHN0cmluZyBlYl8sICRAKSIgXSA7IHRoZW4gXAorCQllY2hvICIjZGVmaW5lIEJFOF9NT0RFIDEiID4+ICQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5oIDsgXAorCQllY2hvICIuLi4gY29uZmlndXJlZCBmb3Igcm91dGVyLWViX2FyYW0iOyBcCisJZmk7CisJQCQoTUtDT05GSUcpIC1hICQoY2FsbCB4dHJhY3RfZWIsJEApIGFybSBhcm0xMTM2IHJvdXRlciBtaW5kc3BlZWQgY29tY2VydG8KKwlAZWNobyAiI2RlZmluZSBDRkdfQVJNX0NMT0NLICAgICAgNDUwMDAwMDAwICAgICAvKiA0NTAgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1TUh6ICovIiA+PiQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5oCisJQGlmIFsgIiQoZmluZHN0cmluZyBlYl8sICRAKSIgXSA7IHRoZW4gXAorCQllY2hvICJCRThfTU9ERSA9IHkiID4+ICQoVE9QRElSKS9pbmNsdWRlL2NvbmZpZy5tayA7IFwKKwlmaTsKKworZmVyb3V0ZXJfYXJhbV9jb25maWcJOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTExMzYgZmVyb3V0ZXIgbWluZHNwZWVkIGNvbWNlcnRvCisKK21vY2FfYXJhbV9jb25maWcJOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTExMzYgbW9jYSBtaW5kc3BlZWQgY29tY2VydG8KKworcGFja2V0LWlhZC1jNTBfYXJhbV9jb25maWcJOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTExMzYgcGFja2V0LWlhZCBtaW5kc3BlZWQgY29tY2VydG8KKworcm91dGVyLWM1MF9hcmFtX2NvbmZpZwk6CXVuY29uZmlnCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtMTEzNiByb3V0ZXIgbWluZHNwZWVkIGNvbWNlcnRvCisKK004MjEzNEc6CisJc2VkIC1pICcvQ0ZHX0FSTV9DTE9DSy9kJyAkKFRPUERJUikvaW5jbHVkZS9jb25maWcuaAorCWVjaG8gIiNkZWZpbmUgQ0ZHX0FSTV9DTE9DSyAgICAgIDQwMDAwMDAwMCAgICAgLyogNDAwIE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAyNU1IeiAqLyIgPj4kKFRPUERJUikvaW5jbHVkZS9jb25maWcuaAorCWVjaG8gIiNkZWZpbmUgTTgyMTM0RyAgICAgICAgICAgIDEiID4+JChUT1BESVIpL2luY2x1ZGUvY29uZmlnLmgKKworcGFja2V0LWlhZC1lYi1NODIxMzRHX2NvbmZpZyA6IHBhY2tldC1pYWQtZWJfY29uZmlnIE04MjEzNEcKK3BhY2tldC1pYWQtTTgyMTM0R19jb25maWcgOiBwYWNrZXQtaWFkX2NvbmZpZyBNODIxMzRHCitwYWNrZXQtaWFkLW5hbmQtZWItTTgyMTM0R19jb25maWcgOiBwYWNrZXQtaWFkLW5hbmQtZWJfY29uZmlnIE04MjEzNEcKK3BhY2tldC1pYWQtbmFuZC1NODIxMzRHX2NvbmZpZyA6IHBhY2tldC1pYWQtbmFuZF9jb25maWcgTTgyMTM0RworcGFja2V0LWlhZC1lYl9hcmFtLU04MjEzNEdfY29uZmlnIDogcGFja2V0LWlhZC1lYl9hcmFtX2NvbmZpZyBNODIxMzRHCitwYWNrZXQtaWFkX2FyYW0tTTgyMTM0R19jb25maWcJOiAgcGFja2V0LWlhZF9hcmFtX2NvbmZpZyBNODIxMzRHCityb3V0ZXItZWItTTgyMTM0R19jb25maWcgOiByb3V0ZXItZWJfY29uZmlnIE04MjEzNEcKK3JvdXRlci1NODIxMzRHX2NvbmZpZyA6IHJvdXRlcl9jb25maWcgTTgyMTM0Rworcm91dGVyLW5hbmQtZWItTTgyMTM0R19jb25maWcgOiByb3V0ZXItbmFuZC1lYl9jb25maWcgTTgyMTM0Rworcm91dGVyLW5hbmQtTTgyMTM0R19jb25maWcgOiByb3V0ZXItbmFuZF9jb25maWcgTTgyMTM0Rworcm91dGVyLWViX2FyYW0tTTgyMTM0R19jb25maWcgOiByb3V0ZXItZWJfYXJhbV9jb25maWcgTTgyMTM0Rworcm91dGVyX2FyYW0tTTgyMTM0R19jb25maWcgOiByb3V0ZXJfYXJhbV9jb25maWcgTTgyMTM0RworCisKK004MzI2M0c6CisJZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvbTgzMjZYRy5oPiIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENPTUNFUlRPX1BBUlRfTk8gXCJNODMyNjNHXCIiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7CisKK004MzI2Mkc6CisJZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvbTgzMjZYRy5oPiIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENPTUNFUlRPX1BBUlRfTk8gXCJNODMyNjJHXCIiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7CisKK004MzI2MUc6CisJZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvbTgzMjZYRy5oPiIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENPTUNFUlRPX1BBUlRfTk8gXCJNODMyNjFHXCIiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7CisKK004MzE2MEc6CisJZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvbTgzMjRYRy5oPiIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENGR19DTEsgQ0ZHX0NMS182MDBfMTY1XzMzMCIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENPTUNFUlRPX1BBUlRfTk8gXCJNODMxNjBHXCIiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7CisKK004MzI1Mkc6CisJZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvbTgzMjVYRy5oPiIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENPTUNFUlRPX1BBUlRfTk8gXCJNODMyNTJHXCIiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7CisKK004MzI1MUc6CisJZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvbTgzMjVYRy5oPiIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENPTUNFUlRPX1BBUlRfTk8gXCJNODMyNTFHXCIiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7CisKK004MzI0Mkc6CisJZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvbTgzMjRYRy5oPiIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENGR19DTEsgQ0ZHX0NMS180NTBfMTY1XzMzMCIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENPTUNFUlRPX1BBUlRfTk8gXCJNODMyNDJHXCIiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7CisKK004MzI0MUc6CisJZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvbTgzMjRYRy5oPiIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENGR19DTEsgQ0ZHX0NMS180NTBfMTY1XzMzMCIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENPTUNFUlRPX1BBUlRfTk8gXCJNODMyNDFHXCIiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7CisKK004MzI0MEc6CisJZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvbTgzMjRYRy5oPiIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENGR19DTEsgQ0ZHX0NMS180MDBfMTY1XzMzMCIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKwllY2hvICIjZGVmaW5lIENPTUNFUlRPX1BBUlRfTk8gXCJNODMyNDBHXCIiID4+ICQob2JqKWluY2x1ZGUvY29uZmlnLmg7CisKK25vZnBwOgorCWVjaG8gIiNkZWZpbmUgQ09ORklHX05PRlBQX01PREUgMSIgPj4gJChvYmopaW5jbHVkZS9jb25maWcuaDsKKworZWI6CisJQG1rZGlyIC1wICQob2JqKWluY2x1ZGUKKwlAZWNobyAiI2RlZmluZSBCRThfTU9ERSAxIiA+PiAkKG9iailpbmNsdWRlL2NvbmZpZy5oIDsKKwlAZWNobyAiLi4uIGNvbmZpZ3VyZWQgZm9yIGMxa2V2bS1lYiI7CisJQGVjaG8gIkJFOF9NT0RFID0geSIgPj4gJChvYmopaW5jbHVkZS9jb25maWcubWsgOworCitfYzFrZXZtX2NvbmZpZzoKKwlAZWNobyAiVEVYVF9CQVNFID0gMHg4NDAwMDAwMCIgPiQob2JqKWJvYXJkL21pbmRzcGVlZC9jMWtldm0vY29uZmlnLm1rOworCUAkKE1LQ09ORklHKSAtYSBjMWtldm0gYXJtIGFybTExMzYgYzFrZXZtIG1pbmRzcGVlZCBjb21jZXJ0bworCitfYzFrZXZtLW5hbmRfY29uZmlnOgorCUBlY2hvICJURVhUX0JBU0UgPSAweDg0MDAwMDAwIiA+JChvYmopYm9hcmQvbWluZHNwZWVkL2Mxa2V2bS9jb25maWcubWs7CisJQCQoTUtDT05GSUcpIC1hIGMxa2V2bS1uYW5kIGFybSBhcm0xMTM2IGMxa2V2bSBtaW5kc3BlZWQgY29tY2VydG8KKworX2Mxa2V2bV9hcmFtX2NvbmZpZzoKKwlAZWNobyAiVEVYVF9CQVNFID0gMHgwQTAwNjAwMCIgPiQob2JqKWJvYXJkL21pbmRzcGVlZC9jMWtldm0vY29uZmlnLm1rOworCUAkKE1LQ09ORklHKSAtYSBjMWtldm1fYXJhbSBhcm0gYXJtMTEzNiBjMWtldm0gbWluZHNwZWVkIGNvbWNlcnRvCisKK2Mxa2V2bV9jb25maWc6IHVuY29uZmlnIE04MzI2M0cgX2Mxa2V2bV9jb25maWcKK2Mxa2V2bS1NODMyNjNHX2NvbmZpZzogdW5jb25maWcgTTgzMjYzRyBfYzFrZXZtX2NvbmZpZworYzFrZXZtLU04MzI2MkdfY29uZmlnOiB1bmNvbmZpZyBNODMyNjJHIF9jMWtldm1fY29uZmlnCitjMWtldm0tTTgzMjYxR19jb25maWc6IHVuY29uZmlnIE04MzI2MUcgX2Mxa2V2bV9jb25maWcKK2Mxa2V2bS1NODMxNjBHX2NvbmZpZzogdW5jb25maWcgTTgzMTYwRyBfYzFrZXZtX2NvbmZpZworYzFrZXZtLU04MzI1MkdfY29uZmlnOiB1bmNvbmZpZyBNODMyNTJHIF9jMWtldm1fY29uZmlnCitjMWtldm0tTTgzMjUxR19jb25maWc6IHVuY29uZmlnIE04MzI1MUcgX2Mxa2V2bV9jb25maWcKK2Mxa2V2bS1NODMyNDJHX2NvbmZpZzogdW5jb25maWcgTTgzMjQyRyBfYzFrZXZtX2NvbmZpZworYzFrZXZtLU04MzI0MUdfY29uZmlnOiB1bmNvbmZpZyBNODMyNDFHIF9jMWtldm1fY29uZmlnCitjMWtldm0tTTgzMjQwR19jb25maWc6IHVuY29uZmlnIE04MzI0MEcgX2Mxa2V2bV9jb25maWcKKworYzFrZXZtLW5hbmRfY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIF9jMWtldm0tbmFuZF9jb25maWcKKworYzFrZXZtX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIF9jMWtldm1fYXJhbV9jb25maWcKK2Mxa2V2bS1NODMyNjNHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIF9jMWtldm1fYXJhbV9jb25maWcKK2Mxa2V2bS1NODMyNjJHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNjJHIF9jMWtldm1fYXJhbV9jb25maWcKK2Mxa2V2bS1NODMyNjFHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNjFHIF9jMWtldm1fYXJhbV9jb25maWcKK2Mxa2V2bS1NODMxNjBHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMxNjBHIF9jMWtldm1fYXJhbV9jb25maWcKK2Mxa2V2bS1NODMyNTJHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNTJHIF9jMWtldm1fYXJhbV9jb25maWcKK2Mxa2V2bS1NODMyNTFHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNTFHIF9jMWtldm1fYXJhbV9jb25maWcKK2Mxa2V2bS1NODMyNDJHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNDJHIF9jMWtldm1fYXJhbV9jb25maWcKK2Mxa2V2bS1NODMyNDFHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNDFHIF9jMWtldm1fYXJhbV9jb25maWcKK2Mxa2V2bS1NODMyNDBHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIF9jMWtldm1fYXJhbV9jb25maWcKKworYzFrZXZtLW5vZnBwX2NvbmZpZzogdW5jb25maWcgTTgzMjYzRyBub2ZwcCBfYzFrZXZtX2NvbmZpZworYzFrZXZtLU04MzI2M0ctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIG5vZnBwIF9jMWtldm1fY29uZmlnCitjMWtldm0tTTgzMjYyRy1ub2ZwcF9jb25maWc6IHVuY29uZmlnIE04MzI2Mkcgbm9mcHAgX2Mxa2V2bV9jb25maWcKK2Mxa2V2bS1NODMyNjFHLW5vZnBwX2NvbmZpZzogdW5jb25maWcgTTgzMjYxRyBub2ZwcCBfYzFrZXZtX2NvbmZpZworYzFrZXZtLU04MzE2MEctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMxNjBHIG5vZnBwIF9jMWtldm1fY29uZmlnCitjMWtldm0tTTgzMjUyRy1ub2ZwcF9jb25maWc6IHVuY29uZmlnIE04MzI1Mkcgbm9mcHAgX2Mxa2V2bV9jb25maWcKK2Mxa2V2bS1NODMyNTFHLW5vZnBwX2NvbmZpZzogdW5jb25maWcgTTgzMjUxRyBub2ZwcCBfYzFrZXZtX2NvbmZpZworYzFrZXZtLU04MzI0Mkctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNDJHIG5vZnBwIF9jMWtldm1fY29uZmlnCitjMWtldm0tTTgzMjQxRy1ub2ZwcF9jb25maWc6IHVuY29uZmlnIE04MzI0MUcgbm9mcHAgX2Mxa2V2bV9jb25maWcKK2Mxa2V2bS1NODMyNDBHLW5vZnBwX2NvbmZpZzogdW5jb25maWcgTTgzMjQwRyBub2ZwcCBfYzFrZXZtX2NvbmZpZworCitjMWtldm0tbmFuZC1ub2ZwcF9jb25maWc6IHVuY29uZmlnIE04MzI2M0cgbm9mcHAgX2Mxa2V2bS1uYW5kX2NvbmZpZworCitjMWtldm0tZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIF9jMWtldm1fY29uZmlnIGViCitjMWtldm0tTTgzMjYzRy1lYl9jb25maWc6IHVuY29uZmlnIE04MzI2M0cgX2Mxa2V2bV9jb25maWcgZWIKK2Mxa2V2bS1NODMyNjJHLWViX2NvbmZpZzogdW5jb25maWcgTTgzMjYyRyBfYzFrZXZtX2NvbmZpZyBlYgorYzFrZXZtLU04MzI2MUctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNjFHIF9jMWtldm1fY29uZmlnIGViCitjMWtldm0tTTgzMTYwRy1lYl9jb25maWc6IHVuY29uZmlnIE04MzE2MEcgX2Mxa2V2bV9jb25maWcgZWIKK2Mxa2V2bS1NODMyNTJHLWViX2NvbmZpZzogdW5jb25maWcgTTgzMjUyRyBfYzFrZXZtX2NvbmZpZyBlYgorYzFrZXZtLU04MzI1MUctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNTFHIF9jMWtldm1fY29uZmlnIGViCitjMWtldm0tTTgzMjQyRy1lYl9jb25maWc6IHVuY29uZmlnIE04MzI0MkcgX2Mxa2V2bV9jb25maWcgZWIKK2Mxa2V2bS1NODMyNDFHLWViX2NvbmZpZzogdW5jb25maWcgTTgzMjQxRyBfYzFrZXZtX2NvbmZpZyBlYgorYzFrZXZtLU04MzI0MEctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIF9jMWtldm1fY29uZmlnIGViCisKK2Mxa2V2bS1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjYzRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCitjMWtldm0tTTgzMjYzRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjYzRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCitjMWtldm0tTTgzMjYyRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjYyRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCitjMWtldm0tTTgzMjYxRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjYxRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCitjMWtldm0tTTgzMTYwRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMTYwRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCitjMWtldm0tTTgzMjUyRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjUyRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCitjMWtldm0tTTgzMjUxRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjUxRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCitjMWtldm0tTTgzMjQyRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjQyRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCitjMWtldm0tTTgzMjQxRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjQxRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCitjMWtldm0tTTgzMjQwRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjQwRyBfYzFrZXZtX2FyYW1fY29uZmlnIGViCisKK2Mxa2V2bS1uYW5kLWViX2NvbmZpZzogdW5jb25maWcgTTgzMjYzRyBfYzFrZXZtLW5hbmRfY29uZmlnIGViCisKK2Mxa2FzaWNfY29uZmlnCToJdW5jb25maWcKKwlAZWNobyAiVEVYVF9CQVNFID0gMHg4NDAwMDAwMCIgPiQob2JqKWJvYXJkL21pbmRzcGVlZC9jMWthc2ljL2NvbmZpZy5tazsKKwlAJChNS0NPTkZJRykgLWEgYzFrYXNpYyBhcm0gYXJtMTEzNiBjMWthc2ljIG1pbmRzcGVlZCBjb21jZXJ0bworCitjMWthc2ljLW5hbmRfY29uZmlnCToJdW5jb25maWcKKwlAZWNobyAiVEVYVF9CQVNFID0gMHg4NDAwMDAwMCIgPiQob2JqKWJvYXJkL21pbmRzcGVlZC9jMWthc2ljL2NvbmZpZy5tazsKKwlAJChNS0NPTkZJRykgLWEgYzFrYXNpYyBhcm0gYXJtMTEzNiBjMWthc2ljIG1pbmRzcGVlZCBjb21jZXJ0bworCitjMWthc2ljX2FyYW1fY29uZmlnCToJdW5jb25maWcKKwlAZWNobyAiVEVYVF9CQVNFID0gMHgwQTAwNjAwMCIgPiQob2JqKWJvYXJkL21pbmRzcGVlZC9jMWthc2ljL2NvbmZpZy5tazsKKwlAJChNS0NPTkZJRykgLWEgYzFrYXNpYyBhcm0gYXJtMTEzNiBjMWthc2ljIG1pbmRzcGVlZCBjb21jZXJ0bworCitfYzFrbWZjbi1ldm1fY29uZmlnOgorCUBlY2hvICJURVhUX0JBU0UgPSAweDg0MDAwMDAwIiA+JChvYmopYm9hcmQvbWluZHNwZWVkL2Mxa21mY24tZXZtL2NvbmZpZy5tazsKKwlAJChNS0NPTkZJRykgLWEgYzFrbWZjbi1ldm0gYXJtIGFybTExMzYgYzFrbWZjbi1ldm0gbWluZHNwZWVkIGNvbWNlcnRvCisKK19jMWttZmNuLWV2bS1uYW5kX2NvbmZpZzoKKwlAZWNobyAiVEVYVF9CQVNFID0gMHg4NDAwMDAwMCIgPiQob2JqKWJvYXJkL21pbmRzcGVlZC9jMWttZmNuLWV2bS9jb25maWcubWs7CisJQCQoTUtDT05GSUcpIC1hIGMxa21mY24tZXZtLW5hbmQgYXJtIGFybTExMzYgYzFrbWZjbi1ldm0gbWluZHNwZWVkIGNvbWNlcnRvCisKK19jMWttZmNuLWV2bV9hcmFtX2NvbmZpZzoKKwlAZWNobyAiVEVYVF9CQVNFID0gMHgwQTAwNjAwMCIgPiQob2JqKWJvYXJkL21pbmRzcGVlZC9jMWttZmNuLWV2bS9jb25maWcubWs7CisJQCQoTUtDT05GSUcpIC1hIGMxa21mY24tZXZtX2FyYW0gYXJtIGFybTExMzYgYzFrbWZjbi1ldm0gbWluZHNwZWVkIGNvbWNlcnRvCisKK2Mxa21mY24tZXZtX2NvbmZpZzogdW5jb25maWcgTTgzMjYzRyBfYzFrbWZjbi1ldm1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNjNHX2NvbmZpZzogdW5jb25maWcgTTgzMjYzRyBfYzFrbWZjbi1ldm1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNjJHX2NvbmZpZzogdW5jb25maWcgTTgzMjYyRyBfYzFrbWZjbi1ldm1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNjFHX2NvbmZpZzogdW5jb25maWcgTTgzMjYxRyBfYzFrbWZjbi1ldm1fY29uZmlnCitjMWttZmNuLWV2bS1NODMxNjBHX2NvbmZpZzogdW5jb25maWcgTTgzMTYwRyBfYzFrbWZjbi1ldm1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNTJHX2NvbmZpZzogdW5jb25maWcgTTgzMjUyRyBfYzFrbWZjbi1ldm1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNTFHX2NvbmZpZzogdW5jb25maWcgTTgzMjUxRyBfYzFrbWZjbi1ldm1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNDJHX2NvbmZpZzogdW5jb25maWcgTTgzMjQyRyBfYzFrbWZjbi1ldm1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNDFHX2NvbmZpZzogdW5jb25maWcgTTgzMjQxRyBfYzFrbWZjbi1ldm1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNDBHX2NvbmZpZzogdW5jb25maWcgTTgzMjQwRyBfYzFrbWZjbi1ldm1fY29uZmlnCisKK2Mxa21mY24tZXZtLW5hbmRfY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIF9jMWttZmNuLWV2bS1uYW5kX2NvbmZpZworCitjMWttZmNuLWV2bV9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjYzRyBfYzFrbWZjbi1ldm1fYXJhbV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI2M0dfYXJhbV9jb25maWc6IHVuY29uZmlnIE04MzI2M0cgX2Mxa21mY24tZXZtX2FyYW1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNjJHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNjJHIF9jMWttZmNuLWV2bV9hcmFtX2NvbmZpZworYzFrbWZjbi1ldm0tTTgzMjYxR19hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjYxRyBfYzFrbWZjbi1ldm1fYXJhbV9jb25maWcKK2Mxa21mY24tZXZtLU04MzE2MEdfYXJhbV9jb25maWc6IHVuY29uZmlnIE04MzE2MEcgX2Mxa21mY24tZXZtX2FyYW1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNTJHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNTJHIF9jMWttZmNuLWV2bV9hcmFtX2NvbmZpZworYzFrbWZjbi1ldm0tTTgzMjUxR19hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjUxRyBfYzFrbWZjbi1ldm1fYXJhbV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI0MkdfYXJhbV9jb25maWc6IHVuY29uZmlnIE04MzI0MkcgX2Mxa21mY24tZXZtX2FyYW1fY29uZmlnCitjMWttZmNuLWV2bS1NODMyNDFHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNDFHIF9jMWttZmNuLWV2bV9hcmFtX2NvbmZpZworYzFrbWZjbi1ldm0tTTgzMjQwR19hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjQwRyBfYzFrbWZjbi1ldm1fYXJhbV9jb25maWcKKworYzFrbWZjbi1ldm0tbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI2M0ctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI2Mkctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNjJHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI2MUctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNjFHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKK2Mxa21mY24tZXZtLU04MzE2MEctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMxNjBHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI1Mkctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNTJHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI1MUctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNTFHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI0Mkctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNDJHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI0MUctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNDFHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKK2Mxa21mY24tZXZtLU04MzI0MEctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIG5vZnBwIF9jMWttZmNuLWV2bV9jb25maWcKKworYzFrbWZjbi1ldm0tZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI2M0ctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI2MkctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNjJHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI2MUctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNjFHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzE2MEctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMxNjBHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI1MkctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNTJHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI1MUctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNTFHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI0MkctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNDJHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI0MUctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNDFHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI0MEctZWJfY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIF9jMWttZmNuLWV2bV9jb25maWcgZWIKKworYzFrbWZjbi1ldm0tbmFuZC1ub2ZwcF9jb25maWc6IHVuY29uZmlnIE04MzI2M0cgbm9mcHAgX2Mxa21mY24tZXZtLW5hbmRfY29uZmlnCisKK2Mxa21mY24tZXZtLWViX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNjNHIF9jMWttZmNuLWV2bV9hcmFtX2NvbmZpZyBlYgorYzFrbWZjbi1ldm0tTTgzMjYzRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjYzRyBfYzFrbWZjbi1ldm1fYXJhbV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI2MkctZWJfYXJhbV9jb25maWc6IHVuY29uZmlnIE04MzI2MkcgX2Mxa21mY24tZXZtX2FyYW1fY29uZmlnIGViCitjMWttZmNuLWV2bS1NODMyNjFHLWViX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNjFHIF9jMWttZmNuLWV2bV9hcmFtX2NvbmZpZyBlYgorYzFrbWZjbi1ldm0tTTgzMTYwRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMTYwRyBfYzFrbWZjbi1ldm1fYXJhbV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI1MkctZWJfYXJhbV9jb25maWc6IHVuY29uZmlnIE04MzI1MkcgX2Mxa21mY24tZXZtX2FyYW1fY29uZmlnIGViCitjMWttZmNuLWV2bS1NODMyNTFHLWViX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNTFHIF9jMWttZmNuLWV2bV9hcmFtX2NvbmZpZyBlYgorYzFrbWZjbi1ldm0tTTgzMjQyRy1lYl9hcmFtX2NvbmZpZzogdW5jb25maWcgTTgzMjQyRyBfYzFrbWZjbi1ldm1fYXJhbV9jb25maWcgZWIKK2Mxa21mY24tZXZtLU04MzI0MUctZWJfYXJhbV9jb25maWc6IHVuY29uZmlnIE04MzI0MUcgX2Mxa21mY24tZXZtX2FyYW1fY29uZmlnIGViCitjMWttZmNuLWV2bS1NODMyNDBHLWViX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIF9jMWttZmNuLWV2bV9hcmFtX2NvbmZpZyBlYgorCitfYzFrbTgzMjQwX2NvbmZpZzoKKwlAZWNobyAiVEVYVF9CQVNFID0gMHg4NDAwMDAwMCIgPiQob2JqKWJvYXJkL21pbmRzcGVlZC9jMWttODMyNDAvY29uZmlnLm1rOworCUAkKE1LQ09ORklHKSAtYSBjMWttODMyNDAgYXJtIGFybTExMzYgYzFrbTgzMjQwIG1pbmRzcGVlZCBjb21jZXJ0bworCitfYzFrbTgzMjQwLW5hbmRfY29uZmlnOgorCUBlY2hvICJURVhUX0JBU0UgPSAweDg0MDAwMDAwIiA+JChvYmopYm9hcmQvbWluZHNwZWVkL2Mxa204MzI0MC9jb25maWcubWs7CisJQCQoTUtDT05GSUcpIC1hIGMxa204MzI0MC1uYW5kIGFybSBhcm0xMTM2IGMxa204MzI0MCBtaW5kc3BlZWQgY29tY2VydG8KKworX2Mxa204MzI0MF9hcmFtX2NvbmZpZzoKKwlAZWNobyAiVEVYVF9CQVNFID0gMHgwQTAwNjAwMCIgPiQob2JqKWJvYXJkL21pbmRzcGVlZC9jMWttODMyNDAvY29uZmlnLm1rOworCUAkKE1LQ09ORklHKSAtYSBjMWttODMyNDBfYXJhbSBhcm0gYXJtMTEzNiBjMWttODMyNDAgbWluZHNwZWVkIGNvbWNlcnRvCisKKworYzFrbTgzMjQwX2NvbmZpZzogdW5jb25maWcgTTgzMjQwRyBfYzFrbTgzMjQwX2NvbmZpZworYzFrbTgzMjQwLU04MzE2MEdfY29uZmlnOiB1bmNvbmZpZyBNODMxNjBHIF9jMWttODMyNDBfY29uZmlnCitjMWttODMyNDAtTTgzMjQwR19jb25maWc6IHVuY29uZmlnIE04MzI0MEcgX2Mxa204MzI0MF9jb25maWcKKworYzFrbTgzMjQwLW5hbmRfY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIF9jMWttODMyNDAtbmFuZF9jb25maWcKKworYzFrbTgzMjQwLW5vZnBwX2NvbmZpZzogdW5jb25maWcgTTgzMjQwRyBub2ZwcCBfYzFrbTgzMjQwX2NvbmZpZworYzFrbTgzMjQwLU04MzI0MEctbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIG5vZnBwIF9jMWttODMyNDBfY29uZmlnCitjMWttODMyNDAtTTgzMTYwRy1ub2ZwcF9jb25maWc6IHVuY29uZmlnIE04MzE2MEcgbm9mcHAgX2Mxa204MzI0MF9jb25maWcKKworYzFrbTgzMjQwLW5hbmQtbm9mcHBfY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIG5vZnBwIF9jMWttODMyNDAtbmFuZF9jb25maWcKKworYzFrbTgzMjQwX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIF9jMWttODMyNDBfYXJhbV9jb25maWcKK2Mxa204MzI0MC1NODMxNjBHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMxNjBHIF9jMWttODMyNDBfYXJhbV9jb25maWcKK2Mxa204MzI0MC1NODMyNDBHX2FyYW1fY29uZmlnOiB1bmNvbmZpZyBNODMyNDBHIF9jMWttODMyNDBfYXJhbV9jb25maWcKKworCitfYzJrZXZtX2NvbmZpZzoKKwlAZWNobyAiVEVYVF9CQVNFID0gMHgxMDAwMDAwIiA+JChvYmopYm9hcmQvbWluZHNwZWVkL2Mya2V2bS9jb25maWcubWs7CisJQCQoTUtDT05GSUcpIC1hIGMya2V2bSBhcm0gYXJtX2NvcnRleGE5IGMya2V2bSBtaW5kc3BlZWQgY29tY2VydG8KKworYzJrZXZtX2NvbmZpZzogdW5jb25maWcgX2Mya2V2bV9jb25maWcKKworX2Mya2V2bS1uYW5kX2NvbmZpZzoKKwlAZWNobyAiVEVYVF9CQVNFID0gMHgxMDAwMDAwIiA+JChvYmopYm9hcmQvbWluZHNwZWVkL2Mya2V2bS9jb25maWcubWs7CisJQCQoTUtDT05GSUcpIC1hIGMya2V2bS1uYW5kIGFybSBhcm1fY29ydGV4YTkgYzJrZXZtIG1pbmRzcGVlZCBjb21jZXJ0bworCitjMmtldm0tbmFuZF9jb25maWc6IHVuY29uZmlnIF9jMmtldm0tbmFuZF9jb25maWcKKworX2Mya2FzaWNfY29uZmlnOgorCUBlY2hvICJURVhUX0JBU0UgPSAweDEwMDAwMDAiID4kKG9iailib2FyZC9taW5kc3BlZWQvYzJrYXNpYy9jb25maWcubWs7CisJQCQoTUtDT05GSUcpIC1hIGMya2FzaWMgYXJtIGFybV9jb3J0ZXhhOSBjMmthc2ljIG1pbmRzcGVlZCBjb21jZXJ0bworCitjMmthc2ljX2NvbmZpZzogdW5jb25maWcgX2Mya2FzaWNfY29uZmlnCisKK19jMmthc2ljLW5hbmRfY29uZmlnOgorCUBlY2hvICJURVhUX0JBU0UgPSAweDEwMDAwMDAiID4kKG9iailib2FyZC9taW5kc3BlZWQvYzJrYXNpYy9jb25maWcubWs7CisJQCQoTUtDT05GSUcpIC1hIGMya2FzaWMtbmFuZCBhcm0gYXJtX2NvcnRleGE5IGMya2FzaWMgbWluZHNwZWVkIGNvbWNlcnRvCisKK2Mya2FzaWMtbmFuZF9jb25maWc6IHVuY29uZmlnIF9jMmthc2ljLW5hbmRfY29uZmlnCisKKwogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBpMzg2CiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggYjc4ZWE2MS4uOTE3MmU3ZCAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw0ICsxLDQgQEAKLSMKKyMgICAgCiAjIChDKSBDb3B5cmlnaHQgMjAwMCAtIDIwMDUKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KICMKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9hc2ljL01ha2VmaWxlIGIvYm9hcmQvbWluZHNwZWVkL2FzaWMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2ZWQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9hc2ljL01ha2VmaWxlCkBAIC0wLDAgKzEsNjEgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBib2FyZC5vIHJlc2V0Lm8gLi4vY29tbW9uL2FtMjlsdjA0MGIubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vbmFuZC5vCitTT0JKUwk6PSAKKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMT0FEX0FERFIgPSAweDEwNDAwMDAwCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworT0JKUyAgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUyAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworYWxsOgkkKExJQikKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpIAorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2FzaWMvYm9hcmQuYyBiL2JvYXJkL21pbmRzcGVlZC9hc2ljL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU2NmM2YgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9hc2ljL2JvYXJkLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitzdGF0aWMgaW50IGJvYXJkX2RldGVjdCh2b2lkKQoreworCXUzMiBncGJ0OworCWdwYnQgPSAoX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiopKEdQSU9fQk9PVFNUUkFQX1JFRykpICYgMHgxQzAwKSA+PiAxMCA7CisJcmV0dXJuKGdwYnQpOworfQorCit1MzIgZ2V0X2Rkcl9zaXplKHZvaWQpCit7CisJdTMyIGRkcl9zaXplID0gMDsKKwl1MzIgYm9hcmRfY29uZmlnOworCisJYm9hcmRfY29uZmlnID0gYm9hcmRfZGV0ZWN0KCk7CisKKwlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgeworCWNhc2UgQk9BUkRfQ0ZHXzE6CisJY2FzZSBCT0FSRF9DRkdfNjoKKwlkZWZhdWx0OgorCQlkZHJfc2l6ZSA9ICgyNTYgKiAxMDI0ICogMTAyNCk7IC8qIDI1Nk1CICovCisJCWJyZWFrOworCisJY2FzZSBCT0FSRF9DRkdfMjoKKwljYXNlIEJPQVJEX0NGR18zOgorCQlkZHJfc2l6ZSA9ICgxMDI0ICogMTAyNCAqIDEwMjQpOyAvKiAxMDI0TUIgKi8KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGRkcl9zaXplOworfQorCit2b2lkIGJzcF9pbml0KHZvaWQpCit7CisJdTMyIGJvYXJkX2NvbmZpZzsKKworICAgICAgICAvKiBJZiBNQUdJQyBOdW1iZXIgaXMgcHJlc2VudCwgbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgKi8KKyAgICAgICAgaWYoX19sZTY0X3RvX2NwdSgqKHU2NCopKEFSQU1fQkFTRUFERFIrMHg4MDAwKSkgID09IENPTUNFUlRPX1BBUlRfTUFHSUMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisJU29DX0NoZWNrX0RldmljZSgpOworCVNvQ19BUEJfc2V0dXAoKTsKKwlTb0NfQUhCX3NldHVwKCk7CisJU29DX0FSQU1fc2V0dXAoKTsKKworCVNvQ19QTExfaW5pdCgpOworCisJYm9hcmRfY29uZmlnID0gYm9hcmRfZGV0ZWN0KCk7CisJaWYgKChib2FyZF9jb25maWcgIT0gQk9BUkRfQ0ZHXzEpICYmIChib2FyZF9jb25maWcgIT0gQk9BUkRfQ0ZHXzIpICYmIChib2FyZF9jb25maWcgIT0gQk9BUkRfQ0ZHXzMpICYmIChib2FyZF9jb25maWcgIT0gQk9BUkRfQ0ZHXzYpKSB7CisKKwkJd2hpbGUoMSk7CisJfQorCisJaWNhY2hlX2VuYWJsZSgpOworCVNvQ19tZW1faW5pdChib2FyZF9jb25maWcpOworLy8JU29DX25hbmRfaW5pdCgpOworfQorCisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gZ2V0X2Rkcl9zaXplKCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBCT0FSRF9MQVRFX0lOSVQKK2ludCBib2FyZF9sYXRlX2luaXQodm9pZCkKK3sKKyNpZmRlZiBERFJfVFJBSU5JTkdfREJHCisJdTggd3JfZHFzID0gMDsgCisJdTggZHFzX291dCA9IDA7CisJdTggZHFzX2RlbGF5MCA9IDA7CisJdTggZHFzX2RlbGF5MSA9IDA7CisJdTggZHFzX2RlbGF5MiA9IDA7CisJdTggZHFzX2RlbGF5MyA9IDA7CisjZW5kaWYKKworCXByaW50ZigiUmVzZXJ2ZSBNU1AgbWVtb3J5XG4iKTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgKz0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAtPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRTsKKworI2lmZGVmIEREUl9UUkFJTklOR19EQkcKKwl3cl9kcXMgPSBERU5BTElfV1JfRFFTOyAKKwlkcXNfb3V0ID0gREVOQUxJX0RRU19PVVQ7CisJZHFzX2RlbGF5MCA9IERFTkFMSV9EUVNfREVMQVkwOworCWRxc19kZWxheTEgPSBERU5BTElfRFFTX0RFTEFZMTsKKwlkcXNfZGVsYXkyID0gREVOQUxJX0RRU19ERUxBWTI7CisJZHFzX2RlbGF5MyA9IERFTkFMSV9EUVNfREVMQVkzOworCisjaWZkZWYgRERSX1RSQUlOSU5HCisJcHJpbnRmKCJERFIgVHJhaW5pbmcgOiAiKTsKKworI2lmZGVmIE5FV19ERFJfVFJBSU5JTkcKKwlwcmludGYoIihORVcpOiAiKTsKKyNlbmRpZgorCisjZWxzZQorCXByaW50ZigiRERSIGRlZmF1bHQgc2V0dGluZ3MgOiAiKTsKKyNlbmRpZgkKKwlwcmludGYoIndyX2RxcyAweCV4IGRxc19vdXQgMHgleCBkZWxheTAgMHgleCBkZWxheTEgMHgleCBkZWxheTIgMHgleCBkZWxheTMgMHgleFxuIiwgd3JfZHFzLGRxc19vdXQsZHFzX2RlbGF5MCxkcXNfZGVsYXkxLGRxc19kZWxheTIsZHFzX2RlbGF5Myk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvYXNpYy9jb25maWcubWsgYi9ib2FyZC9taW5kc3BlZWQvYXNpYy9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkMWVkOAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9hc2ljL2NvbmZpZy5tawpAQCAtMCwwICsxLDExIEBACisjCisjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCAxMDAwJzgwMDAsCisjIGVudHJ5IDEwMDAnODAwMCAobWVtIGJhc2UgKyByZXNlcnZlZCkKKyMKKyMgV2UgbG9hZCBvdXJzZWxmIHRvIGludGVybmFsIFJBTSBhdCAyMDAxJzIwMDAKKyMgQ2hlY2sgbWFwIGZpbGUgd2hlbiBjaGFuZ2luZyBURVhUX0JBU0UuCisjIEV2ZXJ5dGhpbmcgaGFzIGZpdCBpbnRvIDE5MmtCIGludGVybmFsIFNSQU0hCisjCisKKyMgWFhYIFRFWFRfQkFTRSA9IDB4MjAwMTIwMDAKK1RFWFRfQkFTRSA9IDB4ODAxMDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9hc2ljL3Jlc2V0LmMgYi9ib2FyZC9taW5kc3BlZWQvYXNpYy9yZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NjZkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYXNpYy9yZXNldC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCit2b2lkIHJlc2V0X2VtYWMwX3BoeSh1MzIgZW5hYmxlKQoreworCS8vbm90aGluZyB0byBkby4gVGhlcmUgaXMgbm8gcmVzZXQgb24gdGhlIGFzaWMgYm9hcmQgZm9yIHRoZSBsYW4gaW50ZXJmYWNlCit9CisKK3ZvaWQgcmVzZXRfZW1hYzFfcGh5KHUzMiBlbmFibGUpCit7CisJLy9ub3RoaW5nIHRvIGRvLiBUaGVyZSBpcyBubyByZXNldCBvbiB0aGUgYXNpYyBib2FyZCBmb3IgdGhlIHdhbiBpbnRlcmZhY2UKK30KKwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2FzaWMvdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC9hc2ljL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1ZWEyYQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9hc2ljL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCAgICAgIDoKKwl7CisJICBjcHUvYXJtMTEzNi9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworCisJLiA9IDB4MGEwMDAwMDA7CisJX190cmFpbmluZ19kYXRhX3N0YXJ0ID0gLjsKKworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa2FzaWMvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvYzFrYXNpYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWM0MzI1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mxa2FzaWMvTWFrZWZpbGUKQEAgLTAsMCArMSw2MyBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgorCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCisKK0NPQkpTCTo9IGJvYXJkLm8gcmVzZXQubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vYW0yOWx2MDQwYi5vIC4uL2NvbW1vbi9hbWx2NjQwdS5vXAorCQkuLi9jb21tb24vbmFuZC5vIC4uL2NvbW1vbi9pMmMubyAuLi9jb21tb24vY21kX2Jvb3Rjb21jZXJ0by5vCisJCQorU09CSlMJOj0KKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMT0FEX0FERFIgPSAweDEwNDAwMDAwCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworT0JKUyAgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUyAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworYWxsOgkkKExJQikKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpIAorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa2FzaWMvYm9hcmQuYyBiL2JvYXJkL21pbmRzcGVlZC9jMWthc2ljL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4Mzk2OAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMWthc2ljL2JvYXJkLmMKQEAgLTAsMCArMSw1NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisKK2V4dGVybiB2b2lkIGFybV93cml0ZTY0KHU2NCBkYXRhLHZvbGF0aWxlIHU2NCAqcCk7CisKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDEodm9pZCkKK3sgIAorICAvLyBDb25maWd1cmUgRERSCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDBfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAxX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDNfVkFMX0NGRzEpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDRfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA1X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA4X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEyX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xM19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE1X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE4X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIxX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yM19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjRfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI1X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI4X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yOV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzBfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMxX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzNfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM0X1ZBTF9DRkcxKTsKKwkvLyoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM1X1ZBTF9DRkcxKTsKKwlhcm1fd3JpdGU2NChERU5BTElfQ1RMXzM1X1ZBTF9DRkcxLERFTkFMSV9DVExfMzVfREFUQSk7IC8vc2hvdWxkIGJlIDY0Yml0IHdyaXRlCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzZfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zOF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzlfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQwX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80MV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDJfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQzX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80NF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDVfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80N19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDhfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ5X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81MF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUyX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81M19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTRfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU1X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81Nl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU4X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81OV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjBfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYxX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Ml9WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82M19WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82NF9WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82NV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjZfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82OF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjlfVkFMX0NGRzEpOworCisJLy8gc3RhcnQgRERSQworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAyX1ZBTF9DRkcxIHwgKDFMTCA8PCAzMikpOworCS8vd2FpdCBpbnRfc3RhdHVzWzJdIChEUkFNIGluaXQgY29tcGxldGUpCisJd2hpbGUoKCBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyKikoREVOQUxJX0NUTF8zNl9EQVRBKzQpKSAmIDB4NCkgPT0gMCk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzEgJiB+KDB4MDAwMDdGMDAwMDAwMDAwMExMKSkgfCAod3JfZHFzX3NoaWZ0IDw8IDQwKSk7CisKK30KKworc3RhdGljIHZvaWQgY29uZmlnX2JvYXJkMih2b2lkKQoreworICAvLyBDb25maWd1cmUgRERSCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDNfVkFMX0NGRzIpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDRfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMik7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEyX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xM19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMik7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yM19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjRfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzNfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM0X1ZBTF9DRkcyKTsKKwkvLyoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM1X1ZBTF9DRkcyOworCWFybV93cml0ZTY0KERFTkFMSV9DVExfMzVfVkFMX0NGRzIsREVOQUxJX0NUTF8zNV9EQVRBKTsgLy9zaG91bGQgYmUgNjRiaXQgd3JpdGUKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80Ml9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDNfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ0X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80NV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDZfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ3X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80OF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDlfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUwX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81MV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTJfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUzX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81NF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTVfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU2X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81N19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNThfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU5X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82MF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYyX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYzX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY0X1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82OV9WQUxfQ0ZHMik7CisKKwkvLyBzdGFydCBERFJDCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzIgfCAoMUxMIDw8IDMyKSk7CisJLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKwl3aGlsZSgoIF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzM2X0RBVEErNCkpICYgMHg0KSA9PSAwKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9ICgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzIgJiB+KDB4MDAwMDdGMDAwMDAwMDAwMExMKSkgfCAod3JfZHFzX3NoaWZ0IDw8IDQwKTsKKworfQorCitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQzKHZvaWQpCit7CisgIC8vIENvbmZpZ3VyZSBERFIKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDFfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAyX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wM19WQUxfQ0ZHMyk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDVfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA2X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wN19WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDhfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA5X1ZBTF9DRkczKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEwX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTJfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEzX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTVfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE2X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xN19WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMThfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE5X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjFfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIyX1ZBTF9DRkczKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIzX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjVfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI2X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yN19WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjhfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI5X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzFfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMyX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zM19WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzRfVkFMX0NGRzMpOworCS8vKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzVfVkFMX0NGRzMpOworCWFybV93cml0ZTY0KERFTkFMSV9DVExfMzVfVkFMX0NGRzMsREVOQUxJX0NUTF8zNV9EQVRBKTsgLy9zaG91bGQgYmUgNjRiaXQgd3JpdGUKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzdfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM4X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDBfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQxX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80Ml9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDNfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ0X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80NV9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDZfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ3X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80OF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDlfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUwX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81MV9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTJfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUzX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81NF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTVfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU2X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81N19WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNThfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU5X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82MF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjFfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYyX1ZBTF9DRkczKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYzX1ZBTF9DRkczKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY0X1ZBTF9DRkczKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY1X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjdfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY4X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82OV9WQUxfQ0ZHMyk7CisKKwkvLyBzdGFydCBERFJDCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzMgfCAoMUxMIDw8IDMyKSk7CisJLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKwl3aGlsZSgoIF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzM2X0RBVEErNCkpICYgMHg0KSA9PSAwKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMyAmIH4oMHgwMDAwN0YwMDAwMDAwMDAwTEwpKSB8ICh3cl9kcXNfc2hpZnQgPDwgNDApKTsKKworfQorCitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQ0KHZvaWQpCit7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDBfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAxX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDNfVkFMX0NGRzQpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDRfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA1X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNl9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDdfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA4X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOV9WQUxfQ0ZHNCk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMF9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEyX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xM19WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE1X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNl9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE4X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOV9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIxX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMl9WQUxfQ0ZHNCk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yM19WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjRfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI1X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNl9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjdfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI4X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yOV9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzBfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMxX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMl9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzNfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM0X1ZBTF9DRkc0KTsKKwkvLyoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM1X1ZBTF9DRkc0KTsKKwlhcm1fd3JpdGU2NChERU5BTElfQ1RMXzM1X1ZBTF9DRkc0LERFTkFMSV9DVExfMzVfREFUQSk7IC8vc2hvdWxkIGJlIDY0Yml0IHdyaXRlCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzZfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM3X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zOF9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzlfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQwX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80MV9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDJfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQzX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80NF9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDVfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ2X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80N19WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDhfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ5X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81MF9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTFfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUyX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81M19WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTRfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU1X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81Nl9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTdfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU4X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81OV9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjBfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYxX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Ml9WQUxfQ0ZHNCk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82M19WQUxfQ0ZHNCk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82NF9WQUxfQ0ZHNCk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82NV9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjZfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY3X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82OF9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjlfVkFMX0NGRzQpOworCisJLy8gc3RhcnQgRERSQworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAyX1ZBTF9DRkc0IHwgKDFMTCA8PCAzMikpOworCS8vd2FpdCBpbnRfc3RhdHVzWzJdIChEUkFNIGluaXQgY29tcGxldGUpCisJd2hpbGUoKCBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyKikoREVOQUxJX0NUTF8zNl9EQVRBKzQpKSAmIDB4NCkgPT0gMCk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzQgJiB+KDB4MDAwMDdGMDAwMDAwMDAwMExMKSkgfCAod3JfZHFzX3NoaWZ0IDw8IDQwKSk7CisKK30KKworc3RhdGljIHZvaWQgYXBwbHlfZGRyX3NldHRpbmcodm9pZCkKK3sKKwl1MzIgYm9vdF9vcHRpb24gPSBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyKikoR1BJT19CT09UU1RSQVBfU1RBVFVTX1JFRykpICYgMHhDMDA7CisKKwlzd2l0Y2ggKGJvb3Rfb3B0aW9uKSB7CisJY2FzZSAweDAwMDoKKwkJLy8gcmF0ZSBjYXNlIDEgQVJNIHBsbCA2NTBNSHosIEFIQiBwbGwgODAwLCBQSFkgcGxsIDI1MCAgPT4gRkNMSz02NTAgQUhCPTIwMCBERFI9MzI1CisJCWNvbmZpZ19ib2FyZDQoKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCWNhc2UgMHg0MDA6CisJCS8vIHJhdGUgY2FzZSAxIEFSTSBwbGwgNjUwTUh6LCBBSEIgcGxsIDc1MCwgUEhZIHBsbCAyNTAgID0+IEZDTEs9NjUwIEFIQj0xODcuNSBERFI9Mzc1CisJCWNvbmZpZ19ib2FyZDEoKTsKKworCQlicmVhazsKKworCWNhc2UgMHg4MDA6CisJCS8vIHJhdGUgY2FzZSAyIEFSTSBwbGwgNjUwTUh6LCBBSEIgcGxsIDgwMCwgUEhZIHBsbCAyNTAgID0+IEZDTEs9NjUwIEFIQj0yMDAgRERSPTIwMAorCQljb25maWdfYm9hcmQyKCk7CisJCWJyZWFrOworCisJY2FzZSAweEMwMDoKKwkJLy8gcmF0ZSBjYXNlIDMgQVJNIHBsbCA2MTBNSHosIEFIQiBwbGwgNzQ0LCBQSFkgcGxsIDI1MCAgPT4gRkNMSz02MTAgQUhCPTE4NiBERFI9MzcyCisJCWNvbmZpZ19ib2FyZDMoKTsJCQorCQlicmVhazsKKwl9CisKKyNpZiBkZWZpbmVkKEREUl9UUkFJTklORykKKwkvKiBEbyB0cmFpbmluZyAqLworCXN0YXJ0X3RyYWluaW5nKCk7CisjZW5kaWYKK30KKwordTMyIGdldF9kZHJfc2l6ZSh2b2lkKQoreworCXJldHVybiBQSFlTX1NEUkFNX1NJWkU7Cit9CisKKworc3RhdGljIHZvaWQgbm9yX2h3X2luaXQodm9pZCkKK3sKKy8vIFJlc2V0IHRoZSBleHAgYnVzIGJlZm9yZSBjb25maWd1cmluZworCSoodm9sYXRpbGUgdTMyICopRVhfU1dSU1RfUkVHID0gX19jcHVfdG9fbGUzMigweDEpOworCisJKih2b2xhdGlsZSB1MzIgKilFWF9DUzBfU0VHX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHhGRkYpOworLy8gQUhCIHJ1bnMgYXQgMTg3LjVNSHogLCBhbmQgRVhQIGF0IDMxLjI1TUh6CisJKih2b2xhdGlsZSB1MzIgKilFWF9DTE9DS19ESVZfUkVHID0gX19jcHVfdG9fbGUzMigweDYpOworLy8gT3B0aW1pemVkIHNldHRpbmdzIGZvciB0aGUgQzFrRVZNCisJKih2b2xhdGlsZSB1MzIgKilFWF9DUzBfVE1HMV9SRUcgPSBfX2NwdV90b19sZTMyKDB4MUExQTQwMUYpOyAKKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKilFWF9DUzBfVE1HMl9SRUcgPSBfX2NwdV90b19sZTMyKDB4MDYwNjBBMDQpOworfQorCit2b2lkIGJzcF9pbml0KHZvaWQpCit7CisJdTMyIGJvb3Rfb3B0aW9uOworCWludCBjb25maWc7CisKKwkvKiBJZiBNQUdJQyBOdW1iZXIgaXMgcHJlc2VudCwgbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgKi8KKyAgICAgICAgaWYoX19sZTY0X3RvX2NwdSgqKHU2NCopKEFSQU1fQkFTRUFERFIrMHgxMDAwMCkpICA9PSBDT01DRVJUT19QQVJUX01BR0lDKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworCS8vIHJlYWQgYm9vdHN0cmFwCisJYm9vdF9vcHRpb24gPSBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyKikoR1BJT19CT09UU1RSQVBfU1RBVFVTX1JFRykpICYgMHhDMDA7CisJCisJc3dpdGNoIChib290X29wdGlvbikgeworCWNhc2UgMHgwMDA6CisJCWNvbmZpZyA9IENGR19DTEtfNjUwXzE4N18zMjU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwljYXNlIDB4NDAwOgorCQljb25maWcgPSBDRkdfQ0xLOworCQlicmVhazsKKworCWNhc2UgMHg4MDA6CisJCWNvbmZpZyA9IENGR19DTEtfNjUwXzIwMF8yMDA7CisJCWJyZWFrOworCisJY2FzZSAweEMwMDoKKwkJY29uZmlnID0gQ0ZHX0NMS182MTBfMTg2XzM3MjsKKwkJYnJlYWs7CisJfQorCisJU29DX1BMTF9pbml0KGNvbmZpZyk7CisJU29DX0FQQl9zZXR1cCgpOworCVNvQ19BSEJfc2V0dXAoKTsKKwlTb0NfQVJBTV9zZXR1cCgpOworCisJaWNhY2hlX2VuYWJsZSgpOworCisJLy9BcHBseSBERU5BTEkgRERSIGNvbmZpZ3VyYXRpb24KKwlhcHBseV9kZHJfc2V0dGluZygpOworCisvLwlTb0NfbmFuZF9pbml0KCk7Cit9CisKK3ZvaWQgbmFuZF9od19pbml0KHZvaWQpCit7CisgICAgICAgIFNvQ19ncGlvX2NmZygyOSwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgIFNvQ19ncGlvX2NmZygzMCwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgIFNvQ19ncGlvX2NmZygzMSwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgICoodm9sYXRpbGUgdTMyICopIEdQSU9fUElOX1NFTEVDVF9SRUcgJj0gX19jcHVfdG9fbGUzMih+KCgxIDw8IDMxKXwoMSA8PCAzMCl8KDEgPDwgMjkpfCgxIDw8IDIxKXwoMSA8PCAyMCl8KDEgPDwgNSkpKTsKKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKikgR1BJT19QSU5fU0VMRUNUX1JFRyB8PSBfX2NwdV90b19sZTMyKDEgPDwgNik7Cit9CisKK3ZvaWQgaTJjX2h3X2luaXQodm9pZCkKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKSBHUElPX1BJTl9TRUxFQ1RfUkVHICY9IF9fY3B1X3RvX2xlMzIofigoMSA8PCAxOSl8KDEgPDwgMTgpKSk7Cit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJQ0ZHX0haX0NMT0NLID0gSEFMX2dldF9haGJfY2xrKCk7CisKKwkvKiBDYWxsIG5vcl9od19pbml0KCkgb25seSB3aGVuIGxvdyBsZXZlbCBpbml0aWFsaXphdGlvbiBpcyBub3QgZG9uZSAqLworCS8qIElmIE1BR0lDIE51bWJlciBpcyBwcmVzZW50LCBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSAqLworICAgICAgICBpZihfX2xlNjRfdG9fY3B1KCoodTY0KikoQVJBTV9CQVNFQUREUisweDEwMDAwKSkgICE9IENPTUNFUlRPX1BBUlRfTUFHSUMpCisgICAgICAgICAgICAgICAgbm9yX2h3X2luaXQoKTsKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisJbmFuZF9od19pbml0KCk7CisjZW5kaWYKKwlpMmNfaHdfaW5pdCgpOworCisJLyogU2V0dXAgRXh0ZXJuYWwgcmVzZXQqLworCVNvQ19ncGlvX2NmZygxNywgR1BJT19UWVBFX09VVFBVVCk7CisJdWRlbGF5KDEwKTsKKwlTb0NfZ3Bpb19zZXRfMChTb0NfZ3Bpb19tYXNrKDE3KSk7CisJdWRlbGF5KDEwKTsKKwlTb0NfZ3Bpb19zZXRfMShTb0NfZ3Bpb19tYXNrKDE3KSk7CisKKwkvKiBhcmNoIG51bWJlciBvZiBNaW5kc3BlZWQgQ29tY2VydG8gKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX004MjVYWDsKKworCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gTElOVVhfQk9PVFBBUkFNX0FERFI7CisKKyAgICAgICAgLyogRW5hYmxlIEFSTTAgaGFyZHdhcmUgc3VwcG9ydCBmb3Igbm9uIGFsaWduZWQgYWNjZXNzZXMgKi8KKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKikgR1BJT19VUF9BTElHTl9BQ0NFU1NfTE9HSUMgfD0gX19jcHVfdG9fbGUzMigxKTsKKworCSoodm9sYXRpbGUgdTMyICopIFVTQl9QSFlfQ09ORl9SRUcgPSBfX2NwdV90b19sZTMyKDB4MDAyRDY0QzIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV9TSVpFOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXJldHVybiAwOworfQorCisjaWZkZWYgQk9BUkRfTEFURV9JTklUCitpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCit7CisjaWZkZWYgRERSX1RSQUlOSU5HX0RCRworCXU4IGRsbF9hZGowID0gMDsKKwl1OCBkbGxfYWRqMSA9IDA7CisJdTggZGxsX2FkajIgPSAwOworCXU4IGRsbF9hZGozID0gMDsKKwl1OCBkcXNfZGVsYXkwID0gMDsKKwl1OCBkcXNfZGVsYXkxID0gMDsKKwl1OCBkcXNfZGVsYXkyID0gMDsKKwl1OCBkcXNfZGVsYXkzID0gMDsKKyNlbmRpZgorCisJcHJpbnRmKCJSZXNlcnZlIE1TUCBtZW1vcnlcbiIpOworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCArPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplIC09IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCisjaWZkZWYgRERSX1RSQUlOSU5HX0RCRworCWRsbF9hZGowID0gREVOQUxJX0RMTF9BREoxX0RTMF9MOworCWRsbF9hZGoxID0gREVOQUxJX0RMTF9BREoxX0RTMV9IOworCWRsbF9hZGoyID0gREVOQUxJX0RMTF9BREoxX0RTMl9MOworCWRsbF9hZGozID0gREVOQUxJX0RMTF9BREoxX0RTM19IOworCWRxc19kZWxheTAgPSBERU5BTElfV1JfRFFTX0RFTEFZMDsKKwlkcXNfZGVsYXkxID0gREVOQUxJX1dSX0RRU19ERUxBWTE7CisJZHFzX2RlbGF5MiA9IERFTkFMSV9XUl9EUVNfREVMQVkyOworCWRxc19kZWxheTMgPSBERU5BTElfV1JfRFFTX0RFTEFZMzsKKyNpZmRlZiBERFJfVFJBSU5JTkcKKwlwcmludGYoIkREUiBUcmFpbmluZyA6ICIpOworI2Vsc2UKKwlwcmludGYoIkREUiBkZWZhdWx0IHNldHRpbmdzIDogIik7CisjZW5kaWYKKwlwcmludGYoIlxuRExMX0FESigwLDEsMiwzKTogMHgleCwweCV4LDB4JXgsMHgleFxuIiwgZGxsX2FkajAsZGxsX2FkajEsZGxsX2FkajIsZGxsX2FkajMpOworCXByaW50ZigiV1JfRFFTOmRlbGF5MCAweCV4LCBkZWxheTEgMHgleCwgZGVsYXkyIDB4JXgsIGRlbGF5MyAweCV4XG4iLCBkcXNfZGVsYXkwLGRxc19kZWxheTEsZHFzX2RlbGF5MixkcXNfZGVsYXkzKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa2FzaWMvY29uZmlnLm1rIGIvYm9hcmQvbWluZHNwZWVkL2Mxa2FzaWMvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGU5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzFrYXNpYy9jb25maWcubWsKQEAgLTAsMCArMSBAQAorVEVYVF9CQVNFID0gMHg4NDAwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa2FzaWMvcmVzZXQuYyBiL2JvYXJkL21pbmRzcGVlZC9jMWthc2ljL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyMDg0NgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMWthc2ljL3Jlc2V0LmMKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCit2b2lkIHJlc2V0X2VtYWMwX3BoeSh1MzIgZW5hYmxlKQoreworCS8vbm90aGluZyB0byBkby4gVGhlcmUgaXMgbm8gcmVzZXQgb24gdGhlIGFzaWMgYm9hcmQgZm9yIHRoZSBsYW4gaW50ZXJmYWNlCit9CisKK3ZvaWQgcmVzZXRfZW1hYzFfcGh5KHUzMiBlbmFibGUpCit7CisJLy9ub3RoaW5nIHRvIGRvLiBUaGVyZSBpcyBubyByZXNldCBvbiB0aGUgYXNpYyBib2FyZCBmb3IgdGhlIHdhbiBpbnRlcmZhY2UKK30KKwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa2FzaWMvdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC9jMWthc2ljL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MzE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMWthc2ljL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCAgICAgIDoKKwl7CisJICBjcHUvYXJtMTEzNi9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa2V2bS9NYWtlZmlsZSBiL2JvYXJkL21pbmRzcGVlZC9jMWtldm0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjNDMyNQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMWtldm0vTWFrZWZpbGUKQEAgLTAsMCArMSw2MyBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgorCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCisKK0NPQkpTCTo9IGJvYXJkLm8gcmVzZXQubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vYW0yOWx2MDQwYi5vIC4uL2NvbW1vbi9hbWx2NjQwdS5vXAorCQkuLi9jb21tb24vbmFuZC5vIC4uL2NvbW1vbi9pMmMubyAuLi9jb21tb24vY21kX2Jvb3Rjb21jZXJ0by5vCisJCQorU09CSlMJOj0KKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMT0FEX0FERFIgPSAweDEwNDAwMDAwCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworT0JKUyAgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUyAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworYWxsOgkkKExJQikKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpIAorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa2V2bS9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL2Mxa2V2bS9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZmEwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzFrZXZtL2JvYXJkLmMKQEAgLTAsMCArMSwzNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitleHRlcm4gdm9pZCBhcm1fd3JpdGU2NCh1NjQgZGF0YSx2b2xhdGlsZSB1NjQgKnApOworCitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQxKHZvaWQpCit7CisgIC8vIENvbmZpZ3VyZSBERFIKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAyX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wM19WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDVfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wN19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDhfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA5X1ZBTF9DRkcxKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEwX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTJfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEzX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTVfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xN19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMThfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE5X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIyX1ZBTF9DRkcxKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIzX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjVfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yN19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjhfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI5X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMyX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zM19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzRfVkFMX0NGRzEpOworCS8vKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzVfVkFMX0NGRzEpOworCWFybV93cml0ZTY0KERFTkFMSV9DVExfMzVfVkFMX0NGRzEsREVOQUxJX0NUTF8zNV9EQVRBKTsgLy9zaG91bGQgYmUgNjRiaXQgd3JpdGUKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM4X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDBfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQxX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80Ml9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDNfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ0X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80NV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDZfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80OF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDlfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUwX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81MV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTJfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUzX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81NF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTVfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81N19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNThfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU5X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82MF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYyX1ZBTF9DRkcxKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYzX1ZBTF9DRkcxKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY0X1ZBTF9DRkcxKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY1X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY4X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82OV9WQUxfQ0ZHMSk7CisKKwkvLyBzdGFydCBERFJDCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzEgfCAoMUxMIDw8IDMyKSk7CisJLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKwl3aGlsZSgoIF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzM2X0RBVEErNCkpICYgMHg0KSA9PSAwKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMSAmIH4oMHgwMDAwN0YwMDAwMDAwMDAwTEwpKSB8ICh3cl9kcXNfc2hpZnQgPDwgNDApKTsKKworfQorCitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQyKHZvaWQpCit7CisgIC8vIENvbmZpZ3VyZSBERFIKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAyX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wM19WQUxfQ0ZHMik7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDVfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA2X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wN19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDhfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA5X1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEwX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTJfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEzX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTVfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE2X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xN19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMThfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE5X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIyX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIzX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjVfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI2X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yN19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjhfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI5X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMyX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zM19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzRfVkFMX0NGRzIpOworCS8vKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzVfVkFMX0NGRzIpOworCWFybV93cml0ZTY0KERFTkFMSV9DVExfMzVfVkFMX0NGRzIsREVOQUxJX0NUTF8zNV9EQVRBKTsgLy9zaG91bGQgYmUgNjRiaXQgd3JpdGUKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80Ml9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDNfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ0X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80NV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDZfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ3X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80OF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDlfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUwX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81MV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTJfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUzX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81NF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTVfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU2X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81N19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNThfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU5X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82MF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYyX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYzX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY0X1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82OV9WQUxfQ0ZHMik7CisKKwkvLyBzdGFydCBERFJDCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzIgfCAoMUxMIDw8IDMyKSk7CisJLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKwl3aGlsZSgoIF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzM2X0RBVEErNCkpICYgMHg0KSA9PSAwKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMiAmIH4oMHgwMDAwN0YwMDAwMDAwMDAwTEwpKSB8ICh3cl9kcXNfc2hpZnQgPDwgNDApKTsKKworfQorCisKKwordm9pZCBhcHBseV9kZHJfc2V0dGluZyh2b2lkKQoreworCXN3aXRjaCAoQ0ZHX0NMSykgeworCWRlZmF1bHQ6CisJY2FzZSBDRkdfQ0xLXzY1MF8xODdfMzc1OgorCWNhc2UgQ0ZHX0NMS181MzRfMTc4XzMzMDoKKwljYXNlIENGR19DTEtfNDUwXzE2NV8zMzA6CisJICAgICAgICBjb25maWdfYm9hcmQxKCk7CisJCWJyZWFrOworCisJY2FzZSBDRkdfQ0xLXzY1MF8yMDBfMjAwOgorCQljb25maWdfYm9hcmQyKCk7CisJCWJyZWFrOworCX0KKwkKKwkvKiB0cmFpbmluZyBpcyByZXF1aXJlZCBmb3IgMzc1TUh6IG9ubHksCisgICAgICAgICAqIGJ1dCBuaWNlIHRvIGhhdmUgZm9yIDIwME1IeiBhbHNvICovCisjaWYgZGVmaW5lZChERFJfVFJBSU5JTkcpCisJCS8qIERvIHRyYWluaW5nICovCisJCXN0YXJ0X3RyYWluaW5nKCk7CisjZW5kaWYKK30KKwordTMyIGdldF9kZHJfc2l6ZSh2b2lkKQoreworCXJldHVybiBQSFlTX1NEUkFNX1NJWkU7Cit9CisKKworc3RhdGljIHZvaWQgbm9yX2h3X2luaXQodm9pZCkKK3sKKy8qIFJlc2V0IHRoZSBleHAgYnVzIGJlZm9yZSBjb25maWd1cmluZyAqLworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUVYX1NXUlNUX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHgxKTsKKy8qIFNldHRpbmcgc2l6ZSAqLworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUVYX0NTMF9TRUdfUkVHID0gX19jcHVfdG9fbGUzMigweDdGRik7CisvKiBBSEIgcnVucyBhdCAyMDBNSHogLCBhbmQgRVhQIGF0IDQwTUh6ICovCisgICAgICAgIC8qICoodm9sYXRpbGUgdTMyICopRVhfQ0xPQ0tfRElWX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHg1KTsgKi8KKy8qIEFIQiBydW5zIGF0IDE4Ny41TUh6ICwgYW5kIEVYUCBhdCAzMS4yNU1IeiAqLworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUVYX0NMT0NLX0RJVl9SRUcgPSBfX2NwdV90b19sZTMyKDB4Nik7CisvKiBPcHRpbWl6ZWQgc2V0dGluZ3MgKi8KKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKilFWF9DUzBfVE1HMV9SRUcgPSBfX2NwdV90b19sZTMyKDB4MDMwMzQwMDcpOworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUVYX0NTMF9UTUcyX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHgwNDA0MDUwMik7Cit9CisKK3ZvaWQgYnNwX2luaXQodm9pZCkKK3sKKwkvKiBJZiBNQUdJQyBOdW1iZXIgaXMgcHJlc2VudCwgbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgKi8KKwlpZihfX2xlNjRfdG9fY3B1KCoodTY0KikoQVJBTV9CQVNFQUREUisweDEwMDAwKSkgID09IENPTUNFUlRPX1BBUlRfTUFHSUMpCisJCXJldHVybjsKKworCVNvQ19QTExfaW5pdChDRkdfQ0xLKTsKKwlTb0NfQVBCX3NldHVwKCk7CisJU29DX0FIQl9zZXR1cCgpOworCVNvQ19BUkFNX3NldHVwKCk7CisKKwlpY2FjaGVfZW5hYmxlKCk7CisKKwkvL0FwcGx5IERFTkFMSSBERFIgY29uZmlndXJhdGlvbgorCWFwcGx5X2Rkcl9zZXR0aW5nKCk7CisvLwlTb0NfbmFuZF9pbml0KCk7Cit9CisKK3ZvaWQgbmFuZF9od19pbml0KHZvaWQpCit7CisgICAgICAgIFNvQ19ncGlvX2NmZygyOSwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgIFNvQ19ncGlvX2NmZygzMCwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgIFNvQ19ncGlvX2NmZygzMSwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgICoodm9sYXRpbGUgdTMyICopIEdQSU9fUElOX1NFTEVDVF9SRUcgJj0gX19jcHVfdG9fbGUzMih+KCgxIDw8IDMxKXwoMSA8PCAzMCl8KDEgPDwgMjkpfCgxIDw8IDIxKXwoMSA8PCAyMCl8KDEgPDwgNSkpKTsKKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKikgR1BJT19QSU5fU0VMRUNUX1JFRyB8PSBfX2NwdV90b19sZTMyKDEgPDwgNik7Cit9CisKK3ZvaWQgaTJjX2h3X2luaXQodm9pZCkKK3sKKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKikgR1BJT19QSU5fU0VMRUNUX1JFRyAmPSBfX2NwdV90b19sZTMyKH4oKDEgPDwgMTkpfCgxIDw8IDE4KSkpOworfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCUNGR19IWl9DTE9DSyA9IEhBTF9nZXRfYWhiX2NsaygpOworCisJLyogQ2FsbCBub3JfaHdfaW5pdCgpIG9ubHkgd2hlbiBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb24gaXMgbm90IGRvbmUgKi8KKwkvKiBJZiBNQUdJQyBOdW1iZXIgaXMgcHJlc2VudCwgbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgKi8KKwlpZihfX2xlNjRfdG9fY3B1KCoodTY0KikoQVJBTV9CQVNFQUREUisweDEwMDAwKSkgICE9IENPTUNFUlRPX1BBUlRfTUFHSUMpCisJCW5vcl9od19pbml0KCk7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorCW5hbmRfaHdfaW5pdCgpOworI2VuZGlmCisJaTJjX2h3X2luaXQoKTsKKworCS8qIFNldHVwIEV4dGVybmFsIHJlc2V0Ki8KKwlTb0NfZ3Bpb19jZmcoMTcsIEdQSU9fVFlQRV9PVVRQVVQpOworCXVkZWxheSgxMCk7CisJU29DX2dwaW9fc2V0XzAoU29DX2dwaW9fbWFzaygxNykpOworCXVkZWxheSgxMCk7CisJU29DX2dwaW9fc2V0XzEoU29DX2dwaW9fbWFzaygxNykpOworCisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisJLyogRW5hYmxlIEFSTTAgaGFyZHdhcmUgc3VwcG9ydCBmb3Igbm9uIGFsaWduZWQgYWNjZXNzZXMgKi8KKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKikgR1BJT19VUF9BTElHTl9BQ0NFU1NfTE9HSUMgfD0gX19jcHVfdG9fbGUzMigxKTsKKworCSoodm9sYXRpbGUgdTMyICopIFVTQl9QSFlfQ09ORl9SRUcgPSBfX2NwdV90b19sZTMyKDB4MDAyRDY0QzIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV9TSVpFOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXJldHVybiAwOworfQorCisjaWZkZWYgQk9BUkRfTEFURV9JTklUCitpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCit7CisjaWZkZWYgRERSX1RSQUlOSU5HX0RCRworCXU4IGRsbF9hZGowID0gMDsKKwl1OCBkbGxfYWRqMSA9IDA7CisJdTggZGxsX2FkajIgPSAwOworCXU4IGRsbF9hZGozID0gMDsKKwl1OCBkcXNfZGVsYXkwID0gMDsKKwl1OCBkcXNfZGVsYXkxID0gMDsKKwl1OCBkcXNfZGVsYXkyID0gMDsKKwl1OCBkcXNfZGVsYXkzID0gMDsKKyNlbmRpZgorCisJcHJpbnRmKCJSZXNlcnZlIE1TUCBtZW1vcnlcbiIpOworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCArPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplIC09IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCisjaWZkZWYgRERSX1RSQUlOSU5HX0RCRworCWRsbF9hZGowID0gREVOQUxJX0RMTF9BREoxX0RTMF9MOworCWRsbF9hZGoxID0gREVOQUxJX0RMTF9BREoxX0RTMV9IOworCWRsbF9hZGoyID0gREVOQUxJX0RMTF9BREoxX0RTMl9MOworCWRsbF9hZGozID0gREVOQUxJX0RMTF9BREoxX0RTM19IOworCWRxc19kZWxheTAgPSBERU5BTElfV1JfRFFTX0RFTEFZMDsKKwlkcXNfZGVsYXkxID0gREVOQUxJX1dSX0RRU19ERUxBWTE7CisJZHFzX2RlbGF5MiA9IERFTkFMSV9XUl9EUVNfREVMQVkyOworCWRxc19kZWxheTMgPSBERU5BTElfV1JfRFFTX0RFTEFZMzsKKworI2lmZGVmIEREUl9UUkFJTklORworCXByaW50ZigiRERSIFRyYWluaW5nIDogIik7CisjZWxzZQorCXByaW50ZigiRERSIGRlZmF1bHQgc2V0dGluZ3MgOiAiKTsKKyNlbmRpZgorCisJcHJpbnRmKCJcbkRMTF9BREooMCwxLDIsMyk6IDB4JXgsMHgleCwweCV4LDB4JXhcbiIsIGRsbF9hZGowLGRsbF9hZGoxLGRsbF9hZGoyLGRsbF9hZGozKTsKKwlwcmludGYoIldSX0RRUzpkZWxheTAgMHgleCwgZGVsYXkxIDB4JXgsIGRlbGF5MiAweCV4LCBkZWxheTMgMHgleFxuIiwgZHFzX2RlbGF5MCxkcXNfZGVsYXkxLGRxc19kZWxheTIsZHFzX2RlbGF5Myk7CisKKyNlbmRpZgorCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMWtldm0vY29uZmlnLm1rIGIvYm9hcmQvbWluZHNwZWVkL2Mxa2V2bS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZTk1OQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMWtldm0vY29uZmlnLm1rCkBAIC0wLDAgKzEgQEAKK1RFWFRfQkFTRSA9IDB4ODQwMDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMWtldm0vcmVzZXQuYyBiL2JvYXJkL21pbmRzcGVlZC9jMWtldm0vcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjljYjAxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mxa2V2bS9yZXNldC5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKwordm9pZCByZXNldF9lbWFjMF9waHkodTMyIGVuYWJsZSkKK3sKK30KKwordm9pZCByZXNldF9lbWFjMV9waHkodTMyIGVuYWJsZSkKK3sKK30KKwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa2V2bS91LWJvb3QubGRzIGIvYm9hcmQvbWluZHNwZWVkL2Mxa2V2bS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODMxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzFrZXZtL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCAgICAgIDoKKwl7CisJICBjcHUvYXJtMTEzNi9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa204MzI0MC9NYWtlZmlsZSBiL2JvYXJkL21pbmRzcGVlZC9jMWttODMyNDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjNDMyNQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMWttODMyNDAvTWFrZWZpbGUKQEAgLTAsMCArMSw2MyBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgorCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCisKK0NPQkpTCTo9IGJvYXJkLm8gcmVzZXQubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vYW0yOWx2MDQwYi5vIC4uL2NvbW1vbi9hbWx2NjQwdS5vXAorCQkuLi9jb21tb24vbmFuZC5vIC4uL2NvbW1vbi9pMmMubyAuLi9jb21tb24vY21kX2Jvb3Rjb21jZXJ0by5vCisJCQorU09CSlMJOj0KKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMT0FEX0FERFIgPSAweDEwNDAwMDAwCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworT0JKUyAgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUyAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworYWxsOgkkKExJQikKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpIAorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa204MzI0MC9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL2Mxa204MzI0MC9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDlmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzFrbTgzMjQwL2JvYXJkLmMKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworZXh0ZXJuIHZvaWQgYXJtX3dyaXRlNjQodTY0IGRhdGEsdm9sYXRpbGUgdTY0ICpwKTsKKworc3RhdGljIHZvaWQgY29uZmlnX2JvYXJkMSh2b2lkKQoreworICAvLyBDb25maWd1cmUgRERSCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDBfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAxX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDNfVkFMX0NGRzEpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDRfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA1X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA4X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEyX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xM19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE1X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzEpOworI2lmZGVmIENGR19ERFJfMTZCSVQKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMThfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOF9WQUxfQ0ZHMSB8ICgxVUxMIDw8IDI0KSk7CisjZWxzZQorCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE4X1ZBTF9DRkcxKTsKKyNlbmRpZgorCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE5X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIyX1ZBTF9DRkcxKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIzX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjVfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yN19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjhfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI5X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMyX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zM19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzRfVkFMX0NGRzEpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzVfVkFMX0NGRzEpOworCWFybV93cml0ZTY0KERFTkFMSV9DVExfMzVfVkFMX0NGRzEsREVOQUxJX0NUTF8zNV9EQVRBKTsvL3Nob3VsZCBiZSA2NGJpdCB3cml0ZQorCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zN19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzhfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM5X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80MF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQyX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80M19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDRfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ1X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80Nl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ4X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80OV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTBfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUxX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81Ml9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTNfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU0X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81NV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTZfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNThfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81OF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTlfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYwX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82MV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjJfVkFMX0NGRzEpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjNfVkFMX0NGRzEpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjRfVkFMX0NGRzEpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjVfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82N19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjhfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY5X1ZBTF9DRkcxKTsKKworCS8vIHN0YXJ0IEREUkMKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMSB8ICgxTEwgPDwgMzIpKTsKKwkvL3dhaXQgaW50X3N0YXR1c1syXSAoRFJBTSBpbml0IGNvbXBsZXRlKQorCXdoaWxlKCggX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiopKERFTkFMSV9DVExfMzZfREFUQSs0KSkgJiAweDQpID09IDApOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgoKHU2NClERU5BTElfQ1RMXzExX1ZBTF9DRkcxICYgfigweDAwMDA3RjAwMDAwMDAwMDBMTCkpIHwgKHdyX2Rxc19zaGlmdCA8PCA0MCkpOworCit9CisKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDIodm9pZCkKK3sKKyAgLy8gQ29uZmlndXJlIEREUgorCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAwX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAzX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA0X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDZfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA3X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDlfVkFMX0NGRzIpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzExX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTNfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE0X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTZfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE3X1ZBTF9DRkcyKTsKKyNpZmRlZiBDRkdfRERSXzE2QklUCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMThfVkFMX0NGRzIgfCAoMVVMTCA8PCAyNCkpOworI2Vsc2UKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMThfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOF9WQUxfQ0ZHMik7CisjZW5kaWYKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMik7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yM19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjRfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzNfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM0X1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM1X1ZBTF9DRkcyKTsKKwlhcm1fd3JpdGU2NChERU5BTElfQ1RMXzM1X1ZBTF9DRkcyLERFTkFMSV9DVExfMzVfREFUQSk7Ly9zaG91bGQgYmUgNjRiaXQgd3JpdGUKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80Ml9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDNfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ0X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80NV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDZfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ3X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80OF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDlfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUwX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81MV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTJfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUzX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81NF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTVfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU2X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81N19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNThfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU5X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82MF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYyX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYzX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY0X1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82OV9WQUxfQ0ZHMik7CisKKwkvLyBzdGFydCBERFJDCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzIgfCAoMUxMIDw8IDMyKSk7CisJLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKwl3aGlsZSgoIF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzM2X0RBVEErNCkpICYgMHg0KSA9PSAwKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMiAmIH4oMHgwMDAwN0YwMDAwMDAwMDAwTEwpKSB8ICh3cl9kcXNfc2hpZnQgPDwgNDApKTsKKworfQorCisKKwordm9pZCBhcHBseV9kZHJfc2V0dGluZyh2b2lkKQorewkJCisJc3dpdGNoIChDRkdfQ0xLKSB7CisJZGVmYXVsdDoKKwljYXNlIENGR19DTEtfNjUwXzE4N18zNzU6CisJY2FzZSBDRkdfQ0xLXzUzNF8xNzhfMzMwOgorCWNhc2UgQ0ZHX0NMS180NTBfMTY1XzMzMDoKKwkgICAgICAgIGNvbmZpZ19ib2FyZDEoKTsKKwkJYnJlYWs7CisKKwljYXNlIENGR19DTEtfNjUwXzIwMF8yMDA6CisJCWNvbmZpZ19ib2FyZDIoKTsKKwkJYnJlYWs7CisJfQorCQorCS8qIHRyYWluaW5nIGlzIHJlcXVpcmVkIGZvciAzNzVNSHogb25seSwKKyAgICAgICAgICogYnV0IG5pY2UgdG8gaGF2ZSBmb3IgMjAwTUh6IGFsc28gKi8KKyNpZiBkZWZpbmVkKEREUl9UUkFJTklORykKKwkJLyogRG8gdHJhaW5pbmcgKi8KKwkJc3RhcnRfdHJhaW5pbmcoKTsKKyNlbmRpZgorfQorCit1MzIgZ2V0X2Rkcl9zaXplKHZvaWQpCit7CisJcmV0dXJuIFBIWVNfU0RSQU1fU0laRTsKK30KKworCitzdGF0aWMgdm9pZCBub3JfaHdfaW5pdCh2b2lkKQoreworLy8gUmVzZXQgdGhlIGV4cCBidXMgYmVmb3JlIGNvbmZpZ3VyaW5nCisJKih2b2xhdGlsZSB1MzIgKilFWF9TV1JTVF9SRUcgPSBfX2NwdV90b19sZTMyKDB4MSk7CisJd2hpbGUgKCoodm9sYXRpbGUgdTMyICopRVhfU1dSU1RfUkVHKSA7CisvLyBTZXQgc2l6ZQorCSoodm9sYXRpbGUgdTMyICopRVhfQ1MwX1NFR19SRUcgPSBfX2NwdV90b19sZTMyKDB4RkZGKTsKKy8vIEZvcmNlIE5PUiBDUyB0byAxNiBiaXRzIGJ1cyBzaXplIChuZWVkZWQgZm9yIHJlY292ZXJ5IHdpdGggdS1ib290X2FyYW0gaW4gc29tZSBjYXNlcykKKwkqKHZvbGF0aWxlIHUzMiAqKUVYX0NTMF9DRkdfUkVHIHw9IChfX2NwdV90b19sZTMyKENTeF9DRkdfQlVTX1NaXzE2KSk7CisvLyBBSEIgcnVucyBhdCAxODcuNU1IeiAsIGFuZCBFWFAgYXQgMzEuMjVNSHoKKwkqKHZvbGF0aWxlIHUzMiAqKUVYX0NMT0NLX0RJVl9SRUcgPSBfX2NwdV90b19sZTMyKDB4Nik7CisvLyBPcHRpbWl6ZWQgc2V0dGluZ3MKKwkqKHZvbGF0aWxlIHUzMiAqKUVYX0NTMF9UTUcxX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHgwMzAzNDAwNyk7CisgICAgICAgICoodm9sYXRpbGUgdTMyICopRVhfQ1MwX1RNRzJfUkVHID0gX19jcHVfdG9fbGUzMigweDA0MDQwNTAyKTsKK30KKwordm9pZCBic3BfaW5pdCh2b2lkKQoreworICAgICAgICAvKiBJZiBNQUdJQyBOdW1iZXIgaXMgcHJlc2VudCwgbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgCisgCSogIGluIGVlcHJvbS4gSnVzdCByZXR1cm4qLworICAgICAgICBpZihfX2xlNjRfdG9fY3B1KCoodTY0KikoQVJBTV9CQVNFQUREUisweDEwMDAwKSkgID09IENPTUNFUlRPX1BBUlRfTUFHSUMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisJU29DX1BMTF9pbml0KENGR19DTEspOworCVNvQ19BUEJfc2V0dXAoKTsKKwlTb0NfQUhCX3NldHVwKCk7CisJU29DX0FSQU1fc2V0dXAoKTsKKworCWljYWNoZV9lbmFibGUoKTsKKworCS8vQXBwbHkgREVOQUxJIEREUiBjb25maWd1cmF0aW9uCisJYXBwbHlfZGRyX3NldHRpbmcoKTsKKy8vCVNvQ19uYW5kX2luaXQoKTsKK30KKwordm9pZCBuYW5kX2h3X2luaXQodm9pZCkKK3sKKyAgICAgICAgU29DX2dwaW9fY2ZnKDI5LCBHUElPX1RZUEVfT1VUUFVUKTsKKyAgICAgICAgU29DX2dwaW9fY2ZnKDMwLCBHUElPX1RZUEVfT1VUUFVUKTsKKyAgICAgICAgU29DX2dwaW9fY2ZnKDMxLCBHUElPX1RZUEVfT1VUUFVUKTsKKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKikgR1BJT19QSU5fU0VMRUNUX1JFRyAmPSBfX2NwdV90b19sZTMyKH4oKDEgPDwgMzEpfCgxIDw8IDMwKXwoMSA8PCAyOSl8KDEgPDwgMjEpfCgxIDw8IDIwKXwoMSA8PCA1KSkpOworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKSBHUElPX1BJTl9TRUxFQ1RfUkVHIHw9IF9fY3B1X3RvX2xlMzIoMSA8PCA2KTsKK30KKwordm9pZCBpMmNfaHdfaW5pdCh2b2lkKQoreworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKSBHUElPX1BJTl9TRUxFQ1RfUkVHICY9IF9fY3B1X3RvX2xlMzIofigoMSA8PCAxOSl8KDEgPDwgMTgpKSk7Cit9CisKK3ZvaWQgc3BpX2h3X2luaXQodm9pZCkKK3sKKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKikgR1BJT19QSU5fU0VMRUNUX1JFRyAmPSBfX2NwdV90b19sZTMyKH4oKDEgPDwgMjcpfCgxIDw8IDI2KXwoMSA8PCAyNSl8KDEgPDwgMjQpfCgxIDw8IDEzKXwoMSA8PCAxMikpKTsKK30KKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwlDRkdfSFpfQ0xPQ0sgPSBIQUxfZ2V0X2FoYl9jbGsoKTsKKworICAgICAgICAvKiBDYWxsIG5vcl9od19pbml0KCkgb25seSB3aGVuIGxvdyBsZXZlbCBpbml0aWFsaXphdGlvbiBpcyBub3QgZG9uZSAqLworICAgICAgICAvKiBJZiBNQUdJQyBOdW1iZXIgaXMgcHJlc2VudCwgbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgKi8KKyAgICAgICAgaWYoX19sZTY0X3RvX2NwdSgqKHU2NCopKEFSQU1fQkFTRUFERFIrMHgxMDAwMCkpICAhPSBDT01DRVJUT19QQVJUX01BR0lDKQorICAgICAgICAgICAgICAgIG5vcl9od19pbml0KCk7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorCW5hbmRfaHdfaW5pdCgpOworI2VuZGlmCisJaTJjX2h3X2luaXQoKTsKKworCXNwaV9od19pbml0KCk7CisKKwkvKiBTZXR1cCBFeHRlcm5hbCByZXNldCovCisJU29DX2dwaW9fY2ZnKDE3LCBHUElPX1RZUEVfT1VUUFVUKTsKKwl1ZGVsYXkoMTApOworCVNvQ19ncGlvX3NldF8wKFNvQ19ncGlvX21hc2soMTcpKTsKKwl1ZGVsYXkoMTApOworCVNvQ19ncGlvX3NldF8xKFNvQ19ncGlvX21hc2soMTcpKTsKKworCisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisgICAgICAgIC8qIEVuYWJsZSBBUk0wIGhhcmR3YXJlIHN1cHBvcnQgZm9yIG5vbiBhbGlnbmVkIGFjY2Vzc2VzICovCisgICAgICAgICoodm9sYXRpbGUgdTMyICopIEdQSU9fVVBfQUxJR05fQUNDRVNTX0xPR0lDIHw9IF9fY3B1X3RvX2xlMzIoMSk7CisKKwkqKHZvbGF0aWxlIHUzMiAqKSBVU0JfUEhZX0NPTkZfUkVHID0gX19jcHVfdG9fbGUzMigweDAwMkQ2NEMyKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fU0laRTsKKworCXJldHVybiAwOworfQorCitpbnQgbWlzY19pbml0X3Iodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEJPQVJEX0xBVEVfSU5JVAoraW50IGJvYXJkX2xhdGVfaW5pdCh2b2lkKQoreworI2lmZGVmIEREUl9UUkFJTklOR19EQkcKKwl1OCBkbGxfYWRqMCA9IDA7CisJdTggZGxsX2FkajEgPSAwOworCXU4IGRsbF9hZGoyID0gMDsKKwl1OCBkbGxfYWRqMyA9IDA7CisJdTggZHFzX2RlbGF5MCA9IDA7CisJdTggZHFzX2RlbGF5MSA9IDA7CisJdTggZHFzX2RlbGF5MiA9IDA7CisJdTggZHFzX2RlbGF5MyA9IDA7CisjZW5kaWYKKworCXByaW50ZigiUmVzZXJ2ZSBNU1AgbWVtb3J5XG4iKTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgKz0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAtPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRTsKKworI2lmZGVmIEREUl9UUkFJTklOR19EQkcKKwlkbGxfYWRqMCA9IERFTkFMSV9ETExfQURKMV9EUzBfTDsKKwlkbGxfYWRqMSA9IERFTkFMSV9ETExfQURKMV9EUzFfSDsKKwlkbGxfYWRqMiA9IERFTkFMSV9ETExfQURKMV9EUzJfTDsKKwlkbGxfYWRqMyA9IERFTkFMSV9ETExfQURKMV9EUzNfSDsKKwlkcXNfZGVsYXkwID0gREVOQUxJX1dSX0RRU19ERUxBWTA7CisJZHFzX2RlbGF5MSA9IERFTkFMSV9XUl9EUVNfREVMQVkxOworCWRxc19kZWxheTIgPSBERU5BTElfV1JfRFFTX0RFTEFZMjsKKwlkcXNfZGVsYXkzID0gREVOQUxJX1dSX0RRU19ERUxBWTM7CisKKyNpZmRlZiBERFJfVFJBSU5JTkcKKwlwcmludGYoIkREUiBUcmFpbmluZyA6ICIpOworI2Vsc2UKKwlwcmludGYoIkREUiBkZWZhdWx0IHNldHRpbmdzIDogIik7CisjZW5kaWYKKworCXByaW50ZigiXG5ETExfQURKKDAsMSwyLDMpOiAweCV4LDB4JXgsMHgleCwweCV4XG4iLCBkbGxfYWRqMCxkbGxfYWRqMSxkbGxfYWRqMixkbGxfYWRqMyk7CisJcHJpbnRmKCJXUl9EUVM6ZGVsYXkwIDB4JXgsIGRlbGF5MSAweCV4LCBkZWxheTIgMHgleCwgZGVsYXkzIDB4JXhcbiIsIGRxc19kZWxheTAsZHFzX2RlbGF5MSxkcXNfZGVsYXkyLGRxc19kZWxheTMpOworCisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvYzFrbTgzMjQwL2NvbmZpZy5tayBiL2JvYXJkL21pbmRzcGVlZC9jMWttODMyNDAvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGU5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzFrbTgzMjQwL2NvbmZpZy5tawpAQCAtMCwwICsxIEBACitURVhUX0JBU0UgPSAweDg0MDAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvYzFrbTgzMjQwL3Jlc2V0LmMgYi9ib2FyZC9taW5kc3BlZWQvYzFrbTgzMjQwL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5Y2IwMQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMWttODMyNDAvcmVzZXQuYwpAQCAtMCwwICsxLDMwIEBACisvKgorICogKEMpIENvcHlyaWdodCBNaW5kc3BlZWQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKK3ZvaWQgcmVzZXRfZW1hYzBfcGh5KHUzMiBlbmFibGUpCit7Cit9CisKK3ZvaWQgcmVzZXRfZW1hYzFfcGh5KHUzMiBlbmFibGUpCit7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMWttODMyNDAvdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC9jMWttODMyNDAvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgzMTlkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mxa204MzI0MC91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgICAgICA6CisJeworCSAgY3B1L2FybTExMzYvc3RhcnQubwkoLnRleHQpCisJICAqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMWttZmNuLWV2bS9NYWtlZmlsZSBiL2JvYXJkL21pbmRzcGVlZC9jMWttZmNuLWV2bS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWM0MzI1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mxa21mY24tZXZtL01ha2VmaWxlCkBAIC0wLDAgKzEsNjMgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBib2FyZC5vIHJlc2V0Lm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL2FtMjlsdjA0MGIubyAuLi9jb21tb24vYW1sdjY0MHUub1wKKwkJLi4vY29tbW9uL25hbmQubyAuLi9jb21tb24vaTJjLm8gLi4vY29tbW9uL2NtZF9ib290Y29tY2VydG8ubworCQkKK1NPQkpTCTo9CisKK2djY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKKworTE9BRF9BRERSID0gMHgxMDQwMDAwMAorTERTQ1JJUFQgPSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworCitIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCisKK09CSlMgICAgOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKK2FsbDoJJChMSUIpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCisKK2JvYXJkLm86IGJvYXJkLmMKKwkkKENDKSAkKENGTEFHUykgLWZwaWMgLWMgLW8gJEAgJDwKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKSAKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMWttZmNuLWV2bS9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL2Mxa21mY24tZXZtL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5MTU4MgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMWttZmNuLWV2bS9ib2FyZC5jCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYnNwLmg+CitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKK2V4dGVybiB2b2lkIGFybV93cml0ZTY0KHU2NCBkYXRhLHZvbGF0aWxlIHU2NCAqcCk7CisKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDEodm9pZCkKK3sKKyAgLy8gQ29uZmlndXJlIEREUgorCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAwX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAzX1ZBTF9DRkcxKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA0X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDZfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDlfVkFMX0NGRzEpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTBfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzExX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTNfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE0X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTZfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMThfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTlfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIwX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjJfVkFMX0NGRzEpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjNfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI0X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjZfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjlfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMwX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzJfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMzX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zNF9WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zNV9WQUxfQ0ZHMSk7CisJYXJtX3dyaXRlNjQoREVOQUxJX0NUTF8zNV9WQUxfQ0ZHMSxERU5BTElfQ1RMXzM1X0RBVEEpOy8vc2hvdWxkIGJlIDY0Yml0IHdyaXRlCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzZfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zOF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzlfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQwX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80MV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDJfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQzX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80NF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDVfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80N19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDhfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ5X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81MF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUyX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81M19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTRfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU1X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81Nl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU4X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81OV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjBfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYxX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Ml9WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82M19WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82NF9WQUxfQ0ZHMSk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82NV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjZfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82OF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjlfVkFMX0NGRzEpOworCisJLy8gc3RhcnQgRERSQworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAyX1ZBTF9DRkcxIHwgKDFMTCA8PCAzMikpOworCS8vd2FpdCBpbnRfc3RhdHVzWzJdIChEUkFNIGluaXQgY29tcGxldGUpCisJd2hpbGUoKCBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyKikoREVOQUxJX0NUTF8zNl9EQVRBKzQpKSAmIDB4NCkgPT0gMCk7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzEgJiB+KDB4MDAwMDdGMDAwMDAwMDAwMExMKSkgfCAod3JfZHFzX3NoaWZ0IDw8IDQwKSk7CisKK30KKworc3RhdGljIHZvaWQgY29uZmlnX2JvYXJkMih2b2lkKQoreworICAvLyBDb25maWd1cmUgRERSCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDNfVkFMX0NGRzIpOworLy8JKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDRfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMik7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEyX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xM19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMik7CisvLwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yM19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjRfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzI3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzI4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzMxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zMl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzMzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzNfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM0X1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM1X1ZBTF9DRkcyKTsKKwlhcm1fd3JpdGU2NChERU5BTElfQ1RMXzM1X1ZBTF9DRkcyLERFTkFMSV9DVExfMzVfREFUQSk7Ly9zaG91bGQgYmUgNjRiaXQgd3JpdGUKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMzdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzM4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDBfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80MV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQxX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80Ml9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDNfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ0X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80NV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDZfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF80N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzQ3X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNDhfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF80OF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzQ5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNDlfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81MF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUwX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81MV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzUyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTJfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzUzX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81NF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNTVfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU2X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNTdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF81N19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzU4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNThfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF81OV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzU5X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82MF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzYxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82Ml9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYyX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82M19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzYzX1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY0X1ZBTF9DRkcyKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82NV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82OF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82OV9WQUxfQ0ZHMik7CisKKwkvLyBzdGFydCBERFJDCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzIgfCAoMUxMIDw8IDMyKSk7CisJLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKwl3aGlsZSgoIF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzM2X0RBVEErNCkpICYgMHg0KSA9PSAwKTsKKy8vCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMiAmIH4oMHgwMDAwN0YwMDAwMDAwMDAwTEwpKSB8ICh3cl9kcXNfc2hpZnQgPDwgNDApKTsKKworfQorCisKKwordm9pZCBhcHBseV9kZHJfc2V0dGluZyh2b2lkKQorewkJCQorCXN3aXRjaCAoQ0ZHX0NMSykgeworCWRlZmF1bHQ6CisJY2FzZSBDRkdfQ0xLXzY1MF8xODdfMzc1OgorCWNhc2UgQ0ZHX0NMS181MzRfMTc4XzMzMDoKKwljYXNlIENGR19DTEtfNDUwXzE2NV8zMzA6CisJICAgICAgICBjb25maWdfYm9hcmQxKCk7CisJCWJyZWFrOworCisJY2FzZSBDRkdfQ0xLXzY1MF8yMDBfMjAwOgorCQljb25maWdfYm9hcmQyKCk7CisJCWJyZWFrOworCX0KKwkKKwkvKiB0cmFpbmluZyBpcyByZXF1aXJlZCBmb3IgMzc1TUh6IG9ubHksCisgICAgICAgICAqIGJ1dCBuaWNlIHRvIGhhdmUgZm9yIDIwME1IeiBhbHNvICovCisjaWYgZGVmaW5lZChERFJfVFJBSU5JTkcpCisJCS8qIERvIHRyYWluaW5nICovCisJCXN0YXJ0X3RyYWluaW5nKCk7CisjZW5kaWYKK30KKwordTMyIGdldF9kZHJfc2l6ZSh2b2lkKQoreworCXJldHVybiBQSFlTX1NEUkFNX1NJWkU7Cit9CisKKworc3RhdGljIHZvaWQgbm9yX2h3X2luaXQodm9pZCkKK3sKKy8vIFJlc2V0IHRoZSBleHAgYnVzIGJlZm9yZSBjb25maWd1cmluZworCSoodm9sYXRpbGUgdTMyICopRVhfU1dSU1RfUkVHID0gX19jcHVfdG9fbGUzMigweDEpOworCXdoaWxlICgqKHZvbGF0aWxlIHUzMiAqKUVYX1NXUlNUX1JFRykgOworLy8gU2V0IHNpemUKKwkqKHZvbGF0aWxlIHUzMiAqKUVYX0NTMF9TRUdfUkVHID0gX19jcHVfdG9fbGUzMigweEZGRik7CisvLyBGb3JjZSBOT1IgQ1MgdG8gMTYgYml0cyBidXMgc2l6ZSAobmVlZGVkIGZvciByZWNvdmVyeSB3aXRoIHUtYm9vdF9hcmFtIGluIHNvbWUgY2FzZXMpCisJKih2b2xhdGlsZSB1MzIgKilFWF9DUzBfQ0ZHX1JFRyB8PSAoX19jcHVfdG9fbGUzMihDU3hfQ0ZHX0JVU19TWl8xNikpOworLy8gQUhCIHJ1bnMgYXQgMTg3LjVNSHogLCBhbmQgRVhQIGF0IDMxLjI1TUh6CisJKih2b2xhdGlsZSB1MzIgKilFWF9DTE9DS19ESVZfUkVHID0gX19jcHVfdG9fbGUzMigweDYpOworLy8gT3B0aW1pemVkIHNldHRpbmdzCisJKih2b2xhdGlsZSB1MzIgKilFWF9DUzBfVE1HMV9SRUcgPSBfX2NwdV90b19sZTMyKDB4MDMwMzQwMDcpOworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUVYX0NTMF9UTUcyX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHgwNDA0MDUwMik7Cit9CisKK3ZvaWQgYnNwX2luaXQodm9pZCkKK3sKKyAgICAgICAgLyogSWYgTUFHSUMgTnVtYmVyIGlzIHByZXNlbnQsIGxvdyBsZXZlbCBpbml0aWFsaXphdGlvbiBpcyBkb25lICovCisgICAgICAgIGlmKF9fbGU2NF90b19jcHUoKih1NjQqKShBUkFNX0JBU0VBRERSKzB4MTAwMDApKSAgPT0gQ09NQ0VSVE9fUEFSVF9NQUdJQykKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKwlTb0NfUExMX2luaXQoQ0ZHX0NMSyk7CisJU29DX0FQQl9zZXR1cCgpOworCVNvQ19BSEJfc2V0dXAoKTsKKwlTb0NfQVJBTV9zZXR1cCgpOworCisJaWNhY2hlX2VuYWJsZSgpOworCisJLy9BcHBseSBERU5BTEkgRERSIGNvbmZpZ3VyYXRpb24KKwlhcHBseV9kZHJfc2V0dGluZygpOworLy8JU29DX25hbmRfaW5pdCgpOworfQorCit2b2lkIG5hbmRfaHdfaW5pdCh2b2lkKQoreworICAgICAgICBTb0NfZ3Bpb19jZmcoMjksIEdQSU9fVFlQRV9PVVRQVVQpOworICAgICAgICBTb0NfZ3Bpb19jZmcoMzAsIEdQSU9fVFlQRV9PVVRQVVQpOworICAgICAgICBTb0NfZ3Bpb19jZmcoMzEsIEdQSU9fVFlQRV9PVVRQVVQpOworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKSBHUElPX1BJTl9TRUxFQ1RfUkVHICY9IF9fY3B1X3RvX2xlMzIofigoMSA8PCAzMSl8KDEgPDwgMzApfCgxIDw8IDI5KXwoMSA8PCAyMSl8KDEgPDwgMjApfCgxIDw8IDUpKSk7CisgICAgICAgICoodm9sYXRpbGUgdTMyICopIEdQSU9fUElOX1NFTEVDVF9SRUcgfD0gX19jcHVfdG9fbGUzMigoMSA8PCA2KSk7Cit9CisKK3ZvaWQgaTJjX2h3X2luaXQodm9pZCkKK3sKKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKikgR1BJT19QSU5fU0VMRUNUX1JFRyAmPSBfX2NwdV90b19sZTMyKH4oKDEgPDwgMTkpfCgxIDw8IDE4KSkpOworfQorCit2b2lkIHNwaV9od19pbml0KHZvaWQpCit7CisgICAgICAgICoodm9sYXRpbGUgdTMyICopIEdQSU9fUElOX1NFTEVDVF9SRUcgJj0gX19jcHVfdG9fbGUzMih+KCgxIDw8IDI3KXwoMSA8PCAyNil8KDEgPDwgMjUpfCgxIDw8IDI0KXwoMSA8PCAxMyl8KDEgPDwgMTIpKSk7Cit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJQ0ZHX0haX0NMT0NLID0gSEFMX2dldF9haGJfY2xrKCk7CisKKyAgICAgICAgLyogQ2FsbCBub3JfaHdfaW5pdCgpIG9ubHkgd2hlbiBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb24gaXMgbm90IGRvbmUgKi8KKyAgICAgICAgLyogSWYgTUFHSUMgTnVtYmVyIGlzIHByZXNlbnQsIGxvdyBsZXZlbCBpbml0aWFsaXphdGlvbiBpcyBkb25lICovCisgICAgICAgIGlmKF9fbGU2NF90b19jcHUoKih1NjQqKShBUkFNX0JBU0VBRERSKzB4MTAwMDApKSAgIT0gQ09NQ0VSVE9fUEFSVF9NQUdJQykKKyAgICAgICAgICAgICAgICBub3JfaHdfaW5pdCgpOworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKwluYW5kX2h3X2luaXQoKTsKKyNlbmRpZgorCWkyY19od19pbml0KCk7CisKKwlzcGlfaHdfaW5pdCgpOworCisJLyogU2V0dXAgRXh0ZXJuYWwgcmVzZXQqLworCVNvQ19ncGlvX2NmZygxNywgR1BJT19UWVBFX09VVFBVVCk7CisJdWRlbGF5KDEwKTsKKwlTb0NfZ3Bpb19zZXRfMChTb0NfZ3Bpb19tYXNrKDE3KSk7CisJdWRlbGF5KDEwKTsKKwlTb0NfZ3Bpb19zZXRfMShTb0NfZ3Bpb19tYXNrKDE3KSk7CisKKworCS8qIGFyY2ggbnVtYmVyIG9mIE1pbmRzcGVlZCBDb21jZXJ0byAqLworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfTTgyNVhYOworCisJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBMSU5VWF9CT09UUEFSQU1fQUREUjsKKworICAgICAgICAvKiBFbmFibGUgQVJNMCBoYXJkd2FyZSBzdXBwb3J0IGZvciBub24gYWxpZ25lZCBhY2Nlc3NlcyAqLworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKSBHUElPX1VQX0FMSUdOX0FDQ0VTU19MT0dJQyB8PSBfX2NwdV90b19sZTMyKDEpOworCisJKih2b2xhdGlsZSB1MzIgKikgVVNCX1BIWV9DT05GX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHgwMDJENjRDMik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU07CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBCT0FSRF9MQVRFX0lOSVQKK2ludCBib2FyZF9sYXRlX2luaXQodm9pZCkKK3sKKyNpZmRlZiBERFJfVFJBSU5JTkdfREJHCisJdTggZGxsX2FkajAgPSAwOworCXU4IGRsbF9hZGoxID0gMDsKKwl1OCBkbGxfYWRqMiA9IDA7CisJdTggZGxsX2FkajMgPSAwOworCXU4IGRxc19kZWxheTAgPSAwOworCXU4IGRxc19kZWxheTEgPSAwOworCXU4IGRxc19kZWxheTIgPSAwOworCXU4IGRxc19kZWxheTMgPSAwOworI2VuZGlmCisKKwlwcmludGYoIlJlc2VydmUgTVNQIG1lbW9yeVxuIik7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ICs9IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgLT0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisKKyNpZmRlZiBERFJfVFJBSU5JTkdfREJHCisJZGxsX2FkajAgPSBERU5BTElfRExMX0FESjFfRFMwX0w7CisJZGxsX2FkajEgPSBERU5BTElfRExMX0FESjFfRFMxX0g7CisJZGxsX2FkajIgPSBERU5BTElfRExMX0FESjFfRFMyX0w7CisJZGxsX2FkajMgPSBERU5BTElfRExMX0FESjFfRFMzX0g7CisJZHFzX2RlbGF5MCA9IERFTkFMSV9XUl9EUVNfREVMQVkwOworCWRxc19kZWxheTEgPSBERU5BTElfV1JfRFFTX0RFTEFZMTsKKwlkcXNfZGVsYXkyID0gREVOQUxJX1dSX0RRU19ERUxBWTI7CisJZHFzX2RlbGF5MyA9IERFTkFMSV9XUl9EUVNfREVMQVkzOworCisjaWZkZWYgRERSX1RSQUlOSU5HCisJcHJpbnRmKCJERFIgVHJhaW5pbmcgOiAiKTsKKyNlbHNlCisJcHJpbnRmKCJERFIgZGVmYXVsdCBzZXR0aW5ncyA6ICIpOworI2VuZGlmCisKKwlwcmludGYoIlxuRExMX0FESigwLDEsMiwzKTogMHgleCwweCV4LDB4JXgsMHgleFxuIiwgZGxsX2FkajAsZGxsX2FkajEsZGxsX2FkajIsZGxsX2FkajMpOworCXByaW50ZigiV1JfRFFTOmRlbGF5MCAweCV4LCBkZWxheTEgMHgleCwgZGVsYXkyIDB4JXgsIGRlbGF5MyAweCV4XG4iLCBkcXNfZGVsYXkwLGRxc19kZWxheTEsZHFzX2RlbGF5MixkcXNfZGVsYXkzKTsKKworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa21mY24tZXZtL2NvbmZpZy5tayBiL2JvYXJkL21pbmRzcGVlZC9jMWttZmNuLWV2bS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZTk1OQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMWttZmNuLWV2bS9jb25maWcubWsKQEAgLTAsMCArMSBAQAorVEVYVF9CQVNFID0gMHg4NDAwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mxa21mY24tZXZtL3Jlc2V0LmMgYi9ib2FyZC9taW5kc3BlZWQvYzFrbWZjbi1ldm0vcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjljYjAxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mxa21mY24tZXZtL3Jlc2V0LmMKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCit2b2lkIHJlc2V0X2VtYWMwX3BoeSh1MzIgZW5hYmxlKQoreworfQorCit2b2lkIHJlc2V0X2VtYWMxX3BoeSh1MzIgZW5hYmxlKQoreworfQorCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvYzFrbWZjbi1ldm0vdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC9jMWttZmNuLWV2bS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODMxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzFrbWZjbi1ldm0vdS1ib290LmxkcwpAQCAtMCwwICsxLDUxIEBACisvKgorICogKEMpIENvcHlyaWdodCBNaW5kc3BlZWQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCisJLiA9IEFMSUdOKDQpOworCS50ZXh0ICAgICAgOgorCXsKKwkgIGNwdS9hcm0xMTM2L3N0YXJ0Lm8JKC50ZXh0KQorCSAgKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvYzJrYXNpYy9NYWtlZmlsZSBiL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzhkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzJrYXNpYy9NYWtlZmlsZQpAQCAtMCwwICsxLDYyIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gYm9hcmQubyBwYWRfY29uZmlnLm8gLi4vY29tbW9uL2ZsYXNoLm8gaTJjLm8gbmFuZC5vCisKK1NPQkpTCTo9CisKK2djY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKKworTE9BRF9BRERSID0gMHgxMDQwMDAwMAorTERTQ1JJUFQgPSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworCitIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCisKK09CSlMgICAgOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKK2FsbDoJJChMSUIpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCisKK2JvYXJkLm86IGJvYXJkLmMKKwkkKENDKSAkKENGTEFHUykgLWZwaWMgLWMgLW8gJEAgJDwKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mya2FzaWMvYm9hcmQuYyBiL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4NDQyZQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL2JvYXJkLmMKQEAgLTAsMCArMSw5MSBAQAorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpb19jMjAwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2V4cC1idXNfYzIwMDAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbGtjb3JlX2MyMDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYnNwLmg+CitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2RlZmluZSBFWFBfQ1MwX1NFR19TSVpFX1ZBTCAgMHg3RkZGCisKKyNkZWZpbmUgQTlfVElNRVJfTE9BRCAgICAgICAgICAgMHgwCisjZGVmaW5lIEE5X1RJTUVSX0NPVU5URVIgMHg0CisjZGVmaW5lIEE5X1RJTUVSX0NOVFJMICAgICAgICAgIDB4OAorI2RlZmluZSBBOV9USU1FUl9FTkFCTEUgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgQTlfVElNRVJfUkVMT0FEICAgICAgICAgKDE8PDEpCisKKyNkZWZpbmUgTUFYX1RJTUVSX0NPVU5UIDB4ZmZmZmZmZmYKKwordm9pZCBjb21jZXJ0b19wYWRfY29uZmlnKCk7CisKK3ZvaWQgbm9yX2h3X2luaXQodm9pZCkKK3sKKwkqKHZvbGF0aWxlIHUzMiopIEVYUF9DUzBfU0VHX1JFRyA9IEVYUF9DUzBfU0VHX1NJWkVfVkFMOworCSoodm9sYXRpbGUgdTMyKikgRVhQX0NTMF9UTUcxX1JFRyA9IDB4MDMwMzQwMDc7CisJKih2b2xhdGlsZSB1MzIqKSBFWFBfQ1MwX1RNRzJfUkVHID0gMHgwNDA0MDUwMjsKK30KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCit2b2lkIG5hbmRfaHdfaW5pdCh2b2lkKQoreworICAgICAgICBTb0NfZ3Bpb19jZmcoMjgsIEdQSU9fVFlQRV9PVVRQVVQpOyAvKiBOQU5EIENFICovCisgICAgICAgIFNvQ19ncGlvX2NmZygyOSwgR1BJT19UWVBFX0lOUFVUKTsgIC8qIE5BTkQgQlIgKi8KK30KKyNlbmRpZgorCisKKyNpZiAwCit2b2lkIGE5X3RpbWVyX2luaXQodm9pZCkKK3sKKwkqKHZvbGF0aWxlIHUzMiopIChDT01DRVJUT19BOV9USU1FUl9CQVNFICsgQTlfVElNRVJfTE9BRCkgPSBNQVhfVElNRVJfQ09VTlQ7CisJKih2b2xhdGlsZSB1MzIqKSAoQ09NQ0VSVE9fQTlfVElNRVJfQkFTRSArIEE5X1RJTUVSX0NPVU5URVIpID0gTUFYX1RJTUVSX0NPVU5UOworCSoodm9sYXRpbGUgdTMyKikgKENPTUNFUlRPX0E5X1RJTUVSX0JBU0UgKyBBOV9USU1FUl9DTlRSTCkgPSBBOV9USU1FUl9FTkFCTEUgfCBBOV9USU1FUl9SRUxPQUQ7Cit9CisjZW5kaWYKKwordm9pZCBic3BfaW5pdCh2b2lkKQoreworCWludCB2YWw7CisKKwljb21jZXJ0b19wYWRfY29uZmlnKCk7CisKKwkvL0REUkMgT0RUIFNvdXJjZSBTZWxlY3QKKwkqKHZvbGF0aWxlIHUzMiopIENPTUNFUlRPX0dQSU9fTUlTQ19QSU5fU0VMRUNUX1JFRyA9ICggKDEgPDwgNikgfCAoKih2b2xhdGlsZSB1MzIqKSBDT01DRVJUT19HUElPX01JU0NfUElOX1NFTEVDVF9SRUcpKTsKKworCW5vcl9od19pbml0KCk7CisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKwlTb0NfbmFuZF9pbml0KCk7CisjZW5kaWYKKyNpZiAwCisJYTlfdGltZXJfaW5pdCgpOworI2VuZGlmCit9CisKK3ZvaWQgc2hvd19ib290X3Byb2dyZXNzKGludCBwcm9ncmVzcykKK3sKKwlwcmludGYoIkJvb3QgcmVhY2hlZCBzdGFnZSAlZFxuIiwgcHJvZ3Jlc3MpOworfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworICAgICAgICAvKiBhcmNoIG51bWJlciBvZiBNaW5kc3BlZWQgQ29tY2VydG8gKi8KKyAgICAgICAgZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9DT01DRVJUTzsKKworICAgICAgICAvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisgICAgICAgIGdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweDEwMDsKKworCisgICAgICAgIGdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IDB4MDsKKyAgICAgICAgZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSAweDIwMDAwMDAwOyAvLzUxMiBNQgorCisjaWYgMAorCWMya196ZHNfaW5pdCgpOworI2VuZGlmCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorCW5hbmRfaHdfaW5pdCgpOworI2VuZGlmCisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL2NvbmZpZy5tayBiL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTQ0M2IxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mya2FzaWMvY29uZmlnLm1rCkBAIC0wLDAgKzEgQEAKK1RFWFRfQkFTRSA9IDB4MTAwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mya2FzaWMvaTJjLmMgYi9ib2FyZC9taW5kc3BlZWQvYzJrYXNpYy9pMmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjAyOWNiCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mya2FzaWMvaTJjLmMKQEAgLTAsMCArMSw1NjIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorCisjZGVmaW5lIENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgICAgICAgMHg5MDQwMDAwMAorI2RlZmluZQlJMkNfQkFTRUFERFIJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDA5QzAwMCkKKworI2lmIGRlZmluZWQoQ09ORklHX0hBUkRfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19TT0ZUX0kyQykKKyNkZWZpbmUgTUFYX0kyQ19SRVRSWVMJICAgIDEwCisjZGVmaW5lIEkyQ19ERUxBWQkgICAgMTAwMAkvKiBTaG91bGQgYmUgYXQgbGVhc3QgdGhlICMgb2YgTUh6IG9mIFRjbGsgKi8KKworI2RlZmluZSBJMkNfQUREUiAgICAgICAgICAgICAgICAgICAgICAgIChJMkNfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBJMkNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgIChJMkNfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBJMkNfQ05UUiAgICAgICAgICAgICAgICAgICAgICAgIChJMkNfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBJMkNfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgIChJMkNfQkFTRUFERFIgKyAweDBjKQorI2RlZmluZSBJMkNfQ0NSRlMgICAgICAgICAgICAgICAgICAgICAgIChJMkNfQkFTRUFERFIgKyAweDBjKQorI2RlZmluZSBJMkNfWEFERFIgICAgICAgICAgICAgICAgICAgICAgIChJMkNfQkFTRUFERFIgKyAweDEwKQorI2RlZmluZSBJMkNfQ0NSSCAgICAgICAgICAgICAgICAgICAgICAgIChJMkNfQkFTRUFERFIgKyAweDE0KQorI2RlZmluZSBJMkNfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgIChJMkNfQkFTRUFERFIgKyAweDFjKQorCisvKiBDTlRSIC0gQ29udHJvbCByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIEkyQ19JRU4JCQkJKDE8PDcpCisjZGVmaW5lIEkyQ19FTkFCCQkJKDE8PDYpCisjZGVmaW5lIEkyQ19TVEEJCQkJKDE8PDUpCisjZGVmaW5lIEkyQ19TVFAJCQkJKDE8PDQpCisjZGVmaW5lIEkyQ19JRkxHCQkJKDE8PDMpCisjZGVmaW5lIEkyQ19BQUsJCQkJKDE8PDIpCisKKy8qIFNUQVQgLSBTdGF0dXMgY29kZXMgKi8KKyNkZWZpbmUgSTJDX0JVU19FUlJPUgkJCTB4MDAJLyogQnVzIGVycm9yIGluIG1hc3RlciBtb2RlIG9ubHkgKi8KKyNkZWZpbmUgSTJDX1NUQVJUX1RSQU5TTUlUCQkweDA4CS8qIFN0YXJ0IGNvbmRpdGlvbiB0cmFuc21pdHRlZCAqLworI2RlZmluZSBJMkNfUkVQRUFUX1NUQVJUX1RSQU5TTUlUCTB4MTAJLyogUmVwZWF0ZWQgU3RhcnQgY29uZGl0aW9uIHRyYW5zbWl0ZWQgKi8KKyNkZWZpbmUgSTJDX0FERFJFU1NfV19BQ0sJCTB4MTgJLyogQWRkcmVzcyArIFdyaXRlIGJpdCB0cmFuc21pdHRlZCwgQUNLIHJlY2VpdmVkICovCisjZGVmaW5lIEkyQ19BRERSRVNTX1dfTkFDSwkJMHgyMAkvKiBBZGRyZXNzICsgV3JpdGUgYml0IHRyYW5zbWl0dGVkLCBOQUNLIHJlY2VpdmVkICovCisjZGVmaW5lIEkyQ19EQVRBX1RSQU5TTUlUX0FDSwkJMHgyOAkvKiBEYXRhIGJ5dGUgdHJhbnNtaXR0ZWQgaW4gbWFzdGVyIG1vZGUgLCBBQ0sgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgSTJDX0RBVEFfVFJBTlNNSVRfTkFDSwkJMHgzMAkvKiBEYXRhIGJ5dGUgdHJhbnNtaXR0ZWQgaW4gbWFzdGVyIG1vZGUgLCBOQUNLIHJlY2VpdmVkICovCisjZGVmaW5lIEkyQ19BUkJJVF9MT1NUCQkJMHgzOAkvKiBBcmJpdHJhdGlvbiBsb3N0IGluIGFkZHJlc3Mgb3IgZGF0YSBieXRlICovCisjZGVmaW5lIEkyQ19BRERSRVNTX1JfQUNLCQkweDQwCS8qIEFkZHJlc3MgKyBSZWFkIGJpdCB0cmFuc21pdHRlZCwgQUNLIHJlY2VpdmVkICAqLworI2RlZmluZSBJMkNfQUREUkVTU19SX05BQ0sJCTB4NDgJLyogQWRkcmVzcyArIFJlYWQgYml0IHRyYW5zbWl0dGVkLCBOQUNLIHJlY2VpdmVkICAqLworI2RlZmluZSBJMkNfREFUQV9SRUNFSVZFX0FDSwkJMHg1MAkvKiBEYXRhIGJ5dGUgcmVjZWl2ZWQgaW4gbWFzdGVyIG1vZGUsIEFDSyB0cmFuc21pdHRlZCAgKi8KKyNkZWZpbmUgSTJDX0RBVEFfUkVDRUlWRV9OQUNLCQkweDU4CS8qIERhdGEgYnl0ZSByZWNlaXZlZCBpbiBtYXN0ZXIgbW9kZSwgTkFDSyB0cmFuc21pdHRlZCovCisjZGVmaW5lIEkyQ19BUkJJVF9MT1NUX0FERFJFU1MJCTB4NjgJLyogQXJiaXRyYXRpb24gbG9zdCBpbiBhZGRyZXNzICAqLworI2RlZmluZSBJMkNfR0VORVJBTF9DQUxMCQkweDcwCS8qIEdlbmVyYWwgQ2FsbCwgQUNLIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIEkyQ19OT19SRUxFVkFOVF9JTkZPCQkweEY4CS8qIE5vIHJlbGV2YW50IHN0YXR1cyBpbmZvcm1hdGlvbiwgSUZMRj0wICovCisKKyNkZWZpbmUgSTJDX1JFQURfUkVHKHJlZykJICAgICAgICAqKHZvbGF0aWxlIHUzMiopKHJlZykKKyNkZWZpbmUgSTJDX1dSSVRFX1JFRyhyZWcsIHZhbCkJICAgICAgICAqKHZvbGF0aWxlIHUzMiopKHJlZykgPSB2YWwKKyNkZWZpbmUgUkVTRVRfUkVHX0JJVFMocmVnLCB2YWwpICAgICAgICBJMkNfV1JJVEVfUkVHKHJlZywgSTJDX1JFQURfUkVHKHJlZykgJiB+KHZhbCkpCisKKyN1bmRlZglERUJVR19JMkMKKy8vI2RlZmluZSBERUJVR19JMkMKKworI2lmZGVmIERFQlVHX0kyQworI2RlZmluZSBEUCh4KSB4CisjZWxzZQorI2RlZmluZSBEUCh4KQorI2VuZGlmCisKKy8qIEFzc3VtaW5nIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgbWFzdGVyIG9uIHRoZSBidXMgKHVzKSAqLworCit2b2lkIGkyY19pbml0IChpbnQgc3BlZWQsIGludCBzbGF2ZWFkZHIpCit7CisJdW5zaWduZWQgaW50IG4sIG0sIGZyZXEsIG1hcmdpbiwgcG93ZXI7CisJdW5zaWduZWQgaW50IGFjdHVhbE4gPSAwLCBhY3R1YWxNID0gMDsKKwl1bnNpZ25lZCBpbnQgY29udHJvbCwgc3RhdHVzOworCXVuc2lnbmVkIGludCBtaW5NYXJnaW4gPSAweGZmZmZmZmZmOworCXVuc2lnbmVkIGludCB0Y2xrID0gQ0ZHX1RDTEs7CisJdW5zaWduZWQgaW50IGkyY0ZyZXEgPSBzcGVlZDsJLyogMTAwMDAwIG1heC4gRmFzdCBtb2RlIG5vdCBzdXBwb3J0ZWQgKi8KKworCURQIChwdXRzICgiaTJjX2luaXRcbiIpKTsKKworCWZvciAobiA9IDA7IG4gPCA4OyBuKyspIHsKKwkJZm9yIChtID0gMDsgbSA8IDE2OyBtKyspIHsKKwkJCXBvd2VyID0gMSA8PCBuOwkvKiBwb3dlciA9IDJeKG4pICovCisJCQlmcmVxID0gdGNsayAvICgxMCAqIChtICsgMSkgKiBwb3dlcik7CisJCQlpZiAoaTJjRnJlcSA+IGZyZXEpCisJCQkJbWFyZ2luID0gaTJjRnJlcSAtIGZyZXE7CisJCQllbHNlCisJCQkJbWFyZ2luID0gZnJlcSAtIGkyY0ZyZXE7CisJCQlpZiAobWFyZ2luIDwgbWluTWFyZ2luKSB7CisJCQkJbWluTWFyZ2luID0gbWFyZ2luOworCQkJCWFjdHVhbE4gPSBuOworCQkJCWFjdHVhbE0gPSBtOworCQkJfQorCQl9CisJfQorCisJRFAgKHB1dHMgKCJzZXR1cCBpMmMgYnVzXG4iKSk7CisKKwkvKiBTZXR1cCBidXMgKi8KKyAgICAgICAgSTJDX1dSSVRFX1JFRyhJMkNfU09GVF9SRVNFVCwgMCk7CisKKwlEUCAocHV0cyAoInVkZWxheS4uLlxuIikpOworCisJdWRlbGF5IChJMkNfREVMQVkpOworCisJRFAgKHB1dHMgKCJzZXQgYmF1ZHJhdGVcbiIpKTsKKworCUkyQ19XUklURV9SRUcoSTJDX1NUQVQsIChhY3R1YWxNIDw8IDMpIHwgYWN0dWFsTik7CisJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX0FBSyB8IEkyQ19FTkFCKTsKKworCXVkZWxheSAoSTJDX0RFTEFZICogMTApOworCisJRFAgKHB1dHMgKCJyZWFkIGNvbnRyb2wsIGJhdWRyYXRlXG4iKSk7CisKKwlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCWNvbnRyb2wgPSBJMkNfUkVBRF9SRUcoSTJDX0NOVFIpOworfQorCitzdGF0aWMgdWNoYXIgaTJjX3N0YXJ0ICh2b2lkKQoreworCXVuc2lnbmVkIGludCBjb250cm9sLCBzdGF0dXM7CisJaW50IGNvdW50ID0gMDsKKworCURQIChwdXRzICgiaTJjX3N0YXJ0XG4iKSk7CisKKwkvKiBTZXQgdGhlIHN0YXJ0IGJpdCAqLworCisJY29udHJvbCA9IEkyQ19SRUFEX1JFRyhJMkNfQ05UUik7CisJY29udHJvbCB8PSBJMkNfU1RBOwkvKiBnZW5lcmF0ZSB0aGUgSTJDX1NUQVJUX0JJVCAqLworCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIGNvbnRyb2wpOworCisJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKworCWNvdW50ID0gMDsKKwl3aGlsZSAoKHN0YXR1cyAmIDB4ZmYpICE9IEkyQ19TVEFSVF9UUkFOU01JVCkgeworCQl1ZGVsYXkgKEkyQ19ERUxBWSk7CisJCWlmIChjb3VudCA+IDIwKSB7CisJCQlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfU1RQKTsJLypzdG9wICovCisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KKwkJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwkJY291bnQrKzsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdWNoYXIgaTJjX3NlbGVjdF9kZXZpY2UgKHVjaGFyIGRldl9hZGRyLCB1Y2hhciByZWFkLCBpbnQgdGVuX2JpdCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzLCBkYXRhLCBiaXRzID0gNzsKKwlpbnQgY291bnQgPSAwOworCisJRFAgKHB1dHMgKCJpMmNfc2VsZWN0X2RldmljZVxuIikpOworCisJLyogT3V0cHV0IHNsYXZlIGFkZHJlc3MgKi8KKworCWlmICh0ZW5fYml0KSB7CisJCWJpdHMgPSAxMDsKKwl9CisKKwlkYXRhID0gKGRldl9hZGRyIDw8IDEpOworCS8qIHNldCB0aGUgcmVhZCBiaXQgKi8KKwlkYXRhIHw9IHJlYWQ7CisJSTJDX1dSSVRFX1JFRyhJMkNfREFUQSwgZGF0YSk7CisJLyogYXNzZXJ0IHRoZSBhZGRyZXNzICovCisJUkVTRVRfUkVHX0JJVFMgKEkyQ19DTlRSLCBJMkNfSUZMRyk7CisKKwl1ZGVsYXkgKEkyQ19ERUxBWSk7CisKKwlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCWNvdW50ID0gMDsKKwl3aGlsZSAoKChzdGF0dXMgJiAweGZmKSAhPSBJMkNfQUREUkVTU19SX0FDSykgJiYgKChzdGF0dXMgJiAweGZmKSAhPSBJMkNfQUREUkVTU19XX0FDSykpIHsKKwkJdWRlbGF5IChJMkNfREVMQVkpOworCQlpZiAoY291bnQgPiAyMCkgeworCQkJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX1NUUCk7CS8qc3RvcCAqLworCQkJcmV0dXJuIChzdGF0dXMpOworCQl9CisJCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJCWNvdW50Kys7CisJfQorCisJaWYgKGJpdHMgPT0gMTApIHsKKwkJcHJpbnRmICgiMTAgYml0IEkyQyBhZGRyZXNzaW5nIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOworCQlyZXR1cm4gKDB4ZmYpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB1Y2hhciBpMmNfZ2V0X2RhdGEgKHVjaGFyICogcmV0dXJuX2RhdGEsIGludCBsZW4pCit7CisKKwl1bnNpZ25lZCBpbnQgZGF0YSwgc3RhdHVzID0gMDsKKwlpbnQgY291bnQgPSAwOworCisJRFAgKHB1dHMgKCJpMmNfZ2V0X2RhdGFcbiIpKTsKKworCXdoaWxlIChsZW4pIHsKKworCQkvKiBHZXQgYW5kIHJldHVybiB0aGUgZGF0YSAqLworCisJCVJFU0VUX1JFR19CSVRTIChJMkNfQ05UUiwgSTJDX0lGTEcpOworCisJCXVkZWxheSAoSTJDX0RFTEFZICogNSk7CisKKwkJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwkJY291bnQrKzsKKwkJd2hpbGUgKChzdGF0dXMgJiAweGZmKSAhPSBJMkNfREFUQV9SRUNFSVZFX0FDSykgeworCQkJdWRlbGF5IChJMkNfREVMQVkpOworCQkJaWYgKGNvdW50ID4gMikgeworCQkJCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19TVFApOwkvKnN0b3AgKi8KKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJCQljb3VudCsrOworCQl9CisJCWRhdGEgPSBJMkNfUkVBRF9SRUcoSTJDX0RBVEEpOworCQlsZW4tLTsKKwkJKnJldHVybl9kYXRhID0gKHVjaGFyKSBkYXRhOworCQlyZXR1cm5fZGF0YSsrOworCX0KKwlSRVNFVF9SRUdfQklUUyAoSTJDX0NOVFIsIEkyQ19BQUsgfCBJMkNfSUZMRyk7CisJd2hpbGUgKChzdGF0dXMgJiAweGZmKSAhPSBJMkNfREFUQV9SRUNFSVZFX05BQ0spIHsKKwkJdWRlbGF5IChJMkNfREVMQVkpOworCQlpZiAoY291bnQgPiAyMDApIHsKKwkJCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19TVFApOwkvKnN0b3AgKi8KKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCQlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCQljb3VudCsrOworCX0KKwlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfU1RQKTsJLyogc3RvcCAqLworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHVjaGFyIGkyY193cml0ZV9kYXRhICh1bnNpZ25lZCBpbnQgKmRhdGEsIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwlpbnQgY291bnQgPSAwOworCXVuc2lnbmVkIGludCB0ZW1wOworCXVuc2lnbmVkIGludCAqdGVtcF9wdHIgPSBkYXRhOworCisJRFAgKHB1dHMgKCJpMmNfd3JpdGVfZGF0YVxuIikpOworCisJd2hpbGUgKGxlbikgeworCQl0ZW1wID0gKHVuc2lnbmVkIGludCkgKCp0ZW1wX3B0cik7CisJCUkyQ19XUklURV9SRUcoSTJDX0RBVEEsIHRlbXApOworCQlSRVNFVF9SRUdfQklUUyAoSTJDX0NOVFIsIEkyQ19JRkxHKTsKKworCQl1ZGVsYXkgKEkyQ19ERUxBWSk7CisKKwkJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwkJY291bnQrKzsKKwkJd2hpbGUgKChzdGF0dXMgJiAweGZmKSAhPSBJMkNfREFUQV9UUkFOU01JVF9BQ0spIHsKKwkJCXVkZWxheSAoSTJDX0RFTEFZKTsKKwkJCWlmIChjb3VudCA+IDIwKSB7CisJCQkJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX1NUUCk7CS8qc3RvcCAqLworCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCX0KKwkJCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJCQljb3VudCsrOworCQl9CisJCWxlbi0tOworCQl0ZW1wX3B0cisrOworCX0KKworLyogQ2FuJ3QgaGF2ZSB0aGUgd3JpdGUgaXNzdWluZyBhIHN0b3AgY29tbWFuZCAqLworLyogaXQncyB3cm9uZyB0byBoYXZlIGEgc3RvcCBiaXQgaW4gcmVhZCBzdHJlYW0gb3Igd3JpdGUgc3RyZWFtICovCisvKiBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIGl0J3MgcmVhbGx5IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgKi8KKy8qIG9yIHdoZXRoZXIgd2UgaGF2ZSBqdXN0IHNlbmQgdGhlIGRldmljZSBhZGRyZXNzICsgb2Zmc2V0ICovCisvKiB3ZSB3aWxsIHB1c2ggaXNzdWluZyB0aGUgc3RvcCBjb21tYW5kIG9mZiB0byB0aGUgb3JpZ2luYWwgKi8KKy8qIGNhbGxpbmcgZnVuY3Rpb24gKi8KKwkvKiBzZXQgdGhlIGludGVycnVwdCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfSUZMRyk7CisJdWRlbGF5IChJMkNfREVMQVkgKiAxMCk7CisJcmV0dXJuICgwKTsKK30KKworLyogY3JlYXRlZCB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgaTJjX3dyaXRlKCkgKi8KKy8qIGZ1bmN0aW9uIHdvcmtpbmcgcHJvcGVybHkuICovCisvKiBmdW5jdGlvbiB0byB3cml0ZSBieXRlcyBvdXQgb24gdGhlIGkyYyBidXMgKi8KKy8qIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBmdW5jdGlvbiBpMmNfd3JpdGVfZGF0YSgpICovCisvKiBleGNlcHQgdGhhdCBpdCByZXF1aXJlcyBhIGJ1ZmZlciB0aGF0IGlzIGFuICovCisvKiB1bnNpZ25lZCBjaGFyYWN0ZXIgYXJyYXkuICBZb3UgY2FuJ3QgdXNlICovCisvKiBpMmNfd3JpdGVfZGF0YSgpIHRvIHNlbmQgYW4gYXJyYXkgb2YgdW5zaWduZWQgY2hhcmFjdGVycyAqLworLyogc2luY2UgdGhlIGJ5dGUgb2YgaW50ZXJlc3QgZW5kcyB1cCBvbiB0aGUgd3JvbmcgZW5kIG9mIHRoZSBidXMgKi8KKy8qIGFhaCwgdGhlIGpveXMgb2YgYmlnIGVuZGlhbiB2ZXJzdXMgbGl0dGxlIGVuZGlhbiEgKi8KKy8qICovCisvKiByZXR1cm5zIDAgPSBzdWNjZXNzICovCisvKiAgICAgICAgIGFueXRoaW5nIG90aGVyIHRoYW4gemVybyBpcyBmYWlsdXJlICovCitzdGF0aWMgdWNoYXIgaTJjX3dyaXRlX2J5dGUgKHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwlpbnQgY291bnQgPSAwOworCXVuc2lnbmVkIGludCB0ZW1wOworCXVuc2lnbmVkIGNoYXIgKnRlbXBfcHRyID0gZGF0YTsKKworCURQIChwdXRzICgiaTJjX3dyaXRlX2J5dGVcbiIpKTsKKworCXdoaWxlIChsZW4pIHsKKwkJLyogU2V0IGFuZCBhc3NlcnQgdGhlIGRhdGEgKi8KKwkJdGVtcCA9ICp0ZW1wX3B0cjsKKwkJSTJDX1dSSVRFX1JFRyhJMkNfREFUQSwgdGVtcCk7CisJCVJFU0VUX1JFR19CSVRTIChJMkNfQ05UUiwgSTJDX0lGTEcpOworCisJCXVkZWxheSAoSTJDX0RFTEFZKjIpOworCisJCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJCWNvdW50Kys7CisJCXdoaWxlICgoc3RhdHVzICYgMHhmZikgIT0gSTJDX0RBVEFfVFJBTlNNSVRfQUNLKSB7CisJCQl1ZGVsYXkgKEkyQ19ERUxBWSoyKTsKKwkJCWlmIChjb3VudCA+IDIwKSB7CisJCQkJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX1NUUCk7CS8qc3RvcCAqLworCQkJCXJldHVybiAoc3RhdHVzKTsKKwkJCX0KKwkJCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJCQljb3VudCsrOworCQl9CisJCWxlbi0tOworCQl0ZW1wX3B0cisrOworCX0KKy8qIENhbid0IGhhdmUgdGhlIHdyaXRlIGlzc3VpbmcgYSBzdG9wIGNvbW1hbmQgKi8KKy8qIGl0J3Mgd3JvbmcgdG8gaGF2ZSBhIHN0b3AgYml0IGluIHJlYWQgc3RyZWFtIG9yIHdyaXRlIHN0cmVhbSAqLworLyogc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiBpdCdzIHJlYWxseSB0aGUgZW5kIG9mIHRoZSBjb21tYW5kICovCisvKiBvciB3aGV0aGVyIHdlIGhhdmUganVzdCBzZW5kIHRoZSBkZXZpY2UgYWRkcmVzcyArIG9mZnNldCAqLworLyogd2Ugd2lsbCBwdXNoIGlzc3VpbmcgdGhlIHN0b3AgY29tbWFuZCBvZmYgdG8gdGhlIG9yaWdpbmFsICovCisvKiBjYWxsaW5nIGZ1bmN0aW9uICovCisvKglJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfSUZMRyB8IEkyQ19TVFApOworCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19TVFApOyAqLworCS8qIHNldCB0aGUgaW50ZXJydXB0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlciAqLworCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19JRkxHKTsKKwl1ZGVsYXkgKEkyQ19ERUxBWSAqIDEwKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB1Y2hhcgoraTJjX3NldF9kZXZfb2Zmc2V0ICh1Y2hhciBkZXZfYWRkciwgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHRlbl9iaXQsCisJCSAgICBpbnQgYWxlbikKK3sKKwl1Y2hhciBzdGF0dXM7CisJdW5zaWduZWQgaW50IHRhYmxlWzJdOworCisvKiBpbml0aWFsaXplIHRoZSB0YWJsZSBvZiBhZGRyZXNzIG9mZnNldCBieXRlcyAqLworLyogdXRpbGl6ZWQgZm9yIDIgYnl0ZSBhZGRyZXNzIG9mZnNldHMgKi8KKy8qIE5PVEU6IHRoZSBvcmRlciBpcyBoaWdoIGJ5dGUgZmlyc3QhICovCisJdGFibGVbMV0gPSBvZmZzZXQgJiAweGZmOwkvKiBsb3cgYnl0ZSAqLworCXRhYmxlWzBdID0gb2Zmc2V0IC8gMHgxMDA7CS8qIGhpZ2ggYnl0ZSAqLworCisJRFAgKHB1dHMgKCJpMmNfc2V0X2Rldl9vZmZzZXRcbiIpKTsKKworCXN0YXR1cyA9IGkyY19zZWxlY3RfZGV2aWNlIChkZXZfYWRkciwgMCwgdGVuX2JpdCk7CisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJGYWlsZWQgdG8gc2VsZWN0IGRldmljZSBzZXR0aW5nIG9mZnNldDogMHglMDJ4XG4iLAorCQkJc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gc3RhdHVzOworCX0KKy8qIGNoZWNrIHRoZSBhZGRyZXNzIG9mZnNldCBsZW5ndGggKi8KKwlpZiAoYWxlbiA9PSAwKQorCQkvKiBubyBhZGRyZXNzIG9mZnNldCAqLworCQlyZXR1cm4gKDApOworCWVsc2UgaWYgKGFsZW4gPT0gMSkgeworCQkvKiAxIGJ5dGUgYWRkcmVzcyBvZmZzZXQgKi8KKwkJc3RhdHVzID0gaTJjX3dyaXRlX2RhdGEgKCZvZmZzZXQsIDEpOworCQlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCQlwcmludGYgKCJGYWlsZWQgdG8gd3JpdGUgZGF0YTogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJfSBlbHNlIGlmIChhbGVuID09IDIpIHsKKwkJLyogMiBieXRlcyBhZGRyZXNzIG9mZnNldCAqLworCQlzdGF0dXMgPSBpMmNfd3JpdGVfZGF0YSAodGFibGUsIDIpOworCQlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCQlwcmludGYgKCJGYWlsZWQgdG8gd3JpdGUgZGF0YTogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJfSBlbHNlIHsKKwkJLyogYWRkcmVzcyBvZmZzZXQgdW5rbm93biBvciBub3Qgc3VwcG9ydGVkICovCisJCXByaW50ZiAoIkFkZHJlc3MgbGVuZ3RoIG9mZnNldCAlZCBpcyBub3Qgc3VwcG9ydGVkXG4iLCBhbGVuKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOwkJLyogc3VjZXNzZnVsIGNvbXBsZXRpb24gKi8KK30KKwordWNoYXIKK2kyY19yZWFkICh1Y2hhciBkZXZfYWRkciwgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFsZW4sIHVjaGFyICogZGF0YSwKKwkgIGludCBsZW4pCit7CisJdWNoYXIgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBpbnQgaTJjRnJlcSA9IENGR19JMkNfU1BFRUQ7CisKKwlEUCAocHV0cyAoImkyY19yZWFkXG4iKSk7CisKKwlpMmNfaW5pdCAoaTJjRnJlcSwgMCk7CS8qIHNldCB0aGUgaTJjIGZyZXF1ZW5jeSAqLworCisJc3RhdHVzID0gaTJjX3N0YXJ0ICgpOworCisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJUcmFuc2FjdGlvbiBzdGFydCBmYWlsZWQ6IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXN0YXR1cyA9IGkyY19zZXRfZGV2X29mZnNldCAoZGV2X2FkZHIsIG9mZnNldCwgMCwgYWxlbik7CS8qIHNlbmQgdGhlIHNsYXZlIGFkZHJlc3MgKyBvZmZzZXQgKi8KKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIkZhaWxlZCB0byBzZXQgc2xhdmUgYWRkcmVzcyAmIG9mZnNldDogMHglMDJ4XG4iLAorCQkJc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWkyY19pbml0IChpMmNGcmVxLCAwKTsJLyogc2V0IHRoZSBpMmMgZnJlcXVlbmN5IGFnYWluICovCisKKwlzdGF0dXMgPSBpMmNfc3RhcnQgKCk7CisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJUcmFuc2FjdGlvbiByZXN0YXJ0IGZhaWxlZDogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gaTJjX3NlbGVjdF9kZXZpY2UgKGRldl9hZGRyLCAxLCAwKTsJLyogc2VuZCB0aGUgc2xhdmUgYWRkcmVzcyAqLworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiQWRkcmVzcyBub3QgYWNrbm93bGVkZ2VkOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBpMmNfZ2V0X2RhdGEgKGRhdGEsIGxlbik7CisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJEYXRhIG5vdCByZWNpZXZlZDogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiBzdGF0dXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEZ1bmN0aW9uIHRvIHNldCB0aGUgSTJDIHN0b3AgYml0ICovCit2b2lkIGkyY19zdG9wICh2b2lkKQoreworCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsICgweDEgPDwgNCkpOworfQorCisvKiBJMkMgd3JpdGUgZnVuY3Rpb24gKi8KKy8qIGRldl9hZGRyID0gZGV2aWNlIGFkZHJlc3MgKi8KKy8qIG9mZnNldCA9IGFkZHJlc3Mgb2Zmc2V0ICovCisvKiBhbGVuID0gbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBhZGRyZXNzIG9mZnNldCAqLworLyogZGF0YSA9IHBvaW50ZXIgdG8gYnVmZmVyIHRvIHJlYWQgZGF0YSBpbnRvICovCisvKiBsZW4gPSAjIG9mIGJ5dGVzIHRvIHJlYWQgKi8KKy8qICovCisvKiByZXR1cm5zIDAgPSBzdWNjZXNmdWwgKi8KKy8qICAgICAgICAgYW55dGhpbmcgYnV0IHplcm8gaXMgZmFpbHVyZSAqLwordWNoYXIKK2kyY193cml0ZSAodWNoYXIgZGV2X2FkZHIsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhbGVuLCB1Y2hhciAqIGRhdGEsCisJICAgaW50IGxlbikKK3sKKwl1Y2hhciBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBpMmNGcmVxID0gQ0ZHX0kyQ19TUEVFRDsKKworCURQIChwdXRzICgiaTJjX3dyaXRlXG4iKSk7CisKKwlpMmNfaW5pdCAoaTJjRnJlcSwgMCk7CS8qIHNldCB0aGUgaTJjIGZyZXF1ZW5jeSAqLworCisJc3RhdHVzID0gaTJjX3N0YXJ0ICgpOwkvKiBzZW5kIGEgc3RhcnQgYml0ICovCisKKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIlRyYW5zYWN0aW9uIHN0YXJ0IGZhaWxlZDogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gaTJjX3NldF9kZXZfb2Zmc2V0IChkZXZfYWRkciwgb2Zmc2V0LCAwLCBhbGVuKTsJLyogc2VuZCB0aGUgc2xhdmUgYWRkcmVzcyArIG9mZnNldCAqLworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiRmFpbGVkIHRvIHNldCBzbGF2ZSBhZGRyZXNzICYgb2Zmc2V0OiAweCUwMnhcbiIsCisJCQlzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiBzdGF0dXM7CisJfQorCisKKwlzdGF0dXMgPSBpMmNfd3JpdGVfYnl0ZSAoZGF0YSwgbGVuKTsJLyogd3JpdGUgdGhlIGRhdGEgKi8KKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIkRhdGEgbm90IHdyaXR0ZW46IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gc3RhdHVzOworCX0KKwkvKiBpc3N1ZSBhIHN0b3AgYml0ICovCisJaTJjX3N0b3AgKCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhbiBJMkMgZGV2aWNlIGlzIHByZXNlbnQgKi8KKy8qIGNoaXAgPSBkZXZpY2UgYWRkcmVzcyBvZiBjaGlwIHRvIGNoZWNrIGZvciAqLworLyogKi8KKy8qIHJldHVybnMgMCA9IHN1Y2Vzc2Z1bCwgdGhlIGRldmljZSBleGlzdHMgKi8KKy8qICAgICAgICAgYW55dGhpbmcgb3RoZXIgdGhhbiB6ZXJvIGlzIGZhaWx1cmUsIG5vIGRldmljZSAqLworaW50IGkyY19wcm9iZSAodWNoYXIgY2hpcCkKK3sKKworCS8qIFdlIGFyZSBqdXN0IGxvb2tpbmcgZm9yIGFuIDxBQ0s+IGJhY2suICovCisJLyogVG8gc2VlIGlmIHRoZSBkZXZpY2UvY2hpcCBpcyB0aGVyZSAqLworCisjaWZkZWYgREVCVUdfSTJDCisJdW5zaWduZWQgaW50IGkyY19zdGF0dXM7CisjZW5kaWYKKwl1Y2hhciBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBpMmNGcmVxID0gQ0ZHX0kyQ19TUEVFRDsKKworCURQIChwdXRzICgiaTJjX3Byb2JlXG4iKSk7CisKKwlpMmNfaW5pdCAoaTJjRnJlcSwgMCk7CS8qIHNldCB0aGUgaTJjIGZyZXF1ZW5jeSAqLworCisJc3RhdHVzID0gaTJjX3N0YXJ0ICgpOwkvKiBzZW5kIGEgc3RhcnQgYml0ICovCisKKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIlRyYW5zYWN0aW9uIHN0YXJ0IGZhaWxlZDogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiAoaW50KSBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gaTJjX3NldF9kZXZfb2Zmc2V0IChjaGlwLCAwLCAwLCAwKTsJLyogc2VuZCB0aGUgc2xhdmUgYWRkcmVzcyArIG5vIG9mZnNldCAqLworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiRmFpbGVkIHRvIHNldCBzbGF2ZSBhZGRyZXNzOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIChpbnQpIHN0YXR1czsKKwl9CisjaWZkZWYgREVCVUdfSTJDCisJaTJjX3N0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJcHJpbnRmICgiYWRkcmVzcyAlI3ggcmV0dXJuZWQgJSN4XG4iLCBjaGlwLCBpMmNfc3RhdHVzKTsKKyNlbmRpZgorCS8qIGlzc3VlIGEgc3RvcCBiaXQgKi8KKwlpMmNfc3RvcCAoKTsKKwlyZXR1cm4gMDsJCS8qIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiAqLworfQorCisjZW5kaWYgLyogKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSTJDKSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mya2FzaWMvbmFuZC5jIGIvYm9hcmQvbWluZHNwZWVkL2Mya2FzaWMvbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYzZiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzJrYXNpYy9uYW5kLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKworI2luY2x1ZGUgPG5hbmQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20tYXJtL2FyY2gtY29tY2VydG8vZXhwLWJ1c19jMjAwMC5oPgorI2luY2x1ZGUgPGFzbS1hcm0vaW8uaD4KKworCisvKiogSGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIE5BTkQgY29udHJvbC1saW5lcworICoqCisgKiogQHBhcmFtW2luXSBtdGQgICAgICAgTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqKiBAcGFyYW1baW5dIGNtZCAgICAgICBOQU5EIGNvbW1hbmQgdG8gdGhlIGNvbnRyb2xsZXIKKyAqKiBAcGFyYW1baW5dIGN0cmwgICAgICBjb250cm9sIGFkZHJlc3MvY29tbWFuZCBsYXRjaAorICoqCisgKiovCitzdGF0aWMgdm9pZCBjb21jZXJ0b19uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjdHJsKQoreworICAgICAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisgICAgICAgIGlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworICAgICAgICAgICAgICAgIGlmIChjdHJsICYgTkFORF9OQ0UpCisJCQlTb0NfZ3Bpb19zZXRfMChTb0NfZ3Bpb19tYXNrKENGR19OQU5EX0NFX0dQSU8pKTsKKyAgICAgICAgICAgICAgICBlbHNlCisJCQlTb0NfZ3Bpb19zZXRfMShTb0NfZ3Bpb19tYXNrKENGR19OQU5EX0NFX0dQSU8pKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkgeworCSByZXR1cm47CisgICAgICAgIH0KKworCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyArIENPTUNFUlRPX05BTkRfQ0xFKTsKKyAgICAgICAgZWxzZSBpZiAoY3RybCAmIE5BTkRfQUxFKQorICAgICAgICAgICAgICAgIHdyaXRlYihjbWQsICBjaGlwLT5JT19BRERSX1cgKyBDT01DRVJUT19OQU5EX0FMRSk7CisgICAgICAgIGVsc2UKKwkJcmV0dXJuOworfQorCisKK2ludCBjb21jZXJ0b19uYW5kX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBTb0NfZ3Bpb19yZWFkKFNvQ19ncGlvX21hc2soQ0ZHX05BTkRfQlJfR1BJTykpID8gMSA6IDA7Cit9CisKK2ludCBib2FyZF9uYW5kX2luaXQoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKK3sKKwlwcmludGYoImJvYXJkX25hbmRfaW5pdCBuYW5kLT5JT19BRERSX1IgPSV4XG4iLCBuYW5kLT5JT19BRERSX1IpOworCisJbmFuZC0+b3B0aW9ucyA9IDA7CisJbmFuZC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19TT0ZUOworCW5hbmQtPmNtZF9jdHJsID0gY29tY2VydG9fbmFuZF9od2NvbnRyb2w7CisJbmFuZC0+ZGV2X3JlYWR5ID0gY29tY2VydG9fbmFuZF9yZWFkeTsKKwluYW5kLT5jaGlwX2RlbGF5ID0gMjA7Cit9CisjZWxzZQoraW50IGJvYXJkX25hbmRfaW5pdChzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kKQoreworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvYzJrYXNpYy9wYWRfY29uZmlnLmMgYi9ib2FyZC9taW5kc3BlZWQvYzJrYXNpYy9wYWRfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkOTEwNAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL3BhZF9jb25maWcuYwpAQCAtMCwwICsxLDgxIEBACisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbGtjb3JlX2MyMDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZGRyX2MyMDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpb19jMjAwMC5oPgorCisjZGVmaW5lIENPTkZJR19HRU1fUkdNSUlfMl81VgorLy8jZGVmaW5lIENPTkZJR19HRU1fUkdNSUlfM18zVgorI2RlZmluZSBDT05GSUdfSEZFX09WRVJEUklWRQorCisvKiBJbml0aWFsaXplIHBhZCBjb25maWcgYWNjb3JkaW5nIHRvIEMyS19DaGlwRGVmX3NwZWNfMDEwLmRvYyAqLwordm9pZCBjb21jZXJ0b19wYWRfY29uZmlnKCkKK3sKKwl1MzIgdmFsOworCisJLyogSEZFIGNvbmZpZ3VyYXRpb25zICovCisKKwkvKiBNZW1vcmllcyBFTUEgQ29uZmlnIDEgKi8KKwl2YWwgPSAqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fTUVNX0VNQV9DT05GSUcxKTsKKwl2YWwgJj0gfigoMHgzIDw8IDYpfCgweDMgPDwgMTcpKTsKKwkqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fTUVNX0VNQV9DT05GSUcxKSA9IHZhbDsKKworI2lmIGRlZmluZWQoQ09ORklHX0dFTV9SR01JSV8zXzNWKQorCS8qICBEcml2aW5nIFN0cmVuZ3RoIG9mIElPIFBhZHMgKi8KKwkvKkluIGNhc2UgR0VNWCBvcGVyYXRlcyBpbiBSTUlJIG9yIFJHTUlJIEAzLjNWIG1vZGUgdGhlbiBuZWVkIHRvIGFkanVzdAorCSAqdGhlIGRyaXZpbmcgc3RyZW5ndGggb2YgaXRzIElPIHBhZCAoZGVmYXVsdCB2YWx1ZSBpcyBmb3IgMi41VikgKi8KKwl2YWwgPSAqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fUEFEX0NPTkZJRzMpOworCXZhbCAmPSB+KCgweDMgPDwgNikgfCAoMHgzIDw8IDEyKSk7CisJdmFsIHw9ICgoMHgyIDw8IDYpIHwgKDB4MiA8PCAxMikpOworCSoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHMykgPSB2YWw7CisKKwl2YWwgPSAqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fUEFEX0NPTkZJRzQpOworCXZhbCAmPSB+KCgweDMgPDwgNil8ICgweDMgPDwgMTIpKTsKKwl2YWwgfD0gKCgweDIgPDwgNikgfCAoMHgyIDw8IDEyKSk7CisJKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1BBRF9DT05GSUc0KSA9IHZhbDsKKworCXZhbCA9ICoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHNSk7CisJdmFsICY9IH4oKDB4MyA8PCA2KSB8ICgweDMgPDwgMTIpKTsKKwl2YWwgfD0gKCgweDIgPDwgNikgfCAoMHgyIDw8IDEyKSk7CisJKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1BBRF9DT05GSUc1KSA9IHZhbDsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfR0VNX1JHTUlJXzJfNVYpCisJLyogUkdNSUkgUGFkIENvbXBlbnNhdGlvbiBMb2dpYyAoVHggc2lkZSBvbmx5KSovCisJdmFsID0gKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1BBRF9DVFJMKTsKKwl2YWwgJj0gfigoMHgzIDw8IDIyKSB8ICgweDMgPDwgMjYpIHwgKDB4MyA8PCAzMCkpOworCSoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ1RSTCkgPSB2YWw7CisjZWxzZQorI2Vycm9yICJFaXRoZXIgQ09ORklHX0dFTV9SR01JSV8zXzNWIG9yIENPTkZJR19HRU1fUkdNSUlfMl81ViBzaG91bGQgYmUgc2VsZWN0ZWQiCisjZW5kaWYKKwkvKiBTbGV3IFJhdGUgQ29udHJvbCBvZiBJTyBQYWRzICovCisJdmFsID0gKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1BBRF9DT05GSUczKTsKKwl2YWwgfD0gKCgweDEgPDwgMTEpIHwgKDB4MSA8PCAxNykpOworCSoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHMykgPSB2YWw7CisKKwl2YWwgPSAqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fUEFEX0NPTkZJRzQpOworCXZhbCB8PSAoKDB4MSA8PCAxMSkgfCAoMHgxIDw8IDE3KSk7CisJKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1BBRF9DT05GSUc0KSA9IHZhbDsKKworCXZhbCA9ICoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHNSk7CisJdmFsIHw9ICgoMHgxIDw8IDExKSB8ICgweDEgPDwgMTcpKTsKKwkqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fUEFEX0NPTkZJRzUpID0gdmFsOworCisjaWYgZGVmaW5lZCAoQ09ORklHX0hGRV9PVkVSRFJJVkUpCisJLyogTWVtb3J5IE1hcmdpbiBCaXQgc2V0dGluZyAqLworCS8qIEluIGNhc2UgSEZFIGJsb2NrIG9wZXJhdGVzIGluIG92ZXJkcml2ZSAoMS4yVikgbW9kZSB0aGVuIG5lZWQgdG8KKwkqIG1vZGlmeSBmZXcgRU1BIGZpZWxkcyByZWxhdGVkIHRvIEhGRSBtZW1vcmllcy4gVGhlIGNvbmZpZ3VyYXRpb24KKwkqIHJlZ2lzdGVycyBhcmUgaW4gR1BJTyBibG9jayAqLworCXZhbCA9ICoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19NRU1fRU1BX0NPTkZJRzApOworCXZhbCAmPSB+KDB4RkZGIDw8IDE4KTsKKwl2YWwgfD0gKDB4MzhFIDw8IDE4KTsKKwkqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fTUVNX0VNQV9DT05GSUcwKSA9IHZhbDsKKworCXZhbCA9ICoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19NRU1fRU1BX0NPTkZJRzEpOworCXZhbCAmPSB+KDB4M0YgPDwgMTkpOworCXZhbCB8PSAoMHg4IDw8IDE4KTsKKwkqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fTUVNX0VNQV9DT05GSUcxKSA9IHZhbDsKKyNlbmRpZgorCisJLypUT0RPIEFkZCByZXN0IG9mIHRoZSBjb25maWd1cmF0aW9ucyBoZXJlKi8KKworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mya2FzaWMvcmVzZXQuYyBiL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRkMDY1ZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL3Jlc2V0LmMKQEAgLTAsMCArMSwxMCBAQAorI2luY2x1ZGUgPGNvbW1vbi5oPgorCisvKgorICogICogUmVzZXQgdGhlIGNwdSB0aHJvdWdoIHRoZSByZXNldCBjb250cm9sbGVyCisgKiAgICovCit2b2lkIF9fbm9yZXR1cm4gcmVzZXRfY3B1ICh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisgICAgICAgIHdoaWxlICgxKTsKK30KKwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mya2FzaWMvdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiODdhMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMmthc2ljL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCAgICAgIDoKKwl7CisJICBjcHUvYXJtX2NvcnRleGE5L3N0YXJ0Lm8JKC50ZXh0KQorCSAgKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvYzJrZXZtL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMzhkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzJrZXZtL01ha2VmaWxlCkBAIC0wLDAgKzEsNjIgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBib2FyZC5vIHBhZF9jb25maWcubyAuLi9jb21tb24vZmxhc2gubyBpMmMubyBuYW5kLm8KKworU09CSlMJOj0KKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMT0FEX0FERFIgPSAweDEwNDAwMDAwCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworT0JKUyAgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUyAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworYWxsOgkkKExJQikKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvYzJrZXZtL2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvYzJrZXZtL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExNmI1NAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vYm9hcmQuYwpAQCAtMCwwICsxLDkwIEBACisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvX2MyMDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZXhwLWJ1c19jMjAwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsa2NvcmVfYzIwMDAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisjZGVmaW5lIEVYUF9DUzBfU0VHX1NJWkVfVkFMICAweDdGRkYKKworI2RlZmluZSBBOV9USU1FUl9MT0FEICAgICAgICAgICAweDAKKyNkZWZpbmUgQTlfVElNRVJfQ09VTlRFUiAweDQKKyNkZWZpbmUgQTlfVElNRVJfQ05UUkwgICAgICAgICAgMHg4CisjZGVmaW5lIEE5X1RJTUVSX0VOQUJMRSAgICAgICAgICgxPDwwKQorI2RlZmluZSBBOV9USU1FUl9SRUxPQUQgICAgICAgICAoMTw8MSkKKworI2RlZmluZSBNQVhfVElNRVJfQ09VTlQgMHhmZmZmZmZmZgorCit2b2lkIGNvbWNlcnRvX3BhZF9jb25maWcoKTsKKwordm9pZCBub3JfaHdfaW5pdCh2b2lkKQoreworCSoodm9sYXRpbGUgdTMyKikgRVhQX0NTMF9TRUdfUkVHID0gRVhQX0NTMF9TRUdfU0laRV9WQUw7CisJKih2b2xhdGlsZSB1MzIqKSBFWFBfQ1MwX1RNRzFfUkVHID0gMHgwMzAzNDAwNzsKKwkqKHZvbGF0aWxlIHUzMiopIEVYUF9DUzBfVE1HMl9SRUcgPSAweDA0MDQwNTAyOworfQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKK3ZvaWQgbmFuZF9od19pbml0KHZvaWQpCit7CisgICAgICAgIFNvQ19ncGlvX2NmZygyOCwgR1BJT19UWVBFX09VVFBVVCk7IC8qIE5BTkQgQ0UgKi8KKyAgICAgICAgU29DX2dwaW9fY2ZnKDI5LCBHUElPX1RZUEVfSU5QVVQpOyAgLyogTkFORCBCUiAqLworfQorI2VuZGlmCisKKyNpZiAwCit2b2lkIGE5X3RpbWVyX2luaXQodm9pZCkKK3sKKwkqKHZvbGF0aWxlIHUzMiopIChDT01DRVJUT19BOV9USU1FUl9CQVNFICsgQTlfVElNRVJfTE9BRCkgPSBNQVhfVElNRVJfQ09VTlQ7CisJKih2b2xhdGlsZSB1MzIqKSAoQ09NQ0VSVE9fQTlfVElNRVJfQkFTRSArIEE5X1RJTUVSX0NPVU5URVIpID0gTUFYX1RJTUVSX0NPVU5UOworCSoodm9sYXRpbGUgdTMyKikgKENPTUNFUlRPX0E5X1RJTUVSX0JBU0UgKyBBOV9USU1FUl9DTlRSTCkgPSBBOV9USU1FUl9FTkFCTEUgfCBBOV9USU1FUl9SRUxPQUQ7Cit9CisjZW5kaWYKKwordm9pZCBic3BfaW5pdCh2b2lkKQoreworCWludCB2YWw7CisKKwljb21jZXJ0b19wYWRfY29uZmlnKCk7CisKKwkvL0REUkMgT0RUIFNvdXJjZSBTZWxlY3QKKwkqKHZvbGF0aWxlIHUzMiopIENPTUNFUlRPX0dQSU9fTUlTQ19QSU5fU0VMRUNUX1JFRyA9ICggKDEgPDwgNikgfCAoKih2b2xhdGlsZSB1MzIqKSBDT01DRVJUT19HUElPX01JU0NfUElOX1NFTEVDVF9SRUcpKTsKKworCW5vcl9od19pbml0KCk7CisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKwlTb0NfbmFuZF9pbml0KCk7CisjZW5kaWYKKyNpZiAwCisJYTlfdGltZXJfaW5pdCgpOworI2VuZGlmCit9CisKK3ZvaWQgc2hvd19ib290X3Byb2dyZXNzKGludCBwcm9ncmVzcykKK3sKKwlwcmludGYoIkJvb3QgcmVhY2hlZCBzdGFnZSAlZFxuIiwgcHJvZ3Jlc3MpOworfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworICAgICAgICAvKiBhcmNoIG51bWJlciBvZiBNaW5kc3BlZWQgQ29tY2VydG8gKi8KKyAgICAgICAgZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9DT01DRVJUTzsKKworICAgICAgICAvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisgICAgICAgIGdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweDEwMDsKKworCisgICAgICAgIGdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IDB4MDsKKyAgICAgICAgZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSAweDIwMDAwMDAwOyAvLzUxMiBNQgorCisjaWYgMAorICAgICAgICBjMmtfemRzX2luaXQoKTsKKyNlbmRpZgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKwluYW5kX2h3X2luaXQoKTsKKyNlbmRpZgorCisgICAgICAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvYzJrZXZtL2NvbmZpZy5tayBiL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NDQzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzJrZXZtL2NvbmZpZy5tawpAQCAtMCwwICsxIEBACitURVhUX0JBU0UgPSAweDEwMDAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vaTJjLmMgYi9ib2FyZC9taW5kc3BlZWQvYzJrZXZtL2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMDI5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvYzJrZXZtL2kyYy5jCkBAIC0wLDAgKzEsNTYyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA3CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKworI2RlZmluZSBDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICAgICAgIDB4OTA0MDAwMDAKKyNkZWZpbmUJSTJDX0JBU0VBRERSCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgwOUMwMDApCisKKyNpZiBkZWZpbmVkKENPTkZJR19IQVJEX0kyQykgfHwgZGVmaW5lZChDT05GSUdfU09GVF9JMkMpCisjZGVmaW5lIE1BWF9JMkNfUkVUUllTCSAgICAxMAorI2RlZmluZSBJMkNfREVMQVkJICAgIDEwMDAJLyogU2hvdWxkIGJlIGF0IGxlYXN0IHRoZSAjIG9mIE1IeiBvZiBUY2xrICovCisKKyNkZWZpbmUgSTJDX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAoSTJDX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgSTJDX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAoSTJDX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgSTJDX0NOVFIgICAgICAgICAgICAgICAgICAgICAgICAoSTJDX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgSTJDX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAoSTJDX0JBU0VBRERSICsgMHgwYykKKyNkZWZpbmUgSTJDX0NDUkZTICAgICAgICAgICAgICAgICAgICAgICAoSTJDX0JBU0VBRERSICsgMHgwYykKKyNkZWZpbmUgSTJDX1hBRERSICAgICAgICAgICAgICAgICAgICAgICAoSTJDX0JBU0VBRERSICsgMHgxMCkKKyNkZWZpbmUgSTJDX0NDUkggICAgICAgICAgICAgICAgICAgICAgICAoSTJDX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgSTJDX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAoSTJDX0JBU0VBRERSICsgMHgxYykKKworLyogQ05UUiAtIENvbnRyb2wgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBJMkNfSUVOCQkJCSgxPDw3KQorI2RlZmluZSBJMkNfRU5BQgkJCSgxPDw2KQorI2RlZmluZSBJMkNfU1RBCQkJCSgxPDw1KQorI2RlZmluZSBJMkNfU1RQCQkJCSgxPDw0KQorI2RlZmluZSBJMkNfSUZMRwkJCSgxPDwzKQorI2RlZmluZSBJMkNfQUFLCQkJCSgxPDwyKQorCisvKiBTVEFUIC0gU3RhdHVzIGNvZGVzICovCisjZGVmaW5lIEkyQ19CVVNfRVJST1IJCQkweDAwCS8qIEJ1cyBlcnJvciBpbiBtYXN0ZXIgbW9kZSBvbmx5ICovCisjZGVmaW5lIEkyQ19TVEFSVF9UUkFOU01JVAkJMHgwOAkvKiBTdGFydCBjb25kaXRpb24gdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgSTJDX1JFUEVBVF9TVEFSVF9UUkFOU01JVAkweDEwCS8qIFJlcGVhdGVkIFN0YXJ0IGNvbmRpdGlvbiB0cmFuc21pdGVkICovCisjZGVmaW5lIEkyQ19BRERSRVNTX1dfQUNLCQkweDE4CS8qIEFkZHJlc3MgKyBXcml0ZSBiaXQgdHJhbnNtaXR0ZWQsIEFDSyByZWNlaXZlZCAqLworI2RlZmluZSBJMkNfQUREUkVTU19XX05BQ0sJCTB4MjAJLyogQWRkcmVzcyArIFdyaXRlIGJpdCB0cmFuc21pdHRlZCwgTkFDSyByZWNlaXZlZCAqLworI2RlZmluZSBJMkNfREFUQV9UUkFOU01JVF9BQ0sJCTB4MjgJLyogRGF0YSBieXRlIHRyYW5zbWl0dGVkIGluIG1hc3RlciBtb2RlICwgQUNLIHJlY2VpdmVkICovCisjZGVmaW5lIEkyQ19EQVRBX1RSQU5TTUlUX05BQ0sJCTB4MzAJLyogRGF0YSBieXRlIHRyYW5zbWl0dGVkIGluIG1hc3RlciBtb2RlICwgTkFDSyByZWNlaXZlZCAqLworI2RlZmluZSBJMkNfQVJCSVRfTE9TVAkJCTB4MzgJLyogQXJiaXRyYXRpb24gbG9zdCBpbiBhZGRyZXNzIG9yIGRhdGEgYnl0ZSAqLworI2RlZmluZSBJMkNfQUREUkVTU19SX0FDSwkJMHg0MAkvKiBBZGRyZXNzICsgUmVhZCBiaXQgdHJhbnNtaXR0ZWQsIEFDSyByZWNlaXZlZCAgKi8KKyNkZWZpbmUgSTJDX0FERFJFU1NfUl9OQUNLCQkweDQ4CS8qIEFkZHJlc3MgKyBSZWFkIGJpdCB0cmFuc21pdHRlZCwgTkFDSyByZWNlaXZlZCAgKi8KKyNkZWZpbmUgSTJDX0RBVEFfUkVDRUlWRV9BQ0sJCTB4NTAJLyogRGF0YSBieXRlIHJlY2VpdmVkIGluIG1hc3RlciBtb2RlLCBBQ0sgdHJhbnNtaXR0ZWQgICovCisjZGVmaW5lIEkyQ19EQVRBX1JFQ0VJVkVfTkFDSwkJMHg1OAkvKiBEYXRhIGJ5dGUgcmVjZWl2ZWQgaW4gbWFzdGVyIG1vZGUsIE5BQ0sgdHJhbnNtaXR0ZWQqLworI2RlZmluZSBJMkNfQVJCSVRfTE9TVF9BRERSRVNTCQkweDY4CS8qIEFyYml0cmF0aW9uIGxvc3QgaW4gYWRkcmVzcyAgKi8KKyNkZWZpbmUgSTJDX0dFTkVSQUxfQ0FMTAkJMHg3MAkvKiBHZW5lcmFsIENhbGwsIEFDSyB0cmFuc21pdHRlZCAqLworI2RlZmluZSBJMkNfTk9fUkVMRVZBTlRfSU5GTwkJMHhGOAkvKiBObyByZWxldmFudCBzdGF0dXMgaW5mb3JtYXRpb24sIElGTEY9MCAqLworCisjZGVmaW5lIEkyQ19SRUFEX1JFRyhyZWcpCSAgICAgICAgKih2b2xhdGlsZSB1MzIqKShyZWcpCisjZGVmaW5lIEkyQ19XUklURV9SRUcocmVnLCB2YWwpCSAgICAgICAgKih2b2xhdGlsZSB1MzIqKShyZWcpID0gdmFsCisjZGVmaW5lIFJFU0VUX1JFR19CSVRTKHJlZywgdmFsKSAgICAgICAgSTJDX1dSSVRFX1JFRyhyZWcsIEkyQ19SRUFEX1JFRyhyZWcpICYgfih2YWwpKQorCisjdW5kZWYJREVCVUdfSTJDCisvLyNkZWZpbmUgREVCVUdfSTJDCisKKyNpZmRlZiBERUJVR19JMkMKKyNkZWZpbmUgRFAoeCkgeAorI2Vsc2UKKyNkZWZpbmUgRFAoeCkKKyNlbmRpZgorCisvKiBBc3N1bWluZyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIG1hc3RlciBvbiB0aGUgYnVzICh1cykgKi8KKwordm9pZCBpMmNfaW5pdCAoaW50IHNwZWVkLCBpbnQgc2xhdmVhZGRyKQoreworCXVuc2lnbmVkIGludCBuLCBtLCBmcmVxLCBtYXJnaW4sIHBvd2VyOworCXVuc2lnbmVkIGludCBhY3R1YWxOID0gMCwgYWN0dWFsTSA9IDA7CisJdW5zaWduZWQgaW50IGNvbnRyb2wsIHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgbWluTWFyZ2luID0gMHhmZmZmZmZmZjsKKwl1bnNpZ25lZCBpbnQgdGNsayA9IENGR19UQ0xLOworCXVuc2lnbmVkIGludCBpMmNGcmVxID0gc3BlZWQ7CS8qIDEwMDAwMCBtYXguIEZhc3QgbW9kZSBub3Qgc3VwcG9ydGVkICovCisKKwlEUCAocHV0cyAoImkyY19pbml0XG4iKSk7CisKKwlmb3IgKG4gPSAwOyBuIDwgODsgbisrKSB7CisJCWZvciAobSA9IDA7IG0gPCAxNjsgbSsrKSB7CisJCQlwb3dlciA9IDEgPDwgbjsJLyogcG93ZXIgPSAyXihuKSAqLworCQkJZnJlcSA9IHRjbGsgLyAoMTAgKiAobSArIDEpICogcG93ZXIpOworCQkJaWYgKGkyY0ZyZXEgPiBmcmVxKQorCQkJCW1hcmdpbiA9IGkyY0ZyZXEgLSBmcmVxOworCQkJZWxzZQorCQkJCW1hcmdpbiA9IGZyZXEgLSBpMmNGcmVxOworCQkJaWYgKG1hcmdpbiA8IG1pbk1hcmdpbikgeworCQkJCW1pbk1hcmdpbiA9IG1hcmdpbjsKKwkJCQlhY3R1YWxOID0gbjsKKwkJCQlhY3R1YWxNID0gbTsKKwkJCX0KKwkJfQorCX0KKworCURQIChwdXRzICgic2V0dXAgaTJjIGJ1c1xuIikpOworCisJLyogU2V0dXAgYnVzICovCisgICAgICAgIEkyQ19XUklURV9SRUcoSTJDX1NPRlRfUkVTRVQsIDApOworCisJRFAgKHB1dHMgKCJ1ZGVsYXkuLi5cbiIpKTsKKworCXVkZWxheSAoSTJDX0RFTEFZKTsKKworCURQIChwdXRzICgic2V0IGJhdWRyYXRlXG4iKSk7CisKKwlJMkNfV1JJVEVfUkVHKEkyQ19TVEFULCAoYWN0dWFsTSA8PCAzKSB8IGFjdHVhbE4pOworCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19BQUsgfCBJMkNfRU5BQik7CisKKwl1ZGVsYXkgKEkyQ19ERUxBWSAqIDEwKTsKKworCURQIChwdXRzICgicmVhZCBjb250cm9sLCBiYXVkcmF0ZVxuIikpOworCisJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwljb250cm9sID0gSTJDX1JFQURfUkVHKEkyQ19DTlRSKTsKK30KKworc3RhdGljIHVjaGFyIGkyY19zdGFydCAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY29udHJvbCwgc3RhdHVzOworCWludCBjb3VudCA9IDA7CisKKwlEUCAocHV0cyAoImkyY19zdGFydFxuIikpOworCisJLyogU2V0IHRoZSBzdGFydCBiaXQgKi8KKworCWNvbnRyb2wgPSBJMkNfUkVBRF9SRUcoSTJDX0NOVFIpOworCWNvbnRyb2wgfD0gSTJDX1NUQTsJLyogZ2VuZXJhdGUgdGhlIEkyQ19TVEFSVF9CSVQgKi8KKwlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBjb250cm9sKTsKKworCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisKKwljb3VudCA9IDA7CisJd2hpbGUgKChzdGF0dXMgJiAweGZmKSAhPSBJMkNfU1RBUlRfVFJBTlNNSVQpIHsKKwkJdWRlbGF5IChJMkNfREVMQVkpOworCQlpZiAoY291bnQgPiAyMCkgeworCQkJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX1NUUCk7CS8qc3RvcCAqLworCQkJcmV0dXJuIChzdGF0dXMpOworCQl9CisJCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJCWNvdW50Kys7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHVjaGFyIGkyY19zZWxlY3RfZGV2aWNlICh1Y2hhciBkZXZfYWRkciwgdWNoYXIgcmVhZCwgaW50IHRlbl9iaXQpCit7CisJdW5zaWduZWQgaW50IHN0YXR1cywgZGF0YSwgYml0cyA9IDc7CisJaW50IGNvdW50ID0gMDsKKworCURQIChwdXRzICgiaTJjX3NlbGVjdF9kZXZpY2VcbiIpKTsKKworCS8qIE91dHB1dCBzbGF2ZSBhZGRyZXNzICovCisKKwlpZiAodGVuX2JpdCkgeworCQliaXRzID0gMTA7CisJfQorCisJZGF0YSA9IChkZXZfYWRkciA8PCAxKTsKKwkvKiBzZXQgdGhlIHJlYWQgYml0ICovCisJZGF0YSB8PSByZWFkOworCUkyQ19XUklURV9SRUcoSTJDX0RBVEEsIGRhdGEpOworCS8qIGFzc2VydCB0aGUgYWRkcmVzcyAqLworCVJFU0VUX1JFR19CSVRTIChJMkNfQ05UUiwgSTJDX0lGTEcpOworCisJdWRlbGF5IChJMkNfREVMQVkpOworCisJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwljb3VudCA9IDA7CisJd2hpbGUgKCgoc3RhdHVzICYgMHhmZikgIT0gSTJDX0FERFJFU1NfUl9BQ0spICYmICgoc3RhdHVzICYgMHhmZikgIT0gSTJDX0FERFJFU1NfV19BQ0spKSB7CisJCXVkZWxheSAoSTJDX0RFTEFZKTsKKwkJaWYgKGNvdW50ID4gMjApIHsKKwkJCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19TVFApOwkvKnN0b3AgKi8KKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCQlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCQljb3VudCsrOworCX0KKworCWlmIChiaXRzID09IDEwKSB7CisJCXByaW50ZiAoIjEwIGJpdCBJMkMgYWRkcmVzc2luZyBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwkJcmV0dXJuICgweGZmKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdWNoYXIgaTJjX2dldF9kYXRhICh1Y2hhciAqIHJldHVybl9kYXRhLCBpbnQgbGVuKQoreworCisJdW5zaWduZWQgaW50IGRhdGEsIHN0YXR1cyA9IDA7CisJaW50IGNvdW50ID0gMDsKKworCURQIChwdXRzICgiaTJjX2dldF9kYXRhXG4iKSk7CisKKwl3aGlsZSAobGVuKSB7CisKKwkJLyogR2V0IGFuZCByZXR1cm4gdGhlIGRhdGEgKi8KKworCQlSRVNFVF9SRUdfQklUUyAoSTJDX0NOVFIsIEkyQ19JRkxHKTsKKworCQl1ZGVsYXkgKEkyQ19ERUxBWSAqIDUpOworCisJCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJCWNvdW50Kys7CisJCXdoaWxlICgoc3RhdHVzICYgMHhmZikgIT0gSTJDX0RBVEFfUkVDRUlWRV9BQ0spIHsKKwkJCXVkZWxheSAoSTJDX0RFTEFZKTsKKwkJCWlmIChjb3VudCA+IDIpIHsKKwkJCQlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfU1RQKTsJLypzdG9wICovCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCQkJY291bnQrKzsKKwkJfQorCQlkYXRhID0gSTJDX1JFQURfUkVHKEkyQ19EQVRBKTsKKwkJbGVuLS07CisJCSpyZXR1cm5fZGF0YSA9ICh1Y2hhcikgZGF0YTsKKwkJcmV0dXJuX2RhdGErKzsKKwl9CisJUkVTRVRfUkVHX0JJVFMgKEkyQ19DTlRSLCBJMkNfQUFLIHwgSTJDX0lGTEcpOworCXdoaWxlICgoc3RhdHVzICYgMHhmZikgIT0gSTJDX0RBVEFfUkVDRUlWRV9OQUNLKSB7CisJCXVkZWxheSAoSTJDX0RFTEFZKTsKKwkJaWYgKGNvdW50ID4gMjAwKSB7CisJCQlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfU1RQKTsJLypzdG9wICovCisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KKwkJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwkJY291bnQrKzsKKwl9CisJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX1NUUCk7CS8qIHN0b3AgKi8KKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB1Y2hhciBpMmNfd3JpdGVfZGF0YSAodW5zaWduZWQgaW50ICpkYXRhLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IGNvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKwl1bnNpZ25lZCBpbnQgKnRlbXBfcHRyID0gZGF0YTsKKworCURQIChwdXRzICgiaTJjX3dyaXRlX2RhdGFcbiIpKTsKKworCXdoaWxlIChsZW4pIHsKKwkJdGVtcCA9ICh1bnNpZ25lZCBpbnQpICgqdGVtcF9wdHIpOworCQlJMkNfV1JJVEVfUkVHKEkyQ19EQVRBLCB0ZW1wKTsKKwkJUkVTRVRfUkVHX0JJVFMgKEkyQ19DTlRSLCBJMkNfSUZMRyk7CisKKwkJdWRlbGF5IChJMkNfREVMQVkpOworCisJCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJCWNvdW50Kys7CisJCXdoaWxlICgoc3RhdHVzICYgMHhmZikgIT0gSTJDX0RBVEFfVFJBTlNNSVRfQUNLKSB7CisJCQl1ZGVsYXkgKEkyQ19ERUxBWSk7CisJCQlpZiAoY291bnQgPiAyMCkgeworCQkJCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19TVFApOwkvKnN0b3AgKi8KKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQl9CisJCQlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCQkJY291bnQrKzsKKwkJfQorCQlsZW4tLTsKKwkJdGVtcF9wdHIrKzsKKwl9CisKKy8qIENhbid0IGhhdmUgdGhlIHdyaXRlIGlzc3VpbmcgYSBzdG9wIGNvbW1hbmQgKi8KKy8qIGl0J3Mgd3JvbmcgdG8gaGF2ZSBhIHN0b3AgYml0IGluIHJlYWQgc3RyZWFtIG9yIHdyaXRlIHN0cmVhbSAqLworLyogc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiBpdCdzIHJlYWxseSB0aGUgZW5kIG9mIHRoZSBjb21tYW5kICovCisvKiBvciB3aGV0aGVyIHdlIGhhdmUganVzdCBzZW5kIHRoZSBkZXZpY2UgYWRkcmVzcyArIG9mZnNldCAqLworLyogd2Ugd2lsbCBwdXNoIGlzc3VpbmcgdGhlIHN0b3AgY29tbWFuZCBvZmYgdG8gdGhlIG9yaWdpbmFsICovCisvKiBjYWxsaW5nIGZ1bmN0aW9uICovCisJLyogc2V0IHRoZSBpbnRlcnJ1cHQgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyICovCisJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX0lGTEcpOworCXVkZWxheSAoSTJDX0RFTEFZICogMTApOworCXJldHVybiAoMCk7Cit9CisKKy8qIGNyZWF0ZWQgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIGkyY193cml0ZSgpICovCisvKiBmdW5jdGlvbiB3b3JraW5nIHByb3Blcmx5LiAqLworLyogZnVuY3Rpb24gdG8gd3JpdGUgYnl0ZXMgb3V0IG9uIHRoZSBpMmMgYnVzICovCisvKiB0aGlzIGlzIGlkZW50aWNhbCB0byB0aGUgZnVuY3Rpb24gaTJjX3dyaXRlX2RhdGEoKSAqLworLyogZXhjZXB0IHRoYXQgaXQgcmVxdWlyZXMgYSBidWZmZXIgdGhhdCBpcyBhbiAqLworLyogdW5zaWduZWQgY2hhcmFjdGVyIGFycmF5LiAgWW91IGNhbid0IHVzZSAqLworLyogaTJjX3dyaXRlX2RhdGEoKSB0byBzZW5kIGFuIGFycmF5IG9mIHVuc2lnbmVkIGNoYXJhY3RlcnMgKi8KKy8qIHNpbmNlIHRoZSBieXRlIG9mIGludGVyZXN0IGVuZHMgdXAgb24gdGhlIHdyb25nIGVuZCBvZiB0aGUgYnVzICovCisvKiBhYWgsIHRoZSBqb3lzIG9mIGJpZyBlbmRpYW4gdmVyc3VzIGxpdHRsZSBlbmRpYW4hICovCisvKiAqLworLyogcmV0dXJucyAwID0gc3VjY2VzcyAqLworLyogICAgICAgICBhbnl0aGluZyBvdGhlciB0aGFuIHplcm8gaXMgZmFpbHVyZSAqLworc3RhdGljIHVjaGFyIGkyY193cml0ZV9ieXRlICh1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJaW50IGNvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKwl1bnNpZ25lZCBjaGFyICp0ZW1wX3B0ciA9IGRhdGE7CisKKwlEUCAocHV0cyAoImkyY193cml0ZV9ieXRlXG4iKSk7CisKKwl3aGlsZSAobGVuKSB7CisJCS8qIFNldCBhbmQgYXNzZXJ0IHRoZSBkYXRhICovCisJCXRlbXAgPSAqdGVtcF9wdHI7CisJCUkyQ19XUklURV9SRUcoSTJDX0RBVEEsIHRlbXApOworCQlSRVNFVF9SRUdfQklUUyAoSTJDX0NOVFIsIEkyQ19JRkxHKTsKKworCQl1ZGVsYXkgKEkyQ19ERUxBWSoyKTsKKworCQlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCQljb3VudCsrOworCQl3aGlsZSAoKHN0YXR1cyAmIDB4ZmYpICE9IEkyQ19EQVRBX1RSQU5TTUlUX0FDSykgeworCQkJdWRlbGF5IChJMkNfREVMQVkqMik7CisJCQlpZiAoY291bnQgPiAyMCkgeworCQkJCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19TVFApOwkvKnN0b3AgKi8KKwkJCQlyZXR1cm4gKHN0YXR1cyk7CisJCQl9CisJCQlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCQkJY291bnQrKzsKKwkJfQorCQlsZW4tLTsKKwkJdGVtcF9wdHIrKzsKKwl9CisvKiBDYW4ndCBoYXZlIHRoZSB3cml0ZSBpc3N1aW5nIGEgc3RvcCBjb21tYW5kICovCisvKiBpdCdzIHdyb25nIHRvIGhhdmUgYSBzdG9wIGJpdCBpbiByZWFkIHN0cmVhbSBvciB3cml0ZSBzdHJlYW0gKi8KKy8qIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgaXQncyByZWFsbHkgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCAqLworLyogb3Igd2hldGhlciB3ZSBoYXZlIGp1c3Qgc2VuZCB0aGUgZGV2aWNlIGFkZHJlc3MgKyBvZmZzZXQgKi8KKy8qIHdlIHdpbGwgcHVzaCBpc3N1aW5nIHRoZSBzdG9wIGNvbW1hbmQgb2ZmIHRvIHRoZSBvcmlnaW5hbCAqLworLyogY2FsbGluZyBmdW5jdGlvbiAqLworLyoJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX0lGTEcgfCBJMkNfU1RQKTsKKwlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfU1RQKTsgKi8KKwkvKiBzZXQgdGhlIGludGVycnVwdCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfSUZMRyk7CisJdWRlbGF5IChJMkNfREVMQVkgKiAxMCk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdWNoYXIKK2kyY19zZXRfZGV2X29mZnNldCAodWNoYXIgZGV2X2FkZHIsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCB0ZW5fYml0LAorCQkgICAgaW50IGFsZW4pCit7CisJdWNoYXIgc3RhdHVzOworCXVuc2lnbmVkIGludCB0YWJsZVsyXTsKKworLyogaW5pdGlhbGl6ZSB0aGUgdGFibGUgb2YgYWRkcmVzcyBvZmZzZXQgYnl0ZXMgKi8KKy8qIHV0aWxpemVkIGZvciAyIGJ5dGUgYWRkcmVzcyBvZmZzZXRzICovCisvKiBOT1RFOiB0aGUgb3JkZXIgaXMgaGlnaCBieXRlIGZpcnN0ISAqLworCXRhYmxlWzFdID0gb2Zmc2V0ICYgMHhmZjsJLyogbG93IGJ5dGUgKi8KKwl0YWJsZVswXSA9IG9mZnNldCAvIDB4MTAwOwkvKiBoaWdoIGJ5dGUgKi8KKworCURQIChwdXRzICgiaTJjX3NldF9kZXZfb2Zmc2V0XG4iKSk7CisKKwlzdGF0dXMgPSBpMmNfc2VsZWN0X2RldmljZSAoZGV2X2FkZHIsIDAsIHRlbl9iaXQpOworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiRmFpbGVkIHRvIHNlbGVjdCBkZXZpY2Ugc2V0dGluZyBvZmZzZXQ6IDB4JTAyeFxuIiwKKwkJCXN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisvKiBjaGVjayB0aGUgYWRkcmVzcyBvZmZzZXQgbGVuZ3RoICovCisJaWYgKGFsZW4gPT0gMCkKKwkJLyogbm8gYWRkcmVzcyBvZmZzZXQgKi8KKwkJcmV0dXJuICgwKTsKKwllbHNlIGlmIChhbGVuID09IDEpIHsKKwkJLyogMSBieXRlIGFkZHJlc3Mgb2Zmc2V0ICovCisJCXN0YXR1cyA9IGkyY193cml0ZV9kYXRhICgmb2Zmc2V0LCAxKTsKKwkJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQkJcHJpbnRmICgiRmFpbGVkIHRvIHdyaXRlIGRhdGE6IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0gZWxzZSBpZiAoYWxlbiA9PSAyKSB7CisJCS8qIDIgYnl0ZXMgYWRkcmVzcyBvZmZzZXQgKi8KKwkJc3RhdHVzID0gaTJjX3dyaXRlX2RhdGEgKHRhYmxlLCAyKTsKKwkJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQkJcHJpbnRmICgiRmFpbGVkIHRvIHdyaXRlIGRhdGE6IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGFkZHJlc3Mgb2Zmc2V0IHVua25vd24gb3Igbm90IHN1cHBvcnRlZCAqLworCQlwcmludGYgKCJBZGRyZXNzIGxlbmd0aCBvZmZzZXQgJWQgaXMgbm90IHN1cHBvcnRlZFxuIiwgYWxlbik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsJCS8qIHN1Y2Vzc2Z1bCBjb21wbGV0aW9uICovCit9CisKK3VjaGFyCitpMmNfcmVhZCAodWNoYXIgZGV2X2FkZHIsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCBhbGVuLCB1Y2hhciAqIGRhdGEsCisJICBpbnQgbGVuKQoreworCXVjaGFyIHN0YXR1cyA9IDA7CisJdW5zaWduZWQgaW50IGkyY0ZyZXEgPSBDRkdfSTJDX1NQRUVEOworCisJRFAgKHB1dHMgKCJpMmNfcmVhZFxuIikpOworCisJaTJjX2luaXQgKGkyY0ZyZXEsIDApOwkvKiBzZXQgdGhlIGkyYyBmcmVxdWVuY3kgKi8KKworCXN0YXR1cyA9IGkyY19zdGFydCAoKTsKKworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiVHJhbnNhY3Rpb24gc3RhcnQgZmFpbGVkOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBpMmNfc2V0X2Rldl9vZmZzZXQgKGRldl9hZGRyLCBvZmZzZXQsIDAsIGFsZW4pOwkvKiBzZW5kIHRoZSBzbGF2ZSBhZGRyZXNzICsgb2Zmc2V0ICovCisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJGYWlsZWQgdG8gc2V0IHNsYXZlIGFkZHJlc3MgJiBvZmZzZXQ6IDB4JTAyeFxuIiwKKwkJCXN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpMmNfaW5pdCAoaTJjRnJlcSwgMCk7CS8qIHNldCB0aGUgaTJjIGZyZXF1ZW5jeSBhZ2FpbiAqLworCisJc3RhdHVzID0gaTJjX3N0YXJ0ICgpOworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiVHJhbnNhY3Rpb24gcmVzdGFydCBmYWlsZWQ6IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXN0YXR1cyA9IGkyY19zZWxlY3RfZGV2aWNlIChkZXZfYWRkciwgMSwgMCk7CS8qIHNlbmQgdGhlIHNsYXZlIGFkZHJlc3MgKi8KKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIkFkZHJlc3Mgbm90IGFja25vd2xlZGdlZDogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gaTJjX2dldF9kYXRhIChkYXRhLCBsZW4pOworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiRGF0YSBub3QgcmVjaWV2ZWQ6IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXJldHVybiAwOworfQorCisvKiBGdW5jdGlvbiB0byBzZXQgdGhlIEkyQyBzdG9wIGJpdCAqLwordm9pZCBpMmNfc3RvcCAodm9pZCkKK3sKKwlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCAoMHgxIDw8IDQpKTsKK30KKworLyogSTJDIHdyaXRlIGZ1bmN0aW9uICovCisvKiBkZXZfYWRkciA9IGRldmljZSBhZGRyZXNzICovCisvKiBvZmZzZXQgPSBhZGRyZXNzIG9mZnNldCAqLworLyogYWxlbiA9IGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgYWRkcmVzcyBvZmZzZXQgKi8KKy8qIGRhdGEgPSBwb2ludGVyIHRvIGJ1ZmZlciB0byByZWFkIGRhdGEgaW50byAqLworLyogbGVuID0gIyBvZiBieXRlcyB0byByZWFkICovCisvKiAqLworLyogcmV0dXJucyAwID0gc3VjY2VzZnVsICovCisvKiAgICAgICAgIGFueXRoaW5nIGJ1dCB6ZXJvIGlzIGZhaWx1cmUgKi8KK3VjaGFyCitpMmNfd3JpdGUgKHVjaGFyIGRldl9hZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgYWxlbiwgdWNoYXIgKiBkYXRhLAorCSAgIGludCBsZW4pCit7CisJdWNoYXIgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBpbnQgaTJjRnJlcSA9IENGR19JMkNfU1BFRUQ7CisKKwlEUCAocHV0cyAoImkyY193cml0ZVxuIikpOworCisJaTJjX2luaXQgKGkyY0ZyZXEsIDApOwkvKiBzZXQgdGhlIGkyYyBmcmVxdWVuY3kgKi8KKworCXN0YXR1cyA9IGkyY19zdGFydCAoKTsJLyogc2VuZCBhIHN0YXJ0IGJpdCAqLworCisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJUcmFuc2FjdGlvbiBzdGFydCBmYWlsZWQ6IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXN0YXR1cyA9IGkyY19zZXRfZGV2X29mZnNldCAoZGV2X2FkZHIsIG9mZnNldCwgMCwgYWxlbik7CS8qIHNlbmQgdGhlIHNsYXZlIGFkZHJlc3MgKyBvZmZzZXQgKi8KKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIkZhaWxlZCB0byBzZXQgc2xhdmUgYWRkcmVzcyAmIG9mZnNldDogMHglMDJ4XG4iLAorCQkJc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gc3RhdHVzOworCX0KKworCisJc3RhdHVzID0gaTJjX3dyaXRlX2J5dGUgKGRhdGEsIGxlbik7CS8qIHdyaXRlIHRoZSBkYXRhICovCisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJEYXRhIG5vdCB3cml0dGVuOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJLyogaXNzdWUgYSBzdG9wIGJpdCAqLworCWkyY19zdG9wICgpOworCXJldHVybiAwOworfQorCisvKiBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYW4gSTJDIGRldmljZSBpcyBwcmVzZW50ICovCisvKiBjaGlwID0gZGV2aWNlIGFkZHJlc3Mgb2YgY2hpcCB0byBjaGVjayBmb3IgKi8KKy8qICovCisvKiByZXR1cm5zIDAgPSBzdWNlc3NmdWwsIHRoZSBkZXZpY2UgZXhpc3RzICovCisvKiAgICAgICAgIGFueXRoaW5nIG90aGVyIHRoYW4gemVybyBpcyBmYWlsdXJlLCBubyBkZXZpY2UgKi8KK2ludCBpMmNfcHJvYmUgKHVjaGFyIGNoaXApCit7CisKKwkvKiBXZSBhcmUganVzdCBsb29raW5nIGZvciBhbiA8QUNLPiBiYWNrLiAqLworCS8qIFRvIHNlZSBpZiB0aGUgZGV2aWNlL2NoaXAgaXMgdGhlcmUgKi8KKworI2lmZGVmIERFQlVHX0kyQworCXVuc2lnbmVkIGludCBpMmNfc3RhdHVzOworI2VuZGlmCisJdWNoYXIgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBpbnQgaTJjRnJlcSA9IENGR19JMkNfU1BFRUQ7CisKKwlEUCAocHV0cyAoImkyY19wcm9iZVxuIikpOworCisJaTJjX2luaXQgKGkyY0ZyZXEsIDApOwkvKiBzZXQgdGhlIGkyYyBmcmVxdWVuY3kgKi8KKworCXN0YXR1cyA9IGkyY19zdGFydCAoKTsJLyogc2VuZCBhIHN0YXJ0IGJpdCAqLworCisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJUcmFuc2FjdGlvbiBzdGFydCBmYWlsZWQ6IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gKGludCkgc3RhdHVzOworCX0KKworCXN0YXR1cyA9IGkyY19zZXRfZGV2X29mZnNldCAoY2hpcCwgMCwgMCwgMCk7CS8qIHNlbmQgdGhlIHNsYXZlIGFkZHJlc3MgKyBubyBvZmZzZXQgKi8KKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIkZhaWxlZCB0byBzZXQgc2xhdmUgYWRkcmVzczogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiAoaW50KSBzdGF0dXM7CisJfQorI2lmZGVmIERFQlVHX0kyQworCWkyY19zdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCXByaW50ZiAoImFkZHJlc3MgJSN4IHJldHVybmVkICUjeFxuIiwgY2hpcCwgaTJjX3N0YXR1cyk7CisjZW5kaWYKKwkvKiBpc3N1ZSBhIHN0b3AgYml0ICovCisJaTJjX3N0b3AgKCk7CisJcmV0dXJuIDA7CQkvKiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gKi8KK30KKworI2VuZGlmIC8qIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0kyQykgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vbmFuZC5jIGIvYm9hcmQvbWluZHNwZWVkL2Mya2V2bS9uYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjNmJjNAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vbmFuZC5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisKKyNpbmNsdWRlIDxuYW5kLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYnNwLmg+CisjaW5jbHVkZSA8YXNtLWFybS9hcmNoLWNvbWNlcnRvL2V4cC1idXNfYzIwMDAuaD4KKyNpbmNsdWRlIDxhc20tYXJtL2lvLmg+CisKKworLyoqIEhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBOQU5EIGNvbnRyb2wtbGluZXMKKyAqKgorICoqIEBwYXJhbVtpbl0gbXRkICAgICAgIE1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiogQHBhcmFtW2luXSBjbWQgICAgICAgTkFORCBjb21tYW5kIHRvIHRoZSBjb250cm9sbGVyCisgKiogQHBhcmFtW2luXSBjdHJsICAgICAgY29udHJvbCBhZGRyZXNzL2NvbW1hbmQgbGF0Y2gKKyAqKgorICoqLworc3RhdGljIHZvaWQgY29tY2VydG9fbmFuZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKyAgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKworICAgICAgICBpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3RybCAmIE5BTkRfTkNFKQorCQkJU29DX2dwaW9fc2V0XzAoU29DX2dwaW9fbWFzayhDRkdfTkFORF9DRV9HUElPKSk7CisgICAgICAgICAgICAgICAgZWxzZQorCQkJU29DX2dwaW9fc2V0XzEoU29DX2dwaW9fbWFzayhDRkdfTkFORF9DRV9HUElPKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY21kID09IE5BTkRfQ01EX05PTkUpIHsKKwkgcmV0dXJuOworICAgICAgICB9CisKKwlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cgKyBDT01DRVJUT19OQU5EX0NMRSk7CisgICAgICAgIGVsc2UgaWYgKGN0cmwgJiBOQU5EX0FMRSkKKyAgICAgICAgICAgICAgICB3cml0ZWIoY21kLCAgY2hpcC0+SU9fQUREUl9XICsgQ09NQ0VSVE9fTkFORF9BTEUpOworICAgICAgICBlbHNlCisJCXJldHVybjsKK30KKworCitpbnQgY29tY2VydG9fbmFuZF9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gU29DX2dwaW9fcmVhZChTb0NfZ3Bpb19tYXNrKENGR19OQU5EX0JSX0dQSU8pKSA/IDEgOiAwOworfQorCitpbnQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCit7CisJcHJpbnRmKCJib2FyZF9uYW5kX2luaXQgbmFuZC0+SU9fQUREUl9SID0leFxuIiwgbmFuZC0+SU9fQUREUl9SKTsKKworCW5hbmQtPm9wdGlvbnMgPSAwOworCW5hbmQtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKKwluYW5kLT5jbWRfY3RybCA9IGNvbWNlcnRvX25hbmRfaHdjb250cm9sOworCW5hbmQtPmRldl9yZWFkeSA9IGNvbWNlcnRvX25hbmRfcmVhZHk7CisJbmFuZC0+Y2hpcF9kZWxheSA9IDIwOworfQorI2Vsc2UKK2ludCBib2FyZF9uYW5kX2luaXQoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKK3sKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Mya2V2bS9wYWRfY29uZmlnLmMgYi9ib2FyZC9taW5kc3BlZWQvYzJrZXZtL3BhZF9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQ5MTA0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mya2V2bS9wYWRfY29uZmlnLmMKQEAgLTAsMCArMSw4MSBAQAorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xrY29yZV9jMjAwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Rkcl9jMjAwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW9fYzIwMDAuaD4KKworI2RlZmluZSBDT05GSUdfR0VNX1JHTUlJXzJfNVYKKy8vI2RlZmluZSBDT05GSUdfR0VNX1JHTUlJXzNfM1YKKyNkZWZpbmUgQ09ORklHX0hGRV9PVkVSRFJJVkUKKworLyogSW5pdGlhbGl6ZSBwYWQgY29uZmlnIGFjY29yZGluZyB0byBDMktfQ2hpcERlZl9zcGVjXzAxMC5kb2MgKi8KK3ZvaWQgY29tY2VydG9fcGFkX2NvbmZpZygpCit7CisJdTMyIHZhbDsKKworCS8qIEhGRSBjb25maWd1cmF0aW9ucyAqLworCisJLyogTWVtb3JpZXMgRU1BIENvbmZpZyAxICovCisJdmFsID0gKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX01FTV9FTUFfQ09ORklHMSk7CisJdmFsICY9IH4oKDB4MyA8PCA2KXwoMHgzIDw8IDE3KSk7CisJKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX01FTV9FTUFfQ09ORklHMSkgPSB2YWw7CisKKyNpZiBkZWZpbmVkKENPTkZJR19HRU1fUkdNSUlfM18zVikKKwkvKiAgRHJpdmluZyBTdHJlbmd0aCBvZiBJTyBQYWRzICovCisJLypJbiBjYXNlIEdFTVggb3BlcmF0ZXMgaW4gUk1JSSBvciBSR01JSSBAMy4zViBtb2RlIHRoZW4gbmVlZCB0byBhZGp1c3QKKwkgKnRoZSBkcml2aW5nIHN0cmVuZ3RoIG9mIGl0cyBJTyBwYWQgKGRlZmF1bHQgdmFsdWUgaXMgZm9yIDIuNVYpICovCisJdmFsID0gKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1BBRF9DT05GSUczKTsKKwl2YWwgJj0gfigoMHgzIDw8IDYpIHwgKDB4MyA8PCAxMikpOworCXZhbCB8PSAoKDB4MiA8PCA2KSB8ICgweDIgPDwgMTIpKTsKKwkqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fUEFEX0NPTkZJRzMpID0gdmFsOworCisJdmFsID0gKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1BBRF9DT05GSUc0KTsKKwl2YWwgJj0gfigoMHgzIDw8IDYpfCAoMHgzIDw8IDEyKSk7CisJdmFsIHw9ICgoMHgyIDw8IDYpIHwgKDB4MiA8PCAxMikpOworCSoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHNCkgPSB2YWw7CisKKwl2YWwgPSAqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fUEFEX0NPTkZJRzUpOworCXZhbCAmPSB+KCgweDMgPDwgNikgfCAoMHgzIDw8IDEyKSk7CisJdmFsIHw9ICgoMHgyIDw8IDYpIHwgKDB4MiA8PCAxMikpOworCSoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHNSkgPSB2YWw7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0dFTV9SR01JSV8yXzVWKQorCS8qIFJHTUlJIFBhZCBDb21wZW5zYXRpb24gTG9naWMgKFR4IHNpZGUgb25seSkqLworCXZhbCA9ICoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ1RSTCk7CisJdmFsICY9IH4oKDB4MyA8PCAyMikgfCAoMHgzIDw8IDI2KSB8ICgweDMgPDwgMzApKTsKKwkqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fUEFEX0NUUkwpID0gdmFsOworI2Vsc2UKKyNlcnJvciAiRWl0aGVyIENPTkZJR19HRU1fUkdNSUlfM18zViBvciBDT05GSUdfR0VNX1JHTUlJXzJfNVYgc2hvdWxkIGJlIHNlbGVjdGVkIgorI2VuZGlmCisJLyogU2xldyBSYXRlIENvbnRyb2wgb2YgSU8gUGFkcyAqLworCXZhbCA9ICoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHMyk7CisJdmFsIHw9ICgoMHgxIDw8IDExKSB8ICgweDEgPDwgMTcpKTsKKwkqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fUEFEX0NPTkZJRzMpID0gdmFsOworCisJdmFsID0gKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1BBRF9DT05GSUc0KTsKKwl2YWwgfD0gKCgweDEgPDwgMTEpIHwgKDB4MSA8PCAxNykpOworCSoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHNCkgPSB2YWw7CisKKwl2YWwgPSAqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fUEFEX0NPTkZJRzUpOworCXZhbCB8PSAoKDB4MSA8PCAxMSkgfCAoMHgxIDw8IDE3KSk7CisJKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1BBRF9DT05GSUc1KSA9IHZhbDsKKworI2lmIGRlZmluZWQgKENPTkZJR19IRkVfT1ZFUkRSSVZFKQorCS8qIE1lbW9yeSBNYXJnaW4gQml0IHNldHRpbmcgKi8KKwkvKiBJbiBjYXNlIEhGRSBibG9jayBvcGVyYXRlcyBpbiBvdmVyZHJpdmUgKDEuMlYpIG1vZGUgdGhlbiBuZWVkIHRvCisJKiBtb2RpZnkgZmV3IEVNQSBmaWVsZHMgcmVsYXRlZCB0byBIRkUgbWVtb3JpZXMuIFRoZSBjb25maWd1cmF0aW9uCisJKiByZWdpc3RlcnMgYXJlIGluIEdQSU8gYmxvY2sgKi8KKwl2YWwgPSAqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fTUVNX0VNQV9DT05GSUcwKTsKKwl2YWwgJj0gfigweEZGRiA8PCAxOCk7CisJdmFsIHw9ICgweDM4RSA8PCAxOCk7CisJKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX01FTV9FTUFfQ09ORklHMCkgPSB2YWw7CisKKwl2YWwgPSAqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fTUVNX0VNQV9DT05GSUcxKTsKKwl2YWwgJj0gfigweDNGIDw8IDE5KTsKKwl2YWwgfD0gKDB4OCA8PCAxOCk7CisJKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX01FTV9FTUFfQ09ORklHMSkgPSB2YWw7CisjZW5kaWYKKworCS8qVE9ETyBBZGQgcmVzdCBvZiB0aGUgY29uZmlndXJhdGlvbnMgaGVyZSovCisKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vcmVzZXQuYyBiL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQwNjVmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mya2V2bS9yZXNldC5jCkBAIC0wLDAgKzEsMTAgQEAKKyNpbmNsdWRlIDxjb21tb24uaD4KKworLyoKKyAqICAqIFJlc2V0IHRoZSBjcHUgdGhyb3VnaCB0aGUgcmVzZXQgY29udHJvbGxlcgorICogICAqLwordm9pZCBfX25vcmV0dXJuIHJlc2V0X2NwdSAodW5zaWduZWQgbG9uZyBhZGRyKQoreworICAgICAgICB3aGlsZSAoMSk7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC9jMmtldm0vdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2I4N2EwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Mya2V2bS91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgICAgICA6CisJeworCSAgY3B1L2FybV9jb3J0ZXhhOS9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQorCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvY29tbW9uL2FtMjlsdjA0MGIuYyBiL2JvYXJkL21pbmRzcGVlZC9jb21tb24vYW0yOWx2MDQwYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZjI1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvY29tbW9uL2FtMjlsdjA0MGIuYwpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2lmZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIKKworI2RlZmluZSBBTTI5TFYwNDBCX1NJWkUJCSg1MTIgKiAxMDI0KQorI2RlZmluZSBBTTI5TFYwNDBCX1NFQ1RPUl9TSVpFCSg2NCAqIDEwMjQpCisKKyNkZWZpbmUgQU0yOUxWMDQwQl9TRUNUT1JTCShBTTI5TFYwNDBCX1NJWkUgLyBBTTI5TFYwNDBCX1NFQ1RPUl9TSVpFKQorCisKKy8qIEFtMjlMVjA0MEIgQ29kZXMgKi8KKyNkZWZpbmUgQ01EX1JFU0VUCQkweEYwCisjZGVmaW5lIENNRF9BVVRPX1NFTEVDVAkJMHg5MAorI2RlZmluZSBDTURfVU5MT0NLMQkJMHhBQQorI2RlZmluZSBDTURfVU5MT0NLMgkJMHg1NQorI2RlZmluZSBDTURfRVJBU0VfU0VUVVAJCTB4ODAKKyNkZWZpbmUgQ01EX0VSQVNFX0NPTkZJUk0JMHgzMAorI2RlZmluZSBDTURfUFJPR1JBTQkJMHhBMAorI2RlZmluZSBDTURfVU5MT0NLX0JZUEFTUwkweDIwCisjZGVmaW5lIENNRF9TRUNUT1JfVU5MT0NLCTB4NzAKKworI2RlZmluZSBNRU1fRkxBU0hfQUREUjEJCTB4NTU1CisjZGVmaW5lIE1FTV9GTEFTSF9BRERSMgkJMHgyQUEKKworI2RlZmluZSBCSVRfRVJBU0VfRE9ORQkJMHg4MAorI2RlZmluZSBCSVRfUkRZX01BU0sJCTB4ODAKKworCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfUFJPVEVDVElPTikKK2ludCBhbTI5bHYwNDBiX2ZsYXNoX3JlYWxfcHJvdGVjdChmbGFzaF9pbmZvX3QgKmluZm8sIGxvbmcgc2VjdG9yLCBpbnQgcHJvdCkKK3sKKwkvKiBkbyBub3RoaW5nIGZvciBub3cgKi8KKwlyZXR1cm4gRVJSX0lOVkFMOworfQorI2VuZGlmCisKK2ludCBhbTI5bHYwNDBiX2ZsYXNoX2VyYXNlKGZsYXNoX2luZm9fdCAqIGluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQoreworCXZvbGF0aWxlIHU4ICpiYXNlID0gKHU4ICopaW5mby0+c3RhcnRbMF07CisJdm9sYXRpbGUgdTggKmFkZHIgPSBiYXNlOworCWludCBmbGFnLCBlcmFzZWQsIHByb3QsIHNlY3Q7CisJdWxvbmcgc3RhcnQsIG5vdywgbGFzdDsKKworCS8qIGZpcnN0IGxvb2sgZm9yIHByb3RlY3Rpb24gYml0cyAqLworCisJcHJvdCA9IDA7CisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7ICsrc2VjdCkgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgeworCQkJcHJvdCsrOworCQl9CisJfQorCisJaWYgKHByb3QpIHsKKwkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLCBwcm90KTsKKwl9IGVsc2UgeworCQlwcmludGYgKCJcbiIpOworCX0KKworCWVyYXNlZCA9IDA7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwliYXNlW01FTV9GTEFTSF9BRERSMV0gPSBDTURfVU5MT0NLMTsKKwliYXNlW01FTV9GTEFTSF9BRERSMl0gPSBDTURfVU5MT0NLMjsKKwliYXNlW01FTV9GTEFTSF9BRERSMV0gPSBDTURfRVJBU0VfU0VUVVA7CisJYmFzZVtNRU1fRkxBU0hfQUREUjFdID0gQ01EX1VOTE9DSzE7CisJYmFzZVtNRU1fRkxBU0hfQUREUjJdID0gQ01EX1VOTE9DSzI7CisKKwkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7IC8qIG5vdCBwcm90ZWN0ZWQgKi8KKwkJCWFkZHIgPSAodTggKikoaW5mby0+c3RhcnRbc2VjdF0pOworCisJCQlhZGRyWzBdID0gQ01EX0VSQVNFX0NPTkZJUk07CisJCQllcmFzZWQrKzsKKwkJfQorCX0KKworCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChmbGFnKQorCQllbmFibGVfaW50ZXJydXB0cygpOworCisJLyogd2FpdCBhdCBsZWFzdCA1MHVzIC0gbGV0J3Mgd2FpdCAxMDAgdXMgKi8KKwl1ZGVsYXkgKDEwMCk7CisKKwlpZiAoZXJhc2VkID09IDApCisJCWdvdG8gb3V0OworCisJcHJpbnRmICgiRXJhc2luZyAlZCBzZWN0b3JzLi4uICIsIGVyYXNlZCk7CisKKwlzdGFydCA9IGdldF90aW1lciAoMCk7CisJbGFzdCA9IHN0YXJ0OworCXdoaWxlICgoYWRkclswXSAmIEJJVF9FUkFTRV9ET05FKSAhPSBCSVRfRVJBU0VfRE9ORSkgeworCQlub3cgPSBnZXRfdGltZXIoc3RhcnQpOworCQlpZiAobm93ID4gKGVyYXNlZCAqIENGR19GTEFTSF9FUkFTRV9UT1VUKSkgeworCQkJcHJpbnRmICgidGltZW91dFxuIik7CisJCQlyZXR1cm4gRVJSX1RJTU9VVDsKKwkJfQorCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCQlpZiAoKG5vdyAtIGxhc3QpID4gKDEgKiBDRkdfSFopKSB7CS8qIGV2ZXJ5IHNlY29uZCAqLworCQkJcHV0YyAoJy4nKTsKKwkJCWxhc3QgPSBub3c7CisJCX0KKwl9CisKKwlwcmludGYgKCJva1xuIik7CisKK291dDoKKwkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwliYXNlWzBdID0gQ01EX1JFU0VUOworCisJcmV0dXJuIEVSUl9PSzsKK30KKworaW50IGFtMjlsdjA0MGJfd3JpdGVfYnVmZihmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGRlc3QsIHVsb25nIGNudCkKK3sKKwl2b2xhdGlsZSB1OCAqYmFzZSA9ICh1OCAqKShpbmZvLT5zdGFydFswXSk7CisJdm9sYXRpbGUgdTggKmFkZHIgPSAodTggKilkZXN0OworCXU4ICp3YnVmID0gc3JjOworCXVsb25nIGxhc3QsIG5vdywgc3RhcnQ7CisKKwlsYXN0ID0gZ2V0X3RpbWVyKDApOworCWZvciAoOyAoY250ID4gMCk7IGNudC0tLCBhZGRyKyssIHdidWYrKykgeworCQlpZiAoKmFkZHIgIT0gKndidWYpIHsKKwkJCWJhc2VbTUVNX0ZMQVNIX0FERFIxXSA9IENNRF9VTkxPQ0sxOworCQkJYmFzZVtNRU1fRkxBU0hfQUREUjJdID0gQ01EX1VOTE9DSzI7CisJCQliYXNlW01FTV9GTEFTSF9BRERSMV0gPSBDTURfUFJPR1JBTTsKKwkJCSphZGRyID0gKndidWY7CisKKwkJCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkJCXdoaWxlICgoKmFkZHIgJiBCSVRfUkRZX01BU0spICE9ICgqd2J1ZiAmIEJJVF9SRFlfTUFTSykpIHsKKwkJCQlub3cgPSBnZXRfdGltZXIoMCk7CisJCQkJaWYgKChub3cgLSBzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQkJCQlwcmludGYgKCJ0aW1lb3V0ICIpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCQkJCWlmICgobm93IC0gbGFzdCkgPiAoMSAqIENGR19IWikpIHsJLyogZXZlcnkgc2Vjb25kICovCisJCQkJCXB1dGMgKCcuJyk7CisJCQkJCWxhc3QgPSBub3c7CisJCQkJfQorCQkJfQorCisJCQlpZiAoKmFkZHIgIT0gKndidWYpIHsKKwkJCQlwcmludGYoIndyaXRlIGZhaWxlZCwgYWRkcmVzcyAlMDhseCAtPiAleCgleClcbiIsCisJCQkJCQkodW5zaWduZWQgbG9uZylhZGRyLCAqd2J1ZiwgKmFkZHIpOworCisJCQkJYmFzZVswXSA9IENNRF9SRVNFVDsgICAvKiBSZXNldCAqLworCisJCQkJcmV0dXJuIEVSUl9USU1PVVQ7CisJCQl9CisJCX0KKwl9CisKKwlwcmludGYoIm9rXG4iKTsKKworCXJldHVybiBFUlJfT0s7Cit9CisKKworc3RhdGljIHVsb25nIGFtMjlsdjA0MGJfZ2V0X3NpemUoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBiYXNlX2FkZHIpCit7CisJdm9sYXRpbGUgdTggKmJhc2UgPSAodTggKiliYXNlX2FkZHI7CisJdm9sYXRpbGUgdTggKmFkZHI7CisJdTggbWFudWZfaWQsIGRldmljZV9pZDsKKwlpbnQgaTsKKworCWJhc2VbTUVNX0ZMQVNIX0FERFIxXSA9IENNRF9VTkxPQ0sxOworCWJhc2VbTUVNX0ZMQVNIX0FERFIyXSA9IENNRF9VTkxPQ0syOworCWJhc2VbTUVNX0ZMQVNIX0FERFIxXSA9IENNRF9BVVRPX1NFTEVDVDsKKworCW1hbnVmX2lkID0gYmFzZVswXTsKKwlkZXZpY2VfaWQgPSBiYXNlWzFdOworCisJaWYgKG1hbnVmX2lkICE9IChBTURfTUFOVUZBQ1QgJiAweGZmKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2aWNlX2lkICE9IEFNRF9JRF9MVjA0MEIpCisJCXJldHVybiAwOworCisJcHJpbnRmKCJmb3VuZCBBTTI5TFYwNDBCIGZsYXNoIGF0ICUwOFhcbiIsIGJhc2VfYWRkcik7CisKKwlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQgfCBGTEFTSF9BTTA0MDsKKwlpbmZvLT5zaXplID0gQU0yOUxWMDQwQl9TSVpFOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IEFNMjlMVjA0MEJfU0VDVE9SUzsKKworCW1lbXNldChpbmZvLT5wcm90ZWN0LCAwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJCWluZm8tPnN0YXJ0W2ldID0gYmFzZV9hZGRyICsgaSAqIEFNMjlMVjA0MEJfU0VDVE9SX1NJWkU7CisKKwkJYWRkciA9ICh1OCAqKWluZm8tPnN0YXJ0W2ldOworCQlpbmZvLT5wcm90ZWN0W2ldID0gYWRkclsyXSAmIDB4MTsKKwl9CisKKwkvKiBSZXNldCBmbGFzaCAqLworCWJhc2VbMF0gPSBDTURfUkVTRVQ7CisKKwlyZXR1cm4gaW5mby0+c2l6ZTsKK30KKwordWxvbmcgYW0yOWx2MDQwYl9mbGFzaF9pbml0KGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJdWxvbmcgYmFzZV9hZGRyW0NGR19NQVhfRkxBU0hfQkFOS1NdID0gQ0ZHX0ZMQVNIX0JBTktTX0xJU1Q7CisJdWxvbmcgc2l6ZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7CisJCWlmIChpbmZvW2ldLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pCisJCQlzaXplICs9IGFtMjlsdjA0MGJfZ2V0X3NpemUoJmluZm9baV0sIGJhc2VfYWRkcltpXSk7CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jb21tb24vYW1sdjY0MHUuYyBiL2JvYXJkL21pbmRzcGVlZC9jb21tb24vYW1sdjY0MHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTZhYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9hbWx2NjQwdS5jCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBSb2JlcnQgU2Nod2ViZWwsIFBlbmd1dHJvbml4LCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpZmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCisKKyNkZWZpbmUgQU1MVjY0MFVfU0VDVE9SX1NJWkUJMHgwMDAxMDAwMCAgICAgIC8qIDY0IEtCIHNlY3RvcnMgKi8KKyNkZWZpbmUgQU1MVjY0MFVfU0VDVE9SUwkoQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUgLyBBTUxWNjQwVV9TRUNUT1JfU0laRSkKKworI2RlZmluZSBGVElNRU9VVAkJMTYwMDAwMDAKKworLyogRnVuY3Rpb25zICovCitpbnQgYW1sdjY0MHVfZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpOworaW50IGFtbHY2NDB1X3dyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KTsKKworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX1BST1RFQ1RJT04pCitpbnQgYW1sdjY0MHVfZmxhc2hfcmVhbF9wcm90ZWN0KGZsYXNoX2luZm9fdCAqaW5mbywgbG9uZyBzZWN0b3IsIGludCBwcm90KQoreworCS8qIGRvIG5vdGhpbmcgZm9yIG5vdyAqLworCXJldHVybiBFUlJfSU5WQUw7Cit9CisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworaW50IGFtbHY2NDB1X2ZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQoreworCXZvbGF0aWxlIHUxNiAqYmFzZSA9ICh1MTYgKilpbmZvLT5zdGFydFswXTsKKwl2b2xhdGlsZSB1MTYgKmFkZHIgPSBiYXNlOworCWludCBmbGFnLCBwcm90LCBzZWN0LCBlcmFzZWQ7CisJdWxvbmcgc3RhcnQsIG5vdywgbGFzdDsKKworCXByb3QgPSAwOworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKKwkJCXByb3QrKzsKKwkJfQorCX0KKworCWlmIChwcm90KSB7CisJCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwgcHJvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRmICgiXG4iKTsKKwl9CisKKwllcmFzZWQgPSAwOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJYmFzZVsweDU1NV0gPSAweEFBOworCWJhc2VbMHgyQUFdID0gMHg1NTsKKwliYXNlWzB4NTU1XSA9IDB4ODA7CisJYmFzZVsweDU1NV0gPSAweEFBOworCWJhc2VbMHgyQUFdID0gMHg1NTsKKworCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsJLyogbm90IHByb3RlY3RlZCAqLworCQkJYWRkciA9ICh1MTYgKilpbmZvLT5zdGFydFtzZWN0XTsKKwkJCWFkZHJbMF0gPSAweDMwOworCQkJZXJhc2VkKys7CisJCX0KKwl9CisKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoZmxhZykKKwkJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCS8qIHdhaXQgYXQgbGVhc3QgNTB1cyAtIGxldCdzIHdhaXQgMTAwIHVzICovCisJdWRlbGF5ICgxMDApOworCisJaWYgKGVyYXNlZCA9PSAwKQorCQlnb3RvIG91dDsKKworCXByaW50ZiAoIkVyYXNpbmcgJWQgc2VjdG9ycy4uLiAiLCBlcmFzZWQpOworCisJc3RhcnQgPSBnZXRfdGltZXIgKDApOworCWxhc3QgPSBzdGFydDsKKwl3aGlsZSAoKGFkZHJbMF0gJiAweDgwKSAhPSAweDgwKSB7CisJCW5vdyA9IGdldF90aW1lcihzdGFydCk7CisJCWlmIChub3cgPiAoZXJhc2VkICogQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpKSB7CisJCQlwcmludGYgKCJ0aW1lb3V0XG4iKTsKKwkJCXJldHVybiBFUlJfVElNT1VUOworCQl9CisJCS8qIHNob3cgdGhhdCB3ZSdyZSB3YWl0aW5nICovCisJCWlmICgobm93IC0gbGFzdCkgPiAoMSAqIENGR19IWikpIHsJLyogZXZlcnkgc2Vjb25kICovCisJCQlwdXRjICgnLicpOworCQkJbGFzdCA9IG5vdzsKKwkJfQorCX0KKworCXByaW50ZiAoIm9rXG4iKTsKKworb3V0OgorCS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLworCWJhc2VbMF0gPSAweEYwOworCisJcmV0dXJuIEVSUl9PSzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICovCisKK2ludCBhbWx2NjQwdV93cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGRlc3QsIHVsb25nIGNudCkKK3sKKwl2b2xhdGlsZSB1MTYgKmJhc2UgPSAodTE2ICopKGluZm8tPnN0YXJ0WzBdKTsKKwl2b2xhdGlsZSB1MTYgKmFkZHIgPSAodTE2ICopZGVzdDsKKwl1MTYgKndidWYgPSAodTE2ICopc3JjOworCXVsb25nIGxhc3QsIG5vdywgc3RhcnQ7CisKKwlsYXN0ID0gZ2V0X3RpbWVyKDApOworCWZvciAoY250ID4+PSAxOyAoY250ID4gMCk7IGNudC0tLCBhZGRyKyssIHdidWYrKykgeworCQlpZiAoKmFkZHIgIT0gKndidWYpIHsKKwkJCWJhc2VbMHg1NTVdID0gMHhBQTsKKwkJCWJhc2VbMHgyQUFdID0gMHg1NTsKKwkJCWJhc2VbMHg1NTVdID0gMHhBMDsKKwkJCSphZGRyID0gKndidWY7CisKKwkJCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkJCXdoaWxlICgoKmFkZHIgJiAweDgwKSAhPSAoKndidWYgJiAweDgwKSkgeworCQkJCW5vdyA9IGdldF90aW1lcigwKTsKKwkJCQlpZiAoKG5vdyAtIHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CisJCQkJCXByaW50ZiAoInRpbWVvdXQgIik7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qIHNob3cgdGhhdCB3ZSdyZSB3YWl0aW5nICovCisJCQkJaWYgKChub3cgLSBsYXN0KSA+ICgxICogQ0ZHX0haKSkgewkvKiBldmVyeSBzZWNvbmQgKi8KKwkJCQkJcHV0YyAoJy4nKTsKKwkJCQkJbGFzdCA9IG5vdzsKKwkJCQl9CisJCQl9CisKKwkJCWlmICgqYWRkciAhPSAqd2J1ZikgeworCQkJCXByaW50Zigid3JpdGUgZmFpbGVkLCBhZGRyZXNzICUwOGx4IC0+ICV4KCV4KVxuIiwKKwkJCQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsICp3YnVmLCAqYWRkcik7CisKKwkJCQliYXNlWzBdID0gMHhGMDsgICAvKiBSZXNldCAqLworCisJCQkJcmV0dXJuIEVSUl9USU1PVVQ7CisJCQl9CisJCX0KKwl9CisKKwlwcmludGYoIm9rXG4iKTsKKworCXJldHVybiBFUlJfT0s7Cit9CisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSBjYW5ub3QgYmUgcnVuIGZyb20gRkxBU0ghCisgKi8KKworc3RhdGljIHVsb25nIGFtbHY2NDB1X2dldF9zaXplIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGJhc2VfYWRkcikKK3sKKwl2b2xhdGlsZSB1MTYgKmJhc2UgPSAodTE2ICopYmFzZV9hZGRyOworCXZvbGF0aWxlIHUxNiAqYWRkcjsKKwl1MTYgbWFudWZfaWQsIGRldmljZV9pZDEsIGRldmljZV9pZDIsIGRldmljZV9pZDM7CisJaW50IGk7CisKKyAgICAgICAgLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KKwliYXNlWzB4NTU1XSA9IDB4QUE7CisgICAgICAgIGJhc2VbMHgyQUFdID0gMHg1NTsKKwliYXNlWzB4NTU1XSA9IDB4OTA7CisKKwltYW51Zl9pZCA9IGJhc2VbMF07CisJZGV2aWNlX2lkMSA9IGJhc2VbMV07CisJZGV2aWNlX2lkMiA9IGJhc2VbMTRdOworCWRldmljZV9pZDMgPSBiYXNlWzE1XTsKKworCWlmIChtYW51Zl9pZCAhPSAoQU1EX01BTlVGQUNUICYgMHhmZmZmKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2aWNlX2lkMSAhPSAoQU1EX0lEX01JUlJPUiAmIDB4ZmZmZikgfHwKKwkgICAgZGV2aWNlX2lkMiAhPSAoQU1EX0lEX0xWNjQwVV8yICYgMHhmZmZmKSB8fAorCSAgICBkZXZpY2VfaWQzICE9IChBTURfSURfTFY2NDBVXzMgJiAweGZmZmYpKQorCQlyZXR1cm4gMDsKKworCXByaW50ZigiZm91bmQgQU1MVjY0MFUgZmxhc2ggYXQgJTA4WFxuIiwgYmFzZV9hZGRyKTsKKworCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRCB8IEZMQVNIX0FNTFY2NDBVOworCWluZm8tPnNpemUgPSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRTsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSBBTUxWNjQwVV9TRUNUT1JTOworCisJbWVtc2V0IChpbmZvLT5wcm90ZWN0LCAwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJCWluZm8tPnN0YXJ0W2ldID0gYmFzZV9hZGRyICsgaSAqIEFNTFY2NDBVX1NFQ1RPUl9TSVpFOworCisJCWFkZHIgPSAodTE2ICopaW5mby0+c3RhcnRbaV07CisJCWluZm8tPnByb3RlY3RbaV0gPSBhZGRyWzJdICYgMHgxOworCX0KKworCS8qIFJlc2V0IGZsYXNoICovCisJYmFzZVswXSA9IDB4RjA7CisKKwlyZXR1cm4gaW5mby0+c2l6ZTsKK30KKworCit1bG9uZyBhbWx2NjQwdV9mbGFzaF9pbml0IChmbGFzaF9pbmZvX3QgKiBpbmZvKQoreworCXVsb25nIGJhc2VfYWRkcltDRkdfTUFYX0ZMQVNIX0JBTktTXSA9IENGR19GTEFTSF9CQU5LU19MSVNUOworCXVsb25nIHNpemUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkrKykgeworCQlpZiAoaW5mb1tpXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCQlzaXplICs9IGFtbHY2NDB1X2dldF9zaXplKCZpbmZvW2ldLCBiYXNlX2FkZHJbaV0pOworCQl9CisJfQorCisJcmV0dXJuIHNpemU7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jb21tb24vYXJtMV9pbml0LlMgYi9ib2FyZC9taW5kc3BlZWQvY29tbW9uL2FybTFfaW5pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2E5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvY29tbW9uL2FybTFfaW5pdC5TCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qIFRoaXMgY29kZSBydW5zIGZyb20gQVJNMSBhbmQgc2V0dXBzIHRoZSBDUFUgYmVmb3JlIGp1bXBpbmcgdG8KK3RoZSBiZWdpbm5pbmcgb2YgdGhlIEFSTTEgaW1hZ2UgKHVzdWFsbHkgYSBMaW51eCB6SW1hZ2UpLgorSXQgbXVzdCBiZSBjb3BpZWQgdG8gMHgwMDAwMDAwMCBiZWZvcmUgcmVsZWFzaW5nIEFSTTEuCitMaW5rZXIgc2NyaXB0IHZhcmlhYmxlcyAoaW4gdS1ib290LmxkcykgYXJlIHVzZWQgdG8gZmluZCB0aGUKK3N0YXJ0IGFuZCBlbmQgYWRkcmVzcyBvZiB0aGlzIGJpdCBvZiBjb2RlICovCisKKy5nbG9ibCBfYXJtMV9zdGFydF9hZGRyCisuZ2xvYmwgX2FybTFfcjAKKy5nbG9ibCBfYXJtMV9yMQorLmdsb2JsIF9hcm0xX3IyCisKKworCWxkcglyMCwgX2FybTFfcjAKKwlsZHIJcjEsIF9hcm0xX3IxCisJbGRyCXIyLCBfYXJtMV9yMgorCWxkcglwYywgX2FybTFfc3RhcnRfYWRkcgorCitfYXJtMV9zdGFydF9hZGRyOgorCS53b3JkIDB4MDAwMDAwMDAKKworX2FybTFfcjA6CisJLndvcmQgMHgwMDAwMDAwMAorCitfYXJtMV9yMToKKwkud29yZCAweDAwMDAwMDAwCisKK19hcm0xX3IyOgorCS53b3JkIDB4MDAwMDAwMDAKKwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9jbWRfYm9vdGNvbWNlcnRvLmMgYi9ib2FyZC9taW5kc3BlZWQvY29tbW9uL2NtZF9ib290Y29tY2VydG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGMxNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9jbWRfYm9vdGNvbWNlcnRvLmMKQEAgLTAsMCArMSw1OTUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FTEYpCitleHRlcm4gaW50IHZhbGlkX2VsZl9pbWFnZSAodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvYWRfZWxmX2ltYWdlICh1bnNpZ25lZCBsb25nIGFkZHIpOworI2VuZGlmCisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitzdHJ1Y3QgX0FJRl9IRUFERVIgeworCXUzMiBCTF9EZWNvbXByZXNzQ29kZTsKKwl1MzIgQkxfU2VsZlJlbG9jQ29kZTsKKwl1MzIgQkxfRGJnSW5pdFplcm9Jbml0OworCXUzMiBFbnRyeVBvaW50T2Zmc2V0OworCXUzMiBQcm9ncmFtRXhpdEluc3RyOworCXUzMiBJbWFnZVJlYWRPbmx5U2l6ZTsKKwl1MzIgSW1hZ2VSZWFkV3JpdGVTaXplOworCXUzMiBJbWFnZURlYnVnU2l6ZTsKKwl1MzIgSW1hZ2VaZXJvSW5pdFNpemU7CisJdTMyIEltYWdlRGVidWdUeXBlOworCXUzMiBJbWFnZUJhc2U7CisJdTMyIFdvcmtTcGFjZTsKKwl1MzIgQWRkcmVzc01vZGU7CisJdTMyIERhdGFCYXNlOworCXUzMiBGaXJzdEZhdE9mZnNldDsKKwl1MzIgUmVzZXJ2ZWQyOworCXUzMiBEZWJ1Z0luaXRJbnN0cjsKKwl1MzIgWmVyb0luaXRDb2RlWzE1XTsKK307CisKK3N0cnVjdCBfRkFUX0FJRl9IRUFERVIgeworCXUzMiBOZXh0RmF0T2Zmc2V0OworCXUzMiBMb2FkQWRkcmVzczsKKwl1MzIgU2l6ZTsKKwl1OCByZWdpb25fbmFtZVszMl07Cit9OworCisvKioKKyAqIHByaW50X2F4Zl9oZHIgLQorICoKKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYXhmX2hkcih1bG9uZyBhZGRyKQoreworCXN0cnVjdCBfQUlGX0hFQURFUiAqYWlmX2hkciA9IChzdHJ1Y3QgX0FJRl9IRUFERVIgKikoYWRkcik7CisKKwkvKiB3ZSBhc3N1bWUgdGhhdCBNU1AgaW1hZ2UgaW4gbWVtb3J5IGlzIG5vdCBsZXNzIHRoYW4gdGhlIGhlYWRlciBzaXplIChfQUlGX0hFQURFUikgKi8KKworCXByaW50ZigiY29kZV9vZmZzZXQ9MHg4MFxuIik7CisJcHJpbnRmKCJjb2RlX2Jhc2U9JWx4XG4iLCBhaWZfaGRyLT5JbWFnZUJhc2UpOworCXByaW50ZigiZGF0YV9vZmZzZXQ9JWx4XG4iLCAweDgwICsgYWlmX2hkci0+SW1hZ2VSZWFkT25seVNpemUpOworCXByaW50ZigiY29kZV9zaXplPSVseFxuIiwgYWlmX2hkci0+SW1hZ2VSZWFkT25seVNpemUpOworCXByaW50ZigiZGF0YV9iYXNlPSVseFxuIiwgYWlmX2hkci0+SW1hZ2VCYXNlICsgYWlmX2hkci0+SW1hZ2VSZWFkT25seVNpemUpOworCXByaW50ZigiZGF0YV9zaXplPSVseFxuIiwgYWlmX2hkci0+SW1hZ2VSZWFkV3JpdGVTaXplKTsKKwlwcmludGYoInplcm9pbml0X2Jhc2U9JWx4XG4iLAorCSAgICAgICBhaWZfaGRyLT5JbWFnZUJhc2UgKyBhaWZfaGRyLT5JbWFnZVJlYWRPbmx5U2l6ZSArIGFpZl9oZHItPkltYWdlUmVhZFdyaXRlU2l6ZSk7CisJcHJpbnRmKCJwcm9nX2VudHJ5PSVseFxuIiwgYWlmX2hkci0+SW1hZ2VCYXNlICsgYWlmX2hkci0+RW50cnlQb2ludE9mZnNldCk7CisKKwlwcmludGYoIiBcbiIpOworCXByaW50ZigiQUlGSEVBREVSOlxuIik7CisJcHJpbnRmKCJCTF9EZWNvbXByZXNzQ29kZT0lbHhcbiIsIGFpZl9oZHItPkJMX0RlY29tcHJlc3NDb2RlKTsKKwlwcmludGYoIkJMX1NlbGZSZWxvY0NvZGU9JWx4XG4iLCBhaWZfaGRyLT5CTF9TZWxmUmVsb2NDb2RlKTsKKwlwcmludGYoIkJMX0RiZ0luaXRaZXJvSW5pdD0lbHhcbiIsIGFpZl9oZHItPkJMX0RiZ0luaXRaZXJvSW5pdCk7CisJcHJpbnRmKCJFbnRyeVBvaW50T2Zmc2V0PSVseFxuIiwgYWlmX2hkci0+RW50cnlQb2ludE9mZnNldCk7CisJcHJpbnRmKCJQcm9ncmFtRXhpdEluc3RyPSVseFxuIiwgYWlmX2hkci0+UHJvZ3JhbUV4aXRJbnN0cik7CisJcHJpbnRmKCJJbWFnZVJlYWRPbmx5U2l6ZT0lbHhcbiIsIGFpZl9oZHItPkltYWdlUmVhZE9ubHlTaXplKTsKKwlwcmludGYoIkltYWdlUmVhZFdyaXRlU2l6ZT0lbHhcbiIsIGFpZl9oZHItPkltYWdlUmVhZFdyaXRlU2l6ZSk7CisJcHJpbnRmKCJJbWFnZURlYnVnU2l6ZT0lbHhcbiIsIGFpZl9oZHItPkltYWdlRGVidWdTaXplKTsKKwlwcmludGYoIkltYWdlWmVyb0luaXRTaXplPSVseFxuIiwgYWlmX2hkci0+SW1hZ2VaZXJvSW5pdFNpemUpOworCXByaW50ZigiSW1hZ2VEZWJ1Z1R5cGU9JWx4XG4iLCBhaWZfaGRyLT5JbWFnZURlYnVnVHlwZSk7CisJcHJpbnRmKCJJbWFnZUJhc2U9JWx4XG4iLCBhaWZfaGRyLT5JbWFnZUJhc2UpOworCXByaW50ZigiV29ya1NwYWNlPSVseFxuIiwgYWlmX2hkci0+V29ya1NwYWNlKTsKKwlwcmludGYoIkFkZHJlc3NNb2RlPSVseFxuIiwgYWlmX2hkci0+QWRkcmVzc01vZGUpOworCXByaW50ZigiRGF0YUJhc2U9JWx4XG4iLCBhaWZfaGRyLT5EYXRhQmFzZSk7CisJcHJpbnRmKCJGaXJzdEZhdE9mZnNldD0lbHhcbiIsIGFpZl9oZHItPkZpcnN0RmF0T2Zmc2V0KTsKKwlwcmludGYoIlJlc2VydmVkMj0lbHhcbiIsIGFpZl9oZHItPlJlc2VydmVkMik7CisJcHJpbnRmKCJEZWJ1Z0luaXRJbnN0cj0lbHhcbiIsIGFpZl9oZHItPkRlYnVnSW5pdEluc3RyKTsKKwlwcmludGYoIlplcm9Jbml0Q29kZVswXT0lbHhcbiIsIGFpZl9oZHItPlplcm9Jbml0Q29kZVswXSk7Cit9CisKKy8qKgorICogY2hlY2tfbG9hZF9hZGRyIC0KKyAqCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbG9hZF9hZGRyKHVsb25nIGFkZHIpCit7CisJaWYgKChhZGRyID4gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSkgJiYKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT181MzApCisJICAgICgoYWRkciA8IEVSQU1fQkFTRUFERFIpIHx8IChhZGRyID49IElSQU1fQkFTRUFERFIgKyBJUkFNX1NJWkUpKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fNTE1KSB8fCBkZWZpbmVkKENPTkZJR19DT01DRVJUT184MDApCisJICAgICgoYWRkciA8IEVSQU1fQkFTRUFERFIpIHx8IChhZGRyID49IEFSQU1fQkFTRUFERFIgKyBBUkFNX1NJWkUpKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fOTAwKQorCSAgICAoKGFkZHIgPCBFUkFNX0JBU0VBRERSKSB8fCAoYWRkciA+PSBDUkFNX0JBU0VBRERSICsgQ1JBTV9TSVpFKSkKKyNlbHNlCisJICAgICgxKQorI2VuZGlmCisJKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBsb2FkX2F4Zl96ZXJvIC0KKyAqCisgKi8KK3N0YXRpYyBpbnQgbG9hZF9heGZfemVybyh1bG9uZyBhZGRyKQoreworCXN0cnVjdCBfQUlGX0hFQURFUiAqYWlmX2hkciA9IChzdHJ1Y3QgX0FJRl9IRUFERVIgKikoYWRkcik7CisJdTMyIG1fZGF0YV9iYXNlOworCXUzMiBieXRlc190b19sb2FkOworCisJaWYgKGFpZl9oZHItPkRhdGFCYXNlKQorCQltX2RhdGFfYmFzZSA9IGFpZl9oZHItPkRhdGFCYXNlOworCWVsc2UKKwkJbV9kYXRhX2Jhc2UgPSBhaWZfaGRyLT5JbWFnZUJhc2UgKyBhaWZfaGRyLT5JbWFnZVJlYWRPbmx5U2l6ZTsKKworCW1fZGF0YV9iYXNlID0gbV9kYXRhX2Jhc2UgKyBhaWZfaGRyLT5JbWFnZVJlYWRXcml0ZVNpemU7CisJYnl0ZXNfdG9fbG9hZCA9IGFpZl9oZHItPkltYWdlWmVyb0luaXRTaXplIC8gMjsKKworCWlmIChjaGVja19sb2FkX2FkZHIobV9kYXRhX2Jhc2UgKyBieXRlc190b19sb2FkKSA8IDApIHsKKwkJcHJpbnRmKCJkYXRhIHNlY3Rpb24gbG9hZCBhZGRyZXNzICV4IG91dHNpZGUgcmFuZ2VcbiIsIG1fZGF0YV9iYXNlICsgYnl0ZXNfdG9fbG9hZCk7CisJCWdvdG8gZXJyOworCX0KKworCW1lbXNldCgodm9pZCAqKW1fZGF0YV9iYXNlLCAwLCBieXRlc190b19sb2FkKTsKKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGxvYWRfYXhmX2ZhdCAtCisgKi8KK3N0YXRpYyBpbnQgbG9hZF9heGZfZmF0KHVsb25nIGFkZHIsIHVsb25nIHNpemUpCit7CisJc3RydWN0IF9BSUZfSEVBREVSICphaWZfaGRyID0gKHN0cnVjdCBfQUlGX0hFQURFUiAqKShhZGRyKTsKKwlzdHJ1Y3QgX0ZBVF9BSUZfSEVBREVSICpmYXRfYWlmX2hkcjsKKwl1MzIgZmF0X29mZnNldDsKKworCWZhdF9vZmZzZXQgPSBhaWZfaGRyLT5GaXJzdEZhdE9mZnNldDsKKworCXdoaWxlIChmYXRfb2Zmc2V0ID4gMCkgeworCisJCWlmICgoZmF0X29mZnNldCArIHNpemVvZihzdHJ1Y3QgX0ZBVF9BSUZfSEVBREVSKSkgPiBzaXplKSB7CisJCQlwcmludGYoImZhdCBzZWN0aW9uIGhlYWRlciBhdCAleCBvdXRzaWRlIGltYWdlICV4XG4iLCBmYXRfb2Zmc2V0LCBzaXplKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJZmF0X2FpZl9oZHIgPSAoc3RydWN0IF9GQVRfQUlGX0hFQURFUiAqKShhZGRyICsgZmF0X29mZnNldCk7CisKKwkJaWYgKChmYXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBfRkFUX0FJRl9IRUFERVIpICsgZmF0X2FpZl9oZHItPlNpemUpID4gc2l6ZSkgeworCQkJcHJpbnRmKCJmYXQgc2VjdGlvbiBzaXplICV4IGJpZ2dlciB0aGFuIGltYWdlIHNpemUgJXhcbiIsIGZhdF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IF9GQVRfQUlGX0hFQURFUikgKyBmYXRfYWlmX2hkci0+U2l6ZSwgc2l6ZSk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlmIChjaGVja19sb2FkX2FkZHIoZmF0X2FpZl9oZHItPkxvYWRBZGRyZXNzICsgZmF0X2FpZl9oZHItPlNpemUpIDwgMCkgeworCQkJcHJpbnRmKCJmYXQgc2VjdGlvbiBsb2FkIGFkZHJlc3MgJXggb3V0c2lkZSByYW5nZVxuIiwgZmF0X2FpZl9oZHItPkxvYWRBZGRyZXNzICsgZmF0X2FpZl9oZHItPlNpemUpOworCQkJZ290byBlcnI7CisJCX0KKworCQltZW1jcHkoKHZvaWQgKilmYXRfYWlmX2hkci0+TG9hZEFkZHJlc3MsCisJCSAgICAgICAodm9pZCAqKShhZGRyICsgZmF0X29mZnNldCArIHNpemVvZihzdHJ1Y3QgX0ZBVF9BSUZfSEVBREVSKSksIGZhdF9haWZfaGRyLT5TaXplKTsKKworCQlmYXRfb2Zmc2V0ID0gZmF0X2FpZl9oZHItPk5leHRGYXRPZmZzZXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLTE7Cit9CisKKworLyoqCisgKiBsb2FkX2F4Zl9kYXRhIC0KKyAqLworc3RhdGljIGludCBsb2FkX2F4Zl9kYXRhKHVsb25nIGFkZHIsIHVsb25nIHNpemUpCit7CisJc3RydWN0IF9BSUZfSEVBREVSICphaWZfaGRyID0gKHN0cnVjdCBfQUlGX0hFQURFUiAqKShhZGRyKTsKKworCWlmIChhaWZfaGRyLT5JbWFnZVJlYWRXcml0ZVNpemUpIHsKKworCQlpZiAoKHNpemVvZihzdHJ1Y3QgX0FJRl9IRUFERVIpICsgYWlmX2hkci0+SW1hZ2VSZWFkT25seVNpemUgKyBhaWZfaGRyLT5JbWFnZVJlYWRXcml0ZVNpemUpID4gc2l6ZSkgeworCQkJcHJpbnRmKCJkYXRhIHNlY3Rpb24gc2l6ZSAleCBiaWdnZXIgdGhhbiBpbWFnZSBzaXplICV4XG4iLCBhaWZfaGRyLT5JbWFnZVJlYWRXcml0ZVNpemUsIHNpemUpOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoYWlmX2hkci0+RGF0YUJhc2UgPT0gMCkgeworCQkJaWYgKGNoZWNrX2xvYWRfYWRkcihhaWZfaGRyLT5JbWFnZUJhc2UgKyBhaWZfaGRyLT5JbWFnZVJlYWRPbmx5U2l6ZSArIGFpZl9oZHItPkltYWdlUmVhZFdyaXRlU2l6ZSkgPCAwKSB7CisJCQkJcHJpbnRmKCJkYXRhIHNlY3Rpb24gbG9hZCBhZGRyZXNzICV4IG91dHNpZGUgcmFuZ2VcbiIsIGFpZl9oZHItPkltYWdlQmFzZSArIGFpZl9oZHItPkltYWdlUmVhZE9ubHlTaXplICsgYWlmX2hkci0+SW1hZ2VSZWFkV3JpdGVTaXplKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJbWVtY3B5KCh2b2lkICopKGFpZl9oZHItPkltYWdlQmFzZSArIGFpZl9oZHItPkltYWdlUmVhZE9ubHlTaXplKSwKKwkJCSAgICAgICAodm9pZCAqKShhZGRyICsgc2l6ZW9mKHN0cnVjdCBfQUlGX0hFQURFUikgKyBhaWZfaGRyLT5JbWFnZVJlYWRPbmx5U2l6ZSksCisJCQkgICAgICAgYWlmX2hkci0+SW1hZ2VSZWFkV3JpdGVTaXplKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChjaGVja19sb2FkX2FkZHIoYWlmX2hkci0+RGF0YUJhc2UgKyBhaWZfaGRyLT5JbWFnZVJlYWRXcml0ZVNpemUpIDwgMCkgeworCQkJCXByaW50ZigiZGF0YSBzZWN0aW9uIGxvYWQgYWRkcmVzcyAleCBvdXRzaWRlIHJhbmdlXG4iLCBhaWZfaGRyLT5EYXRhQmFzZSArIGFpZl9oZHItPkltYWdlUmVhZFdyaXRlU2l6ZSk7CisJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCW1lbWNweSgodm9pZCAqKWFpZl9oZHItPkRhdGFCYXNlLAorCQkJICAgICAgICh2b2lkICopKGFkZHIgKyBzaXplb2Yoc3RydWN0IF9BSUZfSEVBREVSKSArIGFpZl9oZHItPkltYWdlUmVhZE9ubHlTaXplKSwKKwkJCSAgICAgICBhaWZfaGRyLT5JbWFnZVJlYWRXcml0ZVNpemUpOworCQl9CisKKwl9IGVsc2UgeworCQlwcmludGYoImRhdGEgc2VjdGlvbiBzaXplIDBcbiIpOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIC0xOworfQorCisKKy8qKgorICogbG9hZF9heGZfY29kZSAtCisgKgorICovCitzdGF0aWMgaW50IGxvYWRfYXhmX2NvZGUodWxvbmcgYWRkciwgdWxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgX0FJRl9IRUFERVIgKmFpZl9oZHIgPSAoc3RydWN0IF9BSUZfSEVBREVSICopKGFkZHIpOworCisJaWYgKGFpZl9oZHItPkltYWdlUmVhZE9ubHlTaXplKSB7CisJCWlmICgoc2l6ZW9mKHN0cnVjdCBfQUlGX0hFQURFUikgKyBhaWZfaGRyLT5JbWFnZVJlYWRPbmx5U2l6ZSkgPiBzaXplKSB7CisJCQlwcmludGYoImNvZGUgc2VjdGlvbiBzaXplICV4IGJpZ2dlciB0aGFuIGltYWdlIHNpemUgJXhcbiIsIGFpZl9oZHItPkltYWdlUmVhZE9ubHlTaXplLCBzaXplKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKGNoZWNrX2xvYWRfYWRkcihhaWZfaGRyLT5JbWFnZUJhc2UgKyBhaWZfaGRyLT5JbWFnZVJlYWRPbmx5U2l6ZSkgPCAwKSB7CisJCQlwcmludGYoImNvZGUgc2VjdGlvbiBsb2FkIGFkZHJlc3MgJXggb3V0c2lkZSByYW5nZVxuIiwgYWlmX2hkci0+SW1hZ2VCYXNlICsgYWlmX2hkci0+SW1hZ2VSZWFkT25seVNpemUpOworCQkJZ290byBlcnI7CisJCX0KKworCQltZW1jcHkoKHZvaWQgKilhaWZfaGRyLT5JbWFnZUJhc2UsICh2b2lkICopKGFkZHIgKyBzaXplb2Yoc3RydWN0IF9BSUZfSEVBREVSKSksIGFpZl9oZHItPkltYWdlUmVhZE9ubHlTaXplKTsKKwl9IGVsc2UgeworCQlwcmludGYoImNvZGUgc2VjdGlvbiBzaXplIDBcbiIpOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGxvYWRfYXhmX2ltYWdlIC0KKyAqCisgKi8KK3N0YXRpYyB1bG9uZyBsb2FkX2F4Zl9pbWFnZSh1bG9uZyBhZGRyLCB1bG9uZyBzaXplKQoreworCXN0cnVjdCBfQUlGX0hFQURFUiAqYWlmX2hkciA9IChzdHJ1Y3QgX0FJRl9IRUFERVIgKikgYWRkcjsKKworCXByaW50ZiAoIiMjIERvd25sb2FkaW5nIGltYWdlIGF0ICUwOGx4IC4uLlxuIiwgYWRkcik7CisKKwlpZiAoc2l6ZW9mIChzdHJ1Y3QgX0FJRl9IRUFERVIpID4gc2l6ZSkgeworCQlwcmludGYoIkFYRiBoZWFkZXIgJXggYmlnZ2VyIHRoYW4gaW1hZ2Ugc2l6ZSAleFxuIiwgc2l6ZW9mIChzdHJ1Y3QgX0FJRl9IRUFERVIpLCBzaXplKTsKKwkJZ290byBlcnI7CisJfQorCisJcHJpbnRfYXhmX2hkcihhZGRyKTsKKworCWlmIChsb2FkX2F4Zl9jb2RlKGFkZHIsIHNpemUpKSB7CisJCXByaW50ZigiZG93bmxvYWQgY29kZSBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAobG9hZF9heGZfZGF0YShhZGRyLCBzaXplKSkgeworCQlwcmludGYoImRvd25sb2FkIGRhdGEgZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKGxvYWRfYXhmX2ZhdChhZGRyLCBzaXplKSkgeworCQlwcmludGYoImRvd25sb2FkIGZhdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAobG9hZF9heGZfemVybyhhZGRyKSkgeworCQlwcmludGYoInplcm8gaW5pdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKy8vCXByaW50ZiAoIiMjIEJvb3RpbmcgaW1hZ2UgYXQgJTA4bHggLi4uXG4iLCBhaWZfaGRyLT5JbWFnZUJhc2UgKyBhaWZfaGRyLT5FbnRyeVBvaW50T2Zmc2V0KTsKKworCXJldHVybiBhaWZfaGRyLT5JbWFnZUJhc2UgKyBhaWZfaGRyLT5FbnRyeVBvaW50T2Zmc2V0OworCitlcnI6CisJcmV0dXJuICh1bG9uZyktMTsKK30KKworLyoqCisgKiBzdHJ0b3VsX3dpdGhfY2hlY2sgLSByZWFkcyB1bnNpZ25lZCBsb25nIGhleCB2YWx1ZSBmcm9tIHN0cmluZyB3aXRoIGNoZWNraW5nCisgKgorICogQVJHVU1FTlRTOgorICogICAgc3RyOiAgICB0aGUgc3RyaW5nIHRvIHNjYW4gdmFsdWUgZnJvbQorICogICAgcHZhbHVlOiBwb2ludGVyIHRvIHRoZSB2YWx1ZSBsb2NhdGlvbiAoaWYgYmUgTlVMTCBqdXN0IGNoZWNraW5nIHdpbGwgYmUKKyAqICAgICAgICAgICAgcGVyZm9ybWVkKQorICogICAgbGFiZWw6ICBvcHRpbmFsIGxhYmVsIGZvciB0aGUgdHlwaWNhbCBlcnJvciBtZXNzYWdlIChpZiBOVUxMIG5vIG1lc3NhZ2UKKyAqICAgICAgICAgICAgd2lsbCBiZSBwcmludGVkKQorICoKKyAqIFJFVFVSTlM6CisgKiAgICAwIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHN0cnRvdWxfd2l0aF9jaGVjayhjb25zdCBjaGFyICpzdHIsIHVsb25nICpwdmFsdWUsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXVsb25nIHZhbHVlOworCWNoYXIgKmVuZCA9IE5VTEw7CisKKwl2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZCwgMTYpOworCWlmIChzdHIgPT0gZW5kIHx8ICplbmQgIT0gMCkgeworCQlpZiAobGFiZWwpCisJCQlwcmludGYoIkludmFsaWQgJXMgZ2l2ZW4sIHBsZWFzZSBwcm92aWRlIGNvcnJlY3QgaGV4IHZhbHVlLlxuIiwgbGFiZWwpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHB2YWx1ZSkKKwkJKnB2YWx1ZSA9IHZhbHVlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZG9fbG9hZG1zcCAtIGxvYWRzIE1TUCBpbWFnZSwgaXQgbWF5IGJlIGluIGVpdGhlciBFTEYgb3IgQVhGIGZvcm1hdC4gSWYgaW1hZ2UKKyAqICAgIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQsIHN0b3JlcyBNU1AgZW50cnkgaW4gIm1zcF9zdGFydF9hZGRyIiBlbnYuIHZhcmlhYmxlLgorICoKKyAqIEFSR1VNRU5UUzoKKyAqICAgIHN0YW5kYXJkIHNldCBvZiBVLUJvb3QgY29tbWFuZCBhcmd1bWVudHMsIHVzZXIgbXVzdCBwYXNzIGltYWdlIGFkZHJlc3MKKyAqICAgIGFuZCBzaXplIChhbGwgaW4gaGV4KS4KKyAqCisgKiBSRVRVUk5TOgorICogICAgMCAtIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGRvX2xvYWRtc3AgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVsb25nIGFkZHIsIHNpemU7CisJY2hhciBidWZbMzJdOworCisJaWYgKGFyZ2MgPCAzKSB7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChzdHJ0b3VsX3dpdGhfY2hlY2soYXJndlsxXSwgJmFkZHIsICJpbWFnZSBhZGRyZXNzIikpCisJCWdvdG8gZXJyOworCisJaWYgKHN0cnRvdWxfd2l0aF9jaGVjayhhcmd2WzJdLCAmc2l6ZSwgImltYWdlIHNpemUiKSkKKwkJZ290byBlcnI7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FTEYpCisJaWYgKHZhbGlkX2VsZl9pbWFnZShhZGRyKSkKKwkJYWRkciA9IGxvYWRfZWxmX2ltYWdlKGFkZHIpOworCWVsc2UKKwkJYWRkciA9IGxvYWRfYXhmX2ltYWdlKGFkZHIsIHNpemUpOworI2Vsc2UKKwlhZGRyID0gbG9hZF9heGZfaW1hZ2UoYWRkciwgc2l6ZSk7CisjZW5kaWYKKworCWlmIChhZGRyID09ICh1bG9uZyktMSkKKwkJZ290byBlcnI7CisKKwkvKiBzdG9yZSBNU1Agc3RhcnQgYWRkciBpbiBlbnZpcm9ubWVudCAod2Ugd2lsbCBuZWVkIGl0IGRvX2Jvb3Rjb21jZXJ0bykgKi8KKwlzcHJpbnRmKGJ1ZiwgIiVseCIsIGFkZHIpOworCXNldGVudigibXNwX3N0YXJ0X2FkZHIiLCBidWYpOworCXByaW50ZigiaW1hZ2UgbG9hZGVkIGF0ICVseFxuIiwgYWRkcik7CisJcmV0dXJuIDA7CisKK2VycjoKKwlwcmludGYoImVycm9yIGxvYWRpbmcgaW1hZ2VcbiIpOworCXJldHVybiAtMTsKK30KKworCitVX0JPT1RfQ01EKAorCWxvYWRtc3AsICAzLCAwLCBkb19sb2FkbXNwLAorCSJsb2FkbXNwIC0gbG9hZCBNU1AgaW1hZ2UgKEFYRiBvciBFTEYgZm9ybWF0KSBhbmQgc2F2ZSBNU1Agc3RhcnQgYWRkcmVzc1xuIiwKKwkiYWRkcmVzcyBzaXplXG4iCisJIiAgICAtICdhZGRyZXNzJyAoaGV4KSBwb2ludHMgdG8gTVNQIGltYWdlIGxvY2F0aW9uLlxuIgorCSIgICAgICAnc2l6ZScgKGhleCkgc3BlY2lmaWVzIGltYWdlIHNpemUuXG4iCisJIiAgICAgIFNlZSBhbHNvICdib290Y29tY2VydG8nIGNvbW1hbmQuXG4iCispOworCisKK2V4dGVybiBjaGFyIF9fYXJtMV9pbml0X3N0YXJ0LCBfX2FybTFfaW5pdF9lbmQ7CitleHRlcm4gdTMyIF9hcm0xX3N0YXJ0X2FkZHIsIF9hcm0xX3IwLCBfYXJtMV9yMSwgX2FybTFfcjI7CisKKy8qKgorICogc2V0X2FybTFfaW5pdCAtIGNvcGllcyBBUk0xIHN0YXJ0dXAgY29kZSB0byByZXNldCBsb2NhdGlvbiBhbmQgc2V0cyBDU1AKKyAqICAgIGltYWdlIHN0YXJ0dXAgYWRkcmVzcworICoKKyAqIEFSR1VNRU5UUzoKKyAqICAgIGFkZHI6ICAgICBDU1AgZW50cnkgcG9pbnQKKyAqICAgIHIwLHIxLHIyOiB2YWx1ZXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIEFSTTEgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyB2b2lkIHNldF9hcm0xX2luaXQodWxvbmcgYWRkciwgdWxvbmcgcjAsIHVsb25nIHIxLCB1bG9uZyByMikKK3sKKwlfYXJtMV9zdGFydF9hZGRyID0gYWRkcjsKKwlfYXJtMV9yMCA9IHIwOworCV9hcm0xX3IxID0gcjE7CisJX2FybTFfcjIgPSByMjsKKworCXByaW50ZigiQ29weWluZyBBUk0xIHN0YXJ0dXAgY29kZSBmcm9tICUwOHgsIHN0YXJ0IGFkZHJlc3MgJTA4eFxuIiwKKwkJJl9fYXJtMV9pbml0X3N0YXJ0LCBhZGRyKTsKKworCW1lbWNweSgwLCAmX19hcm0xX2luaXRfc3RhcnQsICZfX2FybTFfaW5pdF9lbmQgLSAmX19hcm0xX2luaXRfc3RhcnQpOworfQorCisjaWYgIWRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMDApICYmICFkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDApCisvKiBUaGlzIGNvZGUgb25seSBhcHBsaWVzIHRvIENhcnJpZXIvQWNjZXNzIHBsYXRmb3Jtcywgd2hlcmUgQVJNMCBpcyBydW5uaW5nCisgKiB0aGUgTVNQIGFuZCBBUk0xIHRoZSBDU1AKKyAqLworZXh0ZXJuIGltYWdlX2hlYWRlcl90IGhlYWRlcjsKK2V4dGVybiB2b2lkIGRvX2Jvb3RtX2xpbnV4IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwKKwkJICAgICB1bG9uZyBhZGRyLCB1bG9uZyAqbGVuX3B0ciwgaW50IHZlcmlmeSk7CisKKyNkZWZpbmUgQk9PVF9FVEhfQkFTRV9BRERSRVNTCShJUkFNX0JBU0VBRERSICsgMHgxMjUwKQorI2RlZmluZSBNQUdJQ19OVU1fQUREUkVTU19JUkFNCShCT09UX0VUSF9CQVNFX0FERFJFU1MgKyAweDEwKQorI2RlZmluZSBGTEFHU19BRERSRVNTX0lSQU0JKEJPT1RfRVRIX0JBU0VfQUREUkVTUyArIDB4MTQpCisjZGVmaW5lIE0xX0FERFJFU1NfSVJBTQkJKEJPT1RfRVRIX0JBU0VfQUREUkVTUyArIDB4MTgpCisjZGVmaW5lIE01X0FERFJFU1NfSVJBTQkJKEJPT1RfRVRIX0JBU0VfQUREUkVTUyArIDB4MjQpCisKKyNkZWZpbmUgTUFHSUNfTlVNX0lSQU0JCTB4OTg3NjU0MzIKKyNkZWZpbmUgRVRIQUREUl9JUkFNX01BU0sJKDEgPDwgMCkKKworc3RhdGljIHZvaWQgbXNwX2Jvb3RfZXRoX2hkcl9zZXR1cChiZF90ICogYmQpCit7CisJc3RydWN0IGV0aF9oZHIgeworCQl1OCBob3N0bWFjWzZdOworCQl1OCBtc3BtYWNbNl07CisJCXU4IHBhZGRpbmc7CisJCXUxNiBwYWNrZXRfdHlwZTsKKwl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpICpoZHI7CisKKwkvKiBUaGUgTVNQIGV4cGVjdHMgYW4gZXRoZXJuZXQgaGVhZGVyIGF0IHRoaXMgSVJBTSBhZGRyZXNzICovCisJLyogYXQgYm9vdCB0aW1lICovCisKKwloZHIgPSAoc3RydWN0IGV0aF9oZHIgKikoQk9PVF9FVEhfQkFTRV9BRERSRVNTICsgMSk7CisJCisJaGRyLT5ob3N0bWFjWzBdID0gMHgwMDsKKwloZHItPmhvc3RtYWNbMV0gPSAweDExOworCWhkci0+aG9zdG1hY1syXSA9IDB4MjI7CisJaGRyLT5ob3N0bWFjWzNdID0gMHgzMzsKKwloZHItPmhvc3RtYWNbNF0gPSAweDQ0OworCWhkci0+aG9zdG1hY1s1XSA9IDB4NTU7CisKKwloZHItPm1zcG1hY1swXSA9IDB4MDA7CisJaGRyLT5tc3BtYWNbMV0gPSAweDFhOworCWhkci0+bXNwbWFjWzJdID0gMHgxYjsKKwloZHItPm1zcG1hY1szXSA9IDB4MWM7CisJaGRyLT5tc3BtYWNbNF0gPSAweDFkOworCWhkci0+bXNwbWFjWzVdID0gMHgxZTsKKworCWhkci0+cGFja2V0X3R5cGUgPSAweDg4OWI7Cit9CisKK3N0YXRpYyB2b2lkIG1zcF9pcmFtX2ZsYWdzX3NldHVwKGJkX3QgKiBiZCkKK3sKKwlpbnQgaTsKKwl1bG9uZyByZWc7CisJY2hhciAqcywgKmU7CisJY2hhciB0bXBbNjRdOworCQkJCQorCS8qIHBhc3MgbWlzY2VsbGFuZW91cyBwYXJhbXMgdG8gdGhlIE1TUCB2aWEgSVJBTQorCSAgIFNpbmNlIHRoZXNlIGFyZSBub3QgcGFzc2VkIGJ5IGFsbCBib290IGxvYWRlcnMgdXNlIGEgbWFnaWMgbnVtYmVyCisJICAgdG8gdGVsbCB0aGUgTVNQIHRoYXQgaWYgcGFyYW1ldGVycyBhcmUgcHJlc2VudCAqLworCSoodTMyICopTUFHSUNfTlVNX0FERFJFU1NfSVJBTSA9IE1BR0lDX05VTV9JUkFNOworCisJLyogdGhlIG5leHQgd29yZCBpcyBhIGJpdC1tYXAgdGhhdCB0ZWxscyB0aGUgTVNQIHdoaWNoIHBhcmFtZXRlcnMgYXJlIHByZXNlbnQsCisgICAgICAgICAgIHRoaXMgYWxsb3dzIHBhcmFtcyB0byBiZSBhZGRlZCBhbmQgZGlmZmVyZW50IHZlcnNpb25zIG9mIGJvb3Rsb2FkZXIgYW5kIE1TUAorICAgICAgICAgICB0byBpbnRlci1vcGVyYXRlICovCisKKwkvKiBhbHdheXMgaGF2ZSBldGhhZGRyOyBldmVuIGlmIHVzZXIgZG9lcyBub3Qgc3BlY2lmeSBpdCAod2hpY2ggaXMgYW4gZXJyb3IpLCB3ZSBoYXZlIGEgZGVmYXVsdCAqLworCSoodTMyICopRkxBR1NfQUREUkVTU19JUkFNID0gRVRIQUREUl9JUkFNX01BU0s7CisKKwkvKiB3cml0ZSBldGhlcm5ldCBhZGRyZXNzICovCisJbWVtY3B5KCh1OCAqKU0xX0FERFJFU1NfSVJBTSwgYmQtPmJpX2VuZXRhZGRyLCA2KTsKKworCWkgPSBnZXRlbnZfciAoImV0aDFhZGRyIiwgdG1wLCBzaXplb2YgKHRtcCkpOworCXMgPSAoaSA+IDApID8gdG1wIDogTlVMTDsKKwlmb3IgKHJlZyA9IDA7IHJlZyA8IDY7ICsrcmVnKSB7CisJCSoodTggKikgKE01X0FERFJFU1NfSVJBTSArIHJlZykgPSBzID8gc2ltcGxlX3N0cnRvdWwgKHMsICZlLCAxNikgOiAwOworCQlpZiAocykKKwkJCXMgPSAoKmUpID8gZSArIDEgOiBlOworCX0KK30KKworLyoqCisgKiBkb19ib290Y29tY2VydG8gLSBjaGVja3MgaWYgTVNQIGltYWdlIHdhcyBsb2FkZWQsIHRoZW4gbG9hZHMgQ1NQIGltYWdlIHdoaWNoCisgKiAgICBtYXkgYmUgaW4gZWl0aGVyIGJpbmFyeSBvciBFTEYgZm9ybWF0IGFuZCBib290cyBNU1AuCisgKgorICogQVJHVU1FTlRTOgorICogICAgc3RhbmRhcmQgc2V0IG9mIFUtQm9vdCBjb21tYW5kIGFyZ3VtZW50cywgdXNlciBtdXN0IHBhc3MgQ1NQIGltYWdlIGFkZHJlc3MKKyAqCisgKiBSRVRVUk5TOgorICogICAgZG9lc24ndCByZXR1cm4gb24gc3VjY2VzcworICovCitzdGF0aWMgaW50IGRvX2Jvb3Rjb21jZXJ0byAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdWxvbmcgY3NwX3N0YXJ0X2FkZHIsIG1zcF9zdGFydF9hZGRyOworCWludCBjc3BfaXNfZWxmID0gMDsKKwliZF90ICpiZCA9IGdkLT5iZDsKKwljaGFyICpzdHI7CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0ciA9IGdldGVudigibXNwX3N0YXJ0X2FkZHIiKTsKKwlpZiAoIXN0cikgeworCQlwcmludGYoIk1TUCBzdGFydCBhZGRyZXNzIGlzIG5vdCBzZXQsIHNlZSAnbG9hZG1zcCcgY29tbWFuZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3RydG91bF93aXRoX2NoZWNrKHN0ciwgJm1zcF9zdGFydF9hZGRyLCBOVUxMKSkgeworCQlwcmludGYoIkludmFsaWQgTVNQIGFkZHJlc3MsIGFib3J0aW5nXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChzdHJ0b3VsX3dpdGhfY2hlY2soYXJndlsxXSwgJmNzcF9zdGFydF9hZGRyLCAiaW1hZ2UgYWRkcmVzcyIpKQorCQlyZXR1cm4gLTE7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FTEYpCisJaWYgKChjc3BfaXNfZWxmID0gdmFsaWRfZWxmX2ltYWdlKGNzcF9zdGFydF9hZGRyKSkgIT0gMCkKKwkJY3NwX3N0YXJ0X2FkZHIgPSBsb2FkX2VsZl9pbWFnZShjc3Bfc3RhcnRfYWRkcik7CisjZW5kaWYKKworCS8qIFNldHVwIE1TUCBib290IGFyZ3MgaW4gSVJBTSAqLworCW1zcF9ib290X2V0aF9oZHJfc2V0dXAoYmQpOworCW1zcF9pcmFtX2ZsYWdzX3NldHVwKGJkKTsKKworCWlmIChjc3BfaXNfZWxmID09IDApIHsKKwkJLyogQ1NQIGltYWdlIGlzIGluIGJpbmFyeSBmb3JtYXQsIGFzc3VtaW5nIExpbnV4ICovCisKKwkJLyogRmFrZSBoZWFkZXIgdG8ga2VlcCBkb19ib290bV9saW51eCgpIGhhcHB5CisJCSAqIE5vIHJhbWRpc2sgc3VwcG9ydCBmb3Igbm93CisJCSAqLworCQloZWFkZXIuaWhfZXAgPSBodG9ubChtc3Bfc3RhcnRfYWRkcik7CS8qIFRoaXMgaXMgYWN0dWFsbHkgdGhlIE1TUCBlbnRyeSBwb2ludCAqLworCQloZWFkZXIuaWhfdHlwZSA9IElIX1RZUEVfS0VSTkVMOworI2lmIDAKKwkJaGRyLT5paF9tYWdpYyA9IGh0b25sKElIX01BR0lDKTsKKwkJaGRyLT5paF9oY3JjID0gaHRvbmwoMCk7CS8qIEZJWE1FIGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gKi8KKwkJaGRyLT5paF9zaXplID0gaHRvbmwoMCk7CisjZW5kaWYKKworCQlzZXRfYXJtMV9pbml0KGNzcF9zdGFydF9hZGRyLCAwLCBiZC0+YmlfYXJjaF9udW1iZXIsIGJkLT5iaV9ib290X3BhcmFtcyk7CisJCWRvX2Jvb3RtX2xpbnV4KGNtZHRwLCAwLCBhcmdjLCBhcmd2LCAwLCBOVUxMLCAwKTsKKwl9CisJZWxzZSB7CisJCS8qIENTUCBpbWFnZSBpcyBpbiBFTEYsIGFzc3VtaW5nIFZ4V29ya3MgKi8KKworCQlzZXRfYXJtMV9pbml0KGNzcF9zdGFydF9hZGRyLCAodW5zaWduZWQgaW50KWdldGVudigiYm9vdGFyZ3MiKSwgMCwgMCk7CisJCSgodm9pZCgqKSh2b2lkKSltc3Bfc3RhcnRfYWRkcikoKTsKKwl9CisKKwlwcmludGYoIlVuZXhwZWN0ZWQgcmV0dXJuIHRvIGJvb3Rsb2FkZXIhXG4iKTsKKworCXJldHVybiAwOworfQorCisKK1VfQk9PVF9DTUQoCisJYm9vdGNvbWNlcnRvLCAyLCAwLCBkb19ib290Y29tY2VydG8sCisJImJvb3Rjb21jZXJ0byAtIGxvYWQgQ1NQIGltYWdlIChiaW5hcnkgb3IgRUxGIGZvcm1hdCkgYW5kIHN0YXJ0IENvbWNlcnRvIGRldmljZVxuIiwKKwkiYWRkcmVzc1xuIgorCSIgICAgLSAnYWRkcmVzcycoaGV4KSBwb2ludHMgdG8gQ1NQIGltYWdlIGxvY2F0aW9uLlxuIgorCSIgICAgICBTZWUgYWxzbyAnbG9hZG1zcCcgY29tbWFuZCwgd2hpY2ggbXVzdCBiZSBydW4gYmVmb3JlIHRoaXMgb25lLlxuIgorKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9mbGFzaC5jIGIvYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzU3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvY29tbW9uL2ZsYXNoLmMKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CitmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsKKworI2lmZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCisKKyNkZWZpbmUgRkxBU0hfTUFOX0NGSQkJMHgwMTAwMDAwMAorCisjaWZkZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KK2V4dGVybiBpbnQgY2ZpX2ZsYXNoX3JlYWxfcHJvdGVjdChmbGFzaF9pbmZvX3QgKmluZm8sIGxvbmcgc2VjdG9yLCBpbnQgcHJvdCk7CisjZW5kaWYKKworZXh0ZXJuIGludCBjZmlfZmxhc2hfZXJhc2UoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpOworZXh0ZXJuIGludCBjZmlfd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCk7CitleHRlcm4gdm9pZCBjZmlfZmxhc2hfcHJpbnRfaW5mbyhmbGFzaF9pbmZvX3QgKmluZm8pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY2ZpX2ZsYXNoX2luaXQodm9pZCk7CisjZW5kaWYKKworCisjaWZkZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgorI2lmZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCitpbnQgYW0yOWx2MDQwYl9mbGFzaF9yZWFsX3Byb3RlY3QoZmxhc2hfaW5mb190ICppbmZvLCBsb25nIHNlY3RvciwgaW50IHByb3QpOworI2VuZGlmCitpbnQgYW0yOWx2MDQwYl9mbGFzaF9lcmFzZShmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCk7CitpbnQgYW0yOWx2MDQwYl93cml0ZV9idWZmKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpOwordWxvbmcgYW0yOWx2MDQwYl9mbGFzaF9pbml0KGZsYXNoX2luZm9fdCAqIGluZm8pOworI2VuZGlmCisKKyNpZmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCitpbnQgYW1sdjY0MHVfZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpOworaW50IGFtbHY2NDB1X3dyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KTsKK3Vsb25nIGFtbHY2NDB1X2ZsYXNoX2luaXQoZmxhc2hfaW5mb190ICogaW5mbyk7CisjZW5kaWYKKworaW50IGZsYXNoX2VyYXNlKGZsYXNoX2luZm9fdCAqIGluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQoreworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1RZUEU7CisJfQorCisJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpIHx8IChzX2xhc3QgPj0gaW5mby0+c2VjdG9yX2NvdW50KSkgeworCQlyZXR1cm4gRVJSX0lOVkFMOworCX0KKworI2lmZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX01BTl9DRkkpCisJCXJldHVybiBjZmlfZmxhc2hfZXJhc2UoaW5mbywgc19maXJzdCwgc19sYXN0KTsKKyNlbmRpZgorCisjaWZkZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgorCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0wNDApCisJCXJldHVybiBhbTI5bHYwNDBiX2ZsYXNoX2VyYXNlKGluZm8sIHNfZmlyc3QsIHNfbGFzdCk7CisjZW5kaWYKKworI2lmZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIKKwlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNTFY2NDBVKQorCQlyZXR1cm4gYW1sdjY0MHVfZmxhc2hfZXJhc2UoaW5mbywgc19maXJzdCwgc19sYXN0KTsKKyNlbmRpZgorCisJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1RZUEU7Cit9CisKKyNpZmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgoraW50IGZsYXNoX3JlYWxfcHJvdGVjdChmbGFzaF9pbmZvX3QgKmluZm8sIGxvbmcgc2VjdG9yLCBpbnQgcHJvdCkKK3sKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJCXJldHVybiBFUlJfVU5LTk9XTl9GTEFTSF9UWVBFOworCX0KKworCWlmICgoc2VjdG9yIDwgMCkgfHwgKHNlY3RvciA+PSBpbmZvLT5zZWN0b3JfY291bnQpKSB7CisJCXJldHVybiBFUlJfSU5WQUw7CisJfQorCisjaWZkZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfTUFOX0NGSSkKKwkJcmV0dXJuIGNmaV9mbGFzaF9yZWFsX3Byb3RlY3QoaW5mbywgc2VjdG9yLCBwcm90KTsKKyNlbmRpZgorCisjaWZkZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgorCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0wNDApCisJCXJldHVybiBhbTI5bHYwNDBiX2ZsYXNoX3JlYWxfcHJvdGVjdChpbmZvLCBzZWN0b3IsIHByb3QpOworI2VuZGlmCisKKyNpZmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCisJaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTUxWNjQwVSkKKwkJcmV0dXJuIGFtbHY2NDB1X2ZsYXNoX3JlYWxfcHJvdGVjdChpbmZvLCBzZWN0b3IsIHByb3QpOworI2VuZGlmCisKKwlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVFlQRTsKK30KKyNlbmRpZgorCitpbnQgd3JpdGVfYnVmZihmbGFzaF9pbmZvX3QgKmluZm8sIHVjaGFyICpzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKK3sKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJCXJldHVybiBFUlJfVU5LTk9XTl9GTEFTSF9UWVBFOworCX0KKworI2lmZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX01BTl9DRkkpCisJCXJldHVybiBjZmlfd3JpdGVfYnVmZihpbmZvLCBzcmMsIGFkZHIsIGNudCk7CisjZW5kaWYKKworI2lmZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIKKwlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNMDQwKQorCQlyZXR1cm4gYW0yOWx2MDQwYl93cml0ZV9idWZmKGluZm8sIHNyYywgYWRkciwgY250KTsKKyNlbmRpZgorCisjaWZkZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgorCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1MVjY0MFUpCisJCXJldHVybiBhbWx2NjQwdV93cml0ZV9idWZmKGluZm8sIHNyYywgYWRkciwgY250KTsKKyNlbmRpZgorCisJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1RZUEU7Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkIGZsYXNoX3ByaW50X2luZm8oZmxhc2hfaW5mb190ICppbmZvKQoreworCWludCBpOworCisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfTUFOX0NGSSkgeworCQljZmlfZmxhc2hfcHJpbnRfaW5mbyhpbmZvKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSB7CisJY2FzZSBGTEFTSF9NQU5fQU1EOgorCQlwcmludGYgKCJBTUQgIik7CisJCWJyZWFrOworCisJY2FzZSBGTEFTSF9NQU5fRlVKOgorCQlwcmludGYgKCJGVUpJVFNVICIpOworCQlicmVhazsKKworCS8qIEFkZCBvdGhlciBzdXBwb3J0ZWQgZmxhc2ggdmVuZG9ycyBoZXJlICovCisKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsKKwkJcmV0dXJuOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKKwljYXNlIEZMQVNIX0FNMDQwOgorCQlwcmludGYoIkFNMjlMVjA0MEIgKDRNYml0LCB1bmlmb3JtIHNlY3RvciBzaXplKVxuIik7CisJCWJyZWFrOworCisJY2FzZSBGTEFTSF9BTUxWNjQwVToKKwkJcHJpbnRmICgiQU0yOUxWNjQwTUwvUzI5R0wwNjRNICg2NE1iaXQsIHVuaWZvcm0gc2VjdG9yIHNpemUpXG4iKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7CisJCXJldHVybjsKKwkJYnJlYWs7CisJfQorCisJaWYgKChpbmZvLT5zaXplID4+IDIwKSA+IDApCisJCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1pQiBpbiAlZCBTZWN0b3JzXG4iLCBpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCWVsc2UKKwkJcHJpbnRmICgiICBTaXplOiAlbGQgS2lCIGluICVkIFNlY3RvcnNcbiIsIGluZm8tPnNpemUgPj4gMTAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisKKwlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7CisJCWlmICgoaSAlIDUpID09IDApCisJCQlwcmludGYgKCJcbiAgICIpOworCisJCXByaW50ZiAoIiAlMDhsWCVzIiwKKwkJCWluZm8tPnN0YXJ0W2ldLAorCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiCisJCSk7CisJfQorCisJcHJpbnRmICgiXG4iKTsKKworCXJldHVybjsKK30KKwordW5zaWduZWQgbG9uZyBmbGFzaF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gMDsKKwlpbnQgaTsKKworCXByaW50ZigiQ29tY2VydG8gRmxhc2ggU3Vic3lzdGVtIEluaXRpYWxpemF0aW9uXG4iKTsKKworCS8qIEluaXQ6IG5vIEZsYXNoZXMga25vd24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgaSsrKSB7CisJCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCX0KKworI2lmZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCisJLyogQ0ZJIGNvbXBhdGlibGUgZmxhc2ggZGV0ZWN0aW9uICovCisJLyogbXVzdCBiZSBkb25lIGZpcnN0ICovCisJc2l6ZSArPSBjZmlfZmxhc2hfaW5pdCgpOworI2VuZGlmCisKKyNpZmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCisJc2l6ZSArPSBhbTI5bHYwNDBiX2ZsYXNoX2luaXQoZmxhc2hfaW5mbyk7CisjZW5kaWYKKworI2lmZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIKKwlzaXplICs9IGFtbHY2NDB1X2ZsYXNoX2luaXQoZmxhc2hfaW5mbyk7CisjZW5kaWYKKworCXJldHVybiBzaXplOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9pMmMuYyBiL2JvYXJkL21pbmRzcGVlZC9jb21tb24vaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhYzFlZAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jb21tb24vaTJjLmMKQEAgLTAsMCArMSw1NTkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfSEFSRF9JMkMpIHx8IGRlZmluZWQoQ09ORklHX1NPRlRfSTJDKQorI2RlZmluZSBNQVhfSTJDX1JFVFJZUwkgICAgMTAKKyNkZWZpbmUgSTJDX0RFTEFZCSAgICAxMDAwCS8qIFNob3VsZCBiZSBhdCBsZWFzdCB0aGUgIyBvZiBNSHogb2YgVGNsayAqLworCisjZGVmaW5lIEkyQ19BRERSICAgICAgICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIEkyQ19EQVRBICAgICAgICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIEkyQ19DTlRSICAgICAgICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIEkyQ19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFQUREUiArIDB4MGMpCisjZGVmaW5lIEkyQ19DQ1JGUyAgICAgICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFQUREUiArIDB4MGMpCisjZGVmaW5lIEkyQ19YQUREUiAgICAgICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIEkyQ19DQ1JIICAgICAgICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIEkyQ19TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFQUREUiArIDB4MWMpCisKKy8qIENOVFIgLSBDb250cm9sIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgSTJDX0lFTgkJCQkoMTw8NykKKyNkZWZpbmUgSTJDX0VOQUIJCQkoMTw8NikKKyNkZWZpbmUgSTJDX1NUQQkJCQkoMTw8NSkKKyNkZWZpbmUgSTJDX1NUUAkJCQkoMTw8NCkKKyNkZWZpbmUgSTJDX0lGTEcJCQkoMTw8MykKKyNkZWZpbmUgSTJDX0FBSwkJCQkoMTw8MikKKworLyogU1RBVCAtIFN0YXR1cyBjb2RlcyAqLworI2RlZmluZSBJMkNfQlVTX0VSUk9SCQkJMHgwMAkvKiBCdXMgZXJyb3IgaW4gbWFzdGVyIG1vZGUgb25seSAqLworI2RlZmluZSBJMkNfU1RBUlRfVFJBTlNNSVQJCTB4MDgJLyogU3RhcnQgY29uZGl0aW9uIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIEkyQ19SRVBFQVRfU1RBUlRfVFJBTlNNSVQJMHgxMAkvKiBSZXBlYXRlZCBTdGFydCBjb25kaXRpb24gdHJhbnNtaXRlZCAqLworI2RlZmluZSBJMkNfQUREUkVTU19XX0FDSwkJMHgxOAkvKiBBZGRyZXNzICsgV3JpdGUgYml0IHRyYW5zbWl0dGVkLCBBQ0sgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgSTJDX0FERFJFU1NfV19OQUNLCQkweDIwCS8qIEFkZHJlc3MgKyBXcml0ZSBiaXQgdHJhbnNtaXR0ZWQsIE5BQ0sgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgSTJDX0RBVEFfVFJBTlNNSVRfQUNLCQkweDI4CS8qIERhdGEgYnl0ZSB0cmFuc21pdHRlZCBpbiBtYXN0ZXIgbW9kZSAsIEFDSyByZWNlaXZlZCAqLworI2RlZmluZSBJMkNfREFUQV9UUkFOU01JVF9OQUNLCQkweDMwCS8qIERhdGEgYnl0ZSB0cmFuc21pdHRlZCBpbiBtYXN0ZXIgbW9kZSAsIE5BQ0sgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgSTJDX0FSQklUX0xPU1QJCQkweDM4CS8qIEFyYml0cmF0aW9uIGxvc3QgaW4gYWRkcmVzcyBvciBkYXRhIGJ5dGUgKi8KKyNkZWZpbmUgSTJDX0FERFJFU1NfUl9BQ0sJCTB4NDAJLyogQWRkcmVzcyArIFJlYWQgYml0IHRyYW5zbWl0dGVkLCBBQ0sgcmVjZWl2ZWQgICovCisjZGVmaW5lIEkyQ19BRERSRVNTX1JfTkFDSwkJMHg0OAkvKiBBZGRyZXNzICsgUmVhZCBiaXQgdHJhbnNtaXR0ZWQsIE5BQ0sgcmVjZWl2ZWQgICovCisjZGVmaW5lIEkyQ19EQVRBX1JFQ0VJVkVfQUNLCQkweDUwCS8qIERhdGEgYnl0ZSByZWNlaXZlZCBpbiBtYXN0ZXIgbW9kZSwgQUNLIHRyYW5zbWl0dGVkICAqLworI2RlZmluZSBJMkNfREFUQV9SRUNFSVZFX05BQ0sJCTB4NTgJLyogRGF0YSBieXRlIHJlY2VpdmVkIGluIG1hc3RlciBtb2RlLCBOQUNLIHRyYW5zbWl0dGVkKi8KKyNkZWZpbmUgSTJDX0FSQklUX0xPU1RfQUREUkVTUwkJMHg2OAkvKiBBcmJpdHJhdGlvbiBsb3N0IGluIGFkZHJlc3MgICovCisjZGVmaW5lIEkyQ19HRU5FUkFMX0NBTEwJCTB4NzAJLyogR2VuZXJhbCBDYWxsLCBBQ0sgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgSTJDX05PX1JFTEVWQU5UX0lORk8JCTB4RjgJLyogTm8gcmVsZXZhbnQgc3RhdHVzIGluZm9ybWF0aW9uLCBJRkxGPTAgKi8KKworI2RlZmluZSBJMkNfUkVBRF9SRUcocmVnKQkgICAgICAgICoodm9sYXRpbGUgdTMyKikocmVnKQorI2RlZmluZSBJMkNfV1JJVEVfUkVHKHJlZywgdmFsKQkgICAgICAgICoodm9sYXRpbGUgdTMyKikocmVnKSA9IHZhbAorI2RlZmluZSBSRVNFVF9SRUdfQklUUyhyZWcsIHZhbCkgICAgICAgIEkyQ19XUklURV9SRUcocmVnLCBJMkNfUkVBRF9SRUcocmVnKSAmIH4odmFsKSkKKworI3VuZGVmCURFQlVHX0kyQworLy8jZGVmaW5lIERFQlVHX0kyQworCisjaWZkZWYgREVCVUdfSTJDCisjZGVmaW5lIERQKHgpIHgKKyNlbHNlCisjZGVmaW5lIERQKHgpCisjZW5kaWYKKworLyogQXNzdW1pbmcgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBtYXN0ZXIgb24gdGhlIGJ1cyAodXMpICovCisKK3ZvaWQgaTJjX2luaXQgKGludCBzcGVlZCwgaW50IHNsYXZlYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgbiwgbSwgZnJlcSwgbWFyZ2luLCBwb3dlcjsKKwl1bnNpZ25lZCBpbnQgYWN0dWFsTiA9IDAsIGFjdHVhbE0gPSAwOworCXVuc2lnbmVkIGludCBjb250cm9sLCBzdGF0dXM7CisJdW5zaWduZWQgaW50IG1pbk1hcmdpbiA9IDB4ZmZmZmZmZmY7CisJdW5zaWduZWQgaW50IHRjbGsgPSBDRkdfVENMSzsKKwl1bnNpZ25lZCBpbnQgaTJjRnJlcSA9IHNwZWVkOwkvKiAxMDAwMDAgbWF4LiBGYXN0IG1vZGUgbm90IHN1cHBvcnRlZCAqLworCisJRFAgKHB1dHMgKCJpMmNfaW5pdFxuIikpOworCisJZm9yIChuID0gMDsgbiA8IDg7IG4rKykgeworCQlmb3IgKG0gPSAwOyBtIDwgMTY7IG0rKykgeworCQkJcG93ZXIgPSAxIDw8IG47CS8qIHBvd2VyID0gMl4obikgKi8KKwkJCWZyZXEgPSB0Y2xrIC8gKDEwICogKG0gKyAxKSAqIHBvd2VyKTsKKwkJCWlmIChpMmNGcmVxID4gZnJlcSkKKwkJCQltYXJnaW4gPSBpMmNGcmVxIC0gZnJlcTsKKwkJCWVsc2UKKwkJCQltYXJnaW4gPSBmcmVxIC0gaTJjRnJlcTsKKwkJCWlmIChtYXJnaW4gPCBtaW5NYXJnaW4pIHsKKwkJCQltaW5NYXJnaW4gPSBtYXJnaW47CisJCQkJYWN0dWFsTiA9IG47CisJCQkJYWN0dWFsTSA9IG07CisJCQl9CisJCX0KKwl9CisKKwlEUCAocHV0cyAoInNldHVwIGkyYyBidXNcbiIpKTsKKworCS8qIFNldHVwIGJ1cyAqLworICAgICAgICBJMkNfV1JJVEVfUkVHKEkyQ19TT0ZUX1JFU0VULCAwKTsKKworCURQIChwdXRzICgidWRlbGF5Li4uXG4iKSk7CisKKwl1ZGVsYXkgKEkyQ19ERUxBWSk7CisKKwlEUCAocHV0cyAoInNldCBiYXVkcmF0ZVxuIikpOworCisJSTJDX1dSSVRFX1JFRyhJMkNfU1RBVCwgKGFjdHVhbE0gPDwgMykgfCBhY3R1YWxOKTsKKwlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfQUFLIHwgSTJDX0VOQUIpOworCisJdWRlbGF5IChJMkNfREVMQVkgKiAxMCk7CisKKwlEUCAocHV0cyAoInJlYWQgY29udHJvbCwgYmF1ZHJhdGVcbiIpKTsKKworCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJY29udHJvbCA9IEkyQ19SRUFEX1JFRyhJMkNfQ05UUik7Cit9CisKK3N0YXRpYyB1Y2hhciBpMmNfc3RhcnQgKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNvbnRyb2wsIHN0YXR1czsKKwlpbnQgY291bnQgPSAwOworCisJRFAgKHB1dHMgKCJpMmNfc3RhcnRcbiIpKTsKKworCS8qIFNldCB0aGUgc3RhcnQgYml0ICovCisKKwljb250cm9sID0gSTJDX1JFQURfUkVHKEkyQ19DTlRSKTsKKwljb250cm9sIHw9IEkyQ19TVEE7CS8qIGdlbmVyYXRlIHRoZSBJMkNfU1RBUlRfQklUICovCisJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgY29udHJvbCk7CisKKwlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCisJY291bnQgPSAwOworCXdoaWxlICgoc3RhdHVzICYgMHhmZikgIT0gSTJDX1NUQVJUX1RSQU5TTUlUKSB7CisJCXVkZWxheSAoSTJDX0RFTEFZKTsKKwkJaWYgKGNvdW50ID4gMjApIHsKKwkJCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19TVFApOwkvKnN0b3AgKi8KKwkJCXJldHVybiAoc3RhdHVzKTsKKwkJfQorCQlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCQljb3VudCsrOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB1Y2hhciBpMmNfc2VsZWN0X2RldmljZSAodWNoYXIgZGV2X2FkZHIsIHVjaGFyIHJlYWQsIGludCB0ZW5fYml0KQoreworCXVuc2lnbmVkIGludCBzdGF0dXMsIGRhdGEsIGJpdHMgPSA3OworCWludCBjb3VudCA9IDA7CisKKwlEUCAocHV0cyAoImkyY19zZWxlY3RfZGV2aWNlXG4iKSk7CisKKwkvKiBPdXRwdXQgc2xhdmUgYWRkcmVzcyAqLworCisJaWYgKHRlbl9iaXQpIHsKKwkJYml0cyA9IDEwOworCX0KKworCWRhdGEgPSAoZGV2X2FkZHIgPDwgMSk7CisJLyogc2V0IHRoZSByZWFkIGJpdCAqLworCWRhdGEgfD0gcmVhZDsKKwlJMkNfV1JJVEVfUkVHKEkyQ19EQVRBLCBkYXRhKTsKKwkvKiBhc3NlcnQgdGhlIGFkZHJlc3MgKi8KKwlSRVNFVF9SRUdfQklUUyAoSTJDX0NOVFIsIEkyQ19JRkxHKTsKKworCXVkZWxheSAoSTJDX0RFTEFZKTsKKworCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJY291bnQgPSAwOworCXdoaWxlICgoKHN0YXR1cyAmIDB4ZmYpICE9IEkyQ19BRERSRVNTX1JfQUNLKSAmJiAoKHN0YXR1cyAmIDB4ZmYpICE9IEkyQ19BRERSRVNTX1dfQUNLKSkgeworCQl1ZGVsYXkgKEkyQ19ERUxBWSk7CisJCWlmIChjb3VudCA+IDIwKSB7CisJCQlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfU1RQKTsJLypzdG9wICovCisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KKwkJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwkJY291bnQrKzsKKwl9CisKKwlpZiAoYml0cyA9PSAxMCkgeworCQlwcmludGYgKCIxMCBiaXQgSTJDIGFkZHJlc3Npbmcgbm90IHlldCBpbXBsZW1lbnRlZFxuIik7CisJCXJldHVybiAoMHhmZik7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHVjaGFyIGkyY19nZXRfZGF0YSAodWNoYXIgKiByZXR1cm5fZGF0YSwgaW50IGxlbikKK3sKKworCXVuc2lnbmVkIGludCBkYXRhLCBzdGF0dXMgPSAwOworCWludCBjb3VudCA9IDA7CisKKwlEUCAocHV0cyAoImkyY19nZXRfZGF0YVxuIikpOworCisJd2hpbGUgKGxlbikgeworCisJCS8qIEdldCBhbmQgcmV0dXJuIHRoZSBkYXRhICovCisKKwkJUkVTRVRfUkVHX0JJVFMgKEkyQ19DTlRSLCBJMkNfSUZMRyk7CisKKwkJdWRlbGF5IChJMkNfREVMQVkgKiA1KTsKKworCQlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCQljb3VudCsrOworCQl3aGlsZSAoKHN0YXR1cyAmIDB4ZmYpICE9IEkyQ19EQVRBX1JFQ0VJVkVfQUNLKSB7CisJCQl1ZGVsYXkgKEkyQ19ERUxBWSk7CisJCQlpZiAoY291bnQgPiAyKSB7CisJCQkJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX1NUUCk7CS8qc3RvcCAqLworCQkJCXJldHVybiAwOworCQkJfQorCQkJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwkJCWNvdW50Kys7CisJCX0KKwkJZGF0YSA9IEkyQ19SRUFEX1JFRyhJMkNfREFUQSk7CisJCWxlbi0tOworCQkqcmV0dXJuX2RhdGEgPSAodWNoYXIpIGRhdGE7CisJCXJldHVybl9kYXRhKys7CisJfQorCVJFU0VUX1JFR19CSVRTIChJMkNfQ05UUiwgSTJDX0FBSyB8IEkyQ19JRkxHKTsKKwl3aGlsZSAoKHN0YXR1cyAmIDB4ZmYpICE9IEkyQ19EQVRBX1JFQ0VJVkVfTkFDSykgeworCQl1ZGVsYXkgKEkyQ19ERUxBWSk7CisJCWlmIChjb3VudCA+IDIwMCkgeworCQkJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX1NUUCk7CS8qc3RvcCAqLworCQkJcmV0dXJuIChzdGF0dXMpOworCQl9CisJCXN0YXR1cyA9IEkyQ19SRUFEX1JFRyhJMkNfU1RBVCk7CisJCWNvdW50Kys7CisJfQorCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19TVFApOwkvKiBzdG9wICovCisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdWNoYXIgaTJjX3dyaXRlX2RhdGEgKHVuc2lnbmVkIGludCAqZGF0YSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCWludCBjb3VudCA9IDA7CisJdW5zaWduZWQgaW50IHRlbXA7CisJdW5zaWduZWQgaW50ICp0ZW1wX3B0ciA9IGRhdGE7CisKKwlEUCAocHV0cyAoImkyY193cml0ZV9kYXRhXG4iKSk7CisKKwl3aGlsZSAobGVuKSB7CisJCXRlbXAgPSAodW5zaWduZWQgaW50KSAoKnRlbXBfcHRyKTsKKwkJSTJDX1dSSVRFX1JFRyhJMkNfREFUQSwgdGVtcCk7CisJCVJFU0VUX1JFR19CSVRTIChJMkNfQ05UUiwgSTJDX0lGTEcpOworCisJCXVkZWxheSAoSTJDX0RFTEFZKTsKKworCQlzdGF0dXMgPSBJMkNfUkVBRF9SRUcoSTJDX1NUQVQpOworCQljb3VudCsrOworCQl3aGlsZSAoKHN0YXR1cyAmIDB4ZmYpICE9IEkyQ19EQVRBX1RSQU5TTUlUX0FDSykgeworCQkJdWRlbGF5IChJMkNfREVMQVkpOworCQkJaWYgKGNvdW50ID4gMjApIHsKKwkJCQlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfU1RQKTsJLypzdG9wICovCisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCQkJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwkJCWNvdW50Kys7CisJCX0KKwkJbGVuLS07CisJCXRlbXBfcHRyKys7CisJfQorCisvKiBDYW4ndCBoYXZlIHRoZSB3cml0ZSBpc3N1aW5nIGEgc3RvcCBjb21tYW5kICovCisvKiBpdCdzIHdyb25nIHRvIGhhdmUgYSBzdG9wIGJpdCBpbiByZWFkIHN0cmVhbSBvciB3cml0ZSBzdHJlYW0gKi8KKy8qIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgaXQncyByZWFsbHkgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCAqLworLyogb3Igd2hldGhlciB3ZSBoYXZlIGp1c3Qgc2VuZCB0aGUgZGV2aWNlIGFkZHJlc3MgKyBvZmZzZXQgKi8KKy8qIHdlIHdpbGwgcHVzaCBpc3N1aW5nIHRoZSBzdG9wIGNvbW1hbmQgb2ZmIHRvIHRoZSBvcmlnaW5hbCAqLworLyogY2FsbGluZyBmdW5jdGlvbiAqLworCS8qIHNldCB0aGUgaW50ZXJydXB0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlciAqLworCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19JRkxHKTsKKwl1ZGVsYXkgKEkyQ19ERUxBWSAqIDEwKTsKKwlyZXR1cm4gKDApOworfQorCisvKiBjcmVhdGVkIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBpMmNfd3JpdGUoKSAqLworLyogZnVuY3Rpb24gd29ya2luZyBwcm9wZXJseS4gKi8KKy8qIGZ1bmN0aW9uIHRvIHdyaXRlIGJ5dGVzIG91dCBvbiB0aGUgaTJjIGJ1cyAqLworLyogdGhpcyBpcyBpZGVudGljYWwgdG8gdGhlIGZ1bmN0aW9uIGkyY193cml0ZV9kYXRhKCkgKi8KKy8qIGV4Y2VwdCB0aGF0IGl0IHJlcXVpcmVzIGEgYnVmZmVyIHRoYXQgaXMgYW4gKi8KKy8qIHVuc2lnbmVkIGNoYXJhY3RlciBhcnJheS4gIFlvdSBjYW4ndCB1c2UgKi8KKy8qIGkyY193cml0ZV9kYXRhKCkgdG8gc2VuZCBhbiBhcnJheSBvZiB1bnNpZ25lZCBjaGFyYWN0ZXJzICovCisvKiBzaW5jZSB0aGUgYnl0ZSBvZiBpbnRlcmVzdCBlbmRzIHVwIG9uIHRoZSB3cm9uZyBlbmQgb2YgdGhlIGJ1cyAqLworLyogYWFoLCB0aGUgam95cyBvZiBiaWcgZW5kaWFuIHZlcnN1cyBsaXR0bGUgZW5kaWFuISAqLworLyogKi8KKy8qIHJldHVybnMgMCA9IHN1Y2Nlc3MgKi8KKy8qICAgICAgICAgYW55dGhpbmcgb3RoZXIgdGhhbiB6ZXJvIGlzIGZhaWx1cmUgKi8KK3N0YXRpYyB1Y2hhciBpMmNfd3JpdGVfYnl0ZSAodW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCWludCBjb3VudCA9IDA7CisJdW5zaWduZWQgaW50IHRlbXA7CisJdW5zaWduZWQgY2hhciAqdGVtcF9wdHIgPSBkYXRhOworCisJRFAgKHB1dHMgKCJpMmNfd3JpdGVfYnl0ZVxuIikpOworCisJd2hpbGUgKGxlbikgeworCQkvKiBTZXQgYW5kIGFzc2VydCB0aGUgZGF0YSAqLworCQl0ZW1wID0gKnRlbXBfcHRyOworCQlJMkNfV1JJVEVfUkVHKEkyQ19EQVRBLCB0ZW1wKTsKKwkJUkVTRVRfUkVHX0JJVFMgKEkyQ19DTlRSLCBJMkNfSUZMRyk7CisKKwkJdWRlbGF5IChJMkNfREVMQVkqMik7CisKKwkJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwkJY291bnQrKzsKKwkJd2hpbGUgKChzdGF0dXMgJiAweGZmKSAhPSBJMkNfREFUQV9UUkFOU01JVF9BQ0spIHsKKwkJCXVkZWxheSAoSTJDX0RFTEFZKjIpOworCQkJaWYgKGNvdW50ID4gMjApIHsKKwkJCQlJMkNfV1JJVEVfUkVHKEkyQ19DTlRSLCBJMkNfU1RQKTsJLypzdG9wICovCisJCQkJcmV0dXJuIChzdGF0dXMpOworCQkJfQorCQkJc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwkJCWNvdW50Kys7CisJCX0KKwkJbGVuLS07CisJCXRlbXBfcHRyKys7CisJfQorLyogQ2FuJ3QgaGF2ZSB0aGUgd3JpdGUgaXNzdWluZyBhIHN0b3AgY29tbWFuZCAqLworLyogaXQncyB3cm9uZyB0byBoYXZlIGEgc3RvcCBiaXQgaW4gcmVhZCBzdHJlYW0gb3Igd3JpdGUgc3RyZWFtICovCisvKiBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIGl0J3MgcmVhbGx5IHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgKi8KKy8qIG9yIHdoZXRoZXIgd2UgaGF2ZSBqdXN0IHNlbmQgdGhlIGRldmljZSBhZGRyZXNzICsgb2Zmc2V0ICovCisvKiB3ZSB3aWxsIHB1c2ggaXNzdWluZyB0aGUgc3RvcCBjb21tYW5kIG9mZiB0byB0aGUgb3JpZ2luYWwgKi8KKy8qIGNhbGxpbmcgZnVuY3Rpb24gKi8KKy8qCUkyQ19XUklURV9SRUcoSTJDX0NOVFIsIEkyQ19JRkxHIHwgSTJDX1NUUCk7CisJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX1NUUCk7ICovCisJLyogc2V0IHRoZSBpbnRlcnJ1cHQgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyICovCisJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgSTJDX0lGTEcpOworCXVkZWxheSAoSTJDX0RFTEFZICogMTApOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHVjaGFyCitpMmNfc2V0X2Rldl9vZmZzZXQgKHVjaGFyIGRldl9hZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgdGVuX2JpdCwKKwkJICAgIGludCBhbGVuKQoreworCXVjaGFyIHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgdGFibGVbMl07CisKKy8qIGluaXRpYWxpemUgdGhlIHRhYmxlIG9mIGFkZHJlc3Mgb2Zmc2V0IGJ5dGVzICovCisvKiB1dGlsaXplZCBmb3IgMiBieXRlIGFkZHJlc3Mgb2Zmc2V0cyAqLworLyogTk9URTogdGhlIG9yZGVyIGlzIGhpZ2ggYnl0ZSBmaXJzdCEgKi8KKwl0YWJsZVsxXSA9IG9mZnNldCAmIDB4ZmY7CS8qIGxvdyBieXRlICovCisJdGFibGVbMF0gPSBvZmZzZXQgLyAweDEwMDsJLyogaGlnaCBieXRlICovCisKKwlEUCAocHV0cyAoImkyY19zZXRfZGV2X29mZnNldFxuIikpOworCisJc3RhdHVzID0gaTJjX3NlbGVjdF9kZXZpY2UgKGRldl9hZGRyLCAwLCB0ZW5fYml0KTsKKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIkZhaWxlZCB0byBzZWxlY3QgZGV2aWNlIHNldHRpbmcgb2Zmc2V0OiAweCUwMnhcbiIsCisJCQlzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiBzdGF0dXM7CisJfQorLyogY2hlY2sgdGhlIGFkZHJlc3Mgb2Zmc2V0IGxlbmd0aCAqLworCWlmIChhbGVuID09IDApCisJCS8qIG5vIGFkZHJlc3Mgb2Zmc2V0ICovCisJCXJldHVybiAoMCk7CisJZWxzZSBpZiAoYWxlbiA9PSAxKSB7CisJCS8qIDEgYnl0ZSBhZGRyZXNzIG9mZnNldCAqLworCQlzdGF0dXMgPSBpMmNfd3JpdGVfZGF0YSAoJm9mZnNldCwgMSk7CisJCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJCXByaW50ZiAoIkZhaWxlZCB0byB3cml0ZSBkYXRhOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwl9IGVsc2UgaWYgKGFsZW4gPT0gMikgeworCQkvKiAyIGJ5dGVzIGFkZHJlc3Mgb2Zmc2V0ICovCisJCXN0YXR1cyA9IGkyY193cml0ZV9kYXRhICh0YWJsZSwgMik7CisJCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJCXByaW50ZiAoIkZhaWxlZCB0byB3cml0ZSBkYXRhOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwl9IGVsc2UgeworCQkvKiBhZGRyZXNzIG9mZnNldCB1bmtub3duIG9yIG5vdCBzdXBwb3J0ZWQgKi8KKwkJcHJpbnRmICgiQWRkcmVzcyBsZW5ndGggb2Zmc2V0ICVkIGlzIG5vdCBzdXBwb3J0ZWRcbiIsIGFsZW4pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CQkvKiBzdWNlc3NmdWwgY29tcGxldGlvbiAqLworfQorCit1Y2hhcgoraTJjX3JlYWQgKHVjaGFyIGRldl9hZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgYWxlbiwgdWNoYXIgKiBkYXRhLAorCSAgaW50IGxlbikKK3sKKwl1Y2hhciBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBpMmNGcmVxID0gQ0ZHX0kyQ19TUEVFRDsKKworCURQIChwdXRzICgiaTJjX3JlYWRcbiIpKTsKKworCWkyY19pbml0IChpMmNGcmVxLCAwKTsJLyogc2V0IHRoZSBpMmMgZnJlcXVlbmN5ICovCisKKwlzdGF0dXMgPSBpMmNfc3RhcnQgKCk7CisKKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIlRyYW5zYWN0aW9uIHN0YXJ0IGZhaWxlZDogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gaTJjX3NldF9kZXZfb2Zmc2V0IChkZXZfYWRkciwgb2Zmc2V0LCAwLCBhbGVuKTsJLyogc2VuZCB0aGUgc2xhdmUgYWRkcmVzcyArIG9mZnNldCAqLworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiRmFpbGVkIHRvIHNldCBzbGF2ZSBhZGRyZXNzICYgb2Zmc2V0OiAweCUwMnhcbiIsCisJCQlzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaTJjX2luaXQgKGkyY0ZyZXEsIDApOwkvKiBzZXQgdGhlIGkyYyBmcmVxdWVuY3kgYWdhaW4gKi8KKworCXN0YXR1cyA9IGkyY19zdGFydCAoKTsKKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIlRyYW5zYWN0aW9uIHJlc3RhcnQgZmFpbGVkOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBpMmNfc2VsZWN0X2RldmljZSAoZGV2X2FkZHIsIDEsIDApOwkvKiBzZW5kIHRoZSBzbGF2ZSBhZGRyZXNzICovCisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJBZGRyZXNzIG5vdCBhY2tub3dsZWRnZWQ6IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXN0YXR1cyA9IGkyY19nZXRfZGF0YSAoZGF0YSwgbGVuKTsKKwlpZiAoc3RhdHVzKSB7CisjaWZkZWYgREVCVUdfSTJDCisJCXByaW50ZiAoIkRhdGEgbm90IHJlY2lldmVkOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRnVuY3Rpb24gdG8gc2V0IHRoZSBJMkMgc3RvcCBiaXQgKi8KK3ZvaWQgaTJjX3N0b3AgKHZvaWQpCit7CisJSTJDX1dSSVRFX1JFRyhJMkNfQ05UUiwgKDB4MSA8PCA0KSk7Cit9CisKKy8qIEkyQyB3cml0ZSBmdW5jdGlvbiAqLworLyogZGV2X2FkZHIgPSBkZXZpY2UgYWRkcmVzcyAqLworLyogb2Zmc2V0ID0gYWRkcmVzcyBvZmZzZXQgKi8KKy8qIGFsZW4gPSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGFkZHJlc3Mgb2Zmc2V0ICovCisvKiBkYXRhID0gcG9pbnRlciB0byBidWZmZXIgdG8gcmVhZCBkYXRhIGludG8gKi8KKy8qIGxlbiA9ICMgb2YgYnl0ZXMgdG8gcmVhZCAqLworLyogKi8KKy8qIHJldHVybnMgMCA9IHN1Y2Nlc2Z1bCAqLworLyogICAgICAgICBhbnl0aGluZyBidXQgemVybyBpcyBmYWlsdXJlICovCit1Y2hhcgoraTJjX3dyaXRlICh1Y2hhciBkZXZfYWRkciwgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IGFsZW4sIHVjaGFyICogZGF0YSwKKwkgICBpbnQgbGVuKQoreworCXVjaGFyIHN0YXR1cyA9IDA7CisJdW5zaWduZWQgaW50IGkyY0ZyZXEgPSBDRkdfSTJDX1NQRUVEOworCisJRFAgKHB1dHMgKCJpMmNfd3JpdGVcbiIpKTsKKworCWkyY19pbml0IChpMmNGcmVxLCAwKTsJLyogc2V0IHRoZSBpMmMgZnJlcXVlbmN5ICovCisKKwlzdGF0dXMgPSBpMmNfc3RhcnQgKCk7CS8qIHNlbmQgYSBzdGFydCBiaXQgKi8KKworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiVHJhbnNhY3Rpb24gc3RhcnQgZmFpbGVkOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBpMmNfc2V0X2Rldl9vZmZzZXQgKGRldl9hZGRyLCBvZmZzZXQsIDAsIGFsZW4pOwkvKiBzZW5kIHRoZSBzbGF2ZSBhZGRyZXNzICsgb2Zmc2V0ICovCisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJGYWlsZWQgdG8gc2V0IHNsYXZlIGFkZHJlc3MgJiBvZmZzZXQ6IDB4JTAyeFxuIiwKKwkJCXN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKworCXN0YXR1cyA9IGkyY193cml0ZV9ieXRlIChkYXRhLCBsZW4pOwkvKiB3cml0ZSB0aGUgZGF0YSAqLworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiRGF0YSBub3Qgd3JpdHRlbjogMHglMDJ4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCXJldHVybiBzdGF0dXM7CisJfQorCS8qIGlzc3VlIGEgc3RvcCBiaXQgKi8KKwlpMmNfc3RvcCAoKTsKKwlyZXR1cm4gMDsKK30KKworLyogZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGFuIEkyQyBkZXZpY2UgaXMgcHJlc2VudCAqLworLyogY2hpcCA9IGRldmljZSBhZGRyZXNzIG9mIGNoaXAgdG8gY2hlY2sgZm9yICovCisvKiAqLworLyogcmV0dXJucyAwID0gc3VjZXNzZnVsLCB0aGUgZGV2aWNlIGV4aXN0cyAqLworLyogICAgICAgICBhbnl0aGluZyBvdGhlciB0aGFuIHplcm8gaXMgZmFpbHVyZSwgbm8gZGV2aWNlICovCitpbnQgaTJjX3Byb2JlICh1Y2hhciBjaGlwKQoreworCisJLyogV2UgYXJlIGp1c3QgbG9va2luZyBmb3IgYW4gPEFDSz4gYmFjay4gKi8KKwkvKiBUbyBzZWUgaWYgdGhlIGRldmljZS9jaGlwIGlzIHRoZXJlICovCisKKyNpZmRlZiBERUJVR19JMkMKKwl1bnNpZ25lZCBpbnQgaTJjX3N0YXR1czsKKyNlbmRpZgorCXVjaGFyIHN0YXR1cyA9IDA7CisJdW5zaWduZWQgaW50IGkyY0ZyZXEgPSBDRkdfSTJDX1NQRUVEOworCisJRFAgKHB1dHMgKCJpMmNfcHJvYmVcbiIpKTsKKworCWkyY19pbml0IChpMmNGcmVxLCAwKTsJLyogc2V0IHRoZSBpMmMgZnJlcXVlbmN5ICovCisKKwlzdGF0dXMgPSBpMmNfc3RhcnQgKCk7CS8qIHNlbmQgYSBzdGFydCBiaXQgKi8KKworCWlmIChzdGF0dXMpIHsKKyNpZmRlZiBERUJVR19JMkMKKwkJcHJpbnRmICgiVHJhbnNhY3Rpb24gc3RhcnQgZmFpbGVkOiAweCUwMnhcbiIsIHN0YXR1cyk7CisjZW5kaWYKKwkJcmV0dXJuIChpbnQpIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBpMmNfc2V0X2Rldl9vZmZzZXQgKGNoaXAsIDAsIDAsIDApOwkvKiBzZW5kIHRoZSBzbGF2ZSBhZGRyZXNzICsgbm8gb2Zmc2V0ICovCisJaWYgKHN0YXR1cykgeworI2lmZGVmIERFQlVHX0kyQworCQlwcmludGYgKCJGYWlsZWQgdG8gc2V0IHNsYXZlIGFkZHJlc3M6IDB4JTAyeFxuIiwgc3RhdHVzKTsKKyNlbmRpZgorCQlyZXR1cm4gKGludCkgc3RhdHVzOworCX0KKyNpZmRlZiBERUJVR19JMkMKKwlpMmNfc3RhdHVzID0gSTJDX1JFQURfUkVHKEkyQ19TVEFUKTsKKwlwcmludGYgKCJhZGRyZXNzICUjeCByZXR1cm5lZCAlI3hcbiIsIGNoaXAsIGkyY19zdGF0dXMpOworI2VuZGlmCisJLyogaXNzdWUgYSBzdG9wIGJpdCAqLworCWkyY19zdG9wICgpOworCXJldHVybiAwOwkJLyogc3VjY2Vzc2Z1bCBjb21wbGV0aW9uICovCit9CisKKyNlbmRpZiAvKiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JMkMpICovCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvY29tbW9uL25hbmQuYyBiL2JvYXJkL21pbmRzcGVlZC9jb21tb24vbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NWI2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvY29tbW9uL25hbmQuYwpAQCAtMCwwICsxLDgxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorCisjaW5jbHVkZSA8bmFuZC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorCisvKiAKKyAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisqLwordm9pZCBjb21jZXJ0b19uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTkFORF9DVExfU0VUQ0xFOgorCQlTb0NfZ3Bpb19zZXRfMShTb0NfZ3Bpb19tYXNrKENGR19OQU5EX0NMRV9HUElPKSk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NUTF9DTFJDTEU6CisJCVNvQ19ncGlvX3NldF8wKFNvQ19ncGlvX21hc2soQ0ZHX05BTkRfQ0xFX0dQSU8pKTsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfQ1RMX1NFVEFMRToKKwkJU29DX2dwaW9fc2V0XzEoU29DX2dwaW9fbWFzayhDRkdfTkFORF9BTEVfR1BJTykpOworCQlicmVhazsKKworCWNhc2UgTkFORF9DVExfQ0xSQUxFOgorCQlTb0NfZ3Bpb19zZXRfMChTb0NfZ3Bpb19tYXNrKENGR19OQU5EX0FMRV9HUElPKSk7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NUTF9TRVROQ0U6CisJCVNvQ19ncGlvX3NldF8wKFNvQ19ncGlvX21hc2soQ0ZHX05BTkRfQ0VfR1BJTykpOworCQlicmVhazsKKworCWNhc2UgTkFORF9DVExfQ0xSTkNFOgorCQlTb0NfZ3Bpb19zZXRfMShTb0NfZ3Bpb19tYXNrKENGR19OQU5EX0NFX0dQSU8pKTsKKwkJYnJlYWs7CisJfQorfQorCitpbnQgY29tY2VydG9fbmFuZF9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gU29DX2dwaW9fcmVhZChTb0NfZ3Bpb19tYXNrKENGR19OQU5EX0JSX0dQSU8pKSA/IDEgOiAwOworfQorCit2b2lkIGJvYXJkX25hbmRfaW5pdChzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kKQoreworCXByaW50ZigiYm9hcmRfbmFuZF9pbml0IG5hbmQtPklPX0FERFJfUiA9JXhcbiIsIG5hbmQtPklPX0FERFJfUik7CisKKwluYW5kLT5vcHRpb25zID0gMDsKKwluYW5kLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwluYW5kLT5od2NvbnRyb2wgPSBjb21jZXJ0b19uYW5kX2h3Y29udHJvbDsKKwluYW5kLT5kZXZfcmVhZHkgPSBjb21jZXJ0b19uYW5kX3JlYWR5OworCW5hbmQtPmNoaXBfZGVsYXkgPSAyMDsKK30KKyNlbHNlCit2b2lkIGJvYXJkX25hbmRfaW5pdChzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kKQoreworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9jb21tb24vbm9yYm9vdC5TIGIvYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9ub3Jib290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwZGJhNQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9jb21tb24vbm9yYm9vdC5TCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qIFRoaXMgY29kZSBpcyB1c2VkIHRvIHNldHVwIHRoZSBib290IENTIHRvIDE2Yml0IHNvIHRoYXQgCit0aGUgVS1ib290IGltYWdlIGNhbiBiZSByZWFkIGZyb20gTk9SIGZsYXNoLiBJdCBpcyBjb21waWxlZCBpbnRvCithIHNwZWNpYWwgc2VjdGlvbiAoYW5kIGZvcm1hdCkgdXNpbmcgdGhlIHUtYm9vdC5sZHMgbGlua2VyIHNjcmlwdCBhbmQKK3UxNl90b191OC5jIGFwcGxpY2F0aW9uICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisuZ2xvYmwgX3N0YXJ0Citfc3RhcnQ6CisJYWRyCXIwLCBpcmFtX2NvZGVfc3RhcnQKKwlsZHIJcjEsIGlyYW1fYWRkcgorCWFkcglyMiwgaXJhbV9jb2RlX2VuZAorCitjb3B5OgorCWxkbWlhCXIwISwge3IzLXI2fQkvKiBjb3B5IGZyb20gc291cmNlIGFkZHJlc3MgW3IwXSAgICAqLworCXN0bWlhCXIxISwge3IzLXI2fQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLworCWNtcAlyMCwgcjIJCS8qIHVudGlsIHNvdXJjZSBlbmQgYWRkcmVzcyBbcjJdICAgICovCisJYmxlCWNvcHkKKworCS8qIENhbGN1bGF0ZSByZXR1cm4gYWRkcmVzcywgb2Zmc2V0IGlzIG11bHRpcGxpZWQgYnkgMiAqLworCWFkciAgICAgcjAsIF9zdGFydAorCWFkZCAgICAgcjEsIHIyLCByMgorCXN1YiAgICAgbHIsIHIxLCByMAorCisJLyogSnVtcCB0byBpbnRlcm5hbCBSQU0gKi8KKwlsZHIJcGMsIGlyYW1fYWRkcgorCitpcmFtX2FkZHI6CisJLndvcmQJSVJBTV9CQVNFQUREUgorCisKKwkvKiBUaGlzIGNvZGVzIHJ1bnMgZnJvbSBpbnRlcm5hbCBSQU0gYW5kCisJICAgc2V0cyB0aGUgYm9vdCBjaGlwIHNlbGVjdCAqLworaXJhbV9jb2RlX3N0YXJ0OgorCWxkcglyMCwgY3NfcmVnCisJbGRyCXIxLCBjc192YWwKKwlzdHJoCXIxLCBbcjBdCisKKwkvKiBKdW1wIGJhY2sgdG8gZmxhc2gsIG5vdyBydW5uaW5nIGluIDE2IGJpdCAqLworCW1vdglwYywgbHIKKworY3NfcmVnOgorCS53b3JkCVNEQzBfQ1NCT09UX0NGRworCitjc192YWw6CisJLndvcmQJMHgwODFFCisKK2lyYW1fY29kZV9lbmQ6CmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvY29tbW9uL3UxNl90b191OC5jIGIvYm9hcmQvbWluZHNwZWVkL2NvbW1vbi91MTZfdG9fdTguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTUyZmFiCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2NvbW1vbi91MTZfdG9fdTguYwpAQCAtMCwwICsxLDQ2IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlGSUxFICpmcGksICpmcG87CisJdW5zaWduZWQgY2hhciBieXRlOworCXVuc2lnbmVkIHNob3J0IHdvcmQ7CisJdW5zaWduZWQgaW50IG5vcDsgCisJaW50IGNvdW50OworCisJaWYgKGFyZ2MgPCAzKQorCQlnb3RvIGVycjA7CisKKwlmcGkgPSBmb3Blbihhcmd2WzFdLCAiciIpOworCWlmICghZnBpKQorCQlnb3RvIGVycjA7CisKKwlmcG8gPSBmb3Blbihhcmd2WzJdLCAidyIpOworCWlmICghZnBvKQorCQlnb3RvIGVycjE7CisKKwljb3VudCA9IDA7CisJd2hpbGUoZnJlYWQoJmJ5dGUsIDEsIHNpemVvZih1bnNpZ25lZCBjaGFyKSwgZnBpKSA9PSAxKSB7CisJCXdvcmQgPSBieXRlIDw8IDggfCBieXRlOworCisJCWZ3cml0ZSgmd29yZCwgMSwgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgZnBvKTsKKwkJY291bnQrKzsKKwl9CisKKwkvKiBBbGlnbiB0byB0aGUgbmV4dCAzMmJ5dGVzIGJvdW5kYXJ5IHdpdGggbm9wcyAqLworCW5vcCA9IDB4ZTFhMDAwMDA7CisJY291bnQgPSAoMzIgLSAoY291bnQgKiAyKSAlIDMyKSAvIDQ7CisJd2hpbGUgKGNvdW50LS0pCisJCWZ3cml0ZSgmbm9wLCAxLCBzaXplb2YodW5zaWduZWQgaW50KSwgZnBvKTsKKworCWZjbG9zZShmcGkpOworCWZjbG9zZShmcG8pOworCisJcmV0dXJuIDA7CisKK2VycjE6CisJZmNsb3NlKGZwaSk7CisKK2VycjA6CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvZmVyb3V0ZXIvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvZmVyb3V0ZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2ZWQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9mZXJvdXRlci9NYWtlZmlsZQpAQCAtMCwwICsxLDYxIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKK2lmbmVxICgkKE9CSlRSRUUpLCQoU1JDVFJFRSkpCiskKHNoZWxsIG1rZGlyIC1wICQob2JqKS4uL2NvbW1vbikKK2VuZGlmCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gYm9hcmQubyByZXNldC5vIC4uL2NvbW1vbi9hbTI5bHYwNDBiLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL25hbmQubworU09CSlMJOj0gCisKK2djY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKKworTE9BRF9BRERSID0gMHgxMDQwMDAwMAorTERTQ1JJUFQgPSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworCitIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCisKK09CSlMgICAgOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKK2FsbDoJJChMSUIpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCisKK2JvYXJkLm86IGJvYXJkLmMKKwkkKENDKSAkKENGTEFHUykgLWZwaWMgLWMgLW8gJEAgJDwKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKSAKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9mZXJvdXRlci9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL2Zlcm91dGVyL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNmZTFmNgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9mZXJvdXRlci9ib2FyZC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYnNwLmg+CitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmZGVmIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisKK3ZvaWQgYm9hcmRfbWFwKGZsYXNoX2luZm9fdCAqaW5mbywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmICgoYWRkciA+PSAoUEhZU19GTEFTSDEgKyAweDgwMDAwMCkpICYmIChhZGRyIDwgKFBIWVNfRkxBU0gxICsgMHgxMDAwMDAwKSkpIHsKKwkJU29DX2dwaW9fc2V0XzAoU29DX2dwaW9fbWFzayhDRkdfTk9SX0ZMQVNIX0EyMl9HUElPKSk7CisJfSBlbHNlIHsKKwkJU29DX2dwaW9fc2V0XzEoU29DX2dwaW9fbWFzayhDRkdfTk9SX0ZMQVNIX0EyMl9HUElPKSk7CisJfQorfQorI2VuZGlmCisKK3UzMiBnZXRfZGRyX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gUEhZU19TRFJBTV9TSVpFOworfQorCitzdGF0aWMgdm9pZCBub3JfaHdfaW5pdCh2b2lkKQoreworCS8qIHNldCBOT1JfRkxBU0hfQTIyX0dQSU8gYXMgb3V0cHV0ICovCisJU29DX2dwaW9fY2ZnKENGR19OT1JfRkxBU0hfQTIyX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworCisJLyogU2VsZWN0IHVwcGVyIDhNaUIgb2YgZmxhc2ggZGV2aWNlICovCisJU29DX2dwaW9fc2V0XzEoU29DX2dwaW9fbWFzayhDRkdfTk9SX0ZMQVNIX0EyMl9HUElPKSk7CisKKyNpZmRlZiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCSoodm9sYXRpbGUgdTMyICopRVhfQ1MwX1NFR19SRUcgPSAweDdGRjsKKyNlbHNlCisJKih2b2xhdGlsZSB1MzIgKilFWF9DUzBfU0VHX1JFRyA9IDB4M0ZGOworI2VuZGlmCit9CisKK3ZvaWQgYnNwX2luaXQodm9pZCkKK3sKKyAgICAgICAgLyogSWYgTUFHSUMgTnVtYmVyIGlzIHByZXNlbnQsIGxvdyBsZXZlbCBpbml0aWFsaXphdGlvbiBpcyBkb25lICovCisgICAgICAgIGlmKF9fbGU2NF90b19jcHUoKih1NjQqKShBUkFNX0JBU0VBRERSKzB4ODAwMCkpICA9PSBDT01DRVJUT19QQVJUX01BR0lDKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworCVNvQ19DaGVja19EZXZpY2UoKTsKKwlTb0NfQVBCX3NldHVwKCk7CisJU29DX0FIQl9zZXR1cCgpOworCVNvQ19BUkFNX3NldHVwKCk7CisKKwlTb0NfUExMX2luaXQoKTsKKworCWljYWNoZV9lbmFibGUoKTsKKwlTb0NfbWVtX2luaXQoNyk7CisvLwlTb0NfbmFuZF9pbml0KCk7Cit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisgICAgICAgIC8qIENhbGwgbm9yX2h3X2luaXQoKSBvbmx5IHdoZW4gbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGlzIG5vdCBkb25lICovCisgICAgICAgIC8qIElmIE1BR0lDIE51bWJlciBpcyBwcmVzZW50LCBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSAqLworICAgICAgICBpZihfX2xlNjRfdG9fY3B1KCoodTY0KikoQVJBTV9CQVNFQUREUisweDgwMDApKSAgIT0gQ09NQ0VSVE9fUEFSVF9NQUdJQykKKyAgICAgICAgICAgICAgICBub3JfaHdfaW5pdCgpOworCisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisJLyogaXNzdWUgZXh0ZXJuYWwgcmVzZXQgdmlhIEdQSU8xNyBmb3IgMTAwIG1zZWMqLworCSoodm9sYXRpbGUgdTMyKikgKEdQSU9fT0VfUkVHKSB8PSAweDIwMDAwOworCSoodm9sYXRpbGUgdTMyKikoR1BJT19PVVRQVVRfUkVHKSA9IDB4MjAwMDA7CQorCXVkZWxheSgxMCk7CisJKih2b2xhdGlsZSB1MzIqKShHUElPX09VVFBVVF9SRUcpID0gMHgwOwkKKwl1ZGVsYXkoMTAwKjEwMDApOworCSoodm9sYXRpbGUgdTMyKikoR1BJT19PVVRQVVRfUkVHKSA9IDB4MjAwMDA7CQorCXVkZWxheSgxMDAqMTAwMCk7CisKKwkvKiBlbmFibGUgU1BJIGludGVyZmFjZSAqLworCXdoaWxlICgxKQorCXsKKwkgICB1MzIgdGVtcDsKKyAgIAkgICB0ZW1wID0gKih2b2xhdGlsZSB1MzIgKilHUElPX0lPQ1RSTF9SRUcgfCBHUElPX0lPQ1RSTF9TUEk7IAkJLy8gZW5hYmxlIFNQSSBidXMKKyAgIAkgICAqKHZvbGF0aWxlIHUzMiAqKUdQSU9fTE9DS19SRUcgPSAweDU1NTU1NTU1OyAJCQkvLyByZW1vdmUgbG9jaworICAgCSAgICoodm9sYXRpbGUgdTMyICopR1BJT19JT0NUUkxfUkVHID0gdGVtcDsJCQkJLy8gd3JpdGUgdG8gY3RybCByZWcKKyAgIAkgICBpZiAoKih2b2xhdGlsZSB1MzIgKilHUElPX0lPQ1RSTF9SRUcgPT0gdGVtcCkKKwkJICAgYnJlYWs7CisJfQorCisgICAgICAgKih2b2xhdGlsZSB1MzIgKikoR1BJT19CQVNFQUREUisweDM0KSA9ICoodm9sYXRpbGUgdTMyICopKEdQSU9fQkFTRUFERFIrMHgzNCkgfCAweDQ7CS8vIHNldCBURE0gRlN5bmMgYXMgb3V0cHV0CisgICAgICAgKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX1RETV9DTEtfQ05UUkwgPSAweDgzMmQ3MGQ3OwkJLy8gc2V0IFRETSBjbG9jayBmcmVxIHRvIDJNSHoKKyAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfRlNZTkNfQ05UUkwgPSAweDIwRkYwMDAxOwkJLy8gc2V0IEZTeW5jIGZyZXEgdG8gOEtIegorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gZ2V0X2Rkcl9zaXplKCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBCT0FSRF9MQVRFX0lOSVQKK2ludCBib2FyZF9sYXRlX2luaXQodm9pZCkKK3sKKyNpZmRlZiBERFJfVFJBSU5JTkdfREJHCisJdTggd3JfZHFzID0gMDsgCisJdTggZHFzX291dCA9IDA7CisJdTggZHFzX2RlbGF5MCA9IDA7CisJdTggZHFzX2RlbGF5MSA9IDA7CisJdTggZHFzX2RlbGF5MiA9IDA7CisJdTggZHFzX2RlbGF5MyA9IDA7CisjZW5kaWYKKworCXByaW50ZigiUmVzZXJ2ZSBNU1AgbWVtb3J5XG4iKTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgKz0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAtPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRTsKKworI2lmZGVmIEREUl9UUkFJTklOR19EQkcKKwl3cl9kcXMgPSBERU5BTElfV1JfRFFTOyAKKwlkcXNfb3V0ID0gREVOQUxJX0RRU19PVVQ7CisJZHFzX2RlbGF5MCA9IERFTkFMSV9EUVNfREVMQVkwOworCWRxc19kZWxheTEgPSBERU5BTElfRFFTX0RFTEFZMTsKKwlkcXNfZGVsYXkyID0gREVOQUxJX0RRU19ERUxBWTI7CisJZHFzX2RlbGF5MyA9IERFTkFMSV9EUVNfREVMQVkzOworCisjaWZkZWYgRERSX1RSQUlOSU5HCisJcHJpbnRmKCJERFIgVHJhaW5pbmcgOiAiKTsKKworI2lmZGVmIE5FV19ERFJfVFJBSU5JTkcKKwlwcmludGYoIihORVcpOiAiKTsKKyNlbmRpZgorCisjZWxzZQorCXByaW50ZigiRERSIGRlZmF1bHQgc2V0dGluZ3MgOiAiKTsKKyNlbmRpZgkKKworCXByaW50Zigid3JfZHFzIDB4JXggZHFzX291dCAweCV4IGRlbGF5MCAweCV4IGRlbGF5MSAweCV4IGRlbGF5MiAweCV4IGRlbGF5MyAweCV4XG4iLCB3cl9kcXMsZHFzX291dCxkcXNfZGVsYXkwLGRxc19kZWxheTEsZHFzX2RlbGF5MixkcXNfZGVsYXkzKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9mZXJvdXRlci9jb25maWcubWsgYi9ib2FyZC9taW5kc3BlZWQvZmVyb3V0ZXIvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDFlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvZmVyb3V0ZXIvY29uZmlnLm1rCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IDEwMDAnODAwMCwKKyMgZW50cnkgMTAwMCc4MDAwIChtZW0gYmFzZSArIHJlc2VydmVkKQorIworIyBXZSBsb2FkIG91cnNlbGYgdG8gaW50ZXJuYWwgUkFNIGF0IDIwMDEnMjAwMAorIyBDaGVjayBtYXAgZmlsZSB3aGVuIGNoYW5naW5nIFRFWFRfQkFTRS4KKyMgRXZlcnl0aGluZyBoYXMgZml0IGludG8gMTkya0IgaW50ZXJuYWwgU1JBTSEKKyMKKworIyBYWFggVEVYVF9CQVNFID0gMHgyMDAxMjAwMAorVEVYVF9CQVNFID0gMHg4MDEwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Zlcm91dGVyL3Jlc2V0LmMgYi9ib2FyZC9taW5kc3BlZWQvZmVyb3V0ZXIvcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2FiOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Zlcm91dGVyL3Jlc2V0LmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JpdHMuaD4KKworI2RlZmluZSBXQU5fUEhZX0JJVAkwCisjZGVmaW5lIExBTl9QSFlfQklUCTEKK3N0YXRpYyB1OCB3YW5sYW5fcmVzZXQ9MDsKKworLyoKKwlPbiB0aGUgcm91dGVyIGJvYXJkLCB0aGUgbGFuIGFuZCB0aGUgd2FuIHBoeSBhcmUgdGFrZW4gb3V0IG9mIHJlc2V0IGJ5IHRoZSBzYW1lIEdQSU8gcGluICgxNykKKyovCisKK3ZvaWQgcmVzZXRfZW1hYzBfcGh5KHUzMiBlbmFibGUpCit7CisJaWYoZW5hYmxlKQorCXsJLy93YW50IHRvIHRha2UgdGhlIHBoeSBvdXQgb2YgcmVzZXQKKwkJd2FubGFuX3Jlc2V0fD1MQU5fUEhZX0JJVDsKKwkJKih2b2xhdGlsZSB1MzIqKSAoR1BJT19PRV9SRUcpIHw9IEJJVDE3OworCQkqKHZvbGF0aWxlIHUzMiopKEdQSU9fT1VUUFVUX1JFRykgfD0gQklUMTc7CisKKwl9CisJZWxzZQorCXsKKwkJLy93YW50IHRvIHB1dCB0aGUgcGh5IGluIHJlc2V0CisJCXdhbmxhbl9yZXNldCY9fkxBTl9QSFlfQklUOworCQlpZih3YW5sYW5fcmVzZXQ9PTApCisJCXsKKwkJCSoodm9sYXRpbGUgdTMyKikgKEdQSU9fT0VfUkVHKSB8PSBCSVQxNzsKKwkJCSoodm9sYXRpbGUgdTMyKikoR1BJT19PVVRQVVRfUkVHKSAmPSB+QklUMTc7CisJCX0KKwl9CisKK30KKwordm9pZCByZXNldF9lbWFjMV9waHkodTMyIGVuYWJsZSkKK3sKKwlpZihlbmFibGUpCisJewkvL3dhbnQgdG8gdGFrZSB0aGUgcGh5IG91dCBvZiByZXNldAorCQl3YW5sYW5fcmVzZXR8PVdBTl9QSFlfQklUOworCQkqKHZvbGF0aWxlIHUzMiopIChHUElPX09FX1JFRykgfD0gQklUMTc7CisJCSoodm9sYXRpbGUgdTMyKikoR1BJT19PVVRQVVRfUkVHKSB8PSBCSVQxNzsKKworCX0KKwllbHNlCisJeworCQkvL3dhbnQgdG8gcHV0IHRoZSBwaHkgaW4gcmVzZXQKKwkJd2FubGFuX3Jlc2V0Jj1+V0FOX1BIWV9CSVQ7CisJCWlmKHdhbmxhbl9yZXNldD09MCkKKwkJeworCQkJKih2b2xhdGlsZSB1MzIqKSAoR1BJT19PRV9SRUcpIHw9IEJJVDE3OworCQkJKih2b2xhdGlsZSB1MzIqKShHUElPX09VVFBVVF9SRUcpICY9IH5CSVQxNzsKKwkJfQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2Zlcm91dGVyL3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvZmVyb3V0ZXIvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTVlYTJhCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2Zlcm91dGVyL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCAgICAgIDoKKwl7CisJICBjcHUvYXJtMTEzNi9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworCisJLiA9IDB4MGEwMDAwMDA7CisJX190cmFpbmluZ19kYXRhX3N0YXJ0ID0gLjsKKworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2lwb3RzNDgtNTE1L01ha2VmaWxlIGIvYm9hcmQvbWluZHNwZWVkL2lwb3RzNDgtNTE1L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjhmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC01MTUvTWFrZWZpbGUKQEAgLTAsMCArMSw1NSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSBib2FyZC5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9hbTI5bHYwNDBiLm8gLi4vY29tbW9uL2FtbHY2NDB1Lm9cCisJCS4uL2NvbW1vbi9uYW5kLm8gLi4vY29tbW9uL2NtZF9ib290Y29tY2VydG8ubworU09CSlMJOj0gLi4vY29tbW9uL2FybTFfaW5pdC5vCisKK2djY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKKworTERTQ1JJUFQgPSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworCitIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCisKK2FsbDogJChMSUIpCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkXgorCitib2FyZC5vOiBib2FyZC5jCisJJChDQykgJChDRkxBR1MpIC1mcGljIC1jIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9pcG90czQ4LTUxNS9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL2lwb3RzNDgtNTE1L2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkMjY5NAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9pcG90czQ4LTUxNS9ib2FyZC5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19TUEkpCitleHRlcm4gdm9pZCBzcGlfaHdfaW5pdCh2b2lkKTsKKyNlbmRpZgorCisvKiBJbml0aWFsaXplIFNEUkFNLCBBUk0gYW5kIGJ1cyBDTE9DSyBhbmQgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KK3ZvaWQgYnNwX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NEUkFNLAorCQkuYmFzZWFkZHIgPSBQSFlTX1NEUkFNLAorCQkuc2l6ZSA9IFBIWVNfU0RSQU1fU0laRSwKKworCQkudHJhcyA9IDB4NiwKKwkJLnRyYyA9IDB4OSwKKwkJLnRyY2QgPSAweDMsCisJCS50cnAgPSAweDMsCisJCS5jbCA9IDB4MywKKworCQkubWVtY2hpcF9kdHlwZSA9IDB4MSwKKwkJLnR3ciA9IDB4MiwKKwkJLmJ1c3dpZHRoID0gMHgxLAorCQkudG1yZCA9IDB4MiwKKwkJLnRycmQgPSAweDIsCisKKwkJLnJlZmNudCA9IDB4MDQxMSwKKwkJLnB3cm9uY250ID0gMHgzNDE1LAorCX07CisKKwlTb0NfcGxsX2NmZyhDTEtfTU9ERV9TWU5DLCAyICogQ0ZHX0haX0NMT0NLLCAwKTsKKworCVNvQ19jc19jZmcoU0RSX0NTU0QwLCBDU19FTkFCTEUsICZjZmcpOworCisJU29DX21lbV9kaXZpZGVyX2NmZygweDgwMDAwMDAwLCBCRUxMT1dfTUVNX1NEQzEpOworCVNvQ19oaWdoX21lbV9jZmcoU0RSX0NTU0QwKTsKKworCWljYWNoZV9lbmFibGUoKTsKK30KKworc3RhdGljIHZvaWQgbmFuZF9od19pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCQkuYnVzd2lkdGggPSBDU19CVVNXSURUSF84QklULAorCQkubGV2ZWwgPSBDU19BQ1RJVkVfTE9XLAorCQkuY21kd2lkdGggPSAweDksCisJCS5hZGRyc2V0dXAgPSAweDUsCisJCS5kcW1fbW9kZSA9IENTX0RRTU1PREVfTk9STUFMLAorCX07CisKKwlTb0NfY3NfY2ZnKEVYUF9DU1AwLCBDU19FTkFCTEUsICZjZmcpOworCisJU29DX2dwaW9fY2ZnKENGR19OQU5EX0JSX0dQSU8sIEdQSU9fVFlQRV9JTlBVVCk7CisJU29DX2dwaW9fY2ZnKENGR19OQU5EX0NFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9DTEVfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7CisJU29DX2dwaW9fY2ZnKENGR19OQU5EX0FMRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKK30KKworc3RhdGljIHZvaWQgbm9yX2h3X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NSQU0sCisKKwkJLmJhc2VhZGRyID0gUEhZU19GTEFTSDIsCisJCS5zaXplID0gOCAqIDEwMjQgKiAxMDI0LAorCisJCS5idXN3aWR0aCA9IENTX0JVU1dJRFRIXzE2QklULAorCQkubGV2ZWwgPSBDU19BQ1RJVkVfTE9XLAorCQkuY21kd2lkdGggPSAweDksCisJCS5hZGRyc2V0dXAgPSAweDcsCisJCS5kcW1fbW9kZSA9IENTX0RRTU1PREVfTk9STUFMLAorCX07CisKKwlTb0NfY3NfY2ZnKEVYUF9DU1NEMSwgQ1NfRU5BQkxFLCAmY2ZnKTsKKworCVNvQ19pb2N0cmxfY2ZnKElPQ1RSTF9FWFBBMjFfQTIyLCAxKTsKK30KKworc3RhdGljIHZvaWQgZWVwcm9tX2h3X2luaXQodm9pZCkKK3sKKyNpZiAwCisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCQkuYnVzX3dpZHRoID0gQ1NfQlVTV0lEVEhfOEJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZF93aWR0aCA9IDB4NSwKKwkJLmFkZHJfc2V0dXAgPSAweDQsCisJCS5kcW1fbW9kZSA9IENTX0RRTU1PREVfTk9STUFMLAorCX07CisKKwlTb0NfY3NfY2ZnKEVYUF9DU0JPT1QsIENTX0VOQUJMRSwgJmNmZyk7CisjZW5kaWYKK30KKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBhcmNoIG51bWJlciBvZiBNaW5kc3BlZWQgQ29tY2VydG8gKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX004MjVYWDsKKworCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gTElOVVhfQk9PVFBBUkFNX0FERFI7CisKKwluYW5kX2h3X2luaXQoKTsKKwlub3JfaHdfaW5pdCgpOworCWVlcHJvbV9od19pbml0KCk7CisKKyNpZihDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfU1BJKQorCXNwaV9od19pbml0KCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fU0laRTsKKworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCBwYXJ0aXRpb25fZmxhc2godm9pZCk7CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXJldHVybiAwOworfQorCisjaWZkZWYgQk9BUkRfTEFURV9JTklUCitpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCit7CisJcHJpbnRmKCJSZXNlcnZlIE1TUCBtZW1vcnlcbiIpOworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCArPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplIC09IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC01MTUvY29uZmlnLm1rIGIvYm9hcmQvbWluZHNwZWVkL2lwb3RzNDgtNTE1L2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWEzYzQwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2lwb3RzNDgtNTE1L2NvbmZpZy5tawpAQCAtMCwwICsxLDQgQEAKKyMKKyMKKworVEVYVF9CQVNFID0gMHgwN0UwMDAwMAkjIDEyNk1pQgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2lwb3RzNDgtNTE1L3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC01MTUvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjUxNjVhCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2lwb3RzNDgtNTE1L3UtYm9vdC5sZHMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCisJLiA9IEFMSUdOKDQpOworCS50ZXh0IDoKKwl7CisJCWNwdS9hcm05MjB0L3N0YXJ0Lm8gKC50ZXh0KQorCisJCV9fYXJtMV9pbml0X3N0YXJ0ID0gLjsKKwkJYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9hcm0xX2luaXQubyAoLnRleHQpCisJCV9fYXJtMV9pbml0X2VuZCA9IC47CisKKwkJKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC04MDAvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC04MDAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2OGZhNAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9pcG90czQ4LTgwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDU1IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChCT0FSRCkuYQorCitPQkpTCTo9IGJvYXJkLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL2FtMjlsdjA0MGIubyAuLi9jb21tb24vYW1sdjY0MHUub1wKKwkJLi4vY29tbW9uL25hbmQubyAuLi9jb21tb24vY21kX2Jvb3Rjb21jZXJ0by5vCitTT0JKUwk6PSAuLi9jb21tb24vYXJtMV9pbml0Lm8KKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworYWxsOiAkKExJQikKKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICReCisKK2JvYXJkLm86IGJvYXJkLmMKKwkkKENDKSAkKENGTEFHUykgLWZwaWMgLWMgLW8gJEAgJDwKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisKK3NpbmNsdWRlIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL2lwb3RzNDgtODAwL2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC04MDAvYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWQyNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL2lwb3RzNDgtODAwL2JvYXJkLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYnNwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisjaWYoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TUEkpIHx8IGRlZmluZWQoQ09ORklHX1NQSSkKK2V4dGVybiB2b2lkIHNwaV9od19pbml0KHZvaWQpOworI2VuZGlmCisKKy8qIEluaXRpYWxpemUgU0RSQU0sIEFSTSBhbmQgYnVzIENMT0NLIGFuZCBpbnN0cnVjdGlvbiBjYWNoZSAqLwordm9pZCBic3BfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU0RSQU0sCisJCS5iYXNlYWRkciA9IFBIWVNfU0RSQU0sCisJCS5zaXplID0gUEhZU19TRFJBTV9TSVpFLAorCisJCS50cmFzID0gMHg2LAorCQkudHJjID0gMHg5LAorCQkudHJjZCA9IDB4MywKKwkJLnRycCA9IDB4MywKKwkJLmNsID0gMHgzLAorCisJCS5tZW1jaGlwX2R0eXBlID0gMHgxLAorCQkudHdyID0gMHgyLAorCQkuYnVzd2lkdGggPSAweDEsCisJCS50bXJkID0gMHgyLAorCQkudHJyZCA9IDB4MiwKKworCQkucmVmY250ID0gMHgwNDExLAorCQkucHdyb25jbnQgPSAweDM0MTUsCisJfTsKKworCVNvQ19wbGxfY2ZnKENMS19NT0RFX1NZTkMsIDIgKiBDRkdfSFpfQ0xPQ0ssIDApOworCisJU29DX2NzX2NmZyhTRFJfQ1NTRDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfbWVtX2RpdmlkZXJfY2ZnKDB4ODAwMDAwMDAsIEJFTExPV19NRU1fU0RDMSk7CisJU29DX2hpZ2hfbWVtX2NmZyhTRFJfQ1NTRDApOworCisJaWNhY2hlX2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBuYW5kX2h3X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NSQU0sCisJCS5idXN3aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWR3aWR0aCA9IDB4OSwKKwkJLmFkZHJzZXR1cCA9IDB4NSwKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTUDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQlJfR1BJTywgR1BJT19UWVBFX0lOUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0VfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7CisJU29DX2dwaW9fY2ZnKENGR19OQU5EX0NMRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQUxFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworfQorCitzdGF0aWMgdm9pZCBub3JfaHdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKworCQkuYmFzZWFkZHIgPSBQSFlTX0ZMQVNIMiwKKwkJLnNpemUgPSA4ICogMTAyNCAqIDEwMjQsCisKKwkJLmJ1c3dpZHRoID0gQ1NfQlVTV0lEVEhfMTZCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWR3aWR0aCA9IDB4OSwKKwkJLmFkZHJzZXR1cCA9IDB4NywKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTU0QxLCBDU19FTkFCTEUsICZjZmcpOworCisJU29DX2lvY3RybF9jZmcoSU9DVFJMX0VYUEEyMV9BMjIsIDEpOworfQorCitzdGF0aWMgdm9pZCBlZXByb21faHdfaW5pdCh2b2lkKQoreworI2lmIDAKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NSQU0sCisJCS5idXNfd2lkdGggPSBDU19CVVNXSURUSF84QklULAorCQkubGV2ZWwgPSBDU19BQ1RJVkVfTE9XLAorCQkuY21kX3dpZHRoID0gMHg1LAorCQkuYWRkcl9zZXR1cCA9IDB4NCwKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTQk9PVCwgQ1NfRU5BQkxFLCAmY2ZnKTsKKyNlbmRpZgorfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCS8qIGFyY2ggbnVtYmVyIG9mIE1pbmRzcGVlZCBDb21jZXJ0byAqLworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfTTgyNVhYOworCisJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBMSU5VWF9CT09UUEFSQU1fQUREUjsKKworCW5hbmRfaHdfaW5pdCgpOworCW5vcl9od19pbml0KCk7CisJZWVwcm9tX2h3X2luaXQoKTsKKworI2lmKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19TUEkpCisJc3BpX2h3X2luaXQoKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV9TSVpFOworCisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkIHBhcnRpdGlvbl9mbGFzaCh2b2lkKTsKKworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBCT0FSRF9MQVRFX0lOSVQKK2ludCBib2FyZF9sYXRlX2luaXQodm9pZCkKK3sKKwlwcmludGYoIlJlc2VydmUgTVNQIG1lbW9yeVxuIik7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ICs9IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgLT0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9pcG90czQ4LTgwMC9jb25maWcubWsgYi9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC04MDAvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTNjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC04MDAvY29uZmlnLm1rCkBAIC0wLDAgKzEsNCBAQAorIworIworCitURVhUX0JBU0UgPSAweDA3RTAwMDAwCSMgMTI2TWlCCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC04MDAvdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC9pcG90czQ4LTgwMC91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNTE2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvaXBvdHM0OC04MDAvdS1ib290LmxkcwpAQCAtMCwwICsxLDU3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgOgorCXsKKwkJY3B1L2FybTkyMHQvc3RhcnQubyAoLnRleHQpCisKKwkJX19hcm0xX2luaXRfc3RhcnQgPSAuOworCQlib2FyZC9taW5kc3BlZWQvY29tbW9uL2FybTFfaW5pdC5vICgudGV4dCkKKwkJX19hcm0xX2luaXRfZW5kID0gLjsKKworCQkqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9tYWxpbmRpL01ha2VmaWxlIGIvYm9hcmQvbWluZHNwZWVkL21hbGluZGkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2OGZhNAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9tYWxpbmRpL01ha2VmaWxlCkBAIC0wLDAgKzEsNTUgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJOj0gYm9hcmQubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vYW0yOWx2MDQwYi5vIC4uL2NvbW1vbi9hbWx2NjQwdS5vXAorCQkuLi9jb21tb24vbmFuZC5vIC4uL2NvbW1vbi9jbWRfYm9vdGNvbWNlcnRvLm8KK1NPQkpTCTo9IC4uL2NvbW1vbi9hcm0xX2luaXQubworCitnY2NsaWJkaXIgOj0gJChzaGVsbCBkaXJuYW1lIGAkKENDKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZWApCisKK0xEU0NSSVBUID0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC5sZHMKKworSE9TVF9DRkxBR1MgPSAtV2FsbCAtcGVkYW50aWMgLUkkKFRPUERJUikvaW5jbHVkZQorCithbGw6ICQoTElCKQorCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJF4KKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvbWFsaW5kaS9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL21hbGluZGkvYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjM2MWU5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL21hbGluZGkvYm9hcmQuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TUEkpIHx8IGRlZmluZWQoQ09ORklHX1NQSSkKK2V4dGVybiB2b2lkIHNwaV9od19pbml0KHZvaWQpOworI2VuZGlmCisKKy8qIEluaXRpYWxpemUgU0RSQU0sIEFSTSBhbmQgYnVzIENMT0NLIGFuZCBpbnN0cnVjdGlvbiBjYWNoZSAqLwordm9pZCBic3BfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU0RSQU0sCisJCS5iYXNlYWRkciA9IFBIWVNfU0RSQU0sCisJCS5zaXplID0gUEhZU19TRFJBTV9TSVpFLAorCisJCS50cmFzID0gMHg2LAorCQkudHJjID0gMHg5LAorCQkudHJjZCA9IDB4MywKKwkJLnRycCA9IDB4MywKKwkJLmNsID0gMHgzLAorCisJCS5tZW1jaGlwX2R0eXBlID0gMHgxLAorCQkudHdyID0gMHgyLAorCQkuYnVzd2lkdGggPSAweDEsCisJCS50bXJkID0gMHgyLAorCQkudHJyZCA9IDB4MiwKKworCQkucmVmY250ID0gMHgwNDA4LAorCQkucHdyb25jbnQgPSAweDAwNDIsCisJfTsKKworCVNvQ19wbGxfY2ZnKENMS19NT0RFX1NZTkMsIDIgKiBDRkdfSFpfQ0xPQ0ssIDApOworCVNvQ19jc19jZmcoRVhQX0NTU0QwLCBDU19FTkFCTEUsICZjZmcpOworCisJaWNhY2hlX2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBuYW5kX2h3X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NSQU0sCisJCS5idXN3aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWR3aWR0aCA9IDB4OSwKKwkJLmFkZHJzZXR1cCA9IDB4NSwKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTUDEsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQlJfR1BJTywgR1BJT19UWVBFX0lOUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0VfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7CisJU29DX2dwaW9fY2ZnKENGR19OQU5EX0NMRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQUxFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworfQorCitzdGF0aWMgdm9pZCBub3JfaHdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKworCQkuYmFzZWFkZHIgPSBQSFlTX0ZMQVNIMiwKKwkJLnNpemUgPSA0ICogMTAyNCAqIDEwMjQsCisKKwkJLmJ1c3dpZHRoID0gQ1NfQlVTV0lEVEhfMTZCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWR3aWR0aCA9IDB4OSwKKwkJLmFkZHJzZXR1cCA9IDB4NywKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTU0QxLCBDU19FTkFCTEUsICZjZmcpOworLy8JU29DX2NzX2NmZyhFWFBfQ1NQMCwgQ1NfRU5BQkxFLCAmY2ZnKTsKK30KKworc3RhdGljIHZvaWQgZWVwcm9tX2h3X2luaXQodm9pZCkKK3sKKyNpZiAwCisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCQkuYnVzX3dpZHRoID0gQ1NfQlVTV0lEVEhfOEJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZF93aWR0aCA9IDB4NSwKKwkJLmFkZHJfc2V0dXAgPSAweDQsCisJCS5kcW1fbW9kZSA9IENTX0RRTU1PREVfTk9STUFMLAorCX07CisKKwlTb0NfY3NfY2ZnKEVYUF9DU0JPT1QsIENTX0VOQUJMRSwgJmNmZyk7CisjZW5kaWYKK30KKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBhcmNoIG51bWJlciBvZiBNaW5kc3BlZWQgQ29tY2VydG8gKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX004MjVYWDsKKworCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gTElOVVhfQk9PVFBBUkFNX0FERFI7CisKKwluYW5kX2h3X2luaXQoKTsKKwlub3JfaHdfaW5pdCgpOworCWVlcHJvbV9od19pbml0KCk7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TUEkpIHx8IGRlZmluZWQoQ09ORklHX1NQSSkKKwlzcGlfaHdfaW5pdCgpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU07CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIHZvaWQgcGFydGl0aW9uX2ZsYXNoKHZvaWQpOworCitpbnQgbWlzY19pbml0X3Iodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEJPQVJEX0xBVEVfSU5JVAoraW50IGJvYXJkX2xhdGVfaW5pdCh2b2lkKQoreworCXByaW50ZigiUmVzZXJ2ZSBNU1AgbWVtb3J5XG4iKTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgKz0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAtPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL21hbGluZGkvY29uZmlnLm1rIGIvYm9hcmQvbWluZHNwZWVkL21hbGluZGkvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTNjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvbWFsaW5kaS9jb25maWcubWsKQEAgLTAsMCArMSw0IEBACisjCisjCisKK1RFWFRfQkFTRSA9IDB4MDdFMDAwMDAJIyAxMjZNaUIKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9tYWxpbmRpL3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvbWFsaW5kaS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNTE2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvbWFsaW5kaS91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCA6CisJeworCQljcHUvYXJtOTIwdC9zdGFydC5vICgudGV4dCkKKworCQlfX2FybTFfaW5pdF9zdGFydCA9IC47CisJCWJvYXJkL21pbmRzcGVlZC9jb21tb24vYXJtMV9pbml0Lm8gKC50ZXh0KQorCQlfX2FybTFfaW5pdF9lbmQgPSAuOworCisJCSooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL21lZ2Ftb21iYXNhNTE1XzI1Nk0vTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvbWVnYW1vbWJhc2E1MTVfMjU2TS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjY4ZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL21lZ2Ftb21iYXNhNTE1XzI1Nk0vTWFrZWZpbGUKQEAgLTAsMCArMSw1NSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSBib2FyZC5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9hbTI5bHYwNDBiLm8gLi4vY29tbW9uL2FtbHY2NDB1Lm9cCisJCS4uL2NvbW1vbi9uYW5kLm8gLi4vY29tbW9uL2NtZF9ib290Y29tY2VydG8ubworU09CSlMJOj0gLi4vY29tbW9uL2FybTFfaW5pdC5vCisKK2djY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKKworTERTQ1JJUFQgPSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworCitIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCisKK2FsbDogJChMSUIpCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkXgorCitib2FyZC5vOiBib2FyZC5jCisJJChDQykgJChDRkxBR1MpIC1mcGljIC1jIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9tZWdhbW9tYmFzYTUxNV8yNTZNL2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvbWVnYW1vbWJhc2E1MTVfMjU2TS9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OWFjZDEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvbWVnYW1vbWJhc2E1MTVfMjU2TS9ib2FyZC5jCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfU1BJKQorZXh0ZXJuIHZvaWQgc3BpX2h3X2luaXQodm9pZCk7CisjZW5kaWYKKworLyogSW5pdGlhbGl6ZSBTRFJBTSwgQVJNIGFuZCBidXMgQ0xPQ0sgYW5kIGluc3RydWN0aW9uIGNhY2hlICovCit2b2lkIGJzcF9pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TRFJBTSwKKworCQkudHJhcyA9IDB4NiwKKwkJLnRyYyA9IDB4OSwKKwkJLnRyY2QgPSAweDMsCisJCS50cnAgPSAweDMsCisJCS5jbCA9IDB4MywKKworCQkubWVtY2hpcF9kdHlwZSA9IDB4MSwKKwkJLnR3ciA9IDB4MiwKKwkJLmJ1c3dpZHRoID0gMHgxLAorCQkudG1yZCA9IDB4MiwKKwkJLnRycmQgPSAweDIsCisKKwkJLnJlZmNudCA9IDB4MDQxMSwKKwkJLnB3cm9uY250ID0gMHgzNDE1LAorCX07CisKKwlTb0NfcGxsX2NmZyhDTEtfTU9ERV9TWU5DLCAyICogQ0ZHX0haX0NMT0NLLCAwKTsKKworCWNmZy5iYXNlYWRkciA9IFBIWVNfU0RSQU07CisJY2ZnLnNpemUgPSBQSFlTX1NEUkFNX1NJWkU7CisKKwlTb0NfY3NfY2ZnKEVYUF9DU1NEMCwgQ1NfRU5BQkxFLCAmY2ZnKTsKKworCWNmZy5iYXNlYWRkciA9IFBIWVNfU0RSQU0xOworCWNmZy5zaXplID0gUEhZU19TRFJBTTFfU0laRTsKKworCVNvQ19jc19jZmcoU0RSX0NTU0QwLCBDU19FTkFCTEUsICZjZmcpOworCQorCVNvQ19tZW1fZGl2aWRlcl9jZmcoUEhZU19TRFJBTTEsIEJFTExPV19NRU1fU0RDMCk7CisJU29DX2hpZ2hfbWVtX2NmZyhFWFBfQ1NTRDApOworCisJaWNhY2hlX2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBuYW5kX2h3X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NSQU0sCisJCS5idXN3aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWR3aWR0aCA9IDB4OSwKKwkJLmFkZHJzZXR1cCA9IDB4NSwKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTUDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQlJfR1BJTywgR1BJT19UWVBFX0lOUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0VfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7CisJU29DX2dwaW9fY2ZnKENGR19OQU5EX0NMRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQUxFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworfQorCitzdGF0aWMgdm9pZCBub3JfaHdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKworCQkuYmFzZWFkZHIgPSBQSFlTX0ZMQVNIMiwKKwkJLnNpemUgPSA4ICogMTAyNCAqIDEwMjQsCisKKwkJLmJ1c3dpZHRoID0gQ1NfQlVTV0lEVEhfMTZCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWR3aWR0aCA9IDB4OSwKKwkJLmFkZHJzZXR1cCA9IDB4NywKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTU0QxLCBDU19FTkFCTEUsICZjZmcpOworCisJU29DX2lvY3RybF9jZmcoSU9DVFJMX0VYUEEyMV9BMjIsIDEpOworfQorCitzdGF0aWMgdm9pZCBlZXByb21faHdfaW5pdCh2b2lkKQoreworI2lmIDAKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NSQU0sCisJCS5idXNfd2lkdGggPSBDU19CVVNXSURUSF84QklULAorCQkubGV2ZWwgPSBDU19BQ1RJVkVfTE9XLAorCQkuY21kX3dpZHRoID0gMHg1LAorCQkuYWRkcl9zZXR1cCA9IDB4NCwKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTQk9PVCwgQ1NfRU5BQkxFLCAmY2ZnKTsKKyNlbmRpZgorfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCS8qIGFyY2ggbnVtYmVyIG9mIE1pbmRzcGVlZCBDb21jZXJ0byAqLworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfTTgyNVhYOworCisJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBMSU5VWF9CT09UUEFSQU1fQUREUjsKKworCW5hbmRfaHdfaW5pdCgpOworCW5vcl9od19pbml0KCk7CisJZWVwcm9tX2h3X2luaXQoKTsKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfU1BJKQorCXNwaV9od19pbml0KCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fU0laRTsKKworCWdkLT5iZC0+YmlfZHJhbVsxXS5zdGFydCA9IFBIWVNfU0RSQU0xOworCWdkLT5iZC0+YmlfZHJhbVsxXS5zaXplID0gUEhZU19TRFJBTTFfU0laRTsKKworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCBwYXJ0aXRpb25fZmxhc2godm9pZCk7CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXJldHVybiAwOworfQorCisjaWZkZWYgQk9BUkRfTEFURV9JTklUCitpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCit7CisJcHJpbnRmKCJSZXNlcnZlIE1TUCBtZW1vcnlcbiIpOworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCArPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplIC09IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvbWVnYW1vbWJhc2E1MTVfMjU2TS9jb25maWcubWsgYi9ib2FyZC9taW5kc3BlZWQvbWVnYW1vbWJhc2E1MTVfMjU2TS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhM2M0MAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9tZWdhbW9tYmFzYTUxNV8yNTZNL2NvbmZpZy5tawpAQCAtMCwwICsxLDQgQEAKKyMKKyMKKworVEVYVF9CQVNFID0gMHgwN0UwMDAwMAkjIDEyNk1pQgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL21lZ2Ftb21iYXNhNTE1XzI1Nk0vdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC9tZWdhbW9tYmFzYTUxNV8yNTZNL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1MTY1YQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9tZWdhbW9tYmFzYTUxNV8yNTZNL3UtYm9vdC5sZHMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCisJLiA9IEFMSUdOKDQpOworCS50ZXh0IDoKKwl7CisJCWNwdS9hcm05MjB0L3N0YXJ0Lm8gKC50ZXh0KQorCisJCV9fYXJtMV9pbml0X3N0YXJ0ID0gLjsKKwkJYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9hcm0xX2luaXQubyAoLnRleHQpCisJCV9fYXJtMV9pbml0X2VuZCA9IC47CisKKwkJKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvbWVnYW1vbWJhc2E1MTVfc2RjMS9NYWtlZmlsZSBiL2JvYXJkL21pbmRzcGVlZC9tZWdhbW9tYmFzYTUxNV9zZGMxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjhmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvbWVnYW1vbWJhc2E1MTVfc2RjMS9NYWtlZmlsZQpAQCAtMCwwICsxLDU1IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChCT0FSRCkuYQorCitPQkpTCTo9IGJvYXJkLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL2FtMjlsdjA0MGIubyAuLi9jb21tb24vYW1sdjY0MHUub1wKKwkJLi4vY29tbW9uL25hbmQubyAuLi9jb21tb24vY21kX2Jvb3Rjb21jZXJ0by5vCitTT0JKUwk6PSAuLi9jb21tb24vYXJtMV9pbml0Lm8KKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworYWxsOiAkKExJQikKKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICReCisKK2JvYXJkLm86IGJvYXJkLmMKKwkkKENDKSAkKENGTEFHUykgLWZwaWMgLWMgLW8gJEAgJDwKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisKK3NpbmNsdWRlIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL21lZ2Ftb21iYXNhNTE1X3NkYzEvYm9hcmQuYyBiL2JvYXJkL21pbmRzcGVlZC9tZWdhbW9tYmFzYTUxNV9zZGMxL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4NTEzMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9tZWdhbW9tYmFzYTUxNV9zZGMxL2JvYXJkLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYnNwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19TUEkpCitleHRlcm4gdm9pZCBzcGlfaHdfaW5pdCh2b2lkKTsKKyNlbmRpZgorCisvKiBJbml0aWFsaXplIFNEUkFNLCBBUk0gYW5kIGJ1cyBDTE9DSyBhbmQgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KK3ZvaWQgYnNwX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NEUkFNLAorCQkuYmFzZWFkZHIgPSBQSFlTX1NEUkFNLAorCQkuc2l6ZSA9IFBIWVNfU0RSQU1fU0laRSwKKworCQkudHJhcyA9IDB4NiwKKwkJLnRyYyA9IDB4OSwKKwkJLnRyY2QgPSAweDMsCisJCS50cnAgPSAweDMsCisJCS5jbCA9IDB4MywKKworCQkubWVtY2hpcF9kdHlwZSA9IDB4MSwKKwkJLnR3ciA9IDB4MiwKKwkJLmJ1c3dpZHRoID0gMHgxLAorCQkudG1yZCA9IDB4MiwKKwkJLnRycmQgPSAweDIsCisKKwkJLnJlZmNudCA9IDB4MDQxMSwKKwkJLnB3cm9uY250ID0gMHgzNDE1LAorCX07CisKKwlTb0NfcGxsX2NmZyhDTEtfTU9ERV9TWU5DLCAyICogQ0ZHX0haX0NMT0NLLCAwKTsKKworCVNvQ19jc19jZmcoU0RSX0NTU0QwLCBDU19FTkFCTEUsICZjZmcpOworCQorCVNvQ19tZW1fZGl2aWRlcl9jZmcoMHg4MDAwMDAwMCwgQkVMTE9XX01FTV9TREMxKTsKKwlTb0NfaGlnaF9tZW1fY2ZnKFNEUl9DU1NEMCk7CisKKwlpY2FjaGVfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfaHdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKwkJLmJ1c3dpZHRoID0gQ1NfQlVTV0lEVEhfOEJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg1LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NQMCwgQ1NfRU5BQkxFLCAmY2ZnKTsKKworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9CUl9HUElPLCBHUElPX1RZUEVfSU5QVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9DRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0xFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9BTEVfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vcl9od19pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCisJCS5iYXNlYWRkciA9IFBIWVNfRkxBU0gyLAorCQkuc2l6ZSA9IDggKiAxMDI0ICogMTAyNCwKKworCQkuYnVzd2lkdGggPSBDU19CVVNXSURUSF8xNkJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg3LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NTRDEsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfaW9jdHJsX2NmZyhJT0NUUkxfRVhQQTIxX0EyMiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVlcHJvbV9od19pbml0KHZvaWQpCit7CisjaWYgMAorCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKwkJLmJ1c193aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWRfd2lkdGggPSAweDUsCisJCS5hZGRyX3NldHVwID0gMHg0LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NCT09ULCBDU19FTkFCTEUsICZjZmcpOworI2VuZGlmCit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisJbmFuZF9od19pbml0KCk7CisJbm9yX2h3X2luaXQoKTsKKwllZXByb21faHdfaW5pdCgpOworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19TUEkpCisJc3BpX2h3X2luaXQoKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV9TSVpFOworCisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkIHBhcnRpdGlvbl9mbGFzaCh2b2lkKTsKKworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBCT0FSRF9MQVRFX0lOSVQKK2ludCBib2FyZF9sYXRlX2luaXQodm9pZCkKK3sKKwlwcmludGYoIlJlc2VydmUgTVNQIG1lbW9yeVxuIik7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ICs9IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgLT0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9tZWdhbW9tYmFzYTUxNV9zZGMxL2NvbmZpZy5tayBiL2JvYXJkL21pbmRzcGVlZC9tZWdhbW9tYmFzYTUxNV9zZGMxL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWEzYzQwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL21lZ2Ftb21iYXNhNTE1X3NkYzEvY29uZmlnLm1rCkBAIC0wLDAgKzEsNCBAQAorIworIworCitURVhUX0JBU0UgPSAweDA3RTAwMDAwCSMgMTI2TWlCCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvbWVnYW1vbWJhc2E1MTVfc2RjMS91LWJvb3QubGRzIGIvYm9hcmQvbWluZHNwZWVkL21lZ2Ftb21iYXNhNTE1X3NkYzEvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjUxNjVhCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL21lZ2Ftb21iYXNhNTE1X3NkYzEvdS1ib290LmxkcwpAQCAtMCwwICsxLDU3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgOgorCXsKKwkJY3B1L2FybTkyMHQvc3RhcnQubyAoLnRleHQpCisKKwkJX19hcm0xX2luaXRfc3RhcnQgPSAuOworCQlib2FyZC9taW5kc3BlZWQvY29tbW9uL2FybTFfaW5pdC5vICgudGV4dCkKKwkJX19hcm0xX2luaXRfZW5kID0gLjsKKworCQkqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9tb2NhL01ha2VmaWxlIGIvYm9hcmQvbWluZHNwZWVkL21vY2EvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ1YzdhZAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9tb2NhL01ha2VmaWxlCkBAIC0wLDAgKzEsNjEgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworaWZuZXEgKCQoT0JKVFJFRSksJChTUkNUUkVFKSkKKyQoc2hlbGwgbWtkaXIgLXAgJChvYmopLi4vY29tbW9uKQorZW5kaWYKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBib2FyZC5vIHJlc2V0Lm8gLi4vY29tbW9uL2FtMjlsdjA0MGIubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vbmFuZC5vIC4uL2NvbW1vbi9pMmMubworU09CSlMJOj0gCisKK2djY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKKworTE9BRF9BRERSID0gMHgxMDQwMDAwMAorTERTQ1JJUFQgPSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworCitIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCisKK09CSlMgICAgOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKK2FsbDoJJChMSUIpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCisKK2JvYXJkLm86IGJvYXJkLmMKKwkkKENDKSAkKENGTEFHUykgLWZwaWMgLWMgLW8gJEAgJDwKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKSAKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9tb2NhL2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvbW9jYS9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZDc1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvbW9jYS9ib2FyZC5jCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYnNwLmg+CitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmZGVmIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCit2b2lkIGJvYXJkX21hcChmbGFzaF9pbmZvX3QgKmluZm8sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoKGFkZHIgPj0gKFBIWVNfRkxBU0gxICsgMHg4MDAwMDApKSAmJiAoYWRkciA8IChQSFlTX0ZMQVNIMSArIDB4MTAwMDAwMCkpKSB7CisJCVNvQ19ncGlvX3NldF8wKFNvQ19ncGlvX21hc2soNSkpOworCX0gZWxzZSB7CisJCVNvQ19ncGlvX3NldF8xKFNvQ19ncGlvX21hc2soNSkpOworCX0KK30KKyNlbmRpZgorCit1MzIgZ2V0X2Rkcl9zaXplKHZvaWQpCit7CisJcmV0dXJuIFBIWVNfU0RSQU1fU0laRTsKK30KKworc3RhdGljIHZvaWQgbm9yX2h3X2luaXQodm9pZCkKK3sKKwkvKiBzZXQgR1BJTzUgYXMgb3V0cHV0ICovCisJU29DX2dwaW9fY2ZnKDUsIEdQSU9fVFlQRV9PVVRQVVQpOworCisJLyogU2VsZWN0IHVwcGVyIDhNaUIgb2YgZmxhc2ggZGV2aWNlICovCisJU29DX2dwaW9fc2V0XzEoU29DX2dwaW9fbWFzayg1KSk7CisKKyNpZmRlZiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCSoodm9sYXRpbGUgdTMyICopRVhfQ1MwX1NFR19SRUcgPSAweDdGRjsKKyNlbHNlCisJKih2b2xhdGlsZSB1MzIgKilFWF9DUzBfU0VHX1JFRyA9IDB4M0ZGOworI2VuZGlmCisKKyAgICAgICAgLyogYWRqdXN0IEVYUCBidXMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKilFWF9DTE9DS19ESVZfUkVHID0gMHg1OworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUVYX0NTMF9UTUcxX1JFRyA9IDB4MDMwMzQwMDc7CisgICAgICAgICoodm9sYXRpbGUgdTMyICopRVhfQ1MwX1RNRzJfUkVHID0gMHgwNDA0MDUwMjsKKworfQorCit2b2lkIGJzcF9pbml0KHZvaWQpCit7CisJU29DX0NoZWNrX0RldmljZSgpOworCVNvQ19BUEJfc2V0dXAoKTsKKwlTb0NfQUhCX3NldHVwKCk7CisJU29DX0FSQU1fc2V0dXAoKTsKKworCVNvQ19QTExfaW5pdCgpOworCisJaWNhY2hlX2VuYWJsZSgpOworCVNvQ19tZW1faW5pdChCT0FSRF9DRkdfTU9DQSk7Cit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisgICAgICAgIHUzMiBpLCBsZWRfbWFzazsKKyAgICAKKwlub3JfaHdfaW5pdCgpOworCisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisgICAgICAgIC8qIGZvcmNlIFdBTiBTZWxlY3QgKEdQSU82KSB0byBHaWdFIFBIWSwgbm90IE1vQ0EgKi8KKwlTb0NfZ3Bpb19jZmcoNiwgR1BJT19UWVBFX09VVFBVVCk7CisJU29DX2dwaW9fc2V0XzEoU29DX2dwaW9fbWFzayg2KSk7CisgICAgICAgIAorICAgICAgICAvKiBjb25maWd1cmUgTW9DQSBQSFkgcmVzZXQgbGluZXMgZm9yIGFzIEdQSU8gb3V0cHV0cywgaG9sZCBpbiByZXNldCAqLworICAgICAgIAlTb0NfZ3Bpb19jZmcoMjIsIEdQSU9fVFlQRV9PVVRQVVQpOworICAgICAgIAlTb0NfZ3Bpb19jZmcoMjMsIEdQSU9fVFlQRV9PVVRQVVQpOworICAgICAgICBTb0NfZ3Bpb19zZXRfMChTb0NfZ3Bpb19tYXNrKDIzKSB8IFNvQ19ncGlvX21hc2soMjIpKTsKKyAgICAgICAgCisgICAgICAgIC8qIGZvcmNlIGV4dGVybmFsIHJlc2V0IHZpYSBHUElPMTcgZm9yIDEwMG1zZWMgKi8KKyAgICAgICAJU29DX2dwaW9fY2ZnKDE3LCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19zZXRfMShTb0NfZ3Bpb19tYXNrKDE3KSk7CisgICAgICAgIHVkZWxheSgxMCk7CisJU29DX2dwaW9fc2V0XzAoU29DX2dwaW9fbWFzaygxNykpOworICAgICAgICB1ZGVsYXkoMTAwKjEwMDApOworCVNvQ19ncGlvX3NldF8xKFNvQ19ncGlvX21hc2soMTcpKTsKKyAgICAgICAgdWRlbGF5KDEwMCoxMDAwKTsKKworCS8qIGVuYWJsZSBJMkMgaW50ZXJmYWNlICovCisJd2hpbGUgKDEpCisJeworCSAgIHUzMiB0ZW1wOworICAgCSAgIHRlbXAgPSAqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMX1JFRyB8IEdQSU9fSU9DVFJMX0kyQzsgCQkvLyBlbmFibGUgSTJDIGJ1cworICAgCSAgICoodm9sYXRpbGUgdTMyICopR1BJT19MT0NLX1JFRyA9IDB4NTU1NTU1NTU7IAkJCS8vIHJlbW92ZSBsb2NrCisgICAJICAgKih2b2xhdGlsZSB1MzIgKilHUElPX0lPQ1RSTF9SRUcgPSB0ZW1wOwkJCQkvLyB3cml0ZSB0byBjdHJsIHJlZworICAgCSAgIGlmICgqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMX1JFRyA9PSB0ZW1wKQorCQkgICBicmVhazsKKwl9CisKKyAgICAgICAgLyogY29uZmlndXJlIFdQUyBhbmQgY29uZmlnLXJlc2V0IGJ1dHRvbnMgYXMgaW5wdXRzICovCisgICAgICAgIFNvQ19ncGlvX2NmZygzLCBHUElPX1RZUEVfSU5QVVQpOworICAgICAgICBTb0NfZ3Bpb19jZmcoNCwgR1BJT19UWVBFX0lOUFVUKTsKKworICAgICAgICAvKiBjb25maWd1cmUgR1BJTy1kcml2ZW4gTEVEcyBhcyBvdXRwdXRzLCBmbGFzaCB0aGVtICovCisgICAgICAgCVNvQ19ncGlvX2NmZygyOSwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgCVNvQ19ncGlvX2NmZygzMCwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgCVNvQ19ncGlvX2NmZygxNSwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgCVNvQ19ncGlvX2NmZygxNiwgR1BJT19UWVBFX09VVFBVVCk7CisgICAgICAgIGxlZF9tYXNrID0gU29DX2dwaW9fbWFzaygyOSkgfCBTb0NfZ3Bpb19tYXNrKDMwKSB8IFNvQ19ncGlvX21hc2soMTUpIHwgU29DX2dwaW9fbWFzaygxNik7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSUyKSB7CisgICAgICAgICAgICAgICAgU29DX2dwaW9fc2V0XzEobGVkX21hc2spOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTb0NfZ3Bpb19zZXRfMChsZWRfbWFzayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1ZGVsYXkoMTAwKjEwMDApOworICAgICAgICB9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU07CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBnZXRfZGRyX3NpemUoKTsKKworCXJldHVybiAwOworfQorCitpbnQgbWlzY19pbml0X3Iodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEJPQVJEX0xBVEVfSU5JVAoraW50IGJvYXJkX2xhdGVfaW5pdCh2b2lkKQoreworI2lmZGVmIEREUl9UUkFJTklOR19EQkcKKwl1OCB3cl9kcXMgPSAwOyAKKwl1OCBkcXNfb3V0ID0gMDsKKwl1OCBkcXNfZGVsYXkwID0gMDsKKwl1OCBkcXNfZGVsYXkxID0gMDsKKwl1OCBkcXNfZGVsYXkyID0gMDsKKwl1OCBkcXNfZGVsYXkzID0gMDsKKyNlbmRpZgorCisJcHJpbnRmKCJSZXNlcnZlIE1TUCBtZW1vcnlcbiIpOworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCArPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplIC09IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCisjaWZkZWYgRERSX1RSQUlOSU5HX0RCRworCXdyX2RxcyA9IERFTkFMSV9XUl9EUVM7IAorCWRxc19vdXQgPSBERU5BTElfRFFTX09VVDsKKwlkcXNfZGVsYXkwID0gREVOQUxJX0RRU19ERUxBWTA7CisJZHFzX2RlbGF5MSA9IERFTkFMSV9EUVNfREVMQVkxOworCWRxc19kZWxheTIgPSBERU5BTElfRFFTX0RFTEFZMjsKKwlkcXNfZGVsYXkzID0gREVOQUxJX0RRU19ERUxBWTM7CisJcHJpbnRmKCJERFIgVHJhaW5pbmcgOiAiKTsKKwlwcmludGYoIndyX2RxcyAweCV4IGRxc19vdXQgMHgleCBkZWxheTAgMHgleCBkZWxheTEgMHgleCBkZWxheTIgMHgleCBkZWxheTMgMHgleFxuIiwgd3JfZHFzLGRxc19vdXQsZHFzX2RlbGF5MCxkcXNfZGVsYXkxLGRxc19kZWxheTIsZHFzX2RlbGF5Myk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9tb2NhL2NvbmZpZy5tayBiL2JvYXJkL21pbmRzcGVlZC9tb2NhL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQxZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL21vY2EvY29uZmlnLm1rCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IDEwMDAnODAwMCwKKyMgZW50cnkgMTAwMCc4MDAwIChtZW0gYmFzZSArIHJlc2VydmVkKQorIworIyBXZSBsb2FkIG91cnNlbGYgdG8gaW50ZXJuYWwgUkFNIGF0IDIwMDEnMjAwMAorIyBDaGVjayBtYXAgZmlsZSB3aGVuIGNoYW5naW5nIFRFWFRfQkFTRS4KKyMgRXZlcnl0aGluZyBoYXMgZml0IGludG8gMTkya0IgaW50ZXJuYWwgU1JBTSEKKyMKKworIyBYWFggVEVYVF9CQVNFID0gMHgyMDAxMjAwMAorVEVYVF9CQVNFID0gMHg4MDEwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL21vY2EvcmVzZXQuYyBiL2JvYXJkL21pbmRzcGVlZC9tb2NhL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MjgzMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9tb2NhL3Jlc2V0LmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JpdHMuaD4KKworI2RlZmluZSBXQU5fUEhZX0JJVAkwCisjZGVmaW5lIExBTl9QSFlfQklUCTEKK3N0YXRpYyB1OCB3YW5sYW5fcmVzZXQ9MDsKKworLyoKKwlPbiB0aGUgcGFja2V0LWlhZCBib2FyZCwgdGhlIGxhbiBhbmQgdGhlIHdhbiBwaHkgYXJlIHRha2VuIG91dCBvZiByZXNldCBieSB0aGUgc2FtZSBHUElPIHBpbiAoMTcpCisqLworCit2b2lkIHJlc2V0X2VtYWMwX3BoeSh1MzIgZW5hYmxlKQoreworCWlmKGVuYWJsZSkKKwl7CS8vd2FudCB0byB0YWtlIHRoZSBwaHkgb3V0IG9mIHJlc2V0CisJCXdhbmxhbl9yZXNldHw9TEFOX1BIWV9CSVQ7CisJCSoodm9sYXRpbGUgdTMyKikgKEdQSU9fT0VfUkVHKSB8PSBCSVQxNzsKKwkJKih2b2xhdGlsZSB1MzIqKShHUElPX09VVFBVVF9SRUcpIHw9IEJJVDE3OworCisJfQorCWVsc2UKKwl7CisJCS8vd2FudCB0byBwdXQgdGhlIHBoeSBpbiByZXNldAorCQl3YW5sYW5fcmVzZXQmPX5MQU5fUEhZX0JJVDsKKwkJaWYod2FubGFuX3Jlc2V0PT0wKQorCQl7CisJCQkqKHZvbGF0aWxlIHUzMiopIChHUElPX09FX1JFRykgfD0gQklUMTc7CisJCQkqKHZvbGF0aWxlIHUzMiopKEdQSU9fT1VUUFVUX1JFRykgJj0gfkJJVDE3OworCQl9CisJfQorCit9CisKK3ZvaWQgcmVzZXRfZW1hYzFfcGh5KHUzMiBlbmFibGUpCit7CisJaWYoZW5hYmxlKQorCXsJLy93YW50IHRvIHRha2UgdGhlIHBoeSBvdXQgb2YgcmVzZXQKKwkJd2FubGFuX3Jlc2V0fD1XQU5fUEhZX0JJVDsKKwkJKih2b2xhdGlsZSB1MzIqKSAoR1BJT19PRV9SRUcpIHw9IEJJVDE3OworCQkqKHZvbGF0aWxlIHUzMiopKEdQSU9fT1VUUFVUX1JFRykgfD0gQklUMTc7CisKKwl9CisJZWxzZQorCXsKKwkJLy93YW50IHRvIHB1dCB0aGUgcGh5IGluIHJlc2V0CisJCXdhbmxhbl9yZXNldCY9fldBTl9QSFlfQklUOworCQlpZih3YW5sYW5fcmVzZXQ9PTApCisJCXsKKwkJCSoodm9sYXRpbGUgdTMyKikgKEdQSU9fT0VfUkVHKSB8PSBCSVQxNzsKKwkJCSoodm9sYXRpbGUgdTMyKikoR1BJT19PVVRQVVRfUkVHKSAmPSB+QklUMTc7CisJCX0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9tb2NhL3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvbW9jYS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NWVhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvbW9jYS91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgICAgICA6CisJeworCSAgY3B1L2FybTExMzYvc3RhcnQubwkoLnRleHQpCisJICAqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKKworCS4gPSAweDBhMDAwMDAwOworCV9fdHJhaW5pbmdfZGF0YV9zdGFydCA9IC47CisKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9uYWlyb2JpL01ha2VmaWxlIGIvYm9hcmQvbWluZHNwZWVkL25haXJvYmkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzZDgzOQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9uYWlyb2JpL01ha2VmaWxlCkBAIC0wLDAgKzEsNTQgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJOj0gYm9hcmQubyAuLi9jb21tb24vYW0yOWx2MDQwYi5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9uYW5kLm8KK1NPQkpTCTo9IAorCitnY2NsaWJkaXIgOj0gJChzaGVsbCBkaXJuYW1lIGAkKENDKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZWApCisKK0xEU0NSSVBUID0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC5sZHMKKworSE9TVF9DRkxBR1MgPSAtV2FsbCAtcGVkYW50aWMgLUkkKFRPUERJUikvaW5jbHVkZQorCithbGw6ICQoTElCKQorCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJF4KKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvbmFpcm9iaS9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL25haXJvYmkvYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2FhOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL25haXJvYmkvYm9hcmQuYwpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TUEkpIHx8IGRlZmluZWQoQ09ORklHX1NQSSkKK2V4dGVybiB2b2lkIHNwaV9od19pbml0KHZvaWQpOworI2VuZGlmCisKKy8qIEluaXRpYWxpemUgU0RSQU0sIEFSTSBhbmQgYnVzIENMT0NLIGFuZCBpbnN0cnVjdGlvbiBjYWNoZSAqLwordm9pZCBic3BfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU0RSQU0sCisJCS5iYXNlYWRkciA9IFBIWVNfU0RSQU0sCisJCS5zaXplID0gUEhZU19TRFJBTV9TSVpFLAorCisJCS50cmFzID0gMHg2LAorCQkudHJjID0gMHg5LAorCQkudHJjZCA9IDB4MywKKwkJLnRycCA9IDB4MywKKwkJLmNsID0gMHgzLAorCisJCS5tZW1jaGlwX2R0eXBlID0gMHgxLAorCQkudHdyID0gMHgyLAorCQkuYnVzd2lkdGggPSAweDEsCisJCS50bXJkID0gMHgyLAorCQkudHJyZCA9IDB4MiwKKworCQkucmVmY250ID0gMHgwNDA4LAorCQkucHdyb25jbnQgPSAweDAwNDIsCisJfTsKKworCVNvQ19wbGxfY2ZnKENMS19NT0RFX0FTWU5DLCAzNzIwMDAwMDAsIENGR19IWl9DTE9DSyk7CisJU29DX2NzX2NmZyhFWFBfQ1NTRDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlpY2FjaGVfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfaHdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKwkJLmJ1c3dpZHRoID0gQ1NfQlVTV0lEVEhfOEJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg1LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NQMCwgQ1NfRU5BQkxFLCAmY2ZnKTsKKworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9CUl9HUElPLCBHUElPX1RZUEVfSU5QVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9DRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0xFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9BTEVfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vcl9od19pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCisJCS5iYXNlYWRkciA9IFBIWVNfRkxBU0gyLAorCQkuc2l6ZSA9IDggKiAxMDI0ICogMTAyNCwKKworCQkuYnVzd2lkdGggPSBDU19CVVNXSURUSF8xNkJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg3LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NTRDEsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfaW9jdHJsX2NmZyhJT0NUUkxfRVhQQTIxX0EyMiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVlcHJvbV9od19pbml0KHZvaWQpCit7CisjaWYgMAorCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKwkJLmJ1c193aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWRfd2lkdGggPSAweDUsCisJCS5hZGRyX3NldHVwID0gMHg0LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NCT09ULCBDU19FTkFCTEUsICZjZmcpOworI2VuZGlmCit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisJbmFuZF9od19pbml0KCk7CisJbm9yX2h3X2luaXQoKTsKKwllZXByb21faHdfaW5pdCgpOworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19TUEkpCisJc3BpX2h3X2luaXQoKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV9TSVpFOworCisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkIHBhcnRpdGlvbl9mbGFzaCh2b2lkKTsKKworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBCT0FSRF9MQVRFX0lOSVQKK2ludCBib2FyZF9sYXRlX2luaXQodm9pZCkKK3sKKwlwcmludGYoIlJlc2VydmUgTVNQIG1lbW9yeVxuIik7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ICs9IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgLT0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL25haXJvYmkvY29uZmlnLm1rIGIvYm9hcmQvbWluZHNwZWVkL25haXJvYmkvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MmRhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvbmFpcm9iaS9jb25maWcubWsKQEAgLTAsMCArMSwxMSBAQAorIworIyBMaW51eC1LZXJuZWwgaXMgZXhwZWN0ZWQgdG8gYmUgYXQgMTAwMCc4MDAwLAorIyBlbnRyeSAxMDAwJzgwMDAgKG1lbSBiYXNlICsgcmVzZXJ2ZWQpCisjCisjIFdlIGxvYWQgb3Vyc2VsZiB0byBpbnRlcm5hbCBSQU0gYXQgMjAwMScyMDAwCisjIENoZWNrIG1hcCBmaWxlIHdoZW4gY2hhbmdpbmcgVEVYVF9CQVNFLgorIyBFdmVyeXRoaW5nIGhhcyBmaXQgaW50byAxOTJrQiBpbnRlcm5hbCBTUkFNIQorIworCisjIFhYWCBURVhUX0JBU0UgPSAweDIwMDEyMDAwCitURVhUX0JBU0UgPSAweDAwMTAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvbmFpcm9iaS91LWJvb3QubGRzIGIvYm9hcmQvbWluZHNwZWVkL25haXJvYmkvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjVhNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL25haXJvYmkvdS1ib290LmxkcwpAQCAtMCwwICsxLDU1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCAgICAgIDoKKwl7CisJICBjcHUvYXJtOTIwdC9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3BhY2tldC1pYWQvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvcGFja2V0LWlhZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ1ZDcyCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3BhY2tldC1pYWQvTWFrZWZpbGUKQEAgLTAsMCArMSw2MiBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCitpZm5lcSAoJChPQkpUUkVFKSwkKFNSQ1RSRUUpKQorJChzaGVsbCBta2RpciAtcCAkKG9iaikuLi9jb21tb24pCitlbmRpZgorCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gYm9hcmQubyByZXNldC5vIC4uL2NvbW1vbi9hbTI5bHYwNDBiLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL25hbmQubyAuLi9jb21tb24vaTJjLm8KK1NPQkpTCTo9IAorCitnY2NsaWJkaXIgOj0gJChzaGVsbCBkaXJuYW1lIGAkKENDKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZWApCisKK0xPQURfQUREUiA9IDB4MTA0MDAwMDAKK0xEU0NSSVBUID0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC5sZHMKKworSE9TVF9DRkxBR1MgPSAtV2FsbCAtcGVkYW50aWMgLUkkKFRPUERJUikvaW5jbHVkZQorCitPQkpTICAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTICAgOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCithbGw6CSQoTElCKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKSAkKFNPQkpTKQorCitib2FyZC5vOiBib2FyZC5jCisJJChDQykgJChDRkxBR1MpIC1mcGljIC1jIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykgCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvcGFja2V0LWlhZC9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL3BhY2tldC1pYWQvYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjAyODg0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3BhY2tldC1pYWQvYm9hcmQuYwpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKyNpZmRlZiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUwordm9pZCBib2FyZF9tYXAoZmxhc2hfaW5mb190ICppbmZvLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKChhZGRyID49IChQSFlTX0ZMQVNIMSArIDB4ODAwMDAwKSkgJiYgKGFkZHIgPCAoUEhZU19GTEFTSDEgKyAweDEwMDAwMDApKSkgeworCQlTb0NfZ3Bpb19zZXRfMChTb0NfZ3Bpb19tYXNrKDUpKTsKKwl9IGVsc2UgeworCQlTb0NfZ3Bpb19zZXRfMShTb0NfZ3Bpb19tYXNrKDUpKTsKKwl9Cit9CisjZW5kaWYKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCitzdGF0aWMgdm9pZCBuYW5kX2h3X2luaXQodm9pZCkKK3sKKwkvKiBzZXQgR1BJTzUgYXMgb3V0cHV0ICovCisJU29DX2dwaW9fY2ZnKDI5LCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoMzAsIEdQSU9fVFlQRV9PVVRQVVQpOworCVNvQ19ncGlvX2NmZygzMSwgR1BJT19UWVBFX09VVFBVVCk7CisKK30KKyNlbmRpZgorCit1MzIgZ2V0X2Rkcl9zaXplKHZvaWQpCit7CisJcmV0dXJuIFBIWVNfU0RSQU1fU0laRTsKK30KKworc3RhdGljIHZvaWQgbm9yX2h3X2luaXQodm9pZCkKK3sKKwkvKiBzZXQgR1BJTzUgYXMgb3V0cHV0ICovCisJU29DX2dwaW9fY2ZnKDUsIEdQSU9fVFlQRV9PVVRQVVQpOworCisJLyogU2VsZWN0IHVwcGVyIDhNaUIgb2YgZmxhc2ggZGV2aWNlICovCisJU29DX2dwaW9fc2V0XzEoU29DX2dwaW9fbWFzayg1KSk7CisKKyNpZmRlZiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCSoodm9sYXRpbGUgdTMyICopRVhfQ1MwX1NFR19SRUcgPSBfX2NwdV90b19sZTMyKDB4N0ZGKTsKKyNlbHNlCisJKih2b2xhdGlsZSB1MzIgKilFWF9DUzBfU0VHX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHgzRkYpOworI2VuZGlmCisKKyAgICAgICAgLyogYWRqdXN0IEVYUCBidXMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KKyAgICAgICAgKih2b2xhdGlsZSB1MzIgKilFWF9DTE9DS19ESVZfUkVHID0gX19jcHVfdG9fbGUzMigweDUpOworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUVYX0NTMF9UTUcxX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHgwMzAzNDAwNyk7CisgICAgICAgICoodm9sYXRpbGUgdTMyICopRVhfQ1MwX1RNRzJfUkVHID0gX19jcHVfdG9fbGUzMigweDA0MDQwNTAyKTsKKworICAgICAgICByZXR1cm47Cit9CisKK3ZvaWQgYnNwX2luaXQodm9pZCkKK3sKKyAgICAgICAvKiBJZiBNQUdJQyBOdW1iZXIgaXMgcHJlc2VudCwgbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgKi8KKyAgICAgICAgaWYoX19sZTY0X3RvX2NwdSgqKHU2NCopKEFSQU1fQkFTRUFERFIrMHg4MDAwKSkgID09IENPTUNFUlRPX1BBUlRfTUFHSUMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisJU29DX0NoZWNrX0RldmljZSgpOworCVNvQ19BUEJfc2V0dXAoKTsKKwlTb0NfQUhCX3NldHVwKCk7CisJU29DX0FSQU1fc2V0dXAoKTsKKworCVNvQ19QTExfaW5pdCgpOworCisJaWNhY2hlX2VuYWJsZSgpOworI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzUwKQorCVNvQ19tZW1faW5pdCg5KTsKKyNlbHNlCisJU29DX21lbV9pbml0KDQpOworI2VuZGlmCisvLwlTb0NfbmFuZF9pbml0KCk7Cit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisgICAgICAgIC8qIENhbGwgbm9yX2h3X2luaXQoKSBvbmx5IHdoZW4gbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGlzIG5vdCBkb25lICovCisgICAgICAgIC8qIElmIE1BR0lDIE51bWJlciBpcyBwcmVzZW50LCBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSAqLworICAgICAgICBpZihfX2xlNjRfdG9fY3B1KCoodTY0KikoQVJBTV9CQVNFQUREUisweDgwMDApKSAgIT0gQ09NQ0VSVE9fUEFSVF9NQUdJQykKKyAgICAgICAgICAgICAgICBub3JfaHdfaW5pdCgpOworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyAgICAgICBuYW5kX2h3X2luaXQoKTsKKyNlbmRpZgorCisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisJLyogZW5hYmxlIEkyQyBpbnRlcmZhY2UgKi8KKwl3aGlsZSAoMSkKKwl7CisJICAgdTMyIHRlbXA7CisgICAJICAgdGVtcCA9ICoodm9sYXRpbGUgdTMyICopR1BJT19JT0NUUkxfUkVHIHwgX19jcHVfdG9fbGUzMihHUElPX0lPQ1RSTF9JMkMpOyAJCS8vIGVuYWJsZSBJMkMgYnVzCisgICAJICAgKih2b2xhdGlsZSB1MzIgKilHUElPX0xPQ0tfUkVHID0gX19jcHVfdG9fbGUzMigweDU1NTU1NTU1KTsgCQkJLy8gcmVtb3ZlIGxvY2sKKyAgIAkgICAqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMX1JFRyA9IHRlbXA7CQkJCS8vIHdyaXRlIHRvIGN0cmwgcmVnCisgICAJICAgaWYgKCoodm9sYXRpbGUgdTMyICopR1BJT19JT0NUUkxfUkVHID09IHRlbXApCisJCSAgIGJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IGdldF9kZHJfc2l6ZSgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXJldHVybiAwOworfQorCisjaWZkZWYgQk9BUkRfTEFURV9JTklUCitpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCit7CisjaWZkZWYgRERSX1RSQUlOSU5HX0RCRworCXU4IHdyX2RxcyA9IDA7IAorCXU4IGRxc19vdXQgPSAwOworCXU4IGRxc19kZWxheTAgPSAwOworCXU4IGRxc19kZWxheTEgPSAwOworCXU4IGRxc19kZWxheTIgPSAwOworCXU4IGRxc19kZWxheTMgPSAwOworI2VuZGlmCisKKwlwcmludGYoIlJlc2VydmUgTVNQIG1lbW9yeVxuIik7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ICs9IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgLT0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisKKyNpZmRlZiBERFJfVFJBSU5JTkdfREJHCisJd3JfZHFzID0gREVOQUxJX1dSX0RRUzsgCisJZHFzX291dCA9IERFTkFMSV9EUVNfT1VUOworCWRxc19kZWxheTAgPSBERU5BTElfRFFTX0RFTEFZMDsKKwlkcXNfZGVsYXkxID0gREVOQUxJX0RRU19ERUxBWTE7CisJZHFzX2RlbGF5MiA9IERFTkFMSV9EUVNfREVMQVkyOworCWRxc19kZWxheTMgPSBERU5BTElfRFFTX0RFTEFZMzsKKworI2lmZGVmIEREUl9UUkFJTklORworCXByaW50ZigiRERSIFRyYWluaW5nIDogIik7CisKKyNpZmRlZiBORVdfRERSX1RSQUlOSU5HCisJcHJpbnRmKCIoTkVXKTogIik7CisjZW5kaWYKKworI2Vsc2UKKwlwcmludGYoIkREUiBkZWZhdWx0IHNldHRpbmdzIDogIik7CisjZW5kaWYKKwlwcmludGYoIndyX2RxcyAweCV4IGRxc19vdXQgMHgleCBkZWxheTAgMHgleCBkZWxheTEgMHgleCBkZWxheTIgMHgleCBkZWxheTMgMHgleFxuIiwgd3JfZHFzLGRxc19vdXQsZHFzX2RlbGF5MCxkcXNfZGVsYXkxLGRxc19kZWxheTIsZHFzX2RlbGF5Myk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9wYWNrZXQtaWFkL2NvbmZpZy5tayBiL2JvYXJkL21pbmRzcGVlZC9wYWNrZXQtaWFkL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQxZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3BhY2tldC1pYWQvY29uZmlnLm1rCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IDEwMDAnODAwMCwKKyMgZW50cnkgMTAwMCc4MDAwIChtZW0gYmFzZSArIHJlc2VydmVkKQorIworIyBXZSBsb2FkIG91cnNlbGYgdG8gaW50ZXJuYWwgUkFNIGF0IDIwMDEnMjAwMAorIyBDaGVjayBtYXAgZmlsZSB3aGVuIGNoYW5naW5nIFRFWFRfQkFTRS4KKyMgRXZlcnl0aGluZyBoYXMgZml0IGludG8gMTkya0IgaW50ZXJuYWwgU1JBTSEKKyMKKworIyBYWFggVEVYVF9CQVNFID0gMHgyMDAxMjAwMAorVEVYVF9CQVNFID0gMHg4MDEwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3BhY2tldC1pYWQvcmVzZXQuYyBiL2JvYXJkL21pbmRzcGVlZC9wYWNrZXQtaWFkL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MjgzMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9wYWNrZXQtaWFkL3Jlc2V0LmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JpdHMuaD4KKworI2RlZmluZSBXQU5fUEhZX0JJVAkwCisjZGVmaW5lIExBTl9QSFlfQklUCTEKK3N0YXRpYyB1OCB3YW5sYW5fcmVzZXQ9MDsKKworLyoKKwlPbiB0aGUgcGFja2V0LWlhZCBib2FyZCwgdGhlIGxhbiBhbmQgdGhlIHdhbiBwaHkgYXJlIHRha2VuIG91dCBvZiByZXNldCBieSB0aGUgc2FtZSBHUElPIHBpbiAoMTcpCisqLworCit2b2lkIHJlc2V0X2VtYWMwX3BoeSh1MzIgZW5hYmxlKQoreworCWlmKGVuYWJsZSkKKwl7CS8vd2FudCB0byB0YWtlIHRoZSBwaHkgb3V0IG9mIHJlc2V0CisJCXdhbmxhbl9yZXNldHw9TEFOX1BIWV9CSVQ7CisJCSoodm9sYXRpbGUgdTMyKikgKEdQSU9fT0VfUkVHKSB8PSBCSVQxNzsKKwkJKih2b2xhdGlsZSB1MzIqKShHUElPX09VVFBVVF9SRUcpIHw9IEJJVDE3OworCisJfQorCWVsc2UKKwl7CisJCS8vd2FudCB0byBwdXQgdGhlIHBoeSBpbiByZXNldAorCQl3YW5sYW5fcmVzZXQmPX5MQU5fUEhZX0JJVDsKKwkJaWYod2FubGFuX3Jlc2V0PT0wKQorCQl7CisJCQkqKHZvbGF0aWxlIHUzMiopIChHUElPX09FX1JFRykgfD0gQklUMTc7CisJCQkqKHZvbGF0aWxlIHUzMiopKEdQSU9fT1VUUFVUX1JFRykgJj0gfkJJVDE3OworCQl9CisJfQorCit9CisKK3ZvaWQgcmVzZXRfZW1hYzFfcGh5KHUzMiBlbmFibGUpCit7CisJaWYoZW5hYmxlKQorCXsJLy93YW50IHRvIHRha2UgdGhlIHBoeSBvdXQgb2YgcmVzZXQKKwkJd2FubGFuX3Jlc2V0fD1XQU5fUEhZX0JJVDsKKwkJKih2b2xhdGlsZSB1MzIqKSAoR1BJT19PRV9SRUcpIHw9IEJJVDE3OworCQkqKHZvbGF0aWxlIHUzMiopKEdQSU9fT1VUUFVUX1JFRykgfD0gQklUMTc7CisKKwl9CisJZWxzZQorCXsKKwkJLy93YW50IHRvIHB1dCB0aGUgcGh5IGluIHJlc2V0CisJCXdhbmxhbl9yZXNldCY9fldBTl9QSFlfQklUOworCQlpZih3YW5sYW5fcmVzZXQ9PTApCisJCXsKKwkJCSoodm9sYXRpbGUgdTMyKikgKEdQSU9fT0VfUkVHKSB8PSBCSVQxNzsKKwkJCSoodm9sYXRpbGUgdTMyKikoR1BJT19PVVRQVVRfUkVHKSAmPSB+QklUMTc7CisJCX0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9wYWNrZXQtaWFkL3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvcGFja2V0LWlhZC91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NWVhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvcGFja2V0LWlhZC91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgICAgICA6CisJeworCSAgY3B1L2FybTExMzYvc3RhcnQubwkoLnRleHQpCisJICAqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKKworCS4gPSAweDBhMDAwMDAwOworCV9fdHJhaW5pbmdfZGF0YV9zdGFydCA9IC47CisKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9yb3V0ZXIvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvcm91dGVyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYThiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvcm91dGVyL01ha2VmaWxlCkBAIC0wLDAgKzEsNTggQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCisKK0NPQkpTCTo9IGJvYXJkLm8gcmVzZXQubyAuLi9jb21tb24vYW0yOWx2MDQwYi5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9uYW5kLm8gLi4vY29tbW9uL2kyYy5vCitTT0JKUwk6PSAKKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMT0FEX0FERFIgPSAweDEwNDAwMDAwCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworT0JKUyAgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUyAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworYWxsOgkkKExJQikKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpIAorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3JvdXRlci9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL3JvdXRlci9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODNkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvcm91dGVyL2JvYXJkLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisjaWZkZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKK3ZvaWQgYm9hcmRfbWFwKGZsYXNoX2luZm9fdCAqaW5mbywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmICgoYWRkciA+PSAoUEhZU19GTEFTSDEgKyAweDgwMDAwMCkpICYmIChhZGRyIDwgKFBIWVNfRkxBU0gxICsgMHgxMDAwMDAwKSkpIHsKKwkJU29DX2dwaW9fc2V0XzAoU29DX2dwaW9fbWFzayg1KSk7CisJfSBlbHNlIHsKKwkJU29DX2dwaW9fc2V0XzEoU29DX2dwaW9fbWFzayg1KSk7CisJfQorfQorI2VuZGlmCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorc3RhdGljIHZvaWQgbmFuZF9od19pbml0KHZvaWQpCit7CisJLyogc2V0IEdQSU81IGFzIG91dHB1dCAqLworCVNvQ19ncGlvX2NmZygyOSwgR1BJT19UWVBFX09VVFBVVCk7CisJU29DX2dwaW9fY2ZnKDMwLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoMzEsIEdQSU9fVFlQRV9PVVRQVVQpOworCit9CisjZW5kaWYKKwordTMyIGdldF9kZHJfc2l6ZSh2b2lkKQoreworCXJldHVybiBQSFlTX1NEUkFNX1NJWkU7Cit9CisKK3N0YXRpYyB2b2lkIG5vcl9od19pbml0KHZvaWQpCit7CisJLyogc2V0IEdQSU81IGFzIG91dHB1dCAqLworCVNvQ19ncGlvX2NmZyg1LCBHUElPX1RZUEVfT1VUUFVUKTsKKworCS8qIFNlbGVjdCB1cHBlciA4TWlCIG9mIGZsYXNoIGRldmljZSAqLworCVNvQ19ncGlvX3NldF8xKFNvQ19ncGlvX21hc2soNSkpOworCisjaWZkZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKwkqKHZvbGF0aWxlIHUzMiAqKUVYX0NTMF9TRUdfUkVHID0gX19jcHVfdG9fbGUzMigweDdGRik7CisjZWxzZQorCSoodm9sYXRpbGUgdTMyICopRVhfQ1MwX1NFR19SRUcgPSBfX2NwdV90b19sZTMyKDB4M0ZGKTsKKyNlbmRpZgorfQorCit2b2lkIGJzcF9pbml0KHZvaWQpCit7CisgICAgICAgIC8qIElmIE1BR0lDIE51bWJlciBpcyBwcmVzZW50LCBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSAqLworICAgICAgICBpZihfX2xlNjRfdG9fY3B1KCoodTY0KikoQVJBTV9CQVNFQUREUisweDgwMDApKSAgPT0gQ09NQ0VSVE9fUEFSVF9NQUdJQykKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKwlTb0NfQ2hlY2tfRGV2aWNlKCk7CisJU29DX0FQQl9zZXR1cCgpOworCVNvQ19BSEJfc2V0dXAoKTsKKwlTb0NfQVJBTV9zZXR1cCgpOworCisJU29DX1BMTF9pbml0KCk7CisKKwlpY2FjaGVfZW5hYmxlKCk7CisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fNTApCisJU29DX21lbV9pbml0KDEwKTsgLyogZm9yIEM1MCAqLworI2Vsc2UKKwlTb0NfbWVtX2luaXQoNSk7IC8qIGZvciBDMTAwICovCisjZW5kaWYKKy8vCVNvQ19uYW5kX2luaXQoKTsKK30KKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKyAgICAgICAgLyogQ2FsbCBub3JfaHdfaW5pdCgpIG9ubHkgd2hlbiBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb24gaXMgbm90IGRvbmUgKi8KKyAgICAgICAgLyogSWYgTUFHSUMgTnVtYmVyIGlzIHByZXNlbnQsIGxvdyBsZXZlbCBpbml0aWFsaXphdGlvbiBpcyBkb25lICovCisgICAgICAgIGlmKF9fbGU2NF90b19jcHUoKih1NjQqKShBUkFNX0JBU0VBRERSKzB4ODAwMCkpICAhPSBDT01DRVJUT19QQVJUX01BR0lDKQorICAgICAgICAgICAgICAgIG5vcl9od19pbml0KCk7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorICAgICAgIG5hbmRfaHdfaW5pdCgpOworI2VuZGlmCisKKwkvKiBhcmNoIG51bWJlciBvZiBNaW5kc3BlZWQgQ29tY2VydG8gKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX004MjVYWDsKKworCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gTElOVVhfQk9PVFBBUkFNX0FERFI7CisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSTJDKQorCS8qIGVuYWJsZSBJMkMgaW50ZXJmYWNlICovCisJd2hpbGUgKDEpCisJeworCSAgIHUzMiB0ZW1wOworICAgCSAgIHRlbXAgPSAqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMX1JFRyB8ICBfX2NwdV90b19sZTMyKEdQSU9fSU9DVFJMX0kyQyk7IAkJLy8gZW5hYmxlIEkyQyBidXMKKyAgIAkgICAqKHZvbGF0aWxlIHUzMiAqKUdQSU9fTE9DS19SRUcgPSAgX19jcHVfdG9fbGUzMigweDU1NTU1NTU1KTsgCQkJLy8gcmVtb3ZlIGxvY2sKKyAgIAkgICAqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMX1JFRyA9IHRlbXA7CQkJCS8vIHdyaXRlIHRvIGN0cmwgcmVnCisgICAJICAgaWYgKCoodm9sYXRpbGUgdTMyICopR1BJT19JT0NUUkxfUkVHID09IHRlbXApCisJCSAgIGJyZWFrOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gZ2V0X2Rkcl9zaXplKCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBCT0FSRF9MQVRFX0lOSVQKK2ludCBib2FyZF9sYXRlX2luaXQodm9pZCkKK3sKKyNpZmRlZiBERFJfVFJBSU5JTkdfREJHCisJdTggd3JfZHFzID0gMDsgCisJdTggZHFzX291dCA9IDA7CisJdTggZHFzX2RlbGF5MCA9IDA7CisJdTggZHFzX2RlbGF5MSA9IDA7CisJdTggZHFzX2RlbGF5MiA9IDA7CisJdTggZHFzX2RlbGF5MyA9IDA7CisjZW5kaWYKKworCXByaW50ZigiUmVzZXJ2ZSBNU1AgbWVtb3J5XG4iKTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgKz0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAtPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRTsKKworI2lmZGVmIEREUl9UUkFJTklOR19EQkcKKwl3cl9kcXMgPSBERU5BTElfV1JfRFFTOyAKKwlkcXNfb3V0ID0gREVOQUxJX0RRU19PVVQ7CisJZHFzX2RlbGF5MCA9IERFTkFMSV9EUVNfREVMQVkwOworCWRxc19kZWxheTEgPSBERU5BTElfRFFTX0RFTEFZMTsKKwlkcXNfZGVsYXkyID0gREVOQUxJX0RRU19ERUxBWTI7CisJZHFzX2RlbGF5MyA9IERFTkFMSV9EUVNfREVMQVkzOworI2lmZGVmIEREUl9UUkFJTklORworCXByaW50ZigiRERSIFRyYWluaW5nIDogIik7CisKKyNpZmRlZiBORVdfRERSX1RSQUlOSU5HCisJcHJpbnRmKCIoTkVXKTogIik7CisjZW5kaWYKKworI2Vsc2UKKwlwcmludGYoIkREUiBkZWZhdWx0IHNldHRpbmdzIDogIik7CisjZW5kaWYJCisJcHJpbnRmKCJ3cl9kcXMgMHgleCBkcXNfb3V0IDB4JXggZGVsYXkwIDB4JXggZGVsYXkxIDB4JXggZGVsYXkyIDB4JXggZGVsYXkzIDB4JXhcbiIsIHdyX2RxcyxkcXNfb3V0LGRxc19kZWxheTAsZHFzX2RlbGF5MSxkcXNfZGVsYXkyLGRxc19kZWxheTMpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3JvdXRlci9jb25maWcubWsgYi9ib2FyZC9taW5kc3BlZWQvcm91dGVyL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQxZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3JvdXRlci9jb25maWcubWsKQEAgLTAsMCArMSwxMSBAQAorIworIyBMaW51eC1LZXJuZWwgaXMgZXhwZWN0ZWQgdG8gYmUgYXQgMTAwMCc4MDAwLAorIyBlbnRyeSAxMDAwJzgwMDAgKG1lbSBiYXNlICsgcmVzZXJ2ZWQpCisjCisjIFdlIGxvYWQgb3Vyc2VsZiB0byBpbnRlcm5hbCBSQU0gYXQgMjAwMScyMDAwCisjIENoZWNrIG1hcCBmaWxlIHdoZW4gY2hhbmdpbmcgVEVYVF9CQVNFLgorIyBFdmVyeXRoaW5nIGhhcyBmaXQgaW50byAxOTJrQiBpbnRlcm5hbCBTUkFNIQorIworCisjIFhYWCBURVhUX0JBU0UgPSAweDIwMDEyMDAwCitURVhUX0JBU0UgPSAweDgwMTAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvcm91dGVyL3Jlc2V0LmMgYi9ib2FyZC9taW5kc3BlZWQvcm91dGVyL3Jlc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1ZDkxNgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9yb3V0ZXIvcmVzZXQuYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogKEMpIENvcHlyaWdodCBNaW5kc3BlZWQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYml0cy5oPgorCisjZGVmaW5lIFdBTl9QSFlfQklUCTAKKyNkZWZpbmUgTEFOX1BIWV9CSVQJMQorc3RhdGljIHU4IHdhbmxhbl9yZXNldD0wOworCisvKgorCU9uIHRoZSByb3V0ZXIgYm9hcmQsIHRoZSBsYW4gYW5kIHRoZSB3YW4gcGh5IGFyZSB0YWtlbiBvdXQgb2YgcmVzZXQgYnkgdGhlIHNhbWUgR1BJTyBwaW4gKDE3KQorKi8KKwordm9pZCByZXNldF9lbWFjMF9waHkodTMyIGVuYWJsZSkKK3sKKwlpZihlbmFibGUpCisJewkvL3dhbnQgdG8gdGFrZSB0aGUgcGh5IG91dCBvZiByZXNldAorCQl3YW5sYW5fcmVzZXR8PUxBTl9QSFlfQklUOworCQkqKHZvbGF0aWxlIHUzMiopIChHUElPX09FX1JFRykgfD0gX19jcHVfdG9fbGUzMihCSVQxNyk7CisJCSoodm9sYXRpbGUgdTMyKikoR1BJT19PVVRQVVRfUkVHKSB8PSBfX2NwdV90b19sZTMyKEJJVDE3KTsKKworCX0KKwllbHNlCisJeworCQkvL3dhbnQgdG8gcHV0IHRoZSBwaHkgaW4gcmVzZXQKKwkJd2FubGFuX3Jlc2V0Jj1+TEFOX1BIWV9CSVQ7CisJCWlmKHdhbmxhbl9yZXNldD09MCkKKwkJeworCQkJKih2b2xhdGlsZSB1MzIqKSAoR1BJT19PRV9SRUcpIHw9IF9fY3B1X3RvX2xlMzIoQklUMTcpOworCQkJKih2b2xhdGlsZSB1MzIqKShHUElPX09VVFBVVF9SRUcpICY9IF9fY3B1X3RvX2xlMzIofkJJVDE3KTsKKwkJfQorCX0KKworfQorCit2b2lkIHJlc2V0X2VtYWMxX3BoeSh1MzIgZW5hYmxlKQoreworCWlmKGVuYWJsZSkKKwl7CS8vd2FudCB0byB0YWtlIHRoZSBwaHkgb3V0IG9mIHJlc2V0CisJCXdhbmxhbl9yZXNldHw9V0FOX1BIWV9CSVQ7CisJCSoodm9sYXRpbGUgdTMyKikgKEdQSU9fT0VfUkVHKSB8PSBfX2NwdV90b19sZTMyKEJJVDE3KTsKKwkJKih2b2xhdGlsZSB1MzIqKShHUElPX09VVFBVVF9SRUcpIHw9IF9fY3B1X3RvX2xlMzIoQklUMTcpOworCisJfQorCWVsc2UKKwl7CisJCS8vd2FudCB0byBwdXQgdGhlIHBoeSBpbiByZXNldAorCQl3YW5sYW5fcmVzZXQmPX5XQU5fUEhZX0JJVDsKKwkJaWYod2FubGFuX3Jlc2V0PT0wKQorCQl7CisJCQkqKHZvbGF0aWxlIHUzMiopIChHUElPX09FX1JFRykgfD0gX19jcHVfdG9fbGUzMihCSVQxNyk7CisJCQkqKHZvbGF0aWxlIHUzMiopKEdQSU9fT1VUUFVUX1JFRykgJj0gX19jcHVfdG9fbGUzMih+QklUMTcpOworCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvcm91dGVyL3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvcm91dGVyL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1ZWEyYQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9yb3V0ZXIvdS1ib290LmxkcwpAQCAtMCwwICsxLDU1IEBACisvKgorICogKEMpIENvcHlyaWdodCBNaW5kc3BlZWQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfRk9STUFUKCJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIpCitPVVRQVVRfQVJDSChhcm0pCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworCS4gPSAweDAwMDAwMDAwOworCisJLiA9IEFMSUdOKDQpOworCS50ZXh0ICAgICAgOgorCXsKKwkgIGNwdS9hcm0xMTM2L3N0YXJ0Lm8JKC50ZXh0KQorCSAgKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47CisKKwkuID0gMHgwYTAwMDAwMDsKKwlfX3RyYWluaW5nX2RhdGFfc3RhcnQgPSAuOworCit9CmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvc3VwZXJtb21iYXNhOTEwL01ha2VmaWxlIGIvYm9hcmQvbWluZHNwZWVkL3N1cGVybW9tYmFzYTkxMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTk1NDZmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3N1cGVybW9tYmFzYTkxMC9NYWtlZmlsZQpAQCAtMCwwICsxLDUyIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChCT0FSRCkuYQorCitPQkpTCTo9IGJvYXJkLm8gbWlpLm8gcmVzZXQubyAuLi9jb21tb24vYW0yOWx2MDQwYi5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9uYW5kLm8KK1NPQkpTCTo9ICAKKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMT0FEX0FERFIgPSAweDEwNDAwMDAwCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworYWxsOgkkKExJQikKKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICReCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykgCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvc3VwZXJtb21iYXNhOTEwL2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvc3VwZXJtb21iYXNhOTEwL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3NjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9zdXBlcm1vbWJhc2E5MTAvYm9hcmQuYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA1IDJOIFRFTEVLT01VTklLQUNFLCBMYWRpc2xhdiBNaWNobAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK2V4dGVybiB2b2lkIFNvQ19QTExfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFNvQ19tZW1faW5pdCh2b2lkKTsKKy8vZXh0ZXJuIHZvaWQgU29DX21lbV9pbml0KGludCBjb250cm9sbGVyLCBpbnQgYmFzZSwgaW50IGxlbmd0aCk7CitleHRlcm4gdm9pZCBTb0NfZmxhc2hfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFNvQ19uYW5kX2luaXQodm9pZCk7CisKK3ZvaWQgYnNwX2luaXQodm9pZCkKK3sKKwlTb0NfQ2hlY2tfRGV2aWNlKCk7CisKKwlTb0NfUExMX2luaXQoKTsKKwkvL1NvQ19tZW1faW5pdCgwLCBQSFlTX1NEUkFNLCAvKlBIWVNfU0RSQU1fU0laRS8weDEwMDAwMCovMTI4KTsKKwlTb0NfbWVtX2luaXQoKTsKKwlTb0NfZmxhc2hfaW5pdCgpOworCVNvQ19uYW5kX2luaXQoKTsKKwkKKwlpY2FjaGVfZW5hYmxlKCk7Cit9CitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCS8qIGFyY2ggbnVtYmVyIG9mIE1pbmRzcGVlZCBDb21jZXJ0byAqLworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfTTgyNVhYOworCisJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBMSU5VWF9CT09UUEFSQU1fQUREUjsKKworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fU0laRTsKKworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCBwYXJ0aXRpb25fZmxhc2godm9pZCk7CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXJldHVybiAwOworfQorCisjaWZkZWYgQk9BUkRfTEFURV9JTklUCitpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCit7CisgIHByaW50ZigiUmVzZXJ2ZSBNU1AgbWVtb3J5XG4iKTsKKyAgZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ICs9ICh1MzIpTVNQX01FTU9SWV9SRVNFUlZFRF9TSVpFOworICBnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAtPSAodTMyKU1TUF9NRU1PUllfUkVTRVJWRURfU0laRTsKKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9zdXBlcm1vbWJhc2E5MTAvY29uZmlnLm1rIGIvYm9hcmQvbWluZHNwZWVkL3N1cGVybW9tYmFzYTkxMC9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyZGFiNwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9zdXBlcm1vbWJhc2E5MTAvY29uZmlnLm1rCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IDEwMDAnODAwMCwKKyMgZW50cnkgMTAwMCc4MDAwIChtZW0gYmFzZSArIHJlc2VydmVkKQorIworIyBXZSBsb2FkIG91cnNlbGYgdG8gaW50ZXJuYWwgUkFNIGF0IDIwMDEnMjAwMAorIyBDaGVjayBtYXAgZmlsZSB3aGVuIGNoYW5naW5nIFRFWFRfQkFTRS4KKyMgRXZlcnl0aGluZyBoYXMgZml0IGludG8gMTkya0IgaW50ZXJuYWwgU1JBTSEKKyMKKworIyBYWFggVEVYVF9CQVNFID0gMHgyMDAxMjAwMAorVEVYVF9CQVNFID0gMHgwMDEwMDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3N1cGVybW9tYmFzYTkxMC9taWkuYyBiL2JvYXJkL21pbmRzcGVlZC9zdXBlcm1vbWJhc2E5MTAvbWlpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0YTk5ZAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9zdXBlcm1vbWJhc2E5MTAvbWlpLmMKQEAgLTAsMCArMSwyOSBAQAorI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfTUlJKSAmJiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9NSUkpCitleHRlcm4gdTE2IE1ESU9fSGFuZGxlX1JlYWQodTE2IHByZWFtYmxlX3N1cCwgdTE2IHBoeV9hZGRyLCB1MTYgcmVnX2FkZHIpOworZXh0ZXJuIHUxNiBNRElPX0hhbmRsZV9Xcml0ZSh1MTYgcHJlYW1ibGVfc3VwLCB1MTYgcGh5X2FkZHIsIHUxNiByZWdfYWRkciwgdTE2IG1kX2RhdGEpOworCitpbnQgIGNvbWNlcnRvX21paXBoeV9yZWFkKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgYWRkciwKKwkJdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIHNob3J0ICogdmFsdWUpCit7CisJKnZhbHVlID0gTURJT19IYW5kbGVfUmVhZCgwLCAwLCByZWcpOworCXJldHVybiAwOworfQorCitpbnQgIGNvbWNlcnRvX21paXBoeV93cml0ZShjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCXVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3sKKwlNRElPX0hhbmRsZV9Xcml0ZSgwLCAwLCByZWcsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX01JSSkgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKSAqLworCitpbnQgY29tY2VydG9fbWlpcGh5X2luaXRpYWxpemUoYmRfdCAqYmlzKQoreworI2lmIGRlZmluZWQoQ09ORklHX01JSSkgJiYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKQorCW1paXBoeV9yZWdpc3RlcigiQ29tY2VydG8gcGh5IiwgY29tY2VydG9fbWlpcGh5X3JlYWQsIGNvbWNlcnRvX21paXBoeV93cml0ZSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC9zdXBlcm1vbWJhc2E5MTAvcmVzZXQuYyBiL2JvYXJkL21pbmRzcGVlZC9zdXBlcm1vbWJhc2E5MTAvcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2RlODVjCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3N1cGVybW9tYmFzYTkxMC9yZXNldC5jCkBAIC0wLDAgKzEsMTUgQEAKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCit2b2lkIHJlc2V0X2VtYWMwX3BoeSh1MzIgZW5hYmxlKQoreworCS8vbm90aGluZyB0byBkby4gVGhlcmUgaXMgbm8gcmVzZXQgb24gdGhlIHN1cGVybW9tYmFzc2E5MTAgYm9hcmQgZm9yIHRoZSBsYW4gaW50ZXJmYWNlCit9CisKK3ZvaWQgcmVzZXRfZW1hYzFfcGh5KHUzMiBlbmFibGUpCit7CisJLy9ub3RoaW5nIHRvIGRvLiBUaGVyZSBpcyBubyByZXNldCBvbiB0aGUgc3VwZXJtb21iYXNzYTkxMCBib2FyZCBmb3IgdGhlIHdhbiBpbnRlcmZhY2UKK30KKworCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvc3VwZXJtb21iYXNhOTEwL3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvc3VwZXJtb21iYXNhOTEwL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4NjYwNwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC9zdXBlcm1vbWJhc2E5MTAvdS1ib290LmxkcwpAQCAtMCwwICsxLDU1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdqQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCAgICAgIDoKKwl7CisJICBjcHUvYXJtMTEzNi9zdGFydC5vCSgudGV4dCkKKwkgICooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTE1L01ha2VmaWxlIGIvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTE1L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjhmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTUvTWFrZWZpbGUKQEAgLTAsMCArMSw1NSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSBib2FyZC5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9hbTI5bHYwNDBiLm8gLi4vY29tbW9uL2FtbHY2NDB1Lm9cCisJCS4uL2NvbW1vbi9uYW5kLm8gLi4vY29tbW9uL2NtZF9ib290Y29tY2VydG8ubworU09CSlMJOj0gLi4vY29tbW9uL2FybTFfaW5pdC5vCisKK2djY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKKworTERTQ1JJUFQgPSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworCitIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCisKK2FsbDogJChMSUIpCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkXgorCitib2FyZC5vOiBib2FyZC5jCisJJChDQykgJChDRkxBR1MpIC1mcGljIC1jIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC90c2F2bzUxNS9ib2FyZC5jIGIvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTE1L2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhMTgxMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC90c2F2bzUxNS9ib2FyZC5jCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfU1BJKQorZXh0ZXJuIHZvaWQgc3BpX2h3X2luaXQodm9pZCk7CisjZW5kaWYKKworLyogSW5pdGlhbGl6ZSBTRFJBTSwgQVJNIGFuZCBidXMgQ0xPQ0sgYW5kIGluc3RydWN0aW9uIGNhY2hlICovCit2b2lkIGJzcF9pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TRFJBTSwKKwkJLmJhc2VhZGRyID0gUEhZU19TRFJBTSwKKwkJLnNpemUgPSBQSFlTX1NEUkFNX1NJWkUsCisKKwkJLnRyYXMgPSAweDYsCisJCS50cmMgPSAweDksCisJCS50cmNkID0gMHgzLAorCQkudHJwID0gMHgzLAorCQkuY2wgPSAweDMsCisKKwkJLm1lbWNoaXBfZHR5cGUgPSAweDEsCisJCS50d3IgPSAweDIsCisJCS5idXN3aWR0aCA9IDB4MSwKKwkJLnRtcmQgPSAweDIsCisJCS50cnJkID0gMHgyLAorCisJCS5yZWZjbnQgPSAweDA0MDgsCisJCS5wd3JvbmNudCA9IDB4MDA0MiwKKwl9OworCisJU29DX3BsbF9jZmcoQ0xLX01PREVfU1lOQywgMiAqIENGR19IWl9DTE9DSywgMCk7CisJU29DX2NzX2NmZyhFWFBfQ1NTRDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlpY2FjaGVfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfaHdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKwkJLmJ1c3dpZHRoID0gQ1NfQlVTV0lEVEhfOEJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg1LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NQMCwgQ1NfRU5BQkxFLCAmY2ZnKTsKKworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9CUl9HUElPLCBHUElPX1RZUEVfSU5QVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9DRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0xFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9BTEVfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vcl9od19pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCisJCS5iYXNlYWRkciA9IFBIWVNfRkxBU0gyLAorCQkuc2l6ZSA9IDggKiAxMDI0ICogMTAyNCwKKworCQkuYnVzd2lkdGggPSBDU19CVVNXSURUSF8xNkJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg3LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NTRDEsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfaW9jdHJsX2NmZyhJT0NUUkxfRVhQQTIxX0EyMiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVlcHJvbV9od19pbml0KHZvaWQpCit7CisjaWYgMAorCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKwkJLmJ1c193aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWRfd2lkdGggPSAweDUsCisJCS5hZGRyX3NldHVwID0gMHg0LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NCT09ULCBDU19FTkFCTEUsICZjZmcpOworI2VuZGlmCit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisJbmFuZF9od19pbml0KCk7CisJbm9yX2h3X2luaXQoKTsKKwllZXByb21faHdfaW5pdCgpOworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU1BJKSB8fCBkZWZpbmVkKENPTkZJR19TUEkpCisJc3BpX2h3X2luaXQoKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcmFtX2luaXQodm9pZCkKK3sKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplID0gUEhZU19TRFJBTV9TSVpFOworCisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkIHBhcnRpdGlvbl9mbGFzaCh2b2lkKTsKKworaW50IG1pc2NfaW5pdF9yKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBCT0FSRF9MQVRFX0lOSVQKK2ludCBib2FyZF9sYXRlX2luaXQodm9pZCkKK3sKKwlwcmludGYoIlJlc2VydmUgTVNQIG1lbW9yeVxuIik7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ICs9IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgLT0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkU7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC90c2F2bzUxNS9jb25maWcubWsgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTUvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTNjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTUvY29uZmlnLm1rCkBAIC0wLDAgKzEsNCBAQAorIworIworCitURVhUX0JBU0UgPSAweDA3RTAwMDAwCSMgMTI2TWlCCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTUvdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC90c2F2bzUxNS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNTE2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTUvdS1ib290LmxkcwpAQCAtMCwwICsxLDU3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgOgorCXsKKwkJY3B1L2FybTkyMHQvc3RhcnQubyAoLnRleHQpCisKKwkJX19hcm0xX2luaXRfc3RhcnQgPSAuOworCQlib2FyZC9taW5kc3BlZWQvY29tbW9uL2FybTFfaW5pdC5vICgudGV4dCkKKwkJX19hcm0xX2luaXRfZW5kID0gLjsKKworCQkqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC90c2F2bzUxNV9ub3IvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTVfbm9yL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZmMxZTUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTVfbm9yL01ha2VmaWxlCkBAIC0wLDAgKzEsNjUgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJOj0gYm9hcmQubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vYW1sdjY0MHUub1wKKwkJLi4vY29tbW9uL25hbmQubyAuLi9jb21tb24vY21kX2Jvb3Rjb21jZXJ0by5vCitTT0JKUwk6PSAuLi9jb21tb24vYXJtMV9pbml0Lm8KKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworYWxsOiAkKExJQikgLi4vY29tbW9uL3UxNl90b191OC5iaW4gbm9yYm9vdDgubworCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJF4KKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitub3Jib290OC5vOiAuLi9jb21tb24vbm9yYm9vdC5vCisJJChMRCkgLVR0ZXh0IDB4MTEwMDAwMDAgJDwgLW8gbm9yYm9vdC5vCisJJChPQkpDT1BZKSAtTyBiaW5hcnkgbm9yYm9vdC5vIG5vcmJvb3QxNi5iaW4KKwkuLi9jb21tb24vdTE2X3RvX3U4LmJpbiBub3Jib290MTYuYmluIG5vcmJvb3Q4LmJpbgorCSQoT0JKQ09QWSkgLUJhcm0gLUkgYmluYXJ5IC1PIGVsZjMyLWxpdHRsZWFybSBub3Jib290OC5iaW4gJEAKKwkkKFJNKSBub3Jib290MTYuYmluIG5vcmJvb3Q4LmJpbgorCisuLi9jb21tb24vdTE2X3RvX3U4LmJpbjogLi4vY29tbW9uL3UxNl90b191OC5jCisJJChIT1NUQ0MpIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykgbm9yYm9vdDgubyAuLi9jb21tb24vdTE2X3RvX3U4LmJpbiAuLi9jb21tb24vbm9yYm9vdC5vCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTVfbm9yL2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTVfbm9yL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkY2MxOAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC90c2F2bzUxNV9ub3IvYm9hcmQuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TUEkpIHx8IGRlZmluZWQoQ09ORklHX1NQSSkKK2V4dGVybiB2b2lkIHNwaV9od19pbml0KHZvaWQpOworI2VuZGlmCisKKy8qIEluaXRpYWxpemUgU0RSQU0sIEFSTSBhbmQgYnVzIENMT0NLIGFuZCBpbnN0cnVjdGlvbiBjYWNoZSAqLwordm9pZCBic3BfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU0RSQU0sCisJCS5iYXNlYWRkciA9IFBIWVNfU0RSQU0sCisJCS5zaXplID0gUEhZU19TRFJBTV9TSVpFLAorCisJCS50cmFzID0gMHg2LAorCQkudHJjID0gMHg5LAorCQkudHJjZCA9IDB4MywKKwkJLnRycCA9IDB4MywKKwkJLmNsID0gMHgzLAorCisJCS5tZW1jaGlwX2R0eXBlID0gMHgxLAorCQkudHdyID0gMHgyLAorCQkuYnVzd2lkdGggPSAweDEsCisJCS50bXJkID0gMHgyLAorCQkudHJyZCA9IDB4MiwKKworCQkucmVmY250ID0gMHgwNDA4LAorCQkucHdyb25jbnQgPSAweDAwNDIsCisJfTsKKworCVNvQ19wbGxfY2ZnKENMS19NT0RFX1NZTkMsIDIgKiBDRkdfSFpfQ0xPQ0ssIDApOworCVNvQ19jc19jZmcoRVhQX0NTU0QwLCBDU19FTkFCTEUsICZjZmcpOworCisJaWNhY2hlX2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBuYW5kX2h3X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NSQU0sCisJCS5idXN3aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWR3aWR0aCA9IDB4OSwKKwkJLmFkZHJzZXR1cCA9IDB4NSwKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTUDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQlJfR1BJTywgR1BJT19UWVBFX0lOUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0VfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7CisJU29DX2dwaW9fY2ZnKENGR19OQU5EX0NMRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQUxFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworfQorCitzdGF0aWMgdm9pZCBub3JfaHdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKworCQkuYnVzd2lkdGggPSBDU19CVVNXSURUSF8xNkJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg3LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NCT09ULCBDU19FTkFCTEUsICZjZmcpOworfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCS8qIGFyY2ggbnVtYmVyIG9mIE1pbmRzcGVlZCBDb21jZXJ0byAqLworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfTTgyNVhYOworCisJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBMSU5VWF9CT09UUEFSQU1fQUREUjsKKworCW5hbmRfaHdfaW5pdCgpOworCW5vcl9od19pbml0KCk7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TUEkpIHx8IGRlZmluZWQoQ09ORklHX1NQSSkKKwlzcGlfaHdfaW5pdCgpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU07CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIHZvaWQgcGFydGl0aW9uX2ZsYXNoKHZvaWQpOworCitpbnQgbWlzY19pbml0X3Iodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEJPQVJEX0xBVEVfSU5JVAoraW50IGJvYXJkX2xhdGVfaW5pdCh2b2lkKQoreworCXByaW50ZigiUmVzZXJ2ZSBNU1AgbWVtb3J5XG4iKTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgKz0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAtPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTE1X25vci9jb25maWcubWsgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MTVfbm9yL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWEzYzQwCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTE1X25vci9jb25maWcubWsKQEAgLTAsMCArMSw0IEBACisjCisjCisKK1RFWFRfQkFTRSA9IDB4MDdFMDAwMDAJIyAxMjZNaUIKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC90c2F2bzUxNV9ub3IvdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC90c2F2bzUxNV9ub3IvdS1ib290LmxkcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDUxMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTE1X25vci91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCA6CisJeworCQlib2FyZC9taW5kc3BlZWQvdHNhdm81MTVfbm9yL25vcmJvb3Q4Lm8gKC5kYXRhKQorCisJCWNwdS9hcm05MjB0L3N0YXJ0Lm8gKC50ZXh0KQorCisJCV9fYXJtMV9pbml0X3N0YXJ0ID0gLjsKKwkJYm9hcmQvbWluZHNwZWVkL2NvbW1vbi9hcm0xX2luaXQubyAoLnRleHQpCisJCV9fYXJtMV9pbml0X2VuZCA9IC47CisKKwkJKigudGV4dCkKKwl9CisKKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzAvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2OGZhNAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC90c2F2bzUzMC9NYWtlZmlsZQpAQCAtMCwwICsxLDU1IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwNgorIyBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChCT0FSRCkuYQorCitPQkpTCTo9IGJvYXJkLm8gLi4vY29tbW9uL2ZsYXNoLm8gLi4vY29tbW9uL2FtMjlsdjA0MGIubyAuLi9jb21tb24vYW1sdjY0MHUub1wKKwkJLi4vY29tbW9uL25hbmQubyAuLi9jb21tb24vY21kX2Jvb3Rjb21jZXJ0by5vCitTT0JKUwk6PSAuLi9jb21tb24vYXJtMV9pbml0Lm8KKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworYWxsOiAkKExJQikKKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICReCisKK2JvYXJkLm86IGJvYXJkLmMKKwkkKENDKSAkKENGTEFHUykgLWZwaWMgLWMgLW8gJEAgJDwKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKy5kZXBlbmQ6CU1ha2VmaWxlICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykKKwkJJChDQykgLU0gJChDUFBGTEFHUykgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKSA+ICRACisKK3NpbmNsdWRlIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTMwL2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzAvYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmIwMmEzCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTMwL2JvYXJkLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYnNwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisvKiBJbml0aWFsaXplIFNEUkFNLCBBUk0gYW5kIGJ1cyBDTE9DSyBhbmQgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KK3ZvaWQgYnNwX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NEUkFNLAorCQkuYmFzZWFkZHIgPSBQSFlTX1NEUkFNLAorCQkuc2l6ZSA9IFBIWVNfU0RSQU1fU0laRSwKKworCQkudHJhcyA9IDB4NiwKKwkJLnRyYyA9IDB4OSwKKwkJLnRyY2QgPSAweDMsCisJCS50cnAgPSAweDMsCisJCS5jbCA9IDB4MywKKworCQkubWVtY2hpcF9kdHlwZSA9IDB4MSwKKwkJLnR3ciA9IDB4MiwKKwkJLmJ1c3dpZHRoID0gMHgxLAorCQkudG1yZCA9IDB4MiwKKwkJLnRycmQgPSAweDIsCisKKwkJLnJlZmNudCA9IDB4MDQwOCwKKwkJLnB3cm9uY250ID0gMHgwMDQyLAorCX07CisKKwlTb0NfcGxsX2NmZyhDTEtfTU9ERV9TWU5DLCAyNTAwMDAwMDAsIDApOworCVNvQ19jc19jZmcoRVhQX0NTU0QwLCBDU19FTkFCTEUsICZjZmcpOworCisJaWNhY2hlX2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBuYW5kX2h3X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NSQU0sCisJCS5idXN3aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWR3aWR0aCA9IDB4OSwKKwkJLmFkZHJzZXR1cCA9IDB4NSwKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTUDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQlJfR1BJTywgR1BJT19UWVBFX0lOUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0VfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7CisJU29DX2dwaW9fY2ZnKENGR19OQU5EX0NMRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQUxFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworfQorCitzdGF0aWMgdm9pZCBub3JfaHdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKworCQkuYmFzZWFkZHIgPSBQSFlTX0ZMQVNIMiwKKwkJLnNpemUgPSA0ICogMTAyNCAqIDEwMjQsCisKKwkJLmJ1c3dpZHRoID0gQ1NfQlVTV0lEVEhfMTZCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWR3aWR0aCA9IDB4OSwKKwkJLmFkZHJzZXR1cCA9IDB4NywKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19jc19jZmcoRVhQX0NTU0QxLCBDU19FTkFCTEUsICZjZmcpOworfQorCitzdGF0aWMgdm9pZCBlZXByb21faHdfaW5pdCh2b2lkKQoreworI2lmIDAKKwlzdHJ1Y3QgY3NfY2ZnIGNmZyA9IHsKKwkJLm1lbXR5cGUgPSBDU19NRU1UWVBFX1NSQU0sCisJCS5idXNfd2lkdGggPSBDU19CVVNXSURUSF84QklULAorCQkubGV2ZWwgPSBDU19BQ1RJVkVfTE9XLAorCQkuY21kX3dpZHRoID0gMHg1LAorCQkuYWRkcl9zZXR1cCA9IDB4NCwKKwkJLmRxbV9tb2RlID0gQ1NfRFFNTU9ERV9OT1JNQUwsCisJfTsKKworCVNvQ19DU19jZmcoRVhQX0NTQk9PVCwgQ1NfRU5BQkxFLCAmY2ZnKTsKKyNlbmRpZgorfQorCitpbnQgYm9hcmRfaW5pdCh2b2lkKQoreworCS8qIGFyY2ggbnVtYmVyIG9mIE1pbmRzcGVlZCBDb21jZXJ0byAqLworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSBNQUNIX1RZUEVfTTgyNVhYOworCisJLyogYWRyZXNzIG9mIGJvb3QgcGFyYW1ldGVycyAqLworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBMSU5VWF9CT09UUEFSQU1fQUREUjsKKworCW5hbmRfaHdfaW5pdCgpOworCW5vcl9od19pbml0KCk7CisJZWVwcm9tX2h3X2luaXQoKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fU0laRTsKKworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCBwYXJ0aXRpb25fZmxhc2godm9pZCk7CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXJldHVybiAwOworfQorCisjaWZkZWYgQk9BUkRfTEFURV9JTklUCitpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCit7CisJcHJpbnRmKCJSZXNlcnZlIE1TUCBtZW1vcnlcbiIpOworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCArPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplIC09IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzAvY29uZmlnLm1rIGIvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTMwL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTFhZDRjCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3RzYXZvNTMwL2NvbmZpZy5tawpAQCAtMCwwICsxLDQgQEAKKyMKKyMKKworVEVYVF9CQVNFID0gMHgwM0UwMDAwMAkjIDYyTWlCCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzAvdS1ib290LmxkcyBiL2JvYXJkL21pbmRzcGVlZC90c2F2bzUzMC91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNTE2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzAvdS1ib290LmxkcwpAQCAtMCwwICsxLDU3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgOgorCXsKKwkJY3B1L2FybTkyMHQvc3RhcnQubyAoLnRleHQpCisKKwkJX19hcm0xX2luaXRfc3RhcnQgPSAuOworCQlib2FyZC9taW5kc3BlZWQvY29tbW9uL2FybTFfaW5pdC5vICgudGV4dCkKKwkJX19hcm0xX2luaXRfZW5kID0gLjsKKworCQkqKC50ZXh0KQorCX0KKworCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKworCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCisJLiA9IEFMSUdOKDQpOworCV9fYnNzX3N0YXJ0ID0gLjsKKwkuYnNzIDogeyAqKC5ic3MpIH0KKwlfZW5kID0gLjsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC90c2F2bzUzMF9ub3IvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzBfbm9yL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZmMxZTUKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzBfbm9yL01ha2VmaWxlCkBAIC0wLDAgKzEsNjUgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEJPQVJEKS5hCisKK09CSlMJOj0gYm9hcmQubyAuLi9jb21tb24vZmxhc2gubyAuLi9jb21tb24vYW1sdjY0MHUub1wKKwkJLi4vY29tbW9uL25hbmQubyAuLi9jb21tb24vY21kX2Jvb3Rjb21jZXJ0by5vCitTT0JKUwk6PSAuLi9jb21tb24vYXJtMV9pbml0Lm8KKworZ2NjbGliZGlyIDo9ICQoc2hlbGwgZGlybmFtZSBgJChDQykgLXByaW50LWxpYmdjYy1maWxlLW5hbWVgKQorCitMRFNDUklQVCA9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QubGRzCisKK0hPU1RfQ0ZMQUdTID0gLVdhbGwgLXBlZGFudGljIC1JJChUT1BESVIpL2luY2x1ZGUKKworYWxsOiAkKExJQikgLi4vY29tbW9uL3UxNl90b191OC5iaW4gbm9yYm9vdDgubworCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJF4KKworYm9hcmQubzogYm9hcmQuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitub3Jib290OC5vOiAuLi9jb21tb24vbm9yYm9vdC5vCisJJChMRCkgLVR0ZXh0IDB4MTEwMDAwMDAgJDwgLW8gbm9yYm9vdC5vCisJJChPQkpDT1BZKSAtTyBiaW5hcnkgbm9yYm9vdC5vIG5vcmJvb3QxNi5iaW4KKwkuLi9jb21tb24vdTE2X3RvX3U4LmJpbiBub3Jib290MTYuYmluIG5vcmJvb3Q4LmJpbgorCSQoT0JKQ09QWSkgLUJhcm0gLUkgYmluYXJ5IC1PIGVsZjMyLWxpdHRsZWFybSBub3Jib290OC5iaW4gJEAKKwkkKFJNKSBub3Jib290MTYuYmluIG5vcmJvb3Q4LmJpbgorCisuLi9jb21tb24vdTE2X3RvX3U4LmJpbjogLi4vY29tbW9uL3UxNl90b191OC5jCisJJChIT1NUQ0MpIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykgbm9yYm9vdDgubyAuLi9jb21tb24vdTE2X3RvX3U4LmJpbiAuLi9jb21tb24vbm9yYm9vdC5vCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLmRlcGVuZDoJTWFrZWZpbGUgJChTT0JKUzoubz0uUykgJChPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENQUEZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzBfbm9yL2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzBfbm9yL2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwOWE0MQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC90c2F2bzUzMF9ub3IvYm9hcmQuYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKy8qIEluaXRpYWxpemUgU0RSQU0sIEFSTSBhbmQgYnVzIENMT0NLIGFuZCBpbnN0cnVjdGlvbiBjYWNoZSAqLwordm9pZCBic3BfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU0RSQU0sCisJCS5iYXNlYWRkciA9IFBIWVNfU0RSQU0sCisJCS5zaXplID0gUEhZU19TRFJBTV9TSVpFLAorCisJCS50cmFzID0gMHg2LAorCQkudHJjID0gMHg5LAorCQkudHJjZCA9IDB4MywKKwkJLnRycCA9IDB4MywKKwkJLmNsID0gMHgzLAorCisJCS5tZW1jaGlwX2R0eXBlID0gMHgxLAorCQkudHdyID0gMHgyLAorCQkuYnVzd2lkdGggPSAweDEsCisJCS50bXJkID0gMHgyLAorCQkudHJyZCA9IDB4MiwKKworCQkucmVmY250ID0gMHgwNDA4LAorCQkucHdyb25jbnQgPSAweDAwNDIsCisJfTsKKworCVNvQ19wbGxfY2ZnKENMS19NT0RFX1NZTkMsIDI1MDAwMDAwMCwgMCk7CisJU29DX2NzX2NmZyhFWFBfQ1NTRDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlpY2FjaGVfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfaHdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKwkJLmJ1c3dpZHRoID0gQ1NfQlVTV0lEVEhfOEJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg1LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NQMCwgQ1NfRU5BQkxFLCAmY2ZnKTsKKworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9CUl9HUElPLCBHUElPX1RZUEVfSU5QVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9DRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0xFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9BTEVfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vcl9od19pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCisJCS5idXN3aWR0aCA9IENTX0JVU1dJRFRIXzE2QklULAorCQkubGV2ZWwgPSBDU19BQ1RJVkVfTE9XLAorCQkuY21kd2lkdGggPSAweDksCisJCS5hZGRyc2V0dXAgPSAweDcsCisJCS5kcW1fbW9kZSA9IENTX0RRTU1PREVfTk9STUFMLAorCX07CisKKwlTb0NfY3NfY2ZnKEVYUF9DU0JPT1QsIENTX0VOQUJMRSwgJmNmZyk7Cit9CisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJLyogYXJjaCBudW1iZXIgb2YgTWluZHNwZWVkIENvbWNlcnRvICovCisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9NODI1WFg7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IExJTlVYX0JPT1RQQVJBTV9BRERSOworCisJbmFuZF9od19pbml0KCk7CisJbm9yX2h3X2luaXQoKTsKKworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gUEhZU19TRFJBTTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fU0laRTsKKworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCBwYXJ0aXRpb25fZmxhc2godm9pZCk7CisKK2ludCBtaXNjX2luaXRfcih2b2lkKQoreworCXJldHVybiAwOworfQorCisjaWZkZWYgQk9BUkRfTEFURV9JTklUCitpbnQgYm9hcmRfbGF0ZV9pbml0KHZvaWQpCit7CisJcHJpbnRmKCJSZXNlcnZlIE1TUCBtZW1vcnlcbiIpOworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCArPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCWdkLT5iZC0+YmlfZHJhbVswXS5zaXplIC09IE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFOworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzBfbm9yL2NvbmZpZy5tayBiL2JvYXJkL21pbmRzcGVlZC90c2F2bzUzMF9ub3IvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MWFkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzBfbm9yL2NvbmZpZy5tawpAQCAtMCwwICsxLDQgQEAKKyMKKyMKKworVEVYVF9CQVNFID0gMHgwM0UwMDAwMAkjIDYyTWlCCmRpZmYgLS1naXQgYS9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzBfbm9yL3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvdHNhdm81MzBfbm9yL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxZTU1OAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL21pbmRzcGVlZC90c2F2bzUzMF9ub3IvdS1ib290LmxkcwpAQCAtMCwwICsxLDU5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisKKwkuID0gQUxJR04oNCk7CisJLnRleHQgOgorCXsKKwkJYm9hcmQvbWluZHNwZWVkL3RzYXZvNTMwX25vci9ub3Jib290OC5vICguZGF0YSkKKworCQljcHUvYXJtOTIwdC9zdGFydC5vICgudGV4dCkKKworCQlfX2FybTFfaW5pdF9zdGFydCA9IC47CisJCWJvYXJkL21pbmRzcGVlZC9jb21tb24vYXJtMV9pbml0Lm8gKC50ZXh0KQorCQlfX2FybTFfaW5pdF9lbmQgPSAuOworCisJCSooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3VkZXY1MTUvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvdWRldjUxNS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjY4ZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3VkZXY1MTUvTWFrZWZpbGUKQEAgLTAsMCArMSw1NSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSBib2FyZC5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9hbTI5bHYwNDBiLm8gLi4vY29tbW9uL2FtbHY2NDB1Lm9cCisJCS4uL2NvbW1vbi9uYW5kLm8gLi4vY29tbW9uL2NtZF9ib290Y29tY2VydG8ubworU09CSlMJOj0gLi4vY29tbW9uL2FybTFfaW5pdC5vCisKK2djY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKKworTERTQ1JJUFQgPSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworCitIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCisKK2FsbDogJChMSUIpCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkXgorCitib2FyZC5vOiBib2FyZC5jCisJJChDQykgJChDRkxBR1MpIC1mcGljIC1jIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC91ZGV2NTE1L2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvdWRldjUxNS9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZWQ2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdWRldjUxNS9ib2FyZC5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPHNwaS5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfU1BJKQorZXh0ZXJuIHZvaWQgc3BpX2h3X2luaXQodm9pZCk7CisjZW5kaWYKKworLyogSW5pdGlhbGl6ZSBTRFJBTSwgQVJNIGFuZCBidXMgQ0xPQ0sgYW5kIGluc3RydWN0aW9uIGNhY2hlICovCit2b2lkIGJzcF9pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TRFJBTSwKKwkJLmJhc2VhZGRyID0gUEhZU19TRFJBTSwKKwkJLnNpemUgPSBQSFlTX1NEUkFNX1NJWkUsCisKKwkJLnRyYXMgPSAweDYsCisJCS50cmMgPSAweDksCisJCS50cmNkID0gMHgzLAorCQkudHJwID0gMHgzLAorCQkuY2wgPSAweDMsCisKKwkJLm1lbWNoaXBfZHR5cGUgPSAweDEsCisJCS50d3IgPSAweDIsCisJCS5idXN3aWR0aCA9IDB4MSwKKwkJLnRtcmQgPSAweDIsCisJCS50cnJkID0gMHgyLAorCisJCS5yZWZjbnQgPSAweDA0MDgsCisJCS5wd3JvbmNudCA9IDB4MDA0MiwKKwl9OworCisJU29DX3BsbF9jZmcoQ0xLX01PREVfU1lOQywgMiAqIENGR19IWl9DTE9DSywgMCk7CisJU29DX2NzX2NmZyhFWFBfQ1NTRDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlpY2FjaGVfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cF9jc3AwX2luaXQgKHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCQkuYnVzd2lkdGggPSBDU19CVVNXSURUSF84QklULAorCQkubGV2ZWwgPSBDU19BQ1RJVkVfTE9XLAorCQkuY21kd2lkdGggPSAweDksCisJCS5hZGRyc2V0dXAgPSAweDUsCisJCS5kcW1fbW9kZSA9IENTX0RRTU1PREVfTk9STUFMLAorCX07CisKKwlTb0NfY3NfY2ZnKEVYUF9DU1AwLCBDU19FTkFCTEUsICZjZmcpOworfQorCisKK3N0YXRpYyB2b2lkIG5hbmRfaHdfaW5pdCh2b2lkKQoreworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9CUl9HUElPLCBHUElPX1RZUEVfSU5QVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9DRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0xFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9BTEVfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vcl9od19pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCisJCS5iYXNlYWRkciA9IFBIWVNfRkxBU0gyLAorCQkuc2l6ZSA9IDggKiAxMDI0ICogMTAyNCwKKworCQkuYnVzd2lkdGggPSBDU19CVVNXSURUSF8xNkJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg3LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NTRDEsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfaW9jdHJsX2NmZyhJT0NUUkxfRVhQQTIxX0EyMiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVlcHJvbV9od19pbml0KHZvaWQpCit7CisjaWYgMAorCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKwkJLmJ1c193aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWRfd2lkdGggPSAweDUsCisJCS5hZGRyX3NldHVwID0gMHg0LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NCT09ULCBDU19FTkFCTEUsICZjZmcpOworI2VuZGlmCit9CisKK2V4dGVybiBzcGlfY2hpcHNlbF90eXBlIHNwaV9jaGlwc2VsW107CisKK3N0YXRpYyB2b2lkIGV0aHN3aXRjaF9pbml0KHZvaWQpCit7CisJdWNoYXIgZG91dFszXTsKKwlpbnQgcmM7CisKKwkqKHZvbGF0aWxlIHU4ICopQ1BMRF9SRVNFVF9DVFJMICY9IH5FU1dJVENIX09VVF9PRl9SRVNFVDsJLyogcmVzZXQgRVN3aXRjaCAqLworCSoodm9sYXRpbGUgdTggKilDUExEX0lOVE1BU0sgfD0gRVNXSVRDSF9JUlFNQVNLOworCSoodm9sYXRpbGUgdTggKilDUExEX1JFU0VUX0NUUkwgfD0gRVNXSVRDSF9PVVRfT0ZfUkVTRVQ7CS8qIFRha2UgRVN3aXRjaCBvdXQgb2YgcmVzZXQgKi8KKworCXNwaV9od19pbml0KCk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBTUEkgd3JpdGUgYnVmZmVyICovCisJZG91dFswXSA9IDB4MDI7CQkJCS8qIEVzd2l0Y2ggd3JpdGUgY29tbWFuZCAqLworCWRvdXRbMV0gPSAxOwkJCQkvKiBhZGRyZXNzICovCisJZG91dFsyXSA9IDE7CQkJCS8qIHZhbHVlICovCisJCisJcmMgPSBzcGlfeGZlcihzcGlfY2hpcHNlbFsyXSwgMjQsIGRvdXQsIE5VTEwpOworCWlmIChyYykKKwkJcHJpbnRmKCIgZXRoc3dpdGNoX2luaXQ6IGNhbid0IGluaXRpYWxpemUgdGhlIFNQSSBidXMgXG4iLCByYyk7Cit9CisKKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBhcmNoIG51bWJlciBvZiBNaW5kc3BlZWQgQ29tY2VydG8gKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX004MjVYWDsKKworCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gTElOVVhfQk9PVFBBUkFNX0FERFI7CisKKwkvKiBDUExELCBGUEdBIGFuZCBOQU5EIGNoaXAgc2VsZWN0ICovCisJZXhwX2NzcDBfaW5pdCgpOworCisJbmFuZF9od19pbml0KCk7CisJbm9yX2h3X2luaXQoKTsKKwllZXByb21faHdfaW5pdCgpOworCWV0aHN3aXRjaF9pbml0KCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU07CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIHZvaWQgcGFydGl0aW9uX2ZsYXNoKHZvaWQpOworCitpbnQgbWlzY19pbml0X3Iodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEJPQVJEX0xBVEVfSU5JVAoraW50IGJvYXJkX2xhdGVfaW5pdCh2b2lkKQoreworCXByaW50ZigiUmVzZXJ2ZSBNU1AgbWVtb3J5XG4iKTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgKz0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAtPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3VkZXY1MTUvY29uZmlnLm1rIGIvYm9hcmQvbWluZHNwZWVkL3VkZXY1MTUvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTNjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdWRldjUxNS9jb25maWcubWsKQEAgLTAsMCArMSw0IEBACisjCisjCisKK1RFWFRfQkFTRSA9IDB4MDdFMDAwMDAJIyAxMjZNaUIKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC91ZGV2NTE1L3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvdWRldjUxNS91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNTE2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdWRldjUxNS91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCA6CisJeworCQljcHUvYXJtOTIwdC9zdGFydC5vICgudGV4dCkKKworCQlfX2FybTFfaW5pdF9zdGFydCA9IC47CisJCWJvYXJkL21pbmRzcGVlZC9jb21tb24vYXJtMV9pbml0Lm8gKC50ZXh0KQorCQlfX2FybTFfaW5pdF9lbmQgPSAuOworCisJCSooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3VkZXY4MDAvTWFrZWZpbGUgYi9ib2FyZC9taW5kc3BlZWQvdWRldjgwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjY4ZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvbWluZHNwZWVkL3VkZXY4MDAvTWFrZWZpbGUKQEAgLTAsMCArMSw1NSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSBib2FyZC5vIC4uL2NvbW1vbi9mbGFzaC5vIC4uL2NvbW1vbi9hbTI5bHYwNDBiLm8gLi4vY29tbW9uL2FtbHY2NDB1Lm9cCisJCS4uL2NvbW1vbi9uYW5kLm8gLi4vY29tbW9uL2NtZF9ib290Y29tY2VydG8ubworU09CSlMJOj0gLi4vY29tbW9uL2FybTFfaW5pdC5vCisKK2djY2xpYmRpciA6PSAkKHNoZWxsIGRpcm5hbWUgYCQoQ0MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lYCkKKworTERTQ1JJUFQgPSAkKFRPUERJUikvYm9hcmQvJChCT0FSRERJUikvdS1ib290LmxkcworCitIT1NUX0NGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYyAtSSQoVE9QRElSKS9pbmNsdWRlCisKK2FsbDogJChMSUIpCisKKyQoTElCKToJJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkXgorCitib2FyZC5vOiBib2FyZC5jCisJJChDQykgJChDRkxBR1MpIC1mcGljIC1jIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC91ZGV2ODAwL2JvYXJkLmMgYi9ib2FyZC9taW5kc3BlZWQvdWRldjgwMC9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZWQ2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdWRldjgwMC9ib2FyZC5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPHNwaS5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NQSSkgfHwgZGVmaW5lZChDT05GSUdfU1BJKQorZXh0ZXJuIHZvaWQgc3BpX2h3X2luaXQodm9pZCk7CisjZW5kaWYKKworLyogSW5pdGlhbGl6ZSBTRFJBTSwgQVJNIGFuZCBidXMgQ0xPQ0sgYW5kIGluc3RydWN0aW9uIGNhY2hlICovCit2b2lkIGJzcF9pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TRFJBTSwKKwkJLmJhc2VhZGRyID0gUEhZU19TRFJBTSwKKwkJLnNpemUgPSBQSFlTX1NEUkFNX1NJWkUsCisKKwkJLnRyYXMgPSAweDYsCisJCS50cmMgPSAweDksCisJCS50cmNkID0gMHgzLAorCQkudHJwID0gMHgzLAorCQkuY2wgPSAweDMsCisKKwkJLm1lbWNoaXBfZHR5cGUgPSAweDEsCisJCS50d3IgPSAweDIsCisJCS5idXN3aWR0aCA9IDB4MSwKKwkJLnRtcmQgPSAweDIsCisJCS50cnJkID0gMHgyLAorCisJCS5yZWZjbnQgPSAweDA0MDgsCisJCS5wd3JvbmNudCA9IDB4MDA0MiwKKwl9OworCisJU29DX3BsbF9jZmcoQ0xLX01PREVfU1lOQywgMiAqIENGR19IWl9DTE9DSywgMCk7CisJU29DX2NzX2NmZyhFWFBfQ1NTRDAsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlpY2FjaGVfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cF9jc3AwX2luaXQgKHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCQkuYnVzd2lkdGggPSBDU19CVVNXSURUSF84QklULAorCQkubGV2ZWwgPSBDU19BQ1RJVkVfTE9XLAorCQkuY21kd2lkdGggPSAweDksCisJCS5hZGRyc2V0dXAgPSAweDUsCisJCS5kcW1fbW9kZSA9IENTX0RRTU1PREVfTk9STUFMLAorCX07CisKKwlTb0NfY3NfY2ZnKEVYUF9DU1AwLCBDU19FTkFCTEUsICZjZmcpOworfQorCisKK3N0YXRpYyB2b2lkIG5hbmRfaHdfaW5pdCh2b2lkKQoreworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9CUl9HUElPLCBHUElPX1RZUEVfSU5QVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9DRV9HUElPLCBHUElPX1RZUEVfT1VUUFVUKTsKKwlTb0NfZ3Bpb19jZmcoQ0ZHX05BTkRfQ0xFX0dQSU8sIEdQSU9fVFlQRV9PVVRQVVQpOworCVNvQ19ncGlvX2NmZyhDRkdfTkFORF9BTEVfR1BJTywgR1BJT19UWVBFX09VVFBVVCk7Cit9CisKK3N0YXRpYyB2b2lkIG5vcl9od19pbml0KHZvaWQpCit7CisJc3RydWN0IGNzX2NmZyBjZmcgPSB7CisJCS5tZW10eXBlID0gQ1NfTUVNVFlQRV9TUkFNLAorCisJCS5iYXNlYWRkciA9IFBIWVNfRkxBU0gyLAorCQkuc2l6ZSA9IDggKiAxMDI0ICogMTAyNCwKKworCQkuYnVzd2lkdGggPSBDU19CVVNXSURUSF8xNkJJVCwKKwkJLmxldmVsID0gQ1NfQUNUSVZFX0xPVywKKwkJLmNtZHdpZHRoID0gMHg5LAorCQkuYWRkcnNldHVwID0gMHg3LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NTRDEsIENTX0VOQUJMRSwgJmNmZyk7CisKKwlTb0NfaW9jdHJsX2NmZyhJT0NUUkxfRVhQQTIxX0EyMiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVlcHJvbV9od19pbml0KHZvaWQpCit7CisjaWYgMAorCXN0cnVjdCBjc19jZmcgY2ZnID0geworCQkubWVtdHlwZSA9IENTX01FTVRZUEVfU1JBTSwKKwkJLmJ1c193aWR0aCA9IENTX0JVU1dJRFRIXzhCSVQsCisJCS5sZXZlbCA9IENTX0FDVElWRV9MT1csCisJCS5jbWRfd2lkdGggPSAweDUsCisJCS5hZGRyX3NldHVwID0gMHg0LAorCQkuZHFtX21vZGUgPSBDU19EUU1NT0RFX05PUk1BTCwKKwl9OworCisJU29DX2NzX2NmZyhFWFBfQ1NCT09ULCBDU19FTkFCTEUsICZjZmcpOworI2VuZGlmCit9CisKK2V4dGVybiBzcGlfY2hpcHNlbF90eXBlIHNwaV9jaGlwc2VsW107CisKK3N0YXRpYyB2b2lkIGV0aHN3aXRjaF9pbml0KHZvaWQpCit7CisJdWNoYXIgZG91dFszXTsKKwlpbnQgcmM7CisKKwkqKHZvbGF0aWxlIHU4ICopQ1BMRF9SRVNFVF9DVFJMICY9IH5FU1dJVENIX09VVF9PRl9SRVNFVDsJLyogcmVzZXQgRVN3aXRjaCAqLworCSoodm9sYXRpbGUgdTggKilDUExEX0lOVE1BU0sgfD0gRVNXSVRDSF9JUlFNQVNLOworCSoodm9sYXRpbGUgdTggKilDUExEX1JFU0VUX0NUUkwgfD0gRVNXSVRDSF9PVVRfT0ZfUkVTRVQ7CS8qIFRha2UgRVN3aXRjaCBvdXQgb2YgcmVzZXQgKi8KKworCXNwaV9od19pbml0KCk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBTUEkgd3JpdGUgYnVmZmVyICovCisJZG91dFswXSA9IDB4MDI7CQkJCS8qIEVzd2l0Y2ggd3JpdGUgY29tbWFuZCAqLworCWRvdXRbMV0gPSAxOwkJCQkvKiBhZGRyZXNzICovCisJZG91dFsyXSA9IDE7CQkJCS8qIHZhbHVlICovCisJCisJcmMgPSBzcGlfeGZlcihzcGlfY2hpcHNlbFsyXSwgMjQsIGRvdXQsIE5VTEwpOworCWlmIChyYykKKwkJcHJpbnRmKCIgZXRoc3dpdGNoX2luaXQ6IGNhbid0IGluaXRpYWxpemUgdGhlIFNQSSBidXMgXG4iLCByYyk7Cit9CisKKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBhcmNoIG51bWJlciBvZiBNaW5kc3BlZWQgQ29tY2VydG8gKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX004MjVYWDsKKworCS8qIGFkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gTElOVVhfQk9PVFBBUkFNX0FERFI7CisKKwkvKiBDUExELCBGUEdBIGFuZCBOQU5EIGNoaXAgc2VsZWN0ICovCisJZXhwX2NzcDBfaW5pdCgpOworCisJbmFuZF9od19pbml0KCk7CisJbm9yX2h3X2luaXQoKTsKKwllZXByb21faHdfaW5pdCgpOworCWV0aHN3aXRjaF9pbml0KCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRyYW1faW5pdCh2b2lkKQoreworCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU07CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNX1NJWkU7CisKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIHZvaWQgcGFydGl0aW9uX2ZsYXNoKHZvaWQpOworCitpbnQgbWlzY19pbml0X3Iodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIEJPQVJEX0xBVEVfSU5JVAoraW50IGJvYXJkX2xhdGVfaW5pdCh2b2lkKQoreworCXByaW50ZigiUmVzZXJ2ZSBNU1AgbWVtb3J5XG4iKTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgKz0gTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAtPSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbWluZHNwZWVkL3VkZXY4MDAvY29uZmlnLm1rIGIvYm9hcmQvbWluZHNwZWVkL3VkZXY4MDAvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYTNjNDAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdWRldjgwMC9jb25maWcubWsKQEAgLTAsMCArMSw0IEBACisjCisjCisKK1RFWFRfQkFTRSA9IDB4MDdFMDAwMDAJIyAxMjZNaUIKZGlmZiAtLWdpdCBhL2JvYXJkL21pbmRzcGVlZC91ZGV2ODAwL3UtYm9vdC5sZHMgYi9ib2FyZC9taW5kc3BlZWQvdWRldjgwMC91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNTE2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9taW5kc3BlZWQvdWRldjgwMC91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworT1VUUFVUX0ZPUk1BVCgiZWxmMzItbGl0dGxlYXJtIiwgImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iKQorT1VUUFVUX0FSQ0goYXJtKQorRU5UUlkoX3N0YXJ0KQorU0VDVElPTlMKK3sKKwkuID0gMHgwMDAwMDAwMDsKKworCS4gPSBBTElHTig0KTsKKwkudGV4dCA6CisJeworCQljcHUvYXJtOTIwdC9zdGFydC5vICgudGV4dCkKKworCQlfX2FybTFfaW5pdF9zdGFydCA9IC47CisJCWJvYXJkL21pbmRzcGVlZC9jb21tb24vYXJtMV9pbml0Lm8gKC50ZXh0KQorCQlfX2FybTFfaW5pdF9lbmQgPSAuOworCisJCSooLnRleHQpCisJfQorCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKwlfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworCS51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisJX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwkuID0gQUxJR04oNCk7CisJX19ic3Nfc3RhcnQgPSAuOworCS5ic3MgOiB7ICooLmJzcykgfQorCV9lbmQgPSAuOworfQpkaWZmIC0tZ2l0IGEvYnVpbGRfYWxsLnNoIGIvYnVpbGRfYWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMjhlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsZF9hbGwuc2gKQEAgLTAsMCArMSwyNCBAQAorIy9iaW4vYmFzaAorCitzZXQgLWUKKworZXhwb3J0IFBBVEg9JFBBVEg6L3Vzci9sb2NhbC9nY2MtMy40LjUtZ2xpYmMtMi4zLjYvYXJtLXNvZnRmbG9hdC1saW51eC1nbnUvYmluCisKK3JtIC1mIGJ1aWxkX2FsbC5sb2cKKworY29uZl9saXN0PSd0c2F2bzUzMCB0c2F2bzUxNSB0c2F2bzUxNV9ub3IgJ1wKKydtZWdhbW9tYmFzYTUxNSBtZWdhbW9tYmFzYTUxNV8yNTZNIG1lZ2Ftb21iYXNhNTE1X3NkYzEgJ1wKKydtYWxpbmRpIGlwb3RzNDgtNTE1IGlwb3RzNDgtODAwIHVkZXY1MTUgdWRldjgwMCBuYWlyb2JpIHN1cGVybW9tYmFzYTkxMCBtYXRpc3NlICdcCisnYXNpYyBwYWNrZXQtaWFkIHJvdXRlcicKKworY29uZl9saXN0PSdhc2ljIHBhY2tldC1pYWQgcm91dGVyIGZlcm91dGVyJworCitmb3IgY29uZiBpbiAke2NvbmZfbGlzdH07IGRvCisKK21ha2UgZGlzdGNsZWFuID4+IGJ1aWxkX2FsbC5sb2cgMj4mMQorCitlY2hvICJidWlsZGluZyAke2NvbmZ9IgorbWFrZSAke2NvbmZ9X2NvbmZpZyA+PiBidWlsZF9hbGwubG9nIDI+JjEKK21ha2UgPj4gYnVpbGRfYWxsLmxvZyAyPiYxCitlY2hvICJkb25lIgorZG9uZTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9NYWtlZmlsZSBiL2NvbW1vbi9NYWtlZmlsZQppbmRleCAwN2RkYzk1Li45MmUwOWZhIDEwMDY0NAotLS0gYS9jb21tb24vTWFrZWZpbGUKKysrIGIvY29tbW9uL01ha2VmaWxlCkBAIC0zOCw3ICszOCw3IEBACiAJICBjbWRfbG9hZC5vIGNtZF9sb2cubyBcCiAJICBjbWRfbWVtLm8gY21kX21paS5vIGNtZF9taXNjLm8gY21kX21tYy5vIFwKIAkgIGNtZF9uYW5kLm8gY21kX25ldC5vIGNtZF9udmVkaXQubyBcCi0JICBjbWRfcGNpLm8gY21kX3BjbWNpYS5vIGNtZF9wb3J0aW8ubyBcCisJICBjbWRfcGNpLm8gY21kX3BjbWNpYS5vIGNtZF9waHkubyBjbWRfcG9ydGlvLm8gXAogCSAgY21kX3JlZ2luZm8ubyBjbWRfcmVpc2VyLm8gY21kX3Njc2kubyBjbWRfc3BpLm8gY21kX3VuaXZlcnNlLm8gXAogCSAgY21kX3VzYi5vIGNtZF92ZmQubyBcCiAJICBjb21tYW5kLm8gY29uc29sZS5vIGRldmljZXMubyBkbG1hbGxvYy5vIGRvY2VjYy5vIFwKQEAgLTUxLDcgKzUxLDcgQEAKIAkgIG1lbXNpemUubyBtaWlwaHliYi5vIG1paXBoeXV0aWwubyBcCiAJICBzX3JlY29yZC5vIHNlcmlhbC5vIHNvZnRfaTJjLm8gc29mdF9zcGkubyBzcGFydGFuMi5vIHNwYXJ0YW4zLm8gXAogCSAgdXNiLm8gdXNiX2tiZC5vIHVzYl9zdG9yYWdlLm8gXAotCSAgdmlydGV4Mi5vIHhpbGlueC5vIGNyYzE2Lm8geHl6TW9kZW0ubyBjbWRfbWFjLm8KKwkgIHZpcnRleDIubyB4aWxpbngubyBjcmMxNi5vIHh5ek1vZGVtLm8gY21kX21hYy5vIGltYWdlLm8KIAogU1JDUwk6PSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChBT0JKUykgJChDT0JKUykpCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2Jvb3RtLmMgYi9jb21tb24vY21kX2Jvb3RtLmMKaW5kZXggMzA5MWE1OC4uMjA1MjYwOCAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9ib290bS5jCisrKyBiL2NvbW1vbi9jbWRfYm9vdG0uYwpAQCAtNzksNyArNzksOSBAQAogIyBkZWZpbmUgQ0hVTktTWiAoNjQgKiAxMDI0KQogI2VuZGlmCiAKKyNpZm5kZWYgQ09ORklHX05PX0daSVAKIGludCAgZ3VuemlwICh2b2lkICosIGludCwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nICopOworI2VuZGlmCiAKIHN0YXRpYyB2b2lkICp6YWxsb2Modm9pZCAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwogc3RhdGljIHZvaWQgemZyZWUodm9pZCAqLCB2b2lkICosIHVuc2lnbmVkKTsKQEAgLTk0LDYgKzk2LDEwIEBACiBzdGF0aWMgaW50IGRvX2ltbHMgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfTTgzMjZYRykgfHwgZGVmaW5lZChDT05GSUdfTTgzMjVYRykgfHwgZGVmaW5lZChDT05GSUdfTTgzMjRYRykKK3N0YXRpYyB2b2lkIGZpeHVwX2NvbWNlcnRvX2Jvb3RhcmdzKHZvaWQpOworI2VuZGlmCisKIHN0YXRpYyB2b2lkIHByaW50X3R5cGUgKGltYWdlX2hlYWRlcl90ICpoZHIpOwogCiAjaWZkZWYgX19JMzg2X18KQEAgLTM0MSw2ICszNDcsNyBAQAogI2VuZGlmCS8qIENPTkZJR19IV19XQVRDSERPRyB8fCBDT05GSUdfV0FUQ0hET0cgKi8KIAkJfQogCQlicmVhazsKKyNpZm5kZWYgQ09ORklHX05PX0daSVAKIAljYXNlIElIX0NPTVBfR1pJUDoKIAkJcHJpbnRmICgiICAgVW5jb21wcmVzc2luZyAlcyAuLi4gIiwgbmFtZSk7CiAJCWlmIChndW56aXAgKCh2b2lkICopbnRvaGwoaGRyLT5paF9sb2FkKSwgdW5jX2xlbiwKQEAgLTM1MCw2ICszNTcsNyBAQAogCQkJZG9fcmVzZXQgKGNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2KTsKIAkJfQogCQlicmVhazsKKyNlbmRpZiAvKiBDT05GSUdfTk9fR1pJUCAqLwogI2lmZGVmIENPTkZJR19CWklQMgogCWNhc2UgSUhfQ09NUF9CWklQMjoKIAkJcHJpbnRmICgiICAgVW5jb21wcmVzc2luZyAlcyAuLi4gIiwgbmFtZSk7CkBAIC00MDksNiArNDE3LDEwIEBACiAJfQogCVNIT1dfQk9PVF9QUk9HUkVTUyAoOCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NODMyNlhHKSB8fCBkZWZpbmVkKENPTkZJR19NODMyNVhHKSB8fCBkZWZpbmVkKENPTkZJR19NODMyNFhHKQorCWZpeHVwX2NvbWNlcnRvX2Jvb3RhcmdzKCk7CisjZW5kaWYKKwogCXN3aXRjaCAoaGRyLT5paF9vcykgewogCWRlZmF1bHQ6CQkJLyogaGFuZGxlZCBieSAob3JpZ2luYWwpIExpbnV4IGNhc2UgKi8KIAljYXNlIElIX09TX0xJTlVYOgpAQCAtNDYxLDYgKzQ3MywyMCBAQAogCXJldHVybiAxOwogfQogCitpbnQgYm9vdG1fbWF5YmVfYXV0b3N0YXJ0KGNtZF90YmxfdCAqY21kdHAsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwljb25zdCBjaGFyICplcCA9IGdldGVudigiYXV0b3N0YXJ0Iik7CisKKwlpZiAoZXAgJiYgIXN0cmNtcChlcCwgInllcyIpKSB7CisJCWNoYXIgKmxvY2FsX2FyZ3NbMl07CisJCWxvY2FsX2FyZ3NbMF0gPSAoY2hhciAqKWNtZDsKKwkJbG9jYWxfYXJnc1sxXSA9IE5VTEw7CisJCXByaW50ZigiQXV0b21hdGljIGJvb3Qgb2YgaW1hZ2UgYXQgYWRkciAweCUwOGxYIC4uLlxuIiwgbG9hZF9hZGRyKTsKKwkJcmV0dXJuIGRvX2Jvb3RtKGNtZHRwLCAwLCAxLCBsb2NhbF9hcmdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KIFVfQk9PVF9DTUQoCiAgCWJvb3RtLAlDRkdfTUFYQVJHUywJMSwJZG9fYm9vdG0sCiAgCSJib290bSAgIC0gYm9vdCBhcHBsaWNhdGlvbiBpbWFnZSBmcm9tIG1lbW9yeVxuIiwKQEAgLTQ3Niw2ICs1MDIsNDIgQEAKICNlbmRpZgogKTsKIAorCisjaWYgZGVmaW5lZChDT05GSUdfTTgzMjZYRykgfHwgZGVmaW5lZChDT05GSUdfTTgzMjVYRykgfHwgZGVmaW5lZChDT05GSUdfTTgzMjRYRykKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGNvbWNlcnRvX3BhcnRfbm9bOF07CisjZGVmaW5lIEZQUF9FTkFCTEVEIDEgLyogRGVmYXVsdCBNb2RlIGlzIEZQUCBFbmFibGVkICovCisjZGVmaW5lIEZQUF9ESVNBQkxFRCAwIC8qIEZQUCBFbmFibGVkICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19OT0ZQUF9NT0RFKQorI2RlZmluZSBGUFBfTU9ERSBGUFBfRElTQUJMRUQKKyNlbmRpZgorI2lmICFkZWZpbmVkKENPTkZJR19OT0ZQUF9NT0RFKQorI2RlZmluZSBGUFBfTU9ERSBGUFBfRU5BQkxFRAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGZpeHVwX2NvbWNlcnRvX2Jvb3RhcmdzKHZvaWQpCit7CisJY2hhciBidWZbMjU2XTsgCisJY2hhciBwYXJ0bm9bMzJdOyAKKwljaGFyIGZwcG1vZGVbMzJdOyAKKwljaGFyICpjbWRsaW5lID0gZ2V0ZW52ICgiYm9vdGFyZ3MiKTsKKworCXNwcmludGYgKHBhcnRubywgIiBwYXJ0bm89JXMiLCBjb21jZXJ0b19wYXJ0X25vKTsKKwlzcHJpbnRmIChmcHBtb2RlLCAiIGZwcG1vZGU9JWQiLCBGUFBfTU9ERSk7CisJaWYgKGNtZGxpbmUpIHsKKwkJc3RyY3B5KGJ1ZiwgY21kbGluZSk7CisJCXN0cmNhdChidWYsIHBhcnRubyk7CisJCXN0cmNhdChidWYsIGZwcG1vZGUpOworCisJfSBlbHNlIHsKKwkJc3RyY3B5KGJ1ZiwgcGFydG5vKTsKKwkJc3RyY2F0KGJ1ZiwgZnBwbW9kZSk7CisJfQorCQorCXNldGVudiAoImJvb3RhcmdzIiwgYnVmKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1NJTEVOVF9DT05TT0xFCiBzdGF0aWMgdm9pZAogZml4dXBfc2lsZW50X2xpbnV4ICgpCkBAIC0xNDI5LDYgKzE0OTEsNyBAQAogCiAjZGVmaW5lIERFRkxBVEVECTgKIAorI2lmbmRlZiBDT05GSUdfTk9fR1pJUAogaW50IGd1bnppcCh2b2lkICpkc3QsIGludCBkc3RsZW4sIHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgbG9uZyAqbGVucCkKIHsKIAl6X3N0cmVhbSBzOwpAQCAtMTQ4Myw2ICsxNTQ2LDcgQEAKIAogCXJldHVybiAoMCk7CiB9CisjZW5kaWYgLyogQ09ORklHX05PX0daSVAgKi8KIAogI2lmZGVmIENPTkZJR19CWklQMgogdm9pZCBiel9pbnRlcm5hbF9lcnJvcihpbnQgZXJyY29kZSkKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZWxmLmMgYi9jb21tb24vY21kX2VsZi5jCmluZGV4IDFkOTJiYjMuLjhkZjRlOGMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfZWxmLmMKKysrIGIvY29tbW9uL2NtZF9lbGYuYwpAQCAtNTQsMTMgKzU0LDE0IEBACiAJYWRkciA9IGxvYWRfZWxmX2ltYWdlIChhZGRyKTsKIAogCXByaW50ZiAoIiMjIFN0YXJ0aW5nIGFwcGxpY2F0aW9uIGF0IDB4JTA4bHggLi4uXG4iLCBhZGRyKTsKLQorI2lmIDAKIAkvKgogCSAqIFFOWCBpbWFnZXMgcmVxdWlyZSB0aGUgZGF0YSBjYWNoZSBpcyBkaXNhYmxlZC4KIAkgKiBEYXRhIGNhY2hlIGlzIGFscmVhZHkgZmx1c2hlZCwgc28ganVzdCB0dXJuIGl0IG9mZi4KIAkgKi8KIAlpZiAoZGNhY2hlX3N0YXR1cyAoKSkKIAkJZGNhY2hlX2Rpc2FibGUgKCk7CisjZW5kaWYKIAogCS8qCiAJICogcGFzcyBhZGRyZXNzIHBhcmFtZXRlciBhcyBhcmd2WzBdIChha2EgY29tbWFuZCBuYW1lKSwKQEAgLTk5LDggKzEwMCw4IEBACiAJaWYgKCh0bXAgPSBnZXRlbnYgKCJsb2FkYWRkciIpKSAhPSBOVUxMKSB7CiAJCWFkZHIgPSBzaW1wbGVfc3RydG91bCAodG1wLCBOVUxMLCAxNik7CiAJfSBlbHNlIHsKLQkJcHV0cyAoIk5vIGxvYWQgYWRkcmVzcyBwcm92aWRlZFxuIik7Ci0JCXJldHVybiAxOworCQlhZGRyID0gMHg4MTQwMDAwMDsKKwkJcHJpbnRmKCJObyBsb2FkIGFkZHJlc3MgcHJvdmlkZWQsIGxvb2tpbmcgQCAleFxuIiwgYWRkcik7CiAJfQogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkVUKQpAQCAtMTM3LDcgKzEzOCw3IEBACiAJICovCiAKIAlpZiAoKHRtcCA9IGdldGVudiAoImJvb3RhZGRyIikpID09IE5VTEwpCi0JCWJvb3RhZGRyID0gMHg0MjAwOworCQlib290YWRkciA9IDB4ODA4MDA3MDA7IC8qRGVmYXVsdCB2YWx1ZSBmb3IgQzF4eCBkZXZpY2VzICovCiAJZWxzZQogCQlib290YWRkciA9IHNpbXBsZV9zdHJ0b3VsICh0bXAsIE5VTEwsIDE2KTsKIApkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9qZmZzMi5jIGIvY29tbW9uL2NtZF9qZmZzMi5jCmluZGV4IDdmZDFmYTMuLjMyY2Y0OGEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfamZmczIuYworKysgYi9jb21tb24vY21kX2pmZnMyLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogI2VuZGlmIC8qICFDRkdfTkFORF9MRUdBQ1kgKi8KICNlbmRpZiAvKiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKSAqLwogLyogZW5hYmxlL2Rpc2FibGUgZGVidWdnaW5nIG1lc3NhZ2VzICovCi0jZGVmaW5lCURFQlVHX0pGRlMKKy8vI2RlZmluZQlERUJVR19KRkZTCiAjdW5kZWYJREVCVUdfSkZGUwogCiAjaWZkZWYgIERFQlVHX0pGRlMKQEAgLTE4MzUsNiArMTgzNSw2MCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFUtYm9vdCBjb21tYW5kcwkJCQkgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkb19qZmZzMl91bG9hZChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBjaGFyICpmc25hbWU7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgaW50IHNpemU7CisgICAgc3RydWN0IHBhcnRfaW5mbyAqcGFydDsKKyAgICB1bG9uZyBvZmZzZXQgPSBsb2FkX2FkZHI7CisKKyAgICAvKiBwcmUtc2V0IEJvb3QgZmlsZSBuYW1lICovCisgICAgaWYgKChmaWxlbmFtZSA9IGdldGVudigiYm9vdGZpbGUiKSkgPT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9ICJ1SW1hZ2UiOworICAgIH0KKworICAgIGlmIChhcmdjID09IDIpIHsKKyAgICAgICAgZmlsZW5hbWUgPSBhcmd2WzFdOworICAgIH0KKyAgICBpZiAoYXJnYyA9PSAzKSB7CisgICAgICAgIG9mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKKyAgICAgICAgbG9hZF9hZGRyID0gb2Zmc2V0OworICAgICAgICBmaWxlbmFtZSA9IGFyZ3ZbMl07CisgICAgfQorCisgICAgLyogbWFrZSBzdXJlIHdlIGFyZSBpbiBzeW5jIHdpdGggZW52IHZhcmlhYmxlcyAqLworICAgIGlmIChtdGRwYXJ0c19pbml0KCkgIT0wKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmICgocGFydCA9IGpmZnMyX3BhcnRfaW5mbyhjdXJyZW50X2RldiwgY3VycmVudF9wYXJ0bnVtKSkpeworCisgICAgICAgIC8qIGNoZWNrIHBhcnRpdGlvbiB0eXBlIGZvciBjcmFtZnMgKi8KKyAgICAgICAgZnNuYW1lID0gKGNyYW1mc19jaGVjayhwYXJ0KSA/ICJDUkFNRlMiIDogIkpGRlMyIik7CisgICAgICAgIHByaW50ZigiIyMjICVzIGxvYWRpbmcgJyVzJyB0byAweCVseFxuIiwgZnNuYW1lLCBmaWxlbmFtZSwgb2Zmc2V0KTsKKworICAgICAgICBpZiAoY3JhbWZzX2NoZWNrKHBhcnQpKSB7CisgICAgICAgICAgICBzaXplID0gY3JhbWZzX2xvYWQgKChjaGFyICopIG9mZnNldCwgcGFydCwgZmlsZW5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogaWYgdGhpcyBpcyBub3QgY3JhbWZzIGFzc3VtZSBqZmZzMiAqLworICAgICAgICAgICAgc2l6ZSA9IGpmZnMyXzFwYXNzX3Vsb2FkKChjaGFyICopb2Zmc2V0LCBwYXJ0LCBmaWxlbmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA+IDApIHsKKyAgICAgICAgICAgIGNoYXIgYnVmWzEwXTsKKyAgICAgICAgICAgIHByaW50ZigiIyMjICVzIGxvYWQgY29tcGxldGU6ICVkIGJ5dGVzIGxvYWRlZCB0byAweCVseFxuIiwKKyAgICAgICAgICAgICAgICBmc25hbWUsIHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiV4Iiwgc2l6ZSk7CisgICAgICAgICAgICBzZXRlbnYoImZpbGVzaXplIiwgYnVmKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiIyMjICVzIExPQUQgRVJST1I8JXg+IGZvciAlcyFcbiIsIGZzbmFtZSwgc2l6ZSwgZmlsZW5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICEoc2l6ZSA+IDApOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKwogCiAvKioKICAqIFJvdXRpbmUgaW1wbGVtZW50aW5nIGZzbG9hZCB1LWJvb3QgY29tbWFuZC4gVGhpcyByb3V0aW5lIHRyaWVzIHRvIGxvYWQKQEAgLTIxMjcsNiArMjE4MSwxNSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogVV9CT09UX0NNRCgKKyAgICB1bG9hZCwgMywgIDAsICBkb19qZmZzMl91bG9hZCwKKyAgICAidWxvYWRcdC0gbG9hZCBrZXJuZWwgZmlsZSBmcm9tIGEgZmlsZXN5c3RlbSBpbWFnZVxuIiwKKyAgICAiWyBvZmYgXSBbIGZpbGVuYW1lIF1cbiIKKyAgICAiICAgIC0gbG9hZCBrZXJuZWwgZmlsZSBmcm9tIGZsYXNoIGJhbmtcbiIKKyAgICAiICAgICAgd2l0aCBvZmZzZXQgJ29mZidcbiIKKyk7CisKKworVV9CT09UX0NNRCgKIAlmc2xvYWQsCTMsCTAsCWRvX2pmZnMyX2ZzbG9hZCwKIAkiZnNsb2FkXHQtIGxvYWQgYmluYXJ5IGZpbGUgZnJvbSBhIGZpbGVzeXN0ZW0gaW1hZ2VcbiIsCiAJIlsgb2ZmIF0gWyBmaWxlbmFtZSBdXG4iCmRpZmYgLS1naXQgYS9jb21tb24vY21kX21lbS5jIGIvY29tbW9uL2NtZF9tZW0uYwppbmRleCBkMGZhZTZiLi42Mzg4NGVlIDEwMDY0NAotLS0gYS9jb21tb24vY21kX21lbS5jCisrKyBiL2NvbW1vbi9jbWRfbWVtLmMKQEAgLTQzOCw2ICs0MzgsMzcgQEAKIAkJcHV0cyAoImRvbmVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CisjaWZkZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKyAgICAgICAgaWYgKCAoYWRkcjJpbmZvKGFkZHIpICE9IE5VTEwpKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGNmZ19ncGlvID0gMDsKKyAgICAgICAgICAgICAgICBwdXRzICgiQ29weSBmcm9tIEZsYXNoLi4uICIpOworICAgICAgICAgICAgICAgIGJvYXJkX21hcChOVUxMLCBhZGRyKTsKKyAgICAgICAgICAgICAgICBpZigoYWRkciA8IChQSFlTX0ZMQVNIMSArIDB4ODAwMDAwKSkgJiYgKChhZGRyKyhjb3VudCpzaXplKSkgPj0gKFBIWVNfRkxBU0gxICsgMHg4MDAwMDApKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjZmdfZ3BpbyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKGNmZ19ncGlvICYmIChhZGRyID49KFBIWVNfRkxBU0gxICsgMHg4MDAwMDApKSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19ncGlvID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9hcmRfbWFwKE5VTEwsIGFkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodWxvbmcgICopZGVzdCkgPSAqKCh1bG9uZyAgKilhZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodXNob3J0ICopZGVzdCkgPSAqKCh1c2hvcnQgKilhZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodV9jaGFyICopZGVzdCkgPSAqKCh1X2NoYXIgKilhZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHV0cyAoImRvbmVcbiIpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyNlbmRpZgorCiAjZW5kaWYKIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01NQykKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbmFuZC5jIGIvY29tbW9uL2NtZF9uYW5kLmMKaW5kZXggNzI4NjcyNi4uNDg2YWVhZSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9uYW5kLmMKKysrIGIvY29tbW9uL2NtZF9uYW5kLmMKQEAgLTQsMTczICs0LDQ0MyBAQAogICogKGMpIDE5OTkgTWFjaGluZSBWaXNpb24gSG9sZGluZ3MsIEluYy4KICAqIChjKSAxOTk5LCAyMDAwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCisgKiBQb3J0ZWQgJ2R5bmVudicgdG8gJ25hbmQgZW52Lm9vYicgY29tbWFuZAorICogKEMpIDIwMTAgTmFub21ldHJpY3MsIEluYy4KKyAqICdkeW5lbnYnIC0tIER5bmFtaWMgZW52aXJvbm1lbnQgb2Zmc2V0IGluIE5BTkQgT09CCisgKiAoQykgQ29weXJpZ2h0IDIwMDYtMjAwNyBPcGVuTW9rbywgSW5jLgogICogQWRkZWQgMTYtYml0IG5hbmQgc3VwcG9ydAogICogKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCwgMjAxMiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvcgorICogVGhlIHBvcnRpb25zIG9mIHRoaXMgZmlsZSB3aG9zZSBjb3B5cmlnaHQgaXMgaGVsZCBieSBGcmVlc2NhbGUgYW5kIHdoaWNoCisgKiBhcmUgbm90IGNvbnNpZGVyZWQgYSBkZXJpdmVkIHdvcmsgb2YgR1BMIHYyLW9ubHkgY29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQKKyAqIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgotCi0KLSNpZm5kZWYgQ0ZHX05BTkRfTEVHQUNZCi0vKgotICoKLSAqIE5ldyBOQU5EIHN1cHBvcnQKLSAqCi0gKi8KLSNpbmNsdWRlIDxjb21tb24uaD4KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCi0KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPHdhdGNoZG9nLmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCi0jaWZkZWYgQ09ORklHX1NIT1dfQk9PVF9QUk9HUkVTUwotIyBpbmNsdWRlIDxzdGF0dXNfbGVkLmg+Ci0jIGRlZmluZSBTSE9XX0JPT1RfUFJPR1JFU1MoYXJnKQlzaG93X2Jvb3RfcHJvZ3Jlc3MoYXJnKQotI2Vsc2UKLSMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpCi0jZW5kaWYKLQogI2luY2x1ZGUgPGpmZnMyL2pmZnMyLmg+CiAjaW5jbHVkZSA8bmFuZC5oPgorI2luY2x1ZGUgPGJvb3RzdGFnZS5oPgorI2luY2x1ZGUgPGNvbmZpZy5oPgogCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSkZGUzIpICYmIGRlZmluZWQoQ09ORklHX0pGRlMyX0NNRExJTkUpCiAKLS8qIHBhcml0aW9uIGhhbmRsaW5nIHJvdXRpbmVzICovCisjaWYgZGVmaW5lZChDT05GSUdfQ01EX01URFBBUlRTKQorCisvKiBwYXJ0aXRpb24gaGFuZGxpbmcgcm91dGluZXMgKi8KIGludCBtdGRwYXJ0c19pbml0KHZvaWQpOwogaW50IGlkX3BhcnNlKGNvbnN0IGNoYXIgKmlkLCBjb25zdCBjaGFyICoqcmV0X2lkLCB1OCAqZGV2X3R5cGUsIHU4ICpkZXZfbnVtKTsKIGludCBmaW5kX2Rldl9hbmRfcGFydChjb25zdCBjaGFyICppZCwgc3RydWN0IG10ZF9kZXZpY2UgKipkZXYsCi0JCXU4ICpwYXJ0X251bSwgc3RydWN0IHBhcnRfaW5mbyAqKnBhcnQpOworCQkgICAgICB1OCAqcGFydF9udW0sIHN0cnVjdCBwYXJ0X2luZm8gKipwYXJ0KTsKICNlbmRpZgogCi1leHRlcm4gbmFuZF9pbmZvX3QgbmFuZF9pbmZvW107ICAgICAgIC8qIGluZm8gZm9yIE5BTkQgY2hpcHMgKi8KLQotc3RhdGljIGludCBuYW5kX2R1bXBfb29iKG5hbmRfaW5mb190ICpuYW5kLCB1bG9uZyBvZmYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmFuZF9kdW1wKG5hbmRfaW5mb190ICpuYW5kLCB1bG9uZyBvZmYpCitzdGF0aWMgaW50IG5hbmRfZHVtcChuYW5kX2luZm9fdCAqbmFuZCwgdWxvbmcgb2ZmLCBpbnQgb25seV9vb2IsIGludCByZXBlYXQpCiB7CiAJaW50IGk7Ci0JdV9jaGFyICpidWYsICpwOworCXVfY2hhciAqZGF0YnVmLCAqb29iYnVmLCAqcDsKKwlzdGF0aWMgbG9mZl90IGxhc3Q7CiAKLQlidWYgPSBtYWxsb2MobmFuZC0+b29iYmxvY2sgKyBuYW5kLT5vb2JzaXplKTsKLQlpZiAoIWJ1ZikgeworCWlmIChyZXBlYXQpCisJCW9mZiA9IGxhc3QgKyBuYW5kLT53cml0ZXNpemU7CisKKwlsYXN0ID0gb2ZmOworCisJZGF0YnVmID0gbWFsbG9jKG5hbmQtPndyaXRlc2l6ZSk7CisJb29iYnVmID0gbWFsbG9jKG5hbmQtPm9vYnNpemUpOworCWlmICghZGF0YnVmIHx8ICFvb2JidWYpIHsKIAkJcHV0cygiTm8gbWVtb3J5IGZvciBwYWdlIGJ1ZmZlclxuIik7CiAJCXJldHVybiAxOwogCX0KLQlvZmYgJj0gfihuYW5kLT5vb2JibG9jayAtIDEpOwotCWkgPSBuYW5kX3JlYWRfcmF3KG5hbmQsIGJ1Ziwgb2ZmLCBuYW5kLT5vb2JibG9jaywgbmFuZC0+b29ic2l6ZSk7CisJb2ZmICY9IH4obmFuZC0+d3JpdGVzaXplIC0gMSk7CisJbG9mZl90IGFkZHIgPSAobG9mZl90KSBvZmY7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOworCW9wcy5kYXRidWYgPSBkYXRidWY7CisJb3BzLm9vYmJ1ZiA9IG9vYmJ1ZjsKKwlvcHMubGVuID0gbmFuZC0+d3JpdGVzaXplOworCW9wcy5vb2JsZW4gPSBuYW5kLT5vb2JzaXplOworCW9wcy5tb2RlID0gTVREX09PQl9SQVc7CisJaSA9IG5hbmQtPnJlYWRfb29iKG5hbmQsIGFkZHIsICZvcHMpOwogCWlmIChpIDwgMCkgewotCQlwcmludGYoIkVycm9yICglZCkgcmVhZGluZyBwYWdlICUwOHhcbiIsIGksIG9mZik7Ci0JCWZyZWUoYnVmKTsKKwkJcHJpbnRmKCJFcnJvciAoJWQpIHJlYWRpbmcgcGFnZSAlMDhseFxuIiwgaSwgb2ZmKTsKKwkJZnJlZShkYXRidWYpOworCQlmcmVlKG9vYmJ1Zik7CiAJCXJldHVybiAxOwogCX0KLQlwcmludGYoIlBhZ2UgJTA4eCBkdW1wOlxuIiwgb2ZmKTsKLQlpID0gbmFuZC0+b29iYmxvY2sgPj4gNDsgcCA9IGJ1ZjsKKwlwcmludGYoIlBhZ2UgJTA4bHggZHVtcDpcbiIsIG9mZik7CisJaSA9IG5hbmQtPndyaXRlc2l6ZSA+PiA0OworCXAgPSBkYXRidWY7CisKIAl3aGlsZSAoaS0tKSB7Ci0JCXByaW50ZiggIlx0JTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IgotCQkJIiAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCQkJcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSwgcFs3XSwKLQkJCXBbOF0sIHBbOV0sIHBbMTBdLCBwWzExXSwgcFsxMl0sIHBbMTNdLCBwWzE0XSwgcFsxNV0pOworCQlpZiAoIW9ubHlfb29iKQorCQkJcHJpbnRmKCJcdCUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIKKwkJCSAgICAgICAiICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQkgICAgICAgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSwgcFs3XSwKKwkJCSAgICAgICBwWzhdLCBwWzldLCBwWzEwXSwgcFsxMV0sIHBbMTJdLCBwWzEzXSwgcFsxNF0sCisJCQkgICAgICAgcFsxNV0pOwogCQlwICs9IDE2OwogCX0KIAlwdXRzKCJPT0I6XG4iKTsKIAlpID0gbmFuZC0+b29ic2l6ZSA+PiAzOworCXAgPSBvb2JidWY7CiAJd2hpbGUgKGktLSkgewotCQlwcmludGYoICJcdCUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkJCXBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0sIHBbNl0sIHBbN10pOworCQlwcmludGYoIlx0JTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkgICAgICAgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSwgcFs3XSk7CiAJCXAgKz0gODsKIAl9Ci0JZnJlZShidWYpOworCWZyZWUoZGF0YnVmKTsKKwlmcmVlKG9vYmJ1Zik7CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludCBzdHIybG9uZyhjaGFyICpwLCB1bG9uZyAqbnVtKQorc3RhdGljIGludCBzZXRfZGV2KGludCBkZXYpCit7CisJaWYgKGRldiA8IDAgfHwgZGV2ID49IENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFIHx8CisJICAgICFuYW5kX2luZm9bZGV2XS5uYW1lKSB7CisJCXB1dHMoIk5vIHN1Y2ggZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChuYW5kX2N1cnJfZGV2aWNlID09IGRldikKKwkJcmV0dXJuIDA7CisKKwlwcmludGYoIkRldmljZSAlZDogJXMiLCBkZXYsIG5hbmRfaW5mb1tkZXZdLm5hbWUpOworCXB1dHMoIi4uLiBpcyBub3cgY3VycmVudCBkZXZpY2VcbiIpOworCW5hbmRfY3Vycl9kZXZpY2UgPSBkZXY7CisKKyNpZmRlZiBDT05GSUdfU1lTX05BTkRfU0VMRUNUX0RFVklDRQorCWJvYXJkX25hbmRfc2VsZWN0X2RldmljZShuYW5kX2luZm9bZGV2XS5wcml2LCBkZXYpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3RyMm9mZihjb25zdCBjaGFyICpwLCBsb2ZmX3QgKm51bSkKK3sKKwljaGFyICplbmRwdHI7CisKKwkqbnVtID0gc2ltcGxlX3N0cnRvdWxsKHAsICZlbmRwdHIsIDE2KTsKKwlyZXR1cm4gKnAgIT0gJ1wwJyAmJiAqZW5kcHRyID09ICdcMCc7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0cjJsb25nKGNvbnN0IGNoYXIgKnAsIHVsb25nICpudW0pCiB7CiAJY2hhciAqZW5kcHRyOwogCiAJKm51bSA9IHNpbXBsZV9zdHJ0b3VsKHAsICZlbmRwdHIsIDE2KTsKLQlyZXR1cm4gKCpwICE9ICdcMCcgJiYgKmVuZHB0ciA9PSAnXDAnKSA/IDEgOiAwOworCXJldHVybiAqcCAhPSAnXDAnICYmICplbmRwdHIgPT0gJ1wwJzsKIH0KIAotc3RhdGljIGludAotYXJnX29mZl9zaXplKGludCBhcmdjLCBjaGFyICphcmd2W10sIG5hbmRfaW5mb190ICpuYW5kLCB1bG9uZyAqb2ZmLCB1bG9uZyAqc2l6ZSkKK3N0YXRpYyBpbnQgZ2V0X3BhcnQoY29uc3QgY2hhciAqcGFydG5hbWUsIGludCAqaWR4LCBsb2ZmX3QgKm9mZiwgbG9mZl90ICpzaXplKQogewotCWludCBpZHggPSBuYW5kX2N1cnJfZGV2aWNlOwotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKSAmJiBkZWZpbmVkKENPTkZJR19KRkZTMl9DTURMSU5FKQorI2lmZGVmIENPTkZJR19DTURfTVREUEFSVFMKIAlzdHJ1Y3QgbXRkX2RldmljZSAqZGV2OwogCXN0cnVjdCBwYXJ0X2luZm8gKnBhcnQ7CiAJdTggcG51bTsKKwlpbnQgcmV0OwogCi0JaWYgKGFyZ2MgPj0gMSAmJiAhKHN0cjJsb25nKGFyZ3ZbMF0sIG9mZikpKSB7Ci0JCWlmICgobXRkcGFydHNfaW5pdCgpID09IDApICYmCi0JCSAgICAoZmluZF9kZXZfYW5kX3BhcnQoYXJndlswXSwgJmRldiwgJnBudW0sICZwYXJ0KSA9PSAwKSkgewotCQkJaWYgKGRldi0+aWQtPnR5cGUgIT0gTVREX0RFVl9UWVBFX05BTkQpIHsKLQkJCQlwdXRzKCJub3QgYSBOQU5EIGRldmljZVxuIik7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQkJKm9mZiA9IHBhcnQtPm9mZnNldDsKLQkJCWlmIChhcmdjID49IDIpIHsKLQkJCQlpZiAoIShzdHIybG9uZyhhcmd2WzFdLCBzaXplKSkpIHsKLQkJCQkJcHJpbnRmKCInJXMnIGlzIG5vdCBhIG51bWJlclxuIiwgYXJndlsxXSk7Ci0JCQkJCXJldHVybiAtMTsKLQkJCQl9Ci0JCQkJaWYgKCpzaXplID4gcGFydC0+c2l6ZSkKLQkJCQkJKnNpemUgPSBwYXJ0LT5zaXplOwotCQkJfSBlbHNlIHsKLQkJCQkqc2l6ZSA9IHBhcnQtPnNpemU7Ci0JCQl9Ci0JCQlpZHggPSBkZXYtPmlkLT5udW07Ci0JCQkqbmFuZCA9IG5hbmRfaW5mb1tpZHhdOwotCQkJZ290byBvdXQ7Ci0JCX0KKwlyZXQgPSBtdGRwYXJ0c19pbml0KCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGZpbmRfZGV2X2FuZF9wYXJ0KHBhcnRuYW1lLCAmZGV2LCAmcG51bSwgJnBhcnQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoZGV2LT5pZC0+dHlwZSAhPSBNVERfREVWX1RZUEVfTkFORCkgeworCQlwdXRzKCJub3QgYSBOQU5EIGRldmljZVxuIik7CisJCXJldHVybiAtMTsKIAl9CisKKwkqb2ZmID0gcGFydC0+b2Zmc2V0OworCSpzaXplID0gcGFydC0+c2l6ZTsKKwkqaWR4ID0gZGV2LT5pZC0+bnVtOworCisJcmV0ID0gc2V0X2RldigqaWR4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7CisjZWxzZQorCXB1dHMoIm9mZnNldCBpcyBub3QgYSBudW1iZXJcbiIpOworCXJldHVybiAtMTsKICNlbmRpZgorfQogCi0JaWYgKGFyZ2MgPj0gMSkgewotCQlpZiAoIShzdHIybG9uZyhhcmd2WzBdLCBvZmYpKSkgewotCQkJcHJpbnRmKCInJXMnIGlzIG5vdCBhIG51bWJlclxuIiwgYXJndlswXSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9IGVsc2UgewotCQkqb2ZmID0gMDsKK3N0YXRpYyBpbnQgYXJnX29mZihjb25zdCBjaGFyICphcmcsIGludCAqaWR4LCBsb2ZmX3QgKm9mZiwgbG9mZl90ICptYXhzaXplKQoreworCWlmICghc3RyMm9mZihhcmcsIG9mZikpCisJCXJldHVybiBnZXRfcGFydChhcmcsIGlkeCwgb2ZmLCBtYXhzaXplKTsKKworCWlmICgqb2ZmID49IG5hbmRfaW5mb1sqaWR4XS5zaXplKSB7CisJCXB1dHMoIk9mZnNldCBleGNlZWRzIGRldmljZSBsaW1pdFxuIik7CisJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoYXJnYyA+PSAyKSB7Ci0JCWlmICghKHN0cjJsb25nKGFyZ3ZbMV0sIHNpemUpKSkgewotCQkJcHJpbnRmKCInJXMnIGlzIG5vdCBhIG51bWJlclxuIiwgYXJndlsxXSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9IGVsc2UgewotCQkqc2l6ZSA9IG5hbmQtPnNpemUgLSAqb2ZmOwotCX0KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKSAmJiBkZWZpbmVkKENPTkZJR19KRkZTMl9DTURMSU5FKQotb3V0OgotI2VuZGlmCi0JcHJpbnRmKCJkZXZpY2UgJWQgIiwgaWR4KTsKLQlpZiAoKnNpemUgPT0gbmFuZC0+c2l6ZSkKLQkJcHV0cygid2hvbGUgY2hpcFxuIik7Ci0JZWxzZQotCQlwcmludGYoIm9mZnNldCAweCV4LCBzaXplIDB4JXhcbiIsICpvZmYsICpzaXplKTsKKwkqbWF4c2l6ZSA9IG5hbmRfaW5mb1sqaWR4XS5zaXplIC0gKm9mZjsKIAlyZXR1cm4gMDsKIH0KIAotaW50IGRvX25hbmQoY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorc3RhdGljIGludCBhcmdfb2ZmX3NpemUoaW50IGFyZ2MsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgaW50ICppZHgsCisJCQlsb2ZmX3QgKm9mZiwgbG9mZl90ICpzaXplKQogewotCWludCBpLCBkZXYsIHJldDsKLQl1bG9uZyBhZGRyLCBvZmYsIHNpemU7CisJaW50IHJldDsKKwlsb2ZmX3QgbWF4c2l6ZSA9IDA7CisKKwlpZiAoYXJnYyA9PSAwKSB7CisJCSpvZmYgPSAwOworCQkqc2l6ZSA9IG5hbmRfaW5mb1sqaWR4XS5zaXplOworCQlnb3RvIHByaW50OworCX0KKworCXJldCA9IGFyZ19vZmYoYXJndlswXSwgaWR4LCBvZmYsICZtYXhzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGFyZ2MgPT0gMSkgeworCQkqc2l6ZSA9IG1heHNpemU7CisJCWdvdG8gcHJpbnQ7CisJfQorCisJaWYgKCFzdHIyb2ZmKGFyZ3ZbMV0sIHNpemUpKSB7CisJCXByaW50ZigiJyVzJyBpcyBub3QgYSBudW1iZXJcbiIsIGFyZ3ZbMV0pOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCpzaXplID4gbWF4c2l6ZSkgeworCQlwdXRzKCJTaXplIGV4Y2VlZHMgcGFydGl0aW9uIG9yIGRldmljZSBsaW1pdFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKK3ByaW50OgorCXByaW50ZigiZGV2aWNlICVkICIsICppZHgpOworCWlmICgqc2l6ZSA9PSBuYW5kX2luZm9bKmlkeF0uc2l6ZSkKKwkJcHV0cygid2hvbGUgY2hpcFxuIik7CisJZWxzZQorCQlwcmludGYoIm9mZnNldCAweCVsbHgsIHNpemUgMHglbGx4XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykqb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKSpzaXplKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19DTURfTkFORF9MT0NLX1VOTE9DSworc3RhdGljIHZvaWQgcHJpbnRfc3RhdHVzKHVsb25nIHN0YXJ0LCB1bG9uZyBlbmQsIHVsb25nIGVyYXNlc2l6ZSwgaW50IHN0YXR1cykKK3sKKwlwcmludGYoIiUwOGx4IC0gJTA4bHg6ICUwOGx4IGJsb2NrcyAlcyVzJXNcbiIsCisJCXN0YXJ0LAorCQllbmQgLSAxLAorCQkoZW5kIC0gc3RhcnQpIC8gZXJhc2VzaXplLAorCQkoKHN0YXR1cyAmIE5BTkRfTE9DS19TVEFUVVNfVElHSFQpID8gICJUSUdIVCAiIDogIiIpLAorCQkoKHN0YXR1cyAmIE5BTkRfTE9DS19TVEFUVVNfTE9DSykgPyAgIkxPQ0sgIiA6ICIiKSwKKwkJKChzdGF0dXMgJiBOQU5EX0xPQ0tfU1RBVFVTX1VOTE9DSykgPyAgIlVOTE9DSyAiIDogIiIpKTsKK30KKworc3RhdGljIHZvaWQgZG9fbmFuZF9zdGF0dXMobmFuZF9pbmZvX3QgKm5hbmQpCit7CisJdWxvbmcgYmxvY2tfc3RhcnQgPSAwOworCXVsb25nIG9mZjsKKwlpbnQgbGFzdF9zdGF0dXMgPSAtMTsKKworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG5hbmQtPnByaXY7CisJLyogY2hlY2sgdGhlIFdQIGJpdCAqLworCW5hbmRfY2hpcC0+Y21kZnVuYyhuYW5kLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7CisJcHJpbnRmKCJkZXZpY2UgaXMgJXN3cml0ZSBwcm90ZWN0ZWRcbiIsCisJCShuYW5kX2NoaXAtPnJlYWRfYnl0ZShuYW5kKSAmIDB4ODAgPworCQkiTk9UICIgOiAiIikpOworCisJZm9yIChvZmYgPSAwOyBvZmYgPCBuYW5kLT5zaXplOyBvZmYgKz0gbmFuZC0+ZXJhc2VzaXplKSB7CisJCWludCBzID0gbmFuZF9nZXRfbG9ja19zdGF0dXMobmFuZCwgb2ZmKTsKKworCQkvKiBwcmludCBtZXNzYWdlIG9ubHkgaWYgc3RhdHVzIGhhcyBjaGFuZ2VkICovCisJCWlmIChzICE9IGxhc3Rfc3RhdHVzICYmIG9mZiAhPSAwKSB7CisJCQlwcmludF9zdGF0dXMoYmxvY2tfc3RhcnQsIG9mZiwgbmFuZC0+ZXJhc2VzaXplLAorCQkJCQlsYXN0X3N0YXR1cyk7CisJCQlibG9ja19zdGFydCA9IG9mZjsKKwkJfQorCQlsYXN0X3N0YXR1cyA9IHM7CisJfQorCS8qIFByaW50IHRoZSBsYXN0IGJsb2NrIGluZm8gKi8KKwlwcmludF9zdGF0dXMoYmxvY2tfc3RhcnQsIG9mZiwgbmFuZC0+ZXJhc2VzaXplLCBsYXN0X3N0YXR1cyk7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FTlZfT0ZGU0VUX09PQgordW5zaWduZWQgbG9uZyBuYW5kX2Vudl9vb2Jfb2Zmc2V0OworCitpbnQgZG9fbmFuZF9lbnZfb29iKGNtZF90YmxfdCAqY21kdHAsIGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10pCit7CisJaW50IHJldDsKKwl1aW50MzJfdCBvb2JfYnVmW0VOVl9PRkZTRVRfU0laRS9zaXplb2YodWludDMyX3QpXTsKKwluYW5kX2luZm9fdCAqbmFuZCA9ICZuYW5kX2luZm9bMF07CisJY2hhciAqY21kID0gYXJndlsxXTsKKworCWlmIChDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRSA9PSAwIHx8ICFuYW5kLT5uYW1lKSB7CisJCXB1dHMoIm5vIGRldmljZXMgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc2V0X2RldigwKTsKKworCWlmICghc3RyY21wKGNtZCwgImdldCIpKSB7CisJCXJldCA9IGdldF9uYW5kX2Vudl9vb2IobmFuZCwgJm5hbmRfZW52X29vYl9vZmZzZXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIDE7CisKKwkJcHJpbnRmKCIweCUwOGx4XG4iLCBuYW5kX2Vudl9vb2Jfb2Zmc2V0KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAic2V0IikpIHsKKwkJbG9mZl90IGFkZHI7CisJCWxvZmZfdCBtYXhzaXplOworCQlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCQlpbnQgaWR4ID0gMDsKKworCQlpZiAoYXJnYyA8IDMpCisJCQlnb3RvIHVzYWdlOworCisJCWlmIChhcmdfb2ZmKGFyZ3ZbMl0sICZpZHgsICZhZGRyLCAmbWF4c2l6ZSkpIHsKKwkJCXB1dHMoIk9mZnNldCBvciBwYXJ0aXRpb24gbmFtZSBleHBlY3RlZFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChpZHggIT0gMCkgeworCQkJcHV0cygiUGFydGl0aW9uIG5vdCBvbiBmaXJzdCBOQU5EIGRldmljZVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWlmIChuYW5kLT5vb2JhdmFpbCA8IEVOVl9PRkZTRVRfU0laRSkgeworCQkJcHJpbnRmKCJJbnN1ZmZpY2llbnQgYXZhaWxhYmxlIE9PQiBieXRlczpcbiIKKwkJCSAgICAgICAiJWQgT09CIGJ5dGVzIGF2YWlsYWJsZSBidXQgJWQgcmVxdWlyZWQgZm9yICIKKwkJCSAgICAgICAiZW52Lm9vYiBzdXBwb3J0XG4iLAorCQkJICAgICAgIG5hbmQtPm9vYmF2YWlsLCBFTlZfT0ZGU0VUX1NJWkUpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpZiAoKGFkZHIgJiAobmFuZC0+ZXJhc2VzaXplIC0gMSkpICE9IDApIHsKKwkJCXByaW50ZigiRW52aXJvbm1lbnQgb2Zmc2V0IG11c3QgYmUgYmxvY2stYWxpZ25lZFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCW9wcy5kYXRidWYgPSBOVUxMOworCQlvcHMubW9kZSA9IE1URF9PT0JfQVVUTzsKKwkJb3BzLm9vYm9mZnMgPSAwOworCQlvcHMub29ibGVuID0gRU5WX09GRlNFVF9TSVpFOworCQlvcHMub29iYnVmID0gKHZvaWQgKikgb29iX2J1ZjsKKworCQlvb2JfYnVmWzBdID0gRU5WX09PQl9NQVJLRVI7CisJCW9vYl9idWZbMV0gPSBhZGRyIC8gbmFuZC0+ZXJhc2VzaXplOworCisJCXJldCA9IG5hbmQtPndyaXRlX29vYihuYW5kLCBFTlZfT0ZGU0VUX1NJWkUsICZvcHMpOworCQlpZiAocmV0KSB7CisJCQlwcmludGYoIkVycm9yIHdyaXRpbmcgT09CIGJsb2NrIDBcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJldCA9IGdldF9uYW5kX2Vudl9vb2IobmFuZCwgJm5hbmRfZW52X29vYl9vZmZzZXQpOworCQlpZiAocmV0KSB7CisJCQlwcmludGYoIkVycm9yIHJlYWRpbmcgZW52IG9mZnNldCBpbiBPT0JcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChhZGRyICE9IG5hbmRfZW52X29vYl9vZmZzZXQpIHsKKwkJCXByaW50ZigiVmVyaWZpY2F0aW9uIG9mIGVudiBvZmZzZXQgaW4gT09CIGZhaWxlZDogIgorCQkJICAgICAgICIweCUwOGxseCBleHBlY3RlZCBidXQgZ290IDB4JTA4bHhcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLCBuYW5kX2Vudl9vb2Jfb2Zmc2V0KTsKKwkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIHsKKwkJZ290byB1c2FnZTsKKwl9CisKKwlyZXR1cm4gcmV0OworCit1c2FnZToKKwlyZXR1cm4gQ01EX1JFVF9VU0FHRTsKK30KKworI2VuZGlmCisKK3N0YXRpYyB2b2lkIG5hbmRfcHJpbnRfYW5kX3NldF9pbmZvKGludCBpZHgpCit7CisJbmFuZF9pbmZvX3QgKm5hbmQgPSAmbmFuZF9pbmZvW2lkeF07CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG5hbmQtPnByaXY7CisJY29uc3QgaW50IGJ1ZnN6ID0gMzI7CisJY2hhciBidWZbYnVmc3pdOworCisJcHJpbnRmKCJEZXZpY2UgJWQ6ICIsIGlkeCk7CisJaWYgKGNoaXAtPm51bWNoaXBzID4gMSkKKwkJcHJpbnRmKCIlZHggIiwgY2hpcC0+bnVtY2hpcHMpOworCXByaW50ZigiJXMsIHNlY3RvciBzaXplICV1IEtpQlxuIiwKKwkgICAgICAgbmFuZC0+bmFtZSwgbmFuZC0+ZXJhc2VzaXplID4+IDEwKTsKKwlwcmludGYoIiAgUGFnZSBzaXplICAlOGQgYlxuIiwgbmFuZC0+d3JpdGVzaXplKTsKKwlwcmludGYoIiAgT09CIHNpemUgICAlOGQgYlxuIiwgbmFuZC0+b29ic2l6ZSk7CisJcHJpbnRmKCIgIEVyYXNlIHNpemUgJThkIGJcbiIsIG5hbmQtPmVyYXNlc2l6ZSk7CisKKwkvKiBTZXQgZ2VvbWV0cnkgaW5mbyAqLworCXNwcmludGYoYnVmLCAiJXgiLCBuYW5kLT53cml0ZXNpemUpOworCXNldGVudigibmFuZF93cml0ZXNpemUiLCBidWYpOworCisJc3ByaW50ZihidWYsICIleCIsIG5hbmQtPm9vYnNpemUpOworCXNldGVudigibmFuZF9vb2JzaXplIiwgYnVmKTsKKworCXNwcmludGYoYnVmLCAiJXgiLCBuYW5kLT5lcmFzZXNpemUpOworCXNldGVudigibmFuZF9lcmFzZXNpemUiLCBidWYpOworfQorCitzdGF0aWMgaW50IHJhd19hY2Nlc3MobmFuZF9pbmZvX3QgKm5hbmQsIHVsb25nIGFkZHIsIGxvZmZfdCBvZmYsIHVsb25nIGNvdW50LAorCQkJaW50IHJlYWQpCit7CisJaW50IHJldCA9IDA7CisKKwl3aGlsZSAoY291bnQtLSkgeworCQkvKiBSYXcgYWNjZXNzICovCisJCW10ZF9vb2Jfb3BzX3Qgb3BzID0geworCQkJLmRhdGJ1ZiA9ICh1OCAqKWFkZHIsCisJCQkub29iYnVmID0gKCh1OCAqKWFkZHIpICsgbmFuZC0+d3JpdGVzaXplLAorCQkJLmxlbiA9IG5hbmQtPndyaXRlc2l6ZSwKKwkJCS5vb2JsZW4gPSBuYW5kLT5vb2JzaXplLAorCQkJLm1vZGUgPSBNVERfT09CX1JBVworCQl9OworCisJCWlmIChyZWFkKQorCQkJcmV0ID0gbmFuZC0+cmVhZF9vb2IobmFuZCwgb2ZmLCAmb3BzKTsKKwkJZWxzZQorCQkJcmV0ID0gbmFuZC0+d3JpdGVfb29iKG5hbmQsIG9mZiwgJm9wcyk7CisKKwkJaWYgKHJldCkgeworCQkJcHJpbnRmKCIlczogZXJyb3IgYXQgb2Zmc2V0ICVsbHgsIHJldCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgKGxvbmcgbG9uZylvZmYsIHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCWFkZHIgKz0gbmFuZC0+d3JpdGVzaXplICsgbmFuZC0+b29ic2l6ZTsKKwkJb2ZmICs9IG5hbmQtPndyaXRlc2l6ZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZG9fbmFuZChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdKQoreworCWludCBpLCByZXQgPSAwOworCXVsb25nIGFkZHI7CisJbG9mZl90IG9mZiwgc2l6ZTsKIAljaGFyICpjbWQsICpzOwogCW5hbmRfaW5mb190ICpuYW5kOworI2lmZGVmIENPTkZJR19TWVNfTkFORF9RVUlFVAorCWludCBxdWlldCA9IENPTkZJR19TWVNfTkFORF9RVUlFVDsKKyNlbHNlCiAJaW50IHF1aWV0ID0gMDsKKyNlbmRpZgogCWNvbnN0IGNoYXIgKnF1aWV0X3N0ciA9IGdldGVudigicXVpZXQiKTsKKwlpbnQgZGV2ID0gbmFuZF9jdXJyX2RldmljZTsKKwlpbnQgcmVwZWF0ID0gZmxhZyAmIENNRF9GTEFHX1JFUEVBVDsKIAogCS8qIGF0IGxlYXN0IHR3byBhcmd1bWVudHMgcGxlYXNlICovCiAJaWYgKGFyZ2MgPCAyKQpAQCAtMTgxLDY5ICs0NTEsNjAgQEAKIAogCWNtZCA9IGFyZ3ZbMV07CiAKKwkvKiBPbmx5ICJkdW1wIiBpcyByZXBlYXRhYmxlLiAqLworCWlmIChyZXBlYXQgJiYgc3RyY21wKGNtZCwgImR1bXAiKSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoc3RyY21wKGNtZCwgImluZm8iKSA9PSAwKSB7CiAKIAkJcHV0YygnXG4nKTsKLQkJZm9yIChpID0gMDsgaSA8IENGR19NQVhfTkFORF9ERVZJQ0U7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0U7IGkrKykgewogCQkJaWYgKG5hbmRfaW5mb1tpXS5uYW1lKQotCQkJCXByaW50ZigiRGV2aWNlICVkOiAlcywgc2VjdG9yIHNpemUgJWx1IEtpQlxuIiwKLQkJCQkJaSwgbmFuZF9pbmZvW2ldLm5hbWUsCi0JCQkJCW5hbmRfaW5mb1tpXS5lcmFzZXNpemUgPj4gMTApOworCQkJCW5hbmRfcHJpbnRfYW5kX3NldF9pbmZvKGkpOwogCQl9CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChzdHJjbXAoY21kLCAiZGV2aWNlIikgPT0gMCkgewotCiAJCWlmIChhcmdjIDwgMykgewotCQkJaWYgKChuYW5kX2N1cnJfZGV2aWNlIDwgMCkgfHwKLQkJCSAgICAobmFuZF9jdXJyX2RldmljZSA+PSBDRkdfTUFYX05BTkRfREVWSUNFKSkKLQkJCQlwdXRzKCJcbm5vIGRldmljZXMgYXZhaWxhYmxlXG4iKTsKKwkJCXB1dGMoJ1xuJyk7CisJCQlpZiAoZGV2IDwgMCB8fCBkZXYgPj0gQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0UpCisJCQkJcHV0cygibm8gZGV2aWNlcyBhdmFpbGFibGVcbiIpOwogCQkJZWxzZQotCQkJCXByaW50ZigiXG5EZXZpY2UgJWQ6ICVzXG4iLCBuYW5kX2N1cnJfZGV2aWNlLAotCQkJCQluYW5kX2luZm9bbmFuZF9jdXJyX2RldmljZV0ubmFtZSk7CisJCQkJbmFuZF9wcmludF9hbmRfc2V0X2luZm8oZGV2KTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWRldiA9IChpbnQpc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTApOwotCQlpZiAoZGV2IDwgMCB8fCBkZXYgPj0gQ0ZHX01BWF9OQU5EX0RFVklDRSB8fCAhbmFuZF9pbmZvW2Rldl0ubmFtZSkgewotCQkJcHV0cygiTm8gc3VjaCBkZXZpY2VcbiIpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcHJpbnRmKCJEZXZpY2UgJWQ6ICVzIiwgZGV2LCBuYW5kX2luZm9bZGV2XS5uYW1lKTsKLQkJcHV0cygiLi4uIGlzIG5vdyBjdXJyZW50IGRldmljZVxuIik7Ci0JCW5hbmRfY3Vycl9kZXZpY2UgPSBkZXY7CiAKLSNpZmRlZiBDRkdfTkFORF9TRUxFQ1RfREVWSUNFCi0JCS8qCi0JCSAqIFNlbGVjdCB0aGUgY2hpcCBpbiB0aGUgYm9hcmQvY3B1IHNwZWNpZmljIGRyaXZlcgotCQkgKi8KLQkJYm9hcmRfbmFuZF9zZWxlY3RfZGV2aWNlKG5hbmRfaW5mb1tkZXZdLnByaXYsIGRldik7Ci0jZW5kaWYKKwkJZGV2ID0gKGludClzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxMCk7CisJCXNldF9kZXYoZGV2KTsKIAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoc3RyY21wKGNtZCwgImJhZCIpICE9IDAgJiYgc3RyY21wKGNtZCwgImVyYXNlIikgIT0gMCAmJgotCSAgICBzdHJuY21wKGNtZCwgImR1bXAiLCA0KSAhPSAwICYmCi0JICAgIHN0cm5jbXAoY21kLCAicmVhZCIsIDQpICE9IDAgJiYgc3RybmNtcChjbWQsICJ3cml0ZSIsIDUpICE9IDAgJiYKLQkgICAgc3RyY21wKGNtZCwgInNjcnViIikgIT0gMCAmJiBzdHJjbXAoY21kLCAibWFya2JhZCIpICE9IDAgJiYKLQkgICAgc3RyY21wKGNtZCwgImJpdGVyciIpICE9IDAgJiYKLQkgICAgc3RyY21wKGNtZCwgImxvY2siKSAhPSAwICYmIHN0cmNtcChjbWQsICJ1bmxvY2siKSAhPSAwICkKLQkJZ290byB1c2FnZTsKKyNpZmRlZiBDT05GSUdfRU5WX09GRlNFVF9PT0IKKwkvKiB0aGlzIGNvbW1hbmQgb3BlcmF0ZXMgb25seSBvbiB0aGUgZmlyc3QgbmFuZCBkZXZpY2UgKi8KKwlpZiAoc3RyY21wKGNtZCwgImVudi5vb2IiKSA9PSAwKQorCQlyZXR1cm4gZG9fbmFuZF9lbnZfb29iKGNtZHRwLCBhcmdjIC0gMSwgYXJndiArIDEpOworI2VuZGlmCiAKLQkvKiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIG9wZXJhdGUgb24gdGhlIGN1cnJlbnQgZGV2aWNlICovCi0JaWYgKG5hbmRfY3Vycl9kZXZpY2UgPCAwIHx8IG5hbmRfY3Vycl9kZXZpY2UgPj0gQ0ZHX01BWF9OQU5EX0RFVklDRSB8fAotCSAgICAhbmFuZF9pbmZvW25hbmRfY3Vycl9kZXZpY2VdLm5hbWUpIHsKKwkvKiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIG9wZXJhdGUgb24gdGhlIGN1cnJlbnQgZGV2aWNlLCB1bmxlc3MKKwkgKiBvdmVycmlkZGVuIGJ5IGEgcGFydGl0aW9uIHNwZWNpZmllci4gIE5vdGUgdGhhdCBpZiBzb21laG93IHRoZQorCSAqIGN1cnJlbnQgZGV2aWNlIGlzIGludmFsaWQsIGl0IHdpbGwgaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIGEgdmFsaWQKKwkgKiBvbmUgYmVmb3JlIHRoZXNlIGNvbW1hbmRzIGNhbiBydW4sIGV2ZW4gaWYgYSBwYXJ0aXRpb24gc3BlY2lmaWVyCisJICogZm9yIGFub3RoZXIgZGV2aWNlIGlzIHRvIGJlIHVzZWQuCisJICovCisJaWYgKGRldiA8IDAgfHwgZGV2ID49IENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFIHx8CisJICAgICFuYW5kX2luZm9bZGV2XS5uYW1lKSB7CiAJCXB1dHMoIlxubm8gZGV2aWNlcyBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm4gMTsKIAl9Ci0JbmFuZCA9ICZuYW5kX2luZm9bbmFuZF9jdXJyX2RldmljZV07CisJbmFuZCA9ICZuYW5kX2luZm9bZGV2XTsKIAogCWlmIChzdHJjbXAoY21kLCAiYmFkIikgPT0gMCkgewotCQlwcmludGYoIlxuRGV2aWNlICVkIGJhZCBibG9ja3M6XG4iLCBuYW5kX2N1cnJfZGV2aWNlKTsKKwkJcHJpbnRmKCJcbkRldmljZSAlZCBiYWQgYmxvY2tzOlxuIiwgZGV2KTsKIAkJZm9yIChvZmYgPSAwOyBvZmYgPCBuYW5kLT5zaXplOyBvZmYgKz0gbmFuZC0+ZXJhc2VzaXplKQogCQkJaWYgKG5hbmRfYmxvY2tfaXNiYWQobmFuZCwgb2ZmKSkKLQkJCQlwcmludGYoIiAgJTA4eFxuIiwgb2ZmKTsKKwkJCQlwcmludGYoIiAgJTA4bGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKW9mZik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjUyLDM5ICs1MTMsNzQgQEAKIAkgKiAgIDAgICAgMSAgICAgMiAgICAgICAzICAgIDQKIAkgKiAgIG5hbmQgZXJhc2UgW2NsZWFuXSBbb2ZmIHNpemVdCiAJICovCi0JaWYgKHN0cmNtcChjbWQsICJlcmFzZSIpID09IDAgfHwgc3RyY21wKGNtZCwgInNjcnViIikgPT0gMCkgeworCWlmIChzdHJuY21wKGNtZCwgImVyYXNlIiwgNSkgPT0gMCB8fCBzdHJuY21wKGNtZCwgInNjcnViIiwgNSkgPT0gMCkgewogCQluYW5kX2VyYXNlX29wdGlvbnNfdCBvcHRzOwogCQkvKiAiY2xlYW4iIGF0IGluZGV4IDIgbWVhbnMgcmVxdWVzdCB0byB3cml0ZSBjbGVhbm1hcmtlciAqLwogCQlpbnQgY2xlYW4gPSBhcmdjID4gMiAmJiAhc3RyY21wKCJjbGVhbiIsIGFyZ3ZbMl0pOwotCQlpbnQgbyA9IGNsZWFuID8gMyA6IDI7Ci0JCWludCBzY3J1YiA9ICFzdHJjbXAoY21kLCAic2NydWIiKTsKKwkJaW50IHNjcnViX3llcyA9IGFyZ2MgPiAyICYmICFzdHJjbXAoIi15IiwgYXJndlsyXSk7CisJCWludCBvID0gKGNsZWFuIHx8IHNjcnViX3llcykgPyAzIDogMjsKKwkJaW50IHNjcnViID0gIXN0cm5jbXAoY21kLCAic2NydWIiLCA1KTsKKwkJaW50IHNwcmVhZCA9IDA7CisJCWludCBhcmdzID0gMjsKKwkJY29uc3QgY2hhciAqc2NydWJfd2FybiA9CisJCQkiV2FybmluZzogIgorCQkJInNjcnViIG9wdGlvbiB3aWxsIGVyYXNlIGFsbCBmYWN0b3J5IHNldCBiYWQgYmxvY2tzIVxuIgorCQkJIiAgICAgICAgICIKKwkJCSJUaGVyZSBpcyBubyByZWxpYWJsZSB3YXkgdG8gcmVjb3ZlciB0aGVtLlxuIgorCQkJIiAgICAgICAgICIKKwkJCSJVc2UgdGhpcyBjb21tYW5kIG9ubHkgZm9yIHRlc3RpbmcgcHVycG9zZXMgaWYgeW91XG4iCisJCQkiICAgICAgICAgIgorCQkJImFyZSBzdXJlIG9mIHdoYXQgeW91IGFyZSBkb2luZyFcbiIKKwkJCSJcblJlYWxseSBzY3J1YiB0aGlzIE5BTkQgZmxhc2g/IDx5L04+XG4iOwogCi0JCXByaW50ZigiXG5OQU5EICVzOiAiLCBzY3J1YiA/ICJzY3J1YiIgOiAiZXJhc2UiKTsKKwkJaWYgKGNtZFs1XSAhPSAwKSB7CisJCQlpZiAoIXN0cmNtcCgmY21kWzVdLCAiLnNwcmVhZCIpKSB7CisJCQkJc3ByZWFkID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCgmY21kWzVdLCAiLnBhcnQiKSkgeworCQkJCWFyZ3MgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKCZjbWRbNV0sICIuY2hpcCIpKSB7CisJCQkJYXJncyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWdvdG8gdXNhZ2U7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBEb24ndCBhbGxvdyBtaXNzaW5nIGFyZ3VtZW50cyB0byBjYXVzZSBmdWxsIGNoaXAvcGFydGl0aW9uCisJCSAqIGVyYXNlcyAtLSBlYXN5IHRvIGRvIGFjY2lkZW50YWxseSwgZS5nLiB3aXRoIGEgbWlzc3BlbGxlZAorCQkgKiB2YXJpYWJsZSBuYW1lLgorCQkgKi8KKwkJaWYgKGFyZ2MgIT0gbyArIGFyZ3MpCisJCQlnb3RvIHVzYWdlOworCisJCXByaW50ZigiXG5OQU5EICVzOiAiLCBjbWQpOwogCQkvKiBza2lwIGZpcnN0IHR3byBvciB0aHJlZSBhcmd1bWVudHMsIGxvb2sgZm9yIG9mZnNldCBhbmQgc2l6ZSAqLwotCQlpZiAoYXJnX29mZl9zaXplKGFyZ2MgLSBvLCBhcmd2ICsgbywgbmFuZCwgJm9mZiwgJnNpemUpICE9IDApCisJCWlmIChhcmdfb2ZmX3NpemUoYXJnYyAtIG8sIGFyZ3YgKyBvLCAmZGV2LCAmb2ZmLCAmc2l6ZSkgIT0gMCkKIAkJCXJldHVybiAxOwogCisJCW5hbmQgPSAmbmFuZF9pbmZvW2Rldl07CisKIAkJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOwogCQlvcHRzLm9mZnNldCA9IG9mZjsKIAkJb3B0cy5sZW5ndGggPSBzaXplOwogCQlvcHRzLmpmZnMyICA9IGNsZWFuOwogCQlvcHRzLnF1aWV0ICA9IHF1aWV0OworCQlvcHRzLnNwcmVhZCA9IHNwcmVhZDsKIAogCQlpZiAoc2NydWIpIHsKLQkJCXB1dHMoIldhcm5pbmc6ICIKLQkJCSAgICAgInNjcnViIG9wdGlvbiB3aWxsIGVyYXNlIGFsbCBmYWN0b3J5IHNldCAiCi0JCQkgICAgICJiYWQgYmxvY2tzIVxuIgotCQkJICAgICAiICAgICAgICAgIgotCQkJICAgICAiVGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IHRvIHJlY292ZXIgdGhlbS5cbiIKLQkJCSAgICAgIiAgICAgICAgICIKLQkJCSAgICAgIlVzZSB0aGlzIGNvbW1hbmQgb25seSBmb3IgdGVzdGluZyBwdXJwb3NlcyAiCi0JCQkgICAgICJpZiB5b3VcbiIKLQkJCSAgICAgIiAgICAgICAgICIKLQkJCSAgICAgImFyZSBzdXJlIG9mIHdoYXQgeW91IGFyZSBkb2luZyFcbiIKLQkJCSAgICAgIlxuUmVhbGx5IHNjcnViIHRoaXMgTkFORCBmbGFzaD8gPHkvTj5cbiIpOworCQkJaWYgKCFzY3J1Yl95ZXMpCisJCQkJcHV0cyhzY3J1Yl93YXJuKTsKIAotCQkJaWYgKGdldGMoKSA9PSAneScgJiYgZ2V0YygpID09ICdccicpIHsKKwkJCWlmIChzY3J1Yl95ZXMpCiAJCQkJb3B0cy5zY3J1YiA9IDE7CisJCQllbHNlIGlmIChnZXRjKCkgPT0gJ3knKSB7CisJCQkJcHV0cygieSIpOworCQkJCWlmIChnZXRjKCkgPT0gJ1xyJykKKwkJCQkJb3B0cy5zY3J1YiA9IDE7CisJCQkJZWxzZSB7CisJCQkJCXB1dHMoInNjcnViIGFib3J0ZWRcbiIpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlwdXRzKCJzY3J1YiBhYm9ydGVkXG4iKTsKIAkJCQlyZXR1cm4gLTE7CkBAIC0zMDAsMjEgKzU5NiwxNyBAQAogCQlpZiAoYXJnYyA8IDMpCiAJCQlnb3RvIHVzYWdlOwogCi0JCXMgPSBzdHJjaHIoY21kLCAnLicpOwogCQlvZmYgPSAoaW50KXNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKLQotCQlpZiAocyAhPSBOVUxMICYmIHN0cmNtcChzLCAiLm9vYiIpID09IDApCi0JCQlyZXQgPSBuYW5kX2R1bXBfb29iKG5hbmQsIG9mZik7Ci0JCWVsc2UKLQkJCXJldCA9IG5hbmRfZHVtcChuYW5kLCBvZmYpOworCQlyZXQgPSBuYW5kX2R1bXAobmFuZCwgb2ZmLCAhc3RyY21wKCZjbWRbNF0sICIub29iIiksIHJlcGVhdCk7CiAKIAkJcmV0dXJuIHJldCA9PSAwID8gMSA6IDA7Ci0KIAl9CiAKLQkvKiByZWFkIHdyaXRlICovCiAJaWYgKHN0cm5jbXAoY21kLCAicmVhZCIsIDQpID09IDAgfHwgc3RybmNtcChjbWQsICJ3cml0ZSIsIDUpID09IDApIHsKKwkJc2l6ZV90IHJ3c2l6ZTsKKwkJdWxvbmcgcGFnZWNvdW50ID0gMTsKIAkJaW50IHJlYWQ7CisJCWludCByYXc7CiAKIAkJaWYgKGFyZ2MgPCA0KQogCQkJZ290byB1c2FnZTsKQEAgLTMyMyw2OCArNjE1LDEyNCBAQAogCiAJCXJlYWQgPSBzdHJuY21wKGNtZCwgInJlYWQiLCA0KSA9PSAwOyAvKiAxID0gcmVhZCwgMCA9IHdyaXRlICovCiAJCXByaW50ZigiXG5OQU5EICVzOiAiLCByZWFkID8gInJlYWQiIDogIndyaXRlIik7Ci0JCWlmIChhcmdfb2ZmX3NpemUoYXJnYyAtIDMsIGFyZ3YgKyAzLCBuYW5kLCAmb2ZmLCAmc2l6ZSkgIT0gMCkKLQkJCXJldHVybiAxOworCisJCW5hbmQgPSAmbmFuZF9pbmZvW2Rldl07CiAKIAkJcyA9IHN0cmNocihjbWQsICcuJyk7Ci0JCWlmIChzICE9IE5VTEwgJiYKLQkJICAgICghc3RyY21wKHMsICIuamZmczIiKSB8fCAhc3RyY21wKHMsICIuZSIpIHx8ICFzdHJjbXAocywgIi5pIikpKSB7Ci0JCQlpZiAocmVhZCkgewotCQkJCS8qIHJlYWQgKi8KLQkJCQluYW5kX3JlYWRfb3B0aW9uc190IG9wdHM7Ci0JCQkJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOwotCQkJCW9wdHMuYnVmZmVyCT0gKHVfY2hhciopIGFkZHI7Ci0JCQkJb3B0cy5sZW5ndGgJPSBzaXplOwotCQkJCW9wdHMub2Zmc2V0CT0gb2ZmOwotCQkJCW9wdHMucXVpZXQgICAgICA9IHF1aWV0OwotCQkJCXJldCA9IG5hbmRfcmVhZF9vcHRzKG5hbmQsICZvcHRzKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogd3JpdGUgKi8KLQkJCQluYW5kX3dyaXRlX29wdGlvbnNfdCBvcHRzOwotCQkJCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKLQkJCQlvcHRzLmJ1ZmZlcgk9ICh1X2NoYXIqKSBhZGRyOwotCQkJCW9wdHMubGVuZ3RoCT0gc2l6ZTsKLQkJCQlvcHRzLm9mZnNldAk9IG9mZjsKLQkJCQkvKiBvcHRzLmZvcmNlamZmczIgPSAxOyAqLwotCQkJCW9wdHMucGFkCT0gMTsKLQkJCQlvcHRzLmJsb2NrYWxpZ24gPSAxOwotCQkJCW9wdHMucXVpZXQgICAgICA9IHF1aWV0OwotCQkJCXJldCA9IG5hbmRfd3JpdGVfb3B0cyhuYW5kLCAmb3B0cyk7CisKKwkJaWYgKHMgJiYgIXN0cmNtcChzLCAiLnJhdyIpKSB7CisJCQlwcmludGYoIlxuIC5yYXcgXG4iKTsKKwkJCXJhdyA9IDE7CisKKwkJCWlmIChhcmdfb2ZmKGFyZ3ZbM10sICZkZXYsICZvZmYsICZzaXplKSkKKwkJCQlyZXR1cm4gMTsKKworCQkJaWYgKGFyZ2MgPiA0ICYmICFzdHIybG9uZyhhcmd2WzRdLCAmcGFnZWNvdW50KSkgeworCQkJCXByaW50ZigiJyVzJyBpcyBub3QgYSBudW1iZXJcbiIsIGFyZ3ZbNF0pOworCQkJCXJldHVybiAxOwogCQkJfQorCisJCQlpZiAocGFnZWNvdW50ICogbmFuZC0+d3JpdGVzaXplID4gc2l6ZSkgeworCQkJCXB1dHMoIlNpemUgZXhjZWVkcyBwYXJ0aXRpb24gb3IgZGV2aWNlIGxpbWl0XG4iKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCXJ3c2l6ZSA9IHBhZ2Vjb3VudCAqIChuYW5kLT53cml0ZXNpemUgKyBuYW5kLT5vb2JzaXplKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChyZWFkKQotCQkJCXJldCA9IG5hbmRfcmVhZChuYW5kLCBvZmYsICZzaXplLCAodV9jaGFyICopYWRkcik7Ci0JCQllbHNlCi0JCQkJcmV0ID0gbmFuZF93cml0ZShuYW5kLCBvZmYsICZzaXplLCAodV9jaGFyICopYWRkcik7CisJCQlpZiAoYXJnX29mZl9zaXplKGFyZ2MgLSAzLCBhcmd2ICsgMywgJmRldiwKKwkJCQkJCSZvZmYsICZzaXplKSAhPSAwKQorCQkJCXJldHVybiAxOworCisJCQlyd3NpemUgPSBzaXplOwogCQl9CiAKLQkJcHJpbnRmKCIgJWQgYnl0ZXMgJXM6ICVzXG4iLCBzaXplLAorCQlpZiAoIXMgfHwgIXN0cmNtcChzLCAiLmpmZnMyIikgfHwKKwkJICAgICFzdHJjbXAocywgIi5lIikgfHwgIXN0cmNtcChzLCAiLmkiKSkgeworCQkJaWYgKHJlYWQpCisJCQkJcmV0ID0gbmFuZF9yZWFkX3NraXBfYmFkKG5hbmQsIG9mZiwgJnJ3c2l6ZSwKKwkJCQkJCQkgKHVfY2hhciAqKWFkZHIpOworCQkJZWxzZQorCQkJCXJldCA9IG5hbmRfd3JpdGVfc2tpcF9iYWQobmFuZCwgb2ZmLCAmcndzaXplLAorCQkJCQkJCSAgKHVfY2hhciAqKWFkZHIsIDApOworI2lmZGVmIENPTkZJR19DTURfTkFORF9UUklNRkZTCisJCX0gZWxzZSBpZiAoIXN0cmNtcChzLCAiLnRyaW1mZnMiKSkgeworCQkJaWYgKHJlYWQpIHsKKwkJCQlwcmludGYoIlVua25vd24gbmFuZCBjb21tYW5kIHN1ZmZpeCAnJXMnXG4iLCBzKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCXJldCA9IG5hbmRfd3JpdGVfc2tpcF9iYWQobmFuZCwgb2ZmLCAmcndzaXplLAorCQkJCQkJKHVfY2hhciAqKWFkZHIsCisJCQkJCQlXSVRIX0RST1BfRkZTKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DTURfTkFORF9ZQUZGUworCQl9IGVsc2UgaWYgKCFzdHJjbXAocywgIi55YWZmcyIpKSB7CisJCQlpZiAocmVhZCkgeworCQkJCXByaW50ZigiVW5rbm93biBuYW5kIGNvbW1hbmQgc3VmZml4ICclcycuXG4iLCBzKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCXJldCA9IG5hbmRfd3JpdGVfc2tpcF9iYWQobmFuZCwgb2ZmLCAmcndzaXplLAorCQkJCQkJKHVfY2hhciAqKWFkZHIsCisJCQkJCQlXSVRIX0lOTElORV9PT0IpOworI2VuZGlmCisJCX0gZWxzZSBpZiAoIXN0cmNtcChzLCAiLm9vYiIpKSB7CisJCQkvKiBvdXQtb2YtYmFuZCBkYXRhICovCisJCQltdGRfb29iX29wc190IG9wcyA9IHsKKwkJCQkub29iYnVmID0gKHU4ICopYWRkciwKKwkJCQkub29ibGVuID0gcndzaXplLAorCQkJCS5tb2RlID0gTVREX09PQl9SQVcKKwkJCX07CisKKwkJCWlmIChyZWFkKQorCQkJCXJldCA9IG5hbmQtPnJlYWRfb29iKG5hbmQsIG9mZiwgJm9wcyk7CisJCQllbHNlCisJCQkJcmV0ID0gbmFuZC0+d3JpdGVfb29iKG5hbmQsIG9mZiwgJm9wcyk7CisJCX0gZWxzZSBpZiAocmF3KSB7CisJCQlyZXQgPSByYXdfYWNjZXNzKG5hbmQsIGFkZHIsIG9mZiwgcGFnZWNvdW50LCByZWFkKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVW5rbm93biBuYW5kIGNvbW1hbmQgc3VmZml4ICclcycuXG4iLCBzKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJcHJpbnRmKCIgJWQgYnl0ZXMgJXM6ICVzXG4iLCByd3NpemUsCiAJCSAgICAgICByZWFkID8gInJlYWQiIDogIndyaXR0ZW4iLCByZXQgPyAiRVJST1IiIDogIk9LIik7CiAKIAkJcmV0dXJuIHJldCA9PSAwID8gMCA6IDE7CiAJfQogCiAJaWYgKHN0cmNtcChjbWQsICJtYXJrYmFkIikgPT0gMCkgewotCQlhZGRyID0gKHVsb25nKXNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKKwkJYXJnYyAtPSAyOworCQlhcmd2ICs9IDI7CiAKLQkJaW50IHJldCA9IG5hbmQtPmJsb2NrX21hcmtiYWQobmFuZCwgYWRkcik7Ci0JCWlmIChyZXQgPT0gMCkgewotCQkJcHJpbnRmKCJibG9jayAweCUwOGx4IHN1Y2Nlc3NmdWxseSBtYXJrZWQgYXMgYmFkXG4iLAotCQkJICAgICAgICh1bG9uZykgYWRkcik7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCXByaW50ZigiYmxvY2sgMHglMDhseCBOT1QgbWFya2VkIGFzIGJhZCEgRVJST1IgJWRcbiIsCi0JCQkgICAgICAgKHVsb25nKSBhZGRyLCByZXQpOworCQlpZiAoYXJnYyA8PSAwKQorCQkJZ290byB1c2FnZTsKKworCQl3aGlsZSAoYXJnYyA+IDApIHsKKwkJCWFkZHIgPSBzaW1wbGVfc3RydG91bCgqYXJndiwgTlVMTCwgMTYpOworCisJCQlpZiAobmFuZC0+YmxvY2tfbWFya2JhZChuYW5kLCBhZGRyKSkgeworCQkJCXByaW50ZigiYmxvY2sgMHglMDhseCBOT1QgbWFya2VkICIKKwkJCQkJImFzIGJhZCEgRVJST1IgJWRcbiIsCisJCQkJCWFkZHIsIHJldCk7CisJCQkJcmV0ID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCJibG9jayAweCUwOGx4IHN1Y2Nlc3NmdWxseSAiCisJCQkJCSJtYXJrZWQgYXMgYmFkXG4iLAorCQkJCQlhZGRyKTsKKwkJCX0KKwkJCS0tYXJnYzsKKwkJCSsrYXJndjsKIAkJfQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlpZiAoc3RyY21wKGNtZCwgImJpdGVyciIpID09IDApIHsKIAkJLyogdG9kbyAqLwogCQlyZXR1cm4gMTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfQ01EX05BTkRfTE9DS19VTkxPQ0sKIAlpZiAoc3RyY21wKGNtZCwgImxvY2siKSA9PSAwKSB7Ci0JCWludCB0aWdodCAgPSAwOworCQlpbnQgdGlnaHQgPSAwOwogCQlpbnQgc3RhdHVzID0gMDsKIAkJaWYgKGFyZ2MgPT0gMykgewogCQkJaWYgKCFzdHJjbXAoInRpZ2h0IiwgYXJndlsyXSkpCkBAIC0zOTIsMzkgKzc0MCw4IEBACiAJCQlpZiAoIXN0cmNtcCgic3RhdHVzIiwgYXJndlsyXSkpCiAJCQkJc3RhdHVzID0gMTsKIAkJfQotCiAJCWlmIChzdGF0dXMpIHsKLQkJCXVsb25nIGJsb2NrX3N0YXJ0ID0gMDsKLQkJCXVsb25nIG9mZjsKLQkJCWludCBsYXN0X3N0YXR1cyA9IC0xOwotCi0JCQlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBuYW5kLT5wcml2OwotCQkJLyogY2hlY2sgdGhlIFdQIGJpdCAqLwotCQkJbmFuZF9jaGlwLT5jbWRmdW5jIChuYW5kLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7Ci0JCQlwcmludGYoImRldmljZSBpcyAlc3dyaXRlIHByb3RlY3RlZFxuIiwKLQkJCSAgICAgICAobmFuZF9jaGlwLT5yZWFkX2J5dGUobmFuZCkgJiAweDgwID8KLQkJCQkiTk9UICIgOiAiIiApICk7Ci0KLQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgbmFuZC0+c2l6ZTsgb2ZmICs9IG5hbmQtPm9vYmJsb2NrKSB7Ci0JCQkJaW50IHMgPSBuYW5kX2dldF9sb2NrX3N0YXR1cyhuYW5kLCBvZmYpOwotCi0JCQkJLyogcHJpbnQgbWVzc2FnZSBvbmx5IGlmIHN0YXR1cyBoYXMgY2hhbmdlZAotCQkJCSAqIG9yIGF0IGVuZCBvZiBjaGlwCi0JCQkJICovCi0JCQkJaWYgKG9mZiA9PSBuYW5kLT5zaXplIC0gbmFuZC0+b29iYmxvY2sKLQkJCQkgICAgfHwgKHMgIT0gbGFzdF9zdGF0dXMgJiYgb2ZmICE9IDApKQl7Ci0KLQkJCQkJcHJpbnRmKCIlMDh4IC0gJTA4eDogJThkIHBhZ2VzICVzJXMlc1xuIiwKLQkJCQkJICAgICAgIGJsb2NrX3N0YXJ0LAotCQkJCQkgICAgICAgb2ZmLTEsCi0JCQkJCSAgICAgICAob2ZmLWJsb2NrX3N0YXJ0KS9uYW5kLT5vb2JibG9jaywKLQkJCQkJICAgICAgICgobGFzdF9zdGF0dXMgJiBOQU5EX0xPQ0tfU1RBVFVTX1RJR0hUKSA/ICJUSUdIVCAiIDogIiIpLAotCQkJCQkgICAgICAgKChsYXN0X3N0YXR1cyAmIE5BTkRfTE9DS19TVEFUVVNfTE9DSykgPyAiTE9DSyAiIDogIiIpLAotCQkJCQkgICAgICAgKChsYXN0X3N0YXR1cyAmIE5BTkRfTE9DS19TVEFUVVNfVU5MT0NLKSA/ICJVTkxPQ0sgIiA6ICIiKSk7Ci0JCQkJfQotCi0JCQkJbGFzdF9zdGF0dXMgPSBzOwotCQkgICAgICAgfQorCQkJZG9fbmFuZF9zdGF0dXMobmFuZCk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoIW5hbmRfbG9jayhuYW5kLCB0aWdodCkpIHsKIAkJCQlwdXRzKCJOQU5EIGZsYXNoIHN1Y2Nlc3NmdWxseSBsb2NrZWRcbiIpOwpAQCAtNDM3LDEwICs3NTQsMTAgQEAKIAl9CiAKIAlpZiAoc3RyY21wKGNtZCwgInVubG9jayIpID09IDApIHsKLQkJaWYgKGFyZ19vZmZfc2l6ZShhcmdjIC0gMiwgYXJndiArIDIsIG5hbmQsICZvZmYsICZzaXplKSA8IDApCisJCWlmIChhcmdfb2ZmX3NpemUoYXJnYyAtIDIsIGFyZ3YgKyAyLCAmZGV2LCAmb2ZmLCAmc2l6ZSkgPCAwKQogCQkJcmV0dXJuIDE7CiAKLQkJaWYgKCFuYW5kX3VubG9jayhuYW5kLCBvZmYsIHNpemUpKSB7CisJCWlmICghbmFuZF91bmxvY2soJm5hbmRfaW5mb1tkZXZdLCBvZmYsIHNpemUpKSB7CiAJCQlwdXRzKCJOQU5EIGZsYXNoIHN1Y2Nlc3NmdWxseSB1bmxvY2tlZFxuIik7CiAJCX0gZWxzZSB7CiAJCQlwdXRzKCJFcnJvciB1bmxvY2tpbmcgTkFORCBmbGFzaCwgIgpAQCAtNDQ5LDkyICs3NjYsMTUwIEBACiAJCX0KIAkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCiAKIHVzYWdlOgotCXByaW50ZigiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gQ01EX1JFVF9VU0FHRTsKIH0KIAotVV9CT09UX0NNRChuYW5kLCA1LCAxLCBkb19uYW5kLAotCSJuYW5kICAgIC0gTkFORCBzdWItc3lzdGVtXG4iLAotCSJpbmZvICAgICAgICAgICAgICAgICAgLSBzaG93IGF2YWlsYWJsZSBOQU5EIGRldmljZXNcbiIKLQkibmFuZCBkZXZpY2UgW2Rldl0gICAgIC0gc2hvdyBvciBzZXQgY3VycmVudCBkZXZpY2VcbiIKLQkibmFuZCByZWFkWy5qZmZzMl0gICAgIC0gYWRkciBvZmZ8cGFydGl0aW9uIHNpemVcbiIKLQkibmFuZCB3cml0ZVsuamZmczJdICAgIC0gYWRkciBvZmZ8cGFydGl0b24gc2l6ZSAtIHJlYWQvd3JpdGUgYHNpemUnIGJ5dGVzIHN0YXJ0aW5nXG4iCi0JIiAgICBhdCBvZmZzZXQgYG9mZicgdG8vZnJvbSBtZW1vcnkgYWRkcmVzcyBgYWRkcidcbiIKLQkibmFuZCBlcmFzZSBbY2xlYW5dIFtvZmYgc2l6ZV0gLSBlcmFzZSBgc2l6ZScgYnl0ZXMgZnJvbVxuIgotCSIgICAgb2Zmc2V0IGBvZmYnIChlbnRpcmUgZGV2aWNlIGlmIG5vdCBzcGVjaWZpZWQpXG4iCitVX0JPT1RfQ01EKAorCW5hbmQsIENPTkZJR19TWVNfTUFYQVJHUywgMSwgZG9fbmFuZCwKKwkiTkFORCBzdWItc3lzdGVtIiwKKwkiaW5mbyAtIHNob3cgYXZhaWxhYmxlIE5BTkQgZGV2aWNlc1xuIgorCSJuYW5kIGRldmljZSBbZGV2XSAtIHNob3cgb3Igc2V0IGN1cnJlbnQgZGV2aWNlXG4iCisJIm5hbmQgcmVhZCAtIGFkZHIgb2ZmfHBhcnRpdGlvbiBzaXplXG4iCisJIm5hbmQgd3JpdGUgLSBhZGRyIG9mZnxwYXJ0aXRpb24gc2l6ZVxuIgorCSIgICAgcmVhZC93cml0ZSAnc2l6ZScgYnl0ZXMgc3RhcnRpbmcgYXQgb2Zmc2V0ICdvZmYnXG4iCisJIiAgICB0by9mcm9tIG1lbW9yeSBhZGRyZXNzICdhZGRyJywgc2tpcHBpbmcgYmFkIGJsb2Nrcy5cbiIKKwkibmFuZCByZWFkLnJhdyAtIGFkZHIgb2ZmfHBhcnRpdGlvbiBbY291bnRdXG4iCisJIm5hbmQgd3JpdGUucmF3IC0gYWRkciBvZmZ8cGFydGl0aW9uIFtjb3VudF1cbiIKKwkiICAgIFVzZSByZWFkLnJhdy93cml0ZS5yYXcgdG8gYXZvaWQgRUNDIGFuZCBhY2Nlc3MgdGhlIGZsYXNoIGFzLWlzLlxuIgorI2lmZGVmIENPTkZJR19DTURfTkFORF9UUklNRkZTCisJIm5hbmQgd3JpdGUudHJpbWZmcyAtIGFkZHIgb2ZmfHBhcnRpdGlvbiBzaXplXG4iCisJIiAgICB3cml0ZSAnc2l6ZScgYnl0ZXMgc3RhcnRpbmcgYXQgb2Zmc2V0ICdvZmYnIGZyb20gbWVtb3J5IGFkZHJlc3NcbiIKKwkiICAgICdhZGRyJywgc2tpcHBpbmcgYmFkIGJsb2NrcyBhbmQgZHJvcHBpbmcgYW55IHBhZ2VzIGF0IHRoZSBlbmRcbiIKKwkiICAgIG9mIGVyYXNlYmxvY2tzIHRoYXQgY29udGFpbiBvbmx5IDB4RkZcbiIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DTURfTkFORF9ZQUZGUworCSJuYW5kIHdyaXRlLnlhZmZzIC0gYWRkciBvZmZ8cGFydGl0aW9uIHNpemVcbiIKKwkiICAgIHdyaXRlICdzaXplJyBieXRlcyBzdGFydGluZyBhdCBvZmZzZXQgJ29mZicgd2l0aCB5YWZmcyBmb3JtYXRcbiIKKwkiICAgIGZyb20gbWVtb3J5IGFkZHJlc3MgJ2FkZHInLCBza2lwcGluZyBiYWQgYmxvY2tzLlxuIgorI2VuZGlmCisJIm5hbmQgZXJhc2VbLnNwcmVhZF0gW2NsZWFuXSBvZmYgc2l6ZSAtIGVyYXNlICdzaXplJyBieXRlcyAiCisJImZyb20gb2Zmc2V0ICdvZmYnXG4iCisJIiAgICBXaXRoICcuc3ByZWFkJywgZXJhc2UgZW5vdWdoIGZvciBnaXZlbiBmaWxlIHNpemUsIG90aGVyd2lzZSxcbiIKKwkiICAgICdzaXplJyBpbmNsdWRlcyBza2lwcGVkIGJhZCBibG9ja3MuXG4iCisJIm5hbmQgZXJhc2UucGFydCBbY2xlYW5dIHBhcnRpdGlvbiAtIGVyYXNlIGVudGlyZSBtdGQgcGFydGl0aW9uJ1xuIgorCSJuYW5kIGVyYXNlLmNoaXAgW2NsZWFuXSAtIGVyYXNlIGVudGlyZSBjaGlwJ1xuIgogCSJuYW5kIGJhZCAtIHNob3cgYmFkIGJsb2Nrc1xuIgogCSJuYW5kIGR1bXBbLm9vYl0gb2ZmIC0gZHVtcCBwYWdlXG4iCi0JIm5hbmQgc2NydWIgLSByZWFsbHkgY2xlYW4gTkFORCBlcmFzaW5nIGJhZCBibG9ja3MgKFVOU0FGRSlcbiIKLQkibmFuZCBtYXJrYmFkIG9mZiAtIG1hcmsgYmFkIGJsb2NrIGF0IG9mZnNldCAoVU5TQUZFKVxuIgotCSJuYW5kIGJpdGVyciBvZmYgLSBtYWtlIGEgYml0IGVycm9yIGF0IG9mZnNldCAoVU5TQUZFKVxuIgotCSJuYW5kIGxvY2sgW3RpZ2h0XSBbc3RhdHVzXSAtIGJyaW5nIG5hbmQgdG8gbG9jayBzdGF0ZSBvciBkaXNwbGF5IGxvY2tlZCBwYWdlc1xuIgotCSJuYW5kIHVubG9jayBbb2Zmc2V0XSBbc2l6ZV0gLSB1bmxvY2sgc2VjdGlvblxuIik7CisJIm5hbmQgc2NydWIgWy15XSBvZmYgc2l6ZSB8IHNjcnViLnBhcnQgcGFydGl0aW9uIHwgc2NydWIuY2hpcFxuIgorCSIgICAgcmVhbGx5IGNsZWFuIE5BTkQgZXJhc2luZyBiYWQgYmxvY2tzIChVTlNBRkUpXG4iCisJIm5hbmQgbWFya2JhZCBvZmYgWy4uLl0gLSBtYXJrIGJhZCBibG9jayhzKSBhdCBvZmZzZXQgKFVOU0FGRSlcbiIKKwkibmFuZCBiaXRlcnIgb2ZmIC0gbWFrZSBhIGJpdCBlcnJvciBhdCBvZmZzZXQgKFVOU0FGRSkiCisjaWZkZWYgQ09ORklHX0NNRF9OQU5EX0xPQ0tfVU5MT0NLCisJIlxuIgorCSJuYW5kIGxvY2sgW3RpZ2h0XSBbc3RhdHVzXVxuIgorCSIgICAgYnJpbmcgbmFuZCB0byBsb2NrIHN0YXRlIG9yIGRpc3BsYXkgbG9ja2VkIHBhZ2VzXG4iCisJIm5hbmQgdW5sb2NrIFtvZmZzZXRdIFtzaXplXSAtIHVubG9jayBzZWN0aW9uIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0VOVl9PRkZTRVRfT09CCisJIlxuIgorCSJuYW5kIGVudi5vb2IgLSBlbnZpcm9ubWVudCBvZmZzZXQgaW4gT09CIG9mIGJsb2NrIDAgb2YiCisJIiAgICBmaXJzdCBkZXZpY2UuXG4iCisJIm5hbmQgZW52Lm9vYiBzZXQgb2ZmfHBhcnRpdGlvbiAtIHNldCBlbnZpcm9tbmVudCBvZmZzZXRcbiIKKwkibmFuZCBlbnYub29iIGdldCAtIGdldCBlbnZpcm9ubWVudCBvZmZzZXQiCisjZW5kaWYKKyk7CiAKIHN0YXRpYyBpbnQgbmFuZF9sb2FkX2ltYWdlKGNtZF90YmxfdCAqY21kdHAsIG5hbmRfaW5mb190ICpuYW5kLAogCQkJICAgdWxvbmcgb2Zmc2V0LCB1bG9uZyBhZGRyLCBjaGFyICpjbWQpCiB7CiAJaW50IHI7Ci0JY2hhciAqZXA7Ci0JdWxvbmcgY250OworCWNoYXIgKnM7CisJc2l6ZV90IGNudDsKIAlpbWFnZV9oZWFkZXJfdCAqaGRyOworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkKKwljb25zdCB2b2lkICpmaXRfaGRyID0gTlVMTDsKKyNlbmRpZgorCisJcyA9IHN0cmNocihjbWQsICcuJyk7CisJaWYgKHMgIT0gTlVMTCAmJgorCSAgICAoc3RyY21wKHMsICIuamZmczIiKSAmJiBzdHJjbXAocywgIi5lIikgJiYgc3RyY21wKHMsICIuaSIpKSkgeworCQlwcmludGYoIlVua25vd24gbmFuZCBsb2FkIHN1ZmZpeCAnJXMnXG4iLCBzKTsKKwkJYm9vdHN0YWdlX2Vycm9yKEJPT1RTVEFHRV9JRF9OQU5EX1NVRkZJWCk7CisJCXJldHVybiAxOworCX0KIAogCXByaW50ZigiXG5Mb2FkaW5nIGZyb20gJXMsIG9mZnNldCAweCVseFxuIiwgbmFuZC0+bmFtZSwgb2Zmc2V0KTsKIAotCWNudCA9IG5hbmQtPm9vYmJsb2NrOwotCXIgPSBuYW5kX3JlYWQobmFuZCwgb2Zmc2V0LCAmY250LCAodV9jaGFyICopIGFkZHIpOworCWNudCA9IG5hbmQtPndyaXRlc2l6ZTsKKwlyID0gbmFuZF9yZWFkX3NraXBfYmFkKG5hbmQsIG9mZnNldCwgJmNudCwgKHVfY2hhciAqKSBhZGRyKTsKIAlpZiAocikgewogCQlwdXRzKCIqKiBSZWFkIGVycm9yXG4iKTsKLQkJU0hPV19CT09UX1BST0dSRVNTKC0xKTsKKwkJYm9vdHN0YWdlX2Vycm9yKEJPT1RTVEFHRV9JRF9OQU5EX0hEUl9SRUFEKTsKIAkJcmV0dXJuIDE7CiAJfQorCWJvb3RzdGFnZV9tYXJrKEJPT1RTVEFHRV9JRF9OQU5EX0hEUl9SRUFEKTsKIAotCWhkciA9IChpbWFnZV9oZWFkZXJfdCAqKSBhZGRyOworCXN3aXRjaCAoZ2VuaW1nX2dldF9mb3JtYXQgKCh2b2lkICopYWRkcikpIHsKKwljYXNlIElNQUdFX0ZPUk1BVF9MRUdBQ1k6CisJCWhkciA9IChpbWFnZV9oZWFkZXJfdCAqKWFkZHI7CiAKLQlpZiAobnRvaGwoaGRyLT5paF9tYWdpYykgIT0gSUhfTUFHSUMpIHsKLQkJcHJpbnRmKCJcbioqIEJhZCBNYWdpYyBOdW1iZXIgMHgleCAqKlxuIiwgaGRyLT5paF9tYWdpYyk7Ci0JCVNIT1dfQk9PVF9QUk9HUkVTUygtMSk7CisJCWJvb3RzdGFnZV9tYXJrKEJPT1RTVEFHRV9JRF9OQU5EX1RZUEUpOworCQlpbWFnZV9wcmludF9jb250ZW50cyAoaGRyKTsKKworCQljbnQgPSBpbWFnZV9nZXRfaW1hZ2Vfc2l6ZSAoaGRyKTsKKwkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfRklUKQorCWNhc2UgSU1BR0VfRk9STUFUX0ZJVDoKKwkJZml0X2hkciA9IChjb25zdCB2b2lkICopYWRkcjsKKwkJcHV0cyAoIkZpdCBpbWFnZSBkZXRlY3RlZC4uLlxuIik7CisKKwkJY250ID0gZml0X2dldF9zaXplIChmaXRfaGRyKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlib290c3RhZ2VfZXJyb3IoQk9PVFNUQUdFX0lEX05BTkRfVFlQRSk7CisJCXB1dHMgKCIqKiBVbmtub3duIGltYWdlIHR5cGVcbiIpOwogCQlyZXR1cm4gMTsKIAl9CisJYm9vdHN0YWdlX21hcmsoQk9PVFNUQUdFX0lEX05BTkRfVFlQRSk7CiAKLQlwcmludF9pbWFnZV9oZHIoaGRyKTsKLQotCWNudCA9IChudG9obChoZHItPmloX3NpemUpICsgc2l6ZW9mIChpbWFnZV9oZWFkZXJfdCkpOwotCi0JciA9IG5hbmRfcmVhZChuYW5kLCBvZmZzZXQsICZjbnQsICh1X2NoYXIgKikgYWRkcik7CisJciA9IG5hbmRfcmVhZF9za2lwX2JhZChuYW5kLCBvZmZzZXQsICZjbnQsICh1X2NoYXIgKikgYWRkcik7CiAJaWYgKHIpIHsKIAkJcHV0cygiKiogUmVhZCBlcnJvclxuIik7Ci0JCVNIT1dfQk9PVF9QUk9HUkVTUygtMSk7CisJCWJvb3RzdGFnZV9lcnJvcihCT09UU1RBR0VfSURfTkFORF9SRUFEKTsKIAkJcmV0dXJuIDE7CiAJfQorCWJvb3RzdGFnZV9tYXJrKEJPT1RTVEFHRV9JRF9OQU5EX1JFQUQpOworCisjaWYgZGVmaW5lZChDT05GSUdfRklUKQorCS8qIFRoaXMgY2Fubm90IGJlIGRvbmUgZWFybGllciwgd2UgbmVlZCBjb21wbGV0ZSBGSVQgaW1hZ2UgaW4gUkFNIGZpcnN0ICovCisJaWYgKGdlbmltZ19nZXRfZm9ybWF0ICgodm9pZCAqKWFkZHIpID09IElNQUdFX0ZPUk1BVF9GSVQpIHsKKwkJaWYgKCFmaXRfY2hlY2tfZm9ybWF0IChmaXRfaGRyKSkgeworCQkJYm9vdHN0YWdlX2Vycm9yKEJPT1RTVEFHRV9JRF9OQU5EX0ZJVF9SRUFEKTsKKwkJCXB1dHMgKCIqKiBCYWQgRklUIGltYWdlIGZvcm1hdFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlib290c3RhZ2VfbWFyayhCT09UU1RBR0VfSURfTkFORF9GSVRfUkVBRF9PSyk7CisJCWZpdF9wcmludF9jb250ZW50cyAoZml0X2hkcik7CisJfQorI2VuZGlmCiAKIAkvKiBMb2FkaW5nIG9rLCB1cGRhdGUgZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KIAogCWxvYWRfYWRkciA9IGFkZHI7CiAKLQkvKiBDaGVjayBpZiB3ZSBzaG91bGQgYXR0ZW1wdCBhbiBhdXRvLXN0YXJ0ICovCi0JaWYgKCgoZXAgPSBnZXRlbnYoImF1dG9zdGFydCIpKSAhPSBOVUxMKSAmJiAoc3RyY21wKGVwLCAieWVzIikgPT0gMCkpIHsKLQkJY2hhciAqbG9jYWxfYXJnc1syXTsKLQkJZXh0ZXJuIGludCBkb19ib290bShjbWRfdGJsX3QgKiwgaW50LCBpbnQsIGNoYXIgKltdKTsKLQotCQlsb2NhbF9hcmdzWzBdID0gY21kOwotCQlsb2NhbF9hcmdzWzFdID0gTlVMTDsKLQotCQlwcmludGYoIkF1dG9tYXRpYyBib290IG9mIGltYWdlIGF0IGFkZHIgMHglMDhseCAuLi5cbiIsIGFkZHIpOwotCi0JCWRvX2Jvb3RtKGNtZHRwLCAwLCAxLCBsb2NhbF9hcmdzKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBib290bV9tYXliZV9hdXRvc3RhcnQoY21kdHAsIGNtZCk7CiB9CiAKLWludCBkb19uYW5kYm9vdChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCitpbnQgZG9fbmFuZGJvb3QoY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSkKIHsKIAljaGFyICpib290X2RldmljZSA9IE5VTEw7CiAJaW50IGlkeDsKIAl1bG9uZyBhZGRyLCBvZmZzZXQgPSAwOwotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKSAmJiBkZWZpbmVkKENPTkZJR19KRkZTMl9DTURMSU5FKQorI2lmIGRlZmluZWQoQ09ORklHX0NNRF9NVERQQVJUUykKIAlzdHJ1Y3QgbXRkX2RldmljZSAqZGV2OwogCXN0cnVjdCBwYXJ0X2luZm8gKnBhcnQ7CiAJdTggcG51bTsKQEAgLTU1MCwxOCArOTI1LDE5IEBACiAJCQlpZiAoYXJnYyA+IDMpCiAJCQkJZ290byB1c2FnZTsKIAkJCWlmIChhcmdjID09IDMpCi0JCQkJYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKKwkJCQlhZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlsxXSwgTlVMTCwgMTYpOwogCQkJZWxzZQotCQkJCWFkZHIgPSBDRkdfTE9BRF9BRERSOworCQkJCWFkZHIgPSBDT05GSUdfU1lTX0xPQURfQUREUjsKIAkJCXJldHVybiBuYW5kX2xvYWRfaW1hZ2UoY21kdHAsICZuYW5kX2luZm9bZGV2LT5pZC0+bnVtXSwKIAkJCQkJICAgICAgIHBhcnQtPm9mZnNldCwgYWRkciwgYXJndlswXSk7CiAJCX0KIAl9CiAjZW5kaWYKIAorCWJvb3RzdGFnZV9tYXJrKEJPT1RTVEFHRV9JRF9OQU5EX1BBUlQpOwogCXN3aXRjaCAoYXJnYykgewogCWNhc2UgMToKLQkJYWRkciA9IENGR19MT0FEX0FERFI7CisJCWFkZHIgPSBDT05GSUdfU1lTX0xPQURfQUREUjsKIAkJYm9vdF9kZXZpY2UgPSBnZXRlbnYoImJvb3RkZXZpY2UiKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgpAQCAtNTc4LDQwOSArOTU0LDM0IEBACiAJCW9mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbM10sIE5VTEwsIDE2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9KRkZTMikgJiYgZGVmaW5lZChDT05GSUdfSkZGUzJfQ01ETElORSkKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfTVREUEFSVFMpCiB1c2FnZToKICNlbmRpZgotCQlwcmludGYoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7Ci0JCVNIT1dfQk9PVF9QUk9HUkVTUygtMSk7Ci0JCXJldHVybiAxOworCQlib290c3RhZ2VfZXJyb3IoQk9PVFNUQUdFX0lEX05BTkRfU1VGRklYKTsKKwkJcmV0dXJuIENNRF9SRVRfVVNBR0U7CiAJfQorCWJvb3RzdGFnZV9tYXJrKEJPT1RTVEFHRV9JRF9OQU5EX1NVRkZJWCk7CiAKIAlpZiAoIWJvb3RfZGV2aWNlKSB7CiAJCXB1dHMoIlxuKiogTm8gYm9vdCBkZXZpY2UgKipcbiIpOwotCQlTSE9XX0JPT1RfUFJPR1JFU1MoLTEpOworCQlib290c3RhZ2VfZXJyb3IoQk9PVFNUQUdFX0lEX05BTkRfQk9PVF9ERVZJQ0UpOwogCQlyZXR1cm4gMTsKIAl9CisJYm9vdHN0YWdlX21hcmsoQk9PVFNUQUdFX0lEX05BTkRfQk9PVF9ERVZJQ0UpOwogCiAJaWR4ID0gc2ltcGxlX3N0cnRvdWwoYm9vdF9kZXZpY2UsIE5VTEwsIDE2KTsKIAotCWlmIChpZHggPCAwIHx8IGlkeCA+PSBDRkdfTUFYX05BTkRfREVWSUNFIHx8ICFuYW5kX2luZm9baWR4XS5uYW1lKSB7CisJaWYgKGlkeCA8IDAgfHwgaWR4ID49IENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFIHx8ICFuYW5kX2luZm9baWR4XS5uYW1lKSB7CiAJCXByaW50ZigiXG4qKiBEZXZpY2UgJWQgbm90IGF2YWlsYWJsZVxuIiwgaWR4KTsKLQkJU0hPV19CT09UX1BST0dSRVNTKC0xKTsKKwkJYm9vdHN0YWdlX2Vycm9yKEJPT1RTVEFHRV9JRF9OQU5EX0FWQUlMQUJMRSk7CiAJCXJldHVybiAxOwogCX0KKwlib290c3RhZ2VfbWFyayhCT09UU1RBR0VfSURfTkFORF9BVkFJTEFCTEUpOwogCiAJcmV0dXJuIG5hbmRfbG9hZF9pbWFnZShjbWR0cCwgJm5hbmRfaW5mb1tpZHhdLCBvZmZzZXQsIGFkZHIsIGFyZ3ZbMF0pOwogfQogCiBVX0JPT1RfQ01EKG5ib290LCA0LCAxLCBkb19uYW5kYm9vdCwKLQkibmJvb3QgICAtIGJvb3QgZnJvbSBOQU5EIGRldmljZVxuIiwKLQkiW3BhcnRpdGlvbl0gfCBbW1tsb2FkQWRkcl0gZGV2XSBvZmZzZXRdXG4iKTsKLQotI2VuZGlmCQkJCS8qIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpICovCi0KLSNlbHNlIC8qIENGR19OQU5EX0xFR0FDWSAqLwotLyoKLSAqCi0gKiBMZWdhY3kgTkFORCBzdXBwb3J0IC0gdG8gYmUgcGhhc2VkIG91dAotICoKLSAqLwotI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDx3YXRjaGRvZy5oPgotCi0jaWZkZWYgQ09ORklHX1NIT1dfQk9PVF9QUk9HUkVTUwotIyBpbmNsdWRlIDxzdGF0dXNfbGVkLmg+Ci0jIGRlZmluZSBTSE9XX0JPT1RfUFJPR1JFU1MoYXJnKQlzaG93X2Jvb3RfcHJvZ3Jlc3MoYXJnKQotI2Vsc2UKLSMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpCi0jZW5kaWYKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCi0jaW5jbHVkZSA8bGludXgvbXRkL25hbmRfbGVnYWN5Lmg+Ci0jaWYgMAotI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2lkcy5oPgotI2luY2x1ZGUgPGpmZnMyL2pmZnMyLmg+Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19PTUFQMTUxMAotdm9pZCBhcmNoZmxhc2h3cCh2b2lkICphcmNoZGF0YSwgaW50IHdwKTsKLSNlbmRpZgotCi0jZGVmaW5lIFJPVU5EX0RPV04odmFsdWUsYm91bmRhcnkpICAgICAgKCh2YWx1ZSkgJiAofigoYm91bmRhcnkpLTEpKSkKLQotI3VuZGVmCU5BTkRfREVCVUcKLSN1bmRlZglQU1lDSE9fREVCVUcKLQotLyogKioqKioqKioqKioqKioqKioqIFdBUk5JTkcgKioqKioqKioqKioqKioqKioqKioqCi0gKiBXaGVuIEFMTE9XX0VSQVNFX0JBRF9ERUJVRyBpcyBub24temVybyB0aGUgZXJhc2UgY29tbWFuZCB3aWxsCi0gKiBlcmFzZSAob3IgYXQgbGVhc3QgYXR0ZW1wdCB0byBlcmFzZSkgYmxvY2tzIHRoYXQgYXJlIG1hcmtlZAotICogYmFkLiBUaGlzIGNhbiBiZSB2ZXJ5IGhhbmR5IGlmIHlvdSBhcmUgX3N1cmVfIHRoYXQgdGhlIGJsb2NrCi0gKiBpcyBPSywgc2F5IGJlY2F1c2UgeW91IG1hcmtlZCBhIGdvb2QgYmxvY2sgYmFkIHRvIHRlc3QgYmFkCi0gKiBibG9jayBoYW5kbGluZyBhbmQgeW91IGFyZSBkb25lIHRlc3RpbmcsIG9yIGlmIHlvdSBoYXZlCi0gKiBhY2NpZGVudGFsbHkgbWFya2VkIGJsb2NrcyBiYWQuCi0gKgotICogRXJhc2luZyBmYWN0b3J5IG1hcmtlZCBiYWQgYmxvY2tzIGlzIGEgX2JhZF8gaWRlYS4gSWYgdGhlCi0gKiBlcmFzZSBzdWNjZWVkcyB0aGVyZSBpcyBubyByZWxpYWJsZSB3YXkgdG8gZmluZCB0aGVtIGFnYWluLAotICogYW5kIGF0dGVtcHRpbmcgdG8gcHJvZ3JhbSBvciBlcmFzZSBiYWQgYmxvY2tzIGNhbiBhZmZlY3QKLSAqIHRoZSBkYXRhIGluIF9vdGhlcl8gKGdvb2QpIGJsb2Nrcy4KLSAqLwotI2RlZmluZQkgQUxMT1dfRVJBU0VfQkFEX0RFQlVHIDAKLQotI2RlZmluZSBDT05GSUdfTVREX05BTkRfRUNDICAvKiBlbmFibGUgRUNDICovCi0jZGVmaW5lIENPTkZJR19NVERfTkFORF9FQ0NfSkZGUzIKLQotLyogYml0cyBmb3IgbmFuZF9sZWdhY3lfcncoKSBgY21kJzsgb3IgdG9nZXRoZXIgYXMgbmVlZGVkICovCi0jZGVmaW5lIE5BTkRSV19SRUFECTB4MDEKLSNkZWZpbmUgTkFORFJXX1dSSVRFCTB4MDAKLSNkZWZpbmUgTkFORFJXX0pGRlMyCTB4MDIKLSNkZWZpbmUgTkFORFJXX0pGRlMyX1NLSVAJMHgwNAotCi0vKgotICogSW1wb3J0cyBmcm9tIG5hbmRfbGVnYWN5LmMKLSAqLwotZXh0ZXJuIHN0cnVjdCBuYW5kX2NoaXAgbmFuZF9kZXZfZGVzY1tDRkdfTUFYX05BTkRfREVWSUNFXTsKLWV4dGVybiBpbnQgY3Vycl9kZXZpY2U7Ci1leHRlcm4gaW50IG5hbmRfbGVnYWN5X2VyYXNlKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsIHNpemVfdCBvZnMsCi0JCQkgICAgc2l6ZV90IGxlbiwgaW50IGNsZWFuKTsKLWV4dGVybiBpbnQgbmFuZF9sZWdhY3lfcncoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IGNtZCwgc2l6ZV90IHN0YXJ0LAotCQkJIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7Ci1leHRlcm4gdm9pZCBuYW5kX3ByaW50KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpOwotZXh0ZXJuIHZvaWQgbmFuZF9wcmludF9iYWQoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCk7Ci1leHRlcm4gaW50IG5hbmRfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgc2l6ZV90IG9mcywKLQkJCSAgICAgICBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotZXh0ZXJuIGludCBuYW5kX3dyaXRlX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBzaXplX3Qgb2ZzLAotCQkJCXNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7Ci0KLQotaW50IGRvX25hbmQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICAgIGludCByY29kZSA9IDA7Ci0KLSAgICBzd2l0Y2ggKGFyZ2MpIHsKLSAgICBjYXNlIDA6Ci0gICAgY2FzZSAxOgotCXByaW50ZiAoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7Ci0JcmV0dXJuIDE7Ci0gICAgY2FzZSAyOgotCWlmIChzdHJjbXAoYXJndlsxXSwiaW5mbyIpID09IDApIHsKLQkJaW50IGk7Ci0KLQkJcHV0YyAoJ1xuJyk7Ci0KLQkJZm9yIChpPTA7IGk8Q0ZHX01BWF9OQU5EX0RFVklDRTsgKytpKSB7Ci0JCQlpZihuYW5kX2Rldl9kZXNjW2ldLkNoaXBJRCA9PSBOQU5EX0NoaXBJRF9VTktOT1dOKQotCQkJCWNvbnRpbnVlOyAvKiBsaXN0IG9ubHkga25vd24gZGV2aWNlcyAqLwotCQkJcHJpbnRmICgiRGV2aWNlICVkOiAiLCBpKTsKLQkJCW5hbmRfcHJpbnQoJm5hbmRfZGV2X2Rlc2NbaV0pOwotCQl9Ci0JCXJldHVybiAwOwotCi0JfSBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwiZGV2aWNlIikgPT0gMCkgewotCQlpZiAoKGN1cnJfZGV2aWNlIDwgMCkgfHwgKGN1cnJfZGV2aWNlID49IENGR19NQVhfTkFORF9ERVZJQ0UpKSB7Ci0JCQlwdXRzICgiXG5ubyBkZXZpY2VzIGF2YWlsYWJsZVxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlwcmludGYgKCJcbkRldmljZSAlZDogIiwgY3Vycl9kZXZpY2UpOwotCQluYW5kX3ByaW50KCZuYW5kX2Rldl9kZXNjW2N1cnJfZGV2aWNlXSk7Ci0JCXJldHVybiAwOwotCi0JfSBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwiYmFkIikgPT0gMCkgewotCQlpZiAoKGN1cnJfZGV2aWNlIDwgMCkgfHwgKGN1cnJfZGV2aWNlID49IENGR19NQVhfTkFORF9ERVZJQ0UpKSB7Ci0JCQlwdXRzICgiXG5ubyBkZXZpY2VzIGF2YWlsYWJsZVxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlwcmludGYgKCJcbkRldmljZSAlZCBiYWQgYmxvY2tzOlxuIiwgY3Vycl9kZXZpY2UpOwotCQluYW5kX3ByaW50X2JhZCgmbmFuZF9kZXZfZGVzY1tjdXJyX2RldmljZV0pOwotCQlyZXR1cm4gMDsKLQotCX0KLQlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwotCXJldHVybiAxOwotICAgIGNhc2UgMzoKLQlpZiAoc3RyY21wKGFyZ3ZbMV0sImRldmljZSIpID09IDApIHsKLQkJaW50IGRldiA9IChpbnQpc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTApOwotCi0JCXByaW50ZiAoIlxuRGV2aWNlICVkOiAiLCBkZXYpOwotCQlpZiAoZGV2ID49IENGR19NQVhfTkFORF9ERVZJQ0UpIHsKLQkJCXB1dHMgKCJ1bmtub3duIGRldmljZVxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQluYW5kX3ByaW50KCZuYW5kX2Rldl9kZXNjW2Rldl0pOwotCQkvKm5hbmRfcHJpbnQgKGRldik7Ki8KLQotCQlpZiAobmFuZF9kZXZfZGVzY1tkZXZdLkNoaXBJRCA9PSBOQU5EX0NoaXBJRF9VTktOT1dOKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCWN1cnJfZGV2aWNlID0gZGV2OwotCi0JCXB1dHMgKCIuLi4gaXMgbm93IGN1cnJlbnQgZGV2aWNlXG4iKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sImVyYXNlIikgPT0gMCAmJiBzdHJjbXAoYXJndlsyXSwgImNsZWFuIikgPT0gMCkgewotCQlzdHJ1Y3QgbmFuZF9jaGlwKiBuYW5kID0gJm5hbmRfZGV2X2Rlc2NbY3Vycl9kZXZpY2VdOwotCQl1bG9uZyBvZmYgPSAwOwotCQl1bG9uZyBzaXplID0gbmFuZC0+dG90bGVuOwotCQlpbnQgcmV0OwotCi0JCXByaW50ZiAoIlxuTkFORCBlcmFzZTogZGV2aWNlICVkIG9mZnNldCAlbGQsIHNpemUgJWxkIC4uLiAiLAotCQkJY3Vycl9kZXZpY2UsIG9mZiwgc2l6ZSk7Ci0KLQkJcmV0ID0gbmFuZF9sZWdhY3lfZXJhc2UgKG5hbmQsIG9mZiwgc2l6ZSwgMSk7Ci0KLQkJcHJpbnRmKCIlc1xuIiwgcmV0ID8gIkVSUk9SIiA6ICJPSyIpOwotCi0JCXJldHVybiByZXQ7Ci0JfQotCi0JcHJpbnRmICgiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKLQlyZXR1cm4gMTsKLSAgICBkZWZhdWx0OgotCS8qIGF0IGxlYXN0IDQgYXJncyAqLwotCi0JaWYgKHN0cm5jbXAoYXJndlsxXSwgInJlYWQiLCA0KSA9PSAwIHx8Ci0JICAgIHN0cm5jbXAoYXJndlsxXSwgIndyaXRlIiwgNSkgPT0gMCkgewotCQl1bG9uZyBhZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTYpOwotCQl1bG9uZyBvZmYgID0gc2ltcGxlX3N0cnRvdWwoYXJndlszXSwgTlVMTCwgMTYpOwotCQl1bG9uZyBzaXplID0gc2ltcGxlX3N0cnRvdWwoYXJndls0XSwgTlVMTCwgMTYpOwotCQlpbnQgY21kICAgID0gKHN0cm5jbXAoYXJndlsxXSwgInJlYWQiLCA0KSA9PSAwKSA/Ci0JCQkJTkFORFJXX1JFQUQgOiBOQU5EUldfV1JJVEU7Ci0JCWludCByZXQsIHRvdGFsOwotCQljaGFyKiBjbWR0YWlsID0gc3RyY2hyKGFyZ3ZbMV0sICcuJyk7Ci0KLQkJaWYgKGNtZHRhaWwgJiYgIXN0cm5jbXAoY21kdGFpbCwgIi5vb2IiLCAyKSkgewotCQkJLyogcmVhZCBvdXQtb2YtYmFuZCBkYXRhICovCi0JCQlpZiAoY21kICYgTkFORFJXX1JFQUQpIHsKLQkJCQlyZXQgPSBuYW5kX3JlYWRfb29iKG5hbmRfZGV2X2Rlc2MgKyBjdXJyX2RldmljZSwKLQkJCQkJCSAgICBvZmYsIHNpemUsIChzaXplX3QgKikmdG90YWwsCi0JCQkJCQkgICAgKHVfY2hhciopYWRkcik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlyZXQgPSBuYW5kX3dyaXRlX29vYihuYW5kX2Rldl9kZXNjICsgY3Vycl9kZXZpY2UsCi0JCQkJCQkgICAgIG9mZiwgc2l6ZSwgKHNpemVfdCAqKSZ0b3RhbCwKLQkJCQkJCSAgICAgKHVfY2hhciopYWRkcik7Ci0JCQl9Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWVsc2UgaWYgKGNtZHRhaWwgJiYgIXN0cm5jbXAoY21kdGFpbCwgIi5qZmZzMiIsIDIpKQotCQkJY21kIHw9IE5BTkRSV19KRkZTMjsJLyogc2tpcCBiYWQgYmxvY2tzICovCi0JCWVsc2UgaWYgKGNtZHRhaWwgJiYgIXN0cm5jbXAoY21kdGFpbCwgIi5qZmZzMnMiLCAyKSkgewotCQkJY21kIHw9IE5BTkRSV19KRkZTMjsJLyogc2tpcCBiYWQgYmxvY2tzIChvbiByZWFkIHRvbykgKi8KLQkJCWlmIChjbWQgJiBOQU5EUldfUkVBRCkKLQkJCQljbWQgfD0gTkFORFJXX0pGRlMyX1NLSVA7CS8qIHNraXAgYmFkIGJsb2NrcyAob24gcmVhZCB0b28pICovCi0JCX0KLSNpZmRlZiBTWE5JODU1VAotCQkvKiBuZWVkICIuZSIgc2FtZSBhcyAiLmoiIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgdW5pdHMgKi8KLQkJZWxzZSBpZiAoY21kdGFpbCAmJiAhc3RyY21wKGNtZHRhaWwsICIuZSIpKQotCQkJY21kIHw9IE5BTkRSV19KRkZTMjsJLyogc2tpcCBiYWQgYmxvY2tzICovCi0jZW5kaWYKLSNpZmRlZiBDRkdfTkFORF9TS0lQX0JBRF9ET1RfSQotCQkvKiBuZWVkICIuaSIgc2FtZSBhcyAiLmpmZnMycyIgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB1bml0cyAoZXNkKSAqLwotCQkvKiAiLmkiIGZvciBpbWFnZSAtPiByZWFkIHNraXBzIGJhZCBibG9jayAobm8gMHhmZikgKi8KLQkJZWxzZSBpZiAoY21kdGFpbCAmJiAhc3RyY21wKGNtZHRhaWwsICIuaSIpKSB7Ci0JCQljbWQgfD0gTkFORFJXX0pGRlMyOwkvKiBza2lwIGJhZCBibG9ja3MgKG9uIHJlYWQgdG9vKSAqLwotCQkJaWYgKGNtZCAmIE5BTkRSV19SRUFEKQotCQkJCWNtZCB8PSBOQU5EUldfSkZGUzJfU0tJUDsJLyogc2tpcCBiYWQgYmxvY2tzIChvbiByZWFkIHRvbykgKi8KLQkJfQotI2VuZGlmIC8qIENGR19OQU5EX1NLSVBfQkFEX0RPVF9JICovCi0JCWVsc2UgaWYgKGNtZHRhaWwpIHsKLQkJCXByaW50ZiAoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCXByaW50ZiAoIlxuTkFORCAlczogZGV2aWNlICVkIG9mZnNldCAlbGQsIHNpemUgJWxkIC4uLlxuIiwKLQkJCShjbWQgJiBOQU5EUldfUkVBRCkgPyAicmVhZCIgOiAid3JpdGUiLAotCQkJY3Vycl9kZXZpY2UsIG9mZiwgc2l6ZSk7Ci0KLQkJcmV0ID0gbmFuZF9sZWdhY3lfcncobmFuZF9kZXZfZGVzYyArIGN1cnJfZGV2aWNlLCBjbWQsIG9mZiwgc2l6ZSwKLQkJCSAgICAgKHNpemVfdCAqKSZ0b3RhbCwgKHVfY2hhciopYWRkcik7Ci0KLQkJcHJpbnRmICgiICVkIGJ5dGVzICVzOiAlc1xuIiwgdG90YWwsCi0JCQkoY21kICYgTkFORFJXX1JFQUQpID8gInJlYWQiIDogIndyaXR0ZW4iLAotCQkJcmV0ID8gIkVSUk9SIiA6ICJPSyIpOwotCi0JCXJldHVybiByZXQ7Ci0JfSBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwiZXJhc2UiKSA9PSAwICYmCi0JCSAgIChhcmdjID09IDQgfHwgc3RyY21wKCJjbGVhbiIsIGFyZ3ZbMl0pID09IDApKSB7Ci0JCWludCBjbGVhbiA9IGFyZ2MgPT0gNTsKLQkJdWxvbmcgb2ZmID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyICsgY2xlYW5dLCBOVUxMLCAxNik7Ci0JCXVsb25nIHNpemUgPSBzaW1wbGVfc3RydG91bChhcmd2WzMgKyBjbGVhbl0sIE5VTEwsIDE2KTsKLQkJaW50IHJldDsKLQotCQlwcmludGYgKCJcbk5BTkQgZXJhc2U6IGRldmljZSAlZCBvZmZzZXQgJWxkLCBzaXplICVsZCAuLi5cbiIsCi0JCQljdXJyX2RldmljZSwgb2ZmLCBzaXplKTsKLQotCQlyZXQgPSBuYW5kX2xlZ2FjeV9lcmFzZSAobmFuZF9kZXZfZGVzYyArIGN1cnJfZGV2aWNlLAotCQkJCQlvZmYsIHNpemUsIGNsZWFuKTsKLQotCQlwcmludGYoIiVzXG4iLCByZXQgPyAiRVJST1IiIDogIk9LIik7Ci0KLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgewotCQlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwotCQlyY29kZSA9IDE7Ci0JfQotCi0JcmV0dXJuIHJjb2RlOwotICAgIH0KLX0KLQotVV9CT09UX0NNRCgKLQluYW5kLAk1LAkxLAlkb19uYW5kLAotCSJuYW5kICAgIC0gbGVnYWN5IE5BTkQgc3ViLXN5c3RlbVxuIiwKLQkiaW5mbyAgLSBzaG93IGF2YWlsYWJsZSBOQU5EIGRldmljZXNcbiIKLQkibmFuZCBkZXZpY2UgW2Rldl0gLSBzaG93IG9yIHNldCBjdXJyZW50IGRldmljZVxuIgotCSJuYW5kIHJlYWRbLmpmZnMyW3NdXSAgYWRkciBvZmYgc2l6ZVxuIgotCSJuYW5kIHdyaXRlWy5qZmZzMl0gYWRkciBvZmYgc2l6ZSAtIHJlYWQvd3JpdGUgYHNpemUnIGJ5dGVzIHN0YXJ0aW5nXG4iCi0JIiAgICBhdCBvZmZzZXQgYG9mZicgdG8vZnJvbSBtZW1vcnkgYWRkcmVzcyBgYWRkcidcbiIKLQkibmFuZCBlcmFzZSBbY2xlYW5dIFtvZmYgc2l6ZV0gLSBlcmFzZSBgc2l6ZScgYnl0ZXMgZnJvbVxuIgotCSIgICAgb2Zmc2V0IGBvZmYnIChlbnRpcmUgZGV2aWNlIGlmIG5vdCBzcGVjaWZpZWQpXG4iCi0JIm5hbmQgYmFkIC0gc2hvdyBiYWQgYmxvY2tzXG4iCi0JIm5hbmQgcmVhZC5vb2IgYWRkciBvZmYgc2l6ZSAtIHJlYWQgb3V0LW9mLWJhbmQgZGF0YVxuIgotCSJuYW5kIHdyaXRlLm9vYiBhZGRyIG9mZiBzaXplIC0gcmVhZCBvdXQtb2YtYmFuZCBkYXRhXG4iCisJImJvb3QgZnJvbSBOQU5EIGRldmljZSIsCisJIltwYXJ0aXRpb25dIHwgW1tbbG9hZEFkZHJdIGRldl0gb2Zmc2V0XSIKICk7Ci0KLWludCBkb19uYW5kYm9vdCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JY2hhciAqYm9vdF9kZXZpY2UgPSBOVUxMOwotCWNoYXIgKmVwOwotCWludCBkZXY7Ci0JdWxvbmcgY250OwotCXVsb25nIGFkZHI7Ci0JdWxvbmcgb2Zmc2V0ID0gMDsKLQlpbWFnZV9oZWFkZXJfdCAqaGRyOwotCWludCByY29kZSA9IDA7Ci0Jc3dpdGNoIChhcmdjKSB7Ci0JY2FzZSAxOgotCQlhZGRyID0gQ0ZHX0xPQURfQUREUjsKLQkJYm9vdF9kZXZpY2UgPSBnZXRlbnYgKCJib290ZGV2aWNlIik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKLQkJYm9vdF9kZXZpY2UgPSBnZXRlbnYgKCJib290ZGV2aWNlIik7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKLQkJYm9vdF9kZXZpY2UgPSBhcmd2WzJdOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWFkZHIgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxNik7Ci0JCWJvb3RfZGV2aWNlID0gYXJndlsyXTsKLQkJb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwoYXJndlszXSwgTlVMTCwgMTYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwotCQlTSE9XX0JPT1RfUFJPR1JFU1MgKC0xKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKCFib290X2RldmljZSkgewotCQlwdXRzICgiXG4qKiBObyBib290IGRldmljZSAqKlxuIik7Ci0JCVNIT1dfQk9PVF9QUk9HUkVTUyAoLTEpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlkZXYgPSBzaW1wbGVfc3RydG91bChib290X2RldmljZSwgJmVwLCAxNik7Ci0KLQlpZiAoKGRldiA+PSBDRkdfTUFYX05BTkRfREVWSUNFKSB8fAotCSAgICAobmFuZF9kZXZfZGVzY1tkZXZdLkNoaXBJRCA9PSBOQU5EX0NoaXBJRF9VTktOT1dOKSkgewotCQlwcmludGYgKCJcbioqIERldmljZSAlZCBub3QgYXZhaWxhYmxlXG4iLCBkZXYpOwotCQlTSE9XX0JPT1RfUFJPR1JFU1MgKC0xKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JcHJpbnRmICgiXG5Mb2FkaW5nIGZyb20gZGV2aWNlICVkOiAlcyBhdCAweCVseCAob2Zmc2V0IDB4JWx4KVxuIiwKLQkJZGV2LCBuYW5kX2Rldl9kZXNjW2Rldl0ubmFtZSwgbmFuZF9kZXZfZGVzY1tkZXZdLklPX0FERFIsCi0JCW9mZnNldCk7Ci0KLQlpZiAobmFuZF9sZWdhY3lfcncgKG5hbmRfZGV2X2Rlc2MgKyBkZXYsIE5BTkRSV19SRUFELCBvZmZzZXQsCi0JCQlTRUNUT1JTSVpFLCBOVUxMLCAodV9jaGFyICopYWRkcikpIHsKLQkJcHJpbnRmICgiKiogUmVhZCBlcnJvciBvbiAlZFxuIiwgZGV2KTsKLQkJU0hPV19CT09UX1BST0dSRVNTICgtMSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWhkciA9IChpbWFnZV9oZWFkZXJfdCAqKWFkZHI7Ci0KLQlpZiAobnRvaGwoaGRyLT5paF9tYWdpYykgPT0gSUhfTUFHSUMpIHsKLQotCQlwcmludF9pbWFnZV9oZHIgKGhkcik7Ci0KLQkJY250ID0gKG50b2hsKGhkci0+aWhfc2l6ZSkgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpKTsKLQkJY250IC09IFNFQ1RPUlNJWkU7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmICgiXG4qKiBCYWQgTWFnaWMgTnVtYmVyIDB4JXggKipcbiIsIG50b2hsKGhkci0+aWhfbWFnaWMpKTsKLQkJU0hPV19CT09UX1BST0dSRVNTICgtMSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChuYW5kX2xlZ2FjeV9ydyAobmFuZF9kZXZfZGVzYyArIGRldiwgTkFORFJXX1JFQUQsCi0JCQlvZmZzZXQgKyBTRUNUT1JTSVpFLCBjbnQsIE5VTEwsCi0JCQkodV9jaGFyICopKGFkZHIrU0VDVE9SU0laRSkpKSB7Ci0JCXByaW50ZiAoIioqIFJlYWQgZXJyb3Igb24gJWRcbiIsIGRldik7Ci0JCVNIT1dfQk9PVF9QUk9HUkVTUyAoLTEpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQkvKiBMb2FkaW5nIG9rLCB1cGRhdGUgZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KLQotCWxvYWRfYWRkciA9IGFkZHI7Ci0KLQkvKiBDaGVjayBpZiB3ZSBzaG91bGQgYXR0ZW1wdCBhbiBhdXRvLXN0YXJ0ICovCi0JaWYgKCgoZXAgPSBnZXRlbnYoImF1dG9zdGFydCIpKSAhPSBOVUxMKSAmJiAoc3RyY21wKGVwLCJ5ZXMiKSA9PSAwKSkgewotCQljaGFyICpsb2NhbF9hcmdzWzJdOwotCQlleHRlcm4gaW50IGRvX2Jvb3RtIChjbWRfdGJsX3QgKiwgaW50LCBpbnQsIGNoYXIgKltdKTsKLQotCQlsb2NhbF9hcmdzWzBdID0gYXJndlswXTsKLQkJbG9jYWxfYXJnc1sxXSA9IE5VTEw7Ci0KLQkJcHJpbnRmICgiQXV0b21hdGljIGJvb3Qgb2YgaW1hZ2UgYXQgYWRkciAweCUwOGx4IC4uLlxuIiwgYWRkcik7Ci0KLQkJZG9fYm9vdG0gKGNtZHRwLCAwLCAxLCBsb2NhbF9hcmdzKTsKLQkJcmNvZGUgPSAxOwotCX0KLQlyZXR1cm4gcmNvZGU7Ci19Ci0KLVVfQk9PVF9DTUQoCi0JbmJvb3QsCTQsCTEsCWRvX25hbmRib290LAotCSJuYm9vdCAgIC0gYm9vdCBmcm9tIE5BTkQgZGV2aWNlXG4iLAotCSJsb2FkQWRkciBkZXZcbiIKLSk7Ci0KLSNlbmRpZiAvKiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKSAqLwotCi0jZW5kaWYgLyogQ0ZHX05BTkRfTEVHQUNZICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX3BoeS5jIGIvY29tbW9uL2NtZF9waHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2UzOGVjCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL2NtZF9waHkuYwpAQCAtMCwwICsxLDQzMCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2lmZGVmIENPTkZJR19QQ0lFX1BIWQorCisvKiBQQ0llIFBIWSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUENJRV9QSFlfUEFSQUxMRUxfQ1JfQ1RSTF9QT1JUX0FERFIJMHgwMAkvKiBDUl9BRERSICovCisjZGVmaW5lIFBDSUVfUEhZX1BBUkFMTEVMX0NSX0NUUkxfUE9SVF9EQVRBCTB4MDQJLyogQ1JfREFUQSAqLworI2RlZmluZSBQQ0lFX1BIWV9QT1dFUl9HT09EX1NUQVRVUwkJMHgwOAkvKiBQR19TVFMgKi8KKyNkZWZpbmUgUENJRV9QSFlfTVBMTF9DVFJMCQkJMHgwQwkvKiBNUExMX0NUTCAqLworI2RlZmluZSBQQ0lFX1BIWV9URVNUX0NUUkwJCQkweDEwCS8qIFRFU1RfQ1RMICovCisjZGVmaW5lIFBDSUVfUEhZX1RSQU5TTUlUX0xFVkVMX0NUUkwJCTB4MTQJLyogVFhfTFZMX0NUTCAqLworI2RlZmluZSBQQ0lFX1BIWV9MQU5FMF9UWF9DVFJMCQkJMHgxOAkvKiBUWDBfQ1RMICovCisjZGVmaW5lIFBDSUVfUEhZX0xBTkUxX1RYX0NUUkwJCQkweDFDCS8qIFRYMV9DVEwgKi8KKyNkZWZpbmUgUENJRV9QSFlfTE9TX0xFVkVMX0NUUkwJCQkweDIwCS8qIExPU19MVkxfQ1RMICovCisjZGVmaW5lIFBDSUVfUEhZX0xBTkUwX1JYX0NUUkwJCQkweDI0CS8qIFJYMF9DVEwgKi8KKyNkZWZpbmUgUENJRV9QSFlfTEFORTFfUlhfQ1RSTAkJCTB4MjgJLyogUlgxX0NUTCAqLworI2RlZmluZSBQQ0lFX1BIWV9URUNITk9MT0dZX0NUUkwJCTB4MkMJLyogVEVDSF9DVEwgKi8KKyNkZWZpbmUgUENJRV9QSFlfUkVTSVNUT1JfVFVORV9DVFJMCQkweDMwCS8qIFJUVU5FX0NUTCAqLworI2RlZmluZSBQQ0lFX1BIWV9QQ1NfU1RBVFVTCQkJMHgzNAkvKiBQQ1NfU1RTICovCisjZGVmaW5lIFBDSUVfUEhZX1BDU19DVFJMCQkJMHgzOAkvKiBQQ1NfQ1RMICovCisKKyNkZWZpbmUgQ09NQ0VSVE9fQ0xLX0REUl9QQ0lFX0NMS19DTlRSTAkJMHgxMDBCMDAxOAorI2RlZmluZSBDT01DRVJUT19DTEtfQ0xLX1BXUl9EV04JCTB4MTAwQjAwNDAKKyNkZWZpbmUgQ09NQ0VSVE9fQkxPQ0tfUkVTRVRfUkVHCQkweDEwMEIwMTAwIC8qIEFQQl9WQUREUigoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxMDApKSAqLworCisjZGVmaW5lIFVTQl9ESVZfQllQQVNTCQkoMSA8PCAzMCkKKyNkZWZpbmUgSVBTRUMxX0RJVl9CWVBBU1MJKDEgPDwgMjkpCisjZGVmaW5lIElQU0VDMF9ESVZfQllQQVNTCSgxIDw8IDI4KQorI2RlZmluZSBQQ0lFX0RJVl9CWVBBU1MJCSgxIDw8IDI3KQorI2RlZmluZSBERFJfRElWX0JZUEFTUwkJKDEgPDwgMjYpCisKKyNkZWZpbmUgVVNCX0RJVl9WQUxfT0ZGU0VUCTIwCisjZGVmaW5lIFVTQl9ESVZfVkFMX01BU0sJKDB4M2YgPDwgVVNCX0RJVl9WQUxfT0ZGU0VUKQorCisjZGVmaW5lIElQU0VDX0RJVjFfVkFMX09GRlNFVAkxNgorI2RlZmluZSBJUFNFQ19ESVYxX1ZBTF9NQVNLCSgweGYgPDwgSVBTRUNfRElWMF9WQUxfT0ZGU0VUKQorCisjZGVmaW5lIElQU0VDX0RJVjBfVkFMX09GRlNFVAkxMgorI2RlZmluZSBJUFNFQ19ESVYwX1ZBTF9NQVNLCSgweGYgPDwgSVBTRUNfRElWMV9WQUxfT0ZGU0VUKQorCisjZGVmaW5lIFBDSUVfRElWX1ZBTF9PRkZTRVQJOAorI2RlZmluZSBQQ0lFX0RJVl9WQUxfTUFTSwkoMHhmIDw8IFBDSUVfRElWX1ZBTF9PRkZTRVQpCisKKyNkZWZpbmUgRERSX0RJVl9WQUxfT0ZGU0VUCTQKKyNkZWZpbmUgRERSX0RJVl9WQUxfTUFTSwkoMHhmIDw8IEREUl9ESVZfVkFMX09GRlNFVCkKKworCisjZGVmaW5lIFVTQl9SRUZfUkVTRVRfTgkJKDEgPDwgMjApCisjZGVmaW5lIE5PX0JBTF9ERFJfUkVGX1JTVAkoMSA8PCAxOSkKKyNkZWZpbmUgSVBTRUMyX0FIQl9SU1QJCSgxIDw8IDE4KQorI2RlZmluZSBSTkdfUlNUCQkJKDEgPDwgMTcpCisjZGVmaW5lIElQU0VDX0NPUkVfUlNUCQkoMSA8PCAxNikKKyNkZWZpbmUgSVBTRUNfQUhCX1JTVAkJKDEgPDwgMTUpCisjZGVmaW5lIFVTQl9BSEJfUkVTRVRfTgkJKDEgPDwgMTQpCisjZGVmaW5lIFRETV9SRUZfUlNUCQkoMSA8PCAxMykKKyNkZWZpbmUgVERNX0FIQl9SU1QJCSgxIDw8IDEyKQorI2RlZmluZSBERFJfUkVGX1JTVAkJKDEgPDwgMTEpCisjZGVmaW5lIEREUl9BSEJfUlNUCQkoMSA8PCAxMCkKKyNkZWZpbmUgUENJRTFfUkVGX1JTVAkJKDEgPDwgOSkKKyNkZWZpbmUgUENJRTBfUkVGX1JTVAkJKDEgPDwgOCkKKyNkZWZpbmUgUENJRTFfQUhCX1JTVAkJKDEgPDwgNykKKyNkZWZpbmUgUENJRTBfQUhCX1JTVAkJKDEgPDwgNikKKyNkZWZpbmUgR0VNQUMxX1BIWV9SU1QJCSgxIDw8IDUpCisjZGVmaW5lIEdFTUFDMF9QSFlfUlNUCQkoMSA8PCA0KQorI2RlZmluZSBHRU1BQzFfQUhCX1JTVAkJKDEgPDwgMykKKyNkZWZpbmUgR0VNQUMwX0FIQl9SU1QJCSgxIDw8IDIpCisjZGVmaW5lIEFSTTFfQUhCX1JTVAkJKDEgPDwgMSkKKyNkZWZpbmUgQVJNMF9BSEJfUlNUCQkoMSA8PCAwKQorCisjZGVmaW5lIFVTQl9NVVhfU0VMCQkoMSA8PCAzKQorI2RlZmluZSBJUFNFQ19NVVhfU0VMCQkoMSA8PCAyKQorI2RlZmluZSBQQ0lFX01VWF9TRUwJCSgxIDw8IDEpCisjZGVmaW5lIEREUl9NVVhfU0VMCQkoMSA8PCAwKQorCisKKyNkZWZpbmUgVVNCX1JFRkNMS19QRAkJKDEgPDwgMjQpCisjZGVmaW5lIFVTQl9BSEJDTEtfUEQJCSgxIDw8IDE5KQorI2RlZmluZSBQQ0lFMV9BSEJDTEtfUEQJCSgxIDw8IDE1KQorI2RlZmluZSBQQ0lFMF9BSEJDTEtfUEQJCSgxIDw8IDE0KQorI2RlZmluZSBQQ0lFX1JFRkNMS19OUF9QRAkoMSA8PCA2KQorCisjZGVmaW5lIHdyaXRlbCh2YWwsIGFkZHIpCSoodm9sYXRpbGUgdTMyICopKGFkZHIpID0gKHZhbCkKKyNkZWZpbmUgcmVhZGwoYWRkcikgCQkqKHZvbGF0aWxlIHUzMiAqKShhZGRyKQorCit2b2lkICpwY2llX3BoeV9iYXNlYWRkciA9ICh2b2lkICopMHgxMDA2MDAwMDsKKworc3RhdGljIHUxNiBwY2llX3BoeV9yZWdfcmVhZCh1MTYgYWRkcikKK3sKKwl3cml0ZWwoYWRkciwgcGNpZV9waHlfYmFzZWFkZHIgKyBQQ0lFX1BIWV9QQVJBTExFTF9DUl9DVFJMX1BPUlRfQUREUik7CisJcmV0dXJuICh1MTYpKHJlYWRsKHBjaWVfcGh5X2Jhc2VhZGRyICsgUENJRV9QSFlfUEFSQUxMRUxfQ1JfQ1RSTF9QT1JUX0RBVEEpICYgMHhmZmZmKTsKK30KKworc3RhdGljIHZvaWQgcGNpZV9waHlfcmVnX3dyaXRlKHUxNiB2YWwsIHUxNiBhZGRyKQoreworCXdyaXRlbChhZGRyLCBwY2llX3BoeV9iYXNlYWRkciArIFBDSUVfUEhZX1BBUkFMTEVMX0NSX0NUUkxfUE9SVF9BRERSKTsKKwl3cml0ZWwodmFsLCBwY2llX3BoeV9iYXNlYWRkciArIFBDSUVfUEhZX1BBUkFMTEVMX0NSX0NUUkxfUE9SVF9EQVRBKTsKK30KKworCitpbnQgZG9fdHhsdmwgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXUzMiB0eF9sZXZlbDsKKworCWlmIChhcmdjIDwgMikKKwkJcmV0dXJuIC0xOworCisJdHhfbGV2ZWwgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxNikgJiAweDFmOworCisJd3JpdGVsKHR4X2xldmVsLCBwY2llX3BoeV9iYXNlYWRkciArIFBDSUVfUEhZX1RSQU5TTUlUX0xFVkVMX0NUUkwpOworCisJcHJpbnRmKCIleD0leCIsIHBjaWVfcGh5X2Jhc2VhZGRyICsgUENJRV9QSFlfVFJBTlNNSVRfTEVWRUxfQ1RSTCwgcmVhZGwocGNpZV9waHlfYmFzZWFkZHIgKyBQQ0lFX1BIWV9UUkFOU01JVF9MRVZFTF9DVFJMKSk7Cit9CisKK1VfQk9PVF9DTUQoCisJdHhsdmwsICAgMiwgICAgICAgICAgICAgIDAsICAgICAgZG9fdHhsdmwsCisJInR4bHZsICAgIC0gc2V0cyB0eCBsZXZlbFxuIiwKKyk7CisKKyNpZiAwCitpbnQgZG9fbG9vcGJhY2sgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXUzMiB0eF9sZXZlbDsKKworCWlmIChhcmdjIDwgMikKKwkJcmV0dXJuIC0xOworCisKK30KKworVV9CT09UX0NNRCgKKwl0eGx2bCwgICAyLCAgICAgICAgICAgICAgMCwgICAgICBkb190eGx2bCwKKwkidHhsdmwgICAgLSBzdGFydCBwaHkgQkVSVCB0ZXN0XG4iLAorKTsKKyNlbmRpZgorCisKK2ludCBkb19waHl0ZXN0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgaTsKKwl1MTYgdHlwZSwgcGF0MCwgdmFsOworCisJaWYgKGFyZ2MgPCAzKQorCQlyZXR1cm4gLTE7CisKKwl0eXBlID0gc2ltcGxlX3N0cnRvdWwoYXJndlsxXSwgTlVMTCwgMTYpICYgMHhmZmZmOworCXBhdDAgPSBzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxNikgJiAweGZmZmY7CisKKwlwcmludGYoInR5cGUoJXgpLCBwYXQwKCV4KVxuIiwgdHlwZSwgcGF0MCk7CisKKwkvKiBFbmFibGUgcGF0dGVybiBvdXRwdXQgKi8KKwlwY2llX3BoeV9yZWdfd3JpdGUoKHR5cGUgJiAweDcpIHwgKChwYXQwICYgMHgzZmYpIDw8IDQpLCAweDIxMTApOworCisJLyogRW5hYmxlIHBhdHRlcm4gbWF0Y2hpbmcgYW5kIHN5bmMgKi8KKwlwY2llX3BoeV9yZWdfd3JpdGUoKHR5cGUgJiAweDcpIHwgKDEgPDwgMyksIDB4MjExOCk7CisKKwkvKiBkaXNhYmxlIHN5bmMgKi8KKwlwY2llX3BoeV9yZWdfd3JpdGUoKHR5cGUgJiAweDcpLCAweDIxMTgpOworCisJcGNpZV9waHlfcmVnX3dyaXRlKCh0eXBlICYgMHg3KSB8ICgxIDw8IDMpLCAweDIxMTgpOworCisJLyogZGlzYWJsZSBzeW5jICovCisJcGNpZV9waHlfcmVnX3dyaXRlKCh0eXBlICYgMHg3KSwgMHgyMTE4KTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKwkJdWRlbGF5KDEwMDApOworCisJCXZhbCA9IHBjaWVfcGh5X3JlZ19yZWFkKDB4MjExOSk7CisJCWlmICgodmFsICYgMHg4MDAwKSkKKwkJCXByaW50ZigiZXJyb3IgY291bnQgJXhcbiIsICh2YWwgJiAweDdmZmYpICogMTI4KTsKKwkJZWxzZQorCQkJcHJpbnRmKCJlcnJvciBjb3VudCAleFxuIiwgKHZhbCAmIDB4N2ZmZikpOworCX0KKworCXJldHVybiAwOworfQorCitVX0JPT1RfQ01EKAorCXBoeXRlc3QsICAgMywgICAgICAgICAgICAgIDAsICAgICAgZG9fcGh5dGVzdCwKKwkicGh5dGVzdCAgICAtIHN0YXJ0IHBoeSBCRVJUIHRlc3RcbiIsCispOworCitpbnQgZG9faW5pdHBoeSAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJdTMyIHZhbDsKKworCXUzMiBuY3kgPSAweDQgJiAweDFmOworCXUzMiBuY3k1ID0gMHgwICYgMHgzOworCXUzMiBwcmVzY2FsZSA9IDB4MCAmIDB4MzsKKworCisJLyogUHV0IGJsb2NrIGludG8gcmVzZXQgKi8KKwl3cml0ZWwocmVhZGwoQ09NQ0VSVE9fQkxPQ0tfUkVTRVRfUkVHKSAmIH4oUENJRTFfUkVGX1JTVCB8IFBDSUUwX1JFRl9SU1QgfCBQQ0lFMV9BSEJfUlNUIHwgUENJRTBfQUhCX1JTVCksIENPTUNFUlRPX0JMT0NLX1JFU0VUX1JFRyk7CisKKwkvKiBQb3dlciB1cCBjbG9ja3MgKi8KKwl3cml0ZWwocmVhZGwoQ09NQ0VSVE9fQ0xLX0NMS19QV1JfRFdOKSAmIH4oUENJRV9SRUZDTEtfTlBfUEQgfCBQQ0lFMF9BSEJDTEtfUEQgfCBQQ0lFMV9BSEJDTEtfUEQpLCBDT01DRVJUT19DTEtfQ0xLX1BXUl9EV04pOworCisJLyogU2V0IHJlZmVyZW5jZSBjbG9jayB0byAyNTAvNCA9IDYyLjUgTUh6ICovCisJdmFsID0gcmVhZGwoQ09NQ0VSVE9fQ0xLX0REUl9QQ0lFX0NMS19DTlRSTCk7CisKKwl2YWwgJj0gfihQQ0lFX0RJVl9WQUxfTUFTSyB8IFBDSUVfRElWX0JZUEFTUyk7CisJdmFsIHw9IDQgPDwgUENJRV9ESVZfVkFMX09GRlNFVDsKKworCXdyaXRlbCh2YWwsIENPTUNFUlRPX0NMS19ERFJfUENJRV9DTEtfQ05UUkwpOworCisJLyogU3dpdGNoIHRvIGNsb2NrIG91dHB1dCAqLworCXdyaXRlbCh2YWwgJiB+UENJRV9NVVhfU0VMLCBDT01DRVJUT19DTEtfRERSX1BDSUVfQ0xLX0NOVFJMKTsKKworCS8qIFRha2UgYmxvY2sgb3V0IG9mIHJlc2V0ICovCisJd3JpdGVsKHJlYWRsKENPTUNFUlRPX0JMT0NLX1JFU0VUX1JFRykgfCAoUENJRTFfUkVGX1JTVCB8IFBDSUUwX1JFRl9SU1QgfCBQQ0lFMV9BSEJfUlNUIHwgUENJRTBfQUhCX1JTVCksIENPTUNFUlRPX0JMT0NLX1JFU0VUX1JFRyk7CisKKwl1ZGVsYXkoMTApOworCisKKyNpZiAwCisJLyogU3lub3BzeXMgcmVjb21tZW5kZWQgdmFsdWVzICovCisJdTMyIHR4X2xldmVsID0gMHg2ICYgMHgxZjsKKwl1MzIgdHhfYm9vc3QgPSAweGEgJiAweGY7CisJdTMyIHR4X2F0dGVuID0gMHgwICYgMHg3OworCXUzMiB0eF9lZGdlX3JhdGUgPSAweDAgJiAweDM7CisJdTMyIHR4X2Nsa19hbGlnbiA9IDB4MCAmIDB4MTsKKworCXUzMiBsb3NfbHZsID0gMHgxNCAmIDB4MWY7CisKKwl1MzIgcnhfZXF1YWxfdmFsID0gMHgyICYgMHg3OworI2VsaWYgMQorCS8qIERlZmF1bHQgdmFsdWVzICovCisJdTMyIHR4X2xldmVsID0gMHhhICYgMHgxZjsKKwl1MzIgdHhfYm9vc3QgPSAweGIgJiAweGY7CisJdTMyIHR4X2F0dGVuID0gMHgwICYgMHg3OworCXUzMiB0eF9lZGdlX3JhdGUgPSAweDAgJiAweDM7CisJdTMyIHR4X2Nsa19hbGlnbiA9IDB4MCAmIDB4MTsKKworCXUzMiBsb3NfbHZsID0gMHgxMSAmIDB4MWY7CisKKwl1MzIgcnhfZXF1YWxfdmFsID0gMHgyICYgMHg3OworI2Vsc2UKKwkvKiBDdXN0b20gdmFsdWVzICovCisvKiAJdTMyIHR4X2xldmVsID0gMHhhICYgMHgxZjsgKi8KKyAJdTMyIHR4X2xldmVsID0gMHgxMyAmIDB4MWY7CisJdTMyIHR4X2Jvb3N0ID0gMHhiICYgMHhmOworCXUzMiB0eF9hdHRlbiA9IDB4MCAmIDB4NzsKKwl1MzIgdHhfZWRnZV9yYXRlID0gMHgwICYgMHgzOworCXUzMiB0eF9jbGtfYWxpZ24gPSAweDAgJiAweDE7CisKKwl1MzIgbG9zX2x2bCA9IDB4MTAgJiAweDFmOworCisJdTMyIHJ4X2VxdWFsX3ZhbCA9IDB4MiAmIDB4NzsKKyNlbmRpZgorCisJLyogQmF1ZCByYXRlID0gNjIuNU1IeiAqIE1QTExfZGl2aXNvciAvIDAuNSA9IDYyLjVNSHogKiAyMCAvIDAuNSA9IDIuNUdIeiAqLworCXdyaXRlbCgocHJlc2NhbGUgPDwgMSkgfCAobmN5NSA8PCAzKSB8IChuY3kgPDwgNSksIHBjaWVfcGh5X2Jhc2VhZGRyICsgUENJRV9QSFlfTVBMTF9DVFJMKTsKKworCXdyaXRlbCh0eF9sZXZlbCwgcGNpZV9waHlfYmFzZWFkZHIgKyBQQ0lFX1BIWV9UUkFOU01JVF9MRVZFTF9DVFJMKTsKKyNpZiAwCisJd3JpdGVsKHR4X2VkZ2VfcmF0ZSB8ICh0eF9ib29zdCA8PCAyKSB8ICh0eF9hdHRlbiA8PCA2KSB8ICh0eF9jbGtfYWxpZ24gPDwgOSksIHBjaWVfcGh5X2Jhc2VhZGRyICsgUENJRV9QSFlfTEFORTBfVFhfQ1RSTCk7CisKKwl3cml0ZWwodHhfZWRnZV9yYXRlIHwgKHR4X2Jvb3N0IDw8IDIpIHwgKHR4X2F0dGVuIDw8IDYpIHwgKHR4X2Nsa19hbGlnbiA8PCA5KSwgcGNpZV9waHlfYmFzZWFkZHIgKyBQQ0lFX1BIWV9MQU5FMV9UWF9DVFJMKTsKKworCXdyaXRlbChsb3NfbHZsLCBwY2llX3BoeV9iYXNlYWRkciArIFBDSUVfUEhZX0xPU19MRVZFTF9DVFJMKTsKKworCXdyaXRlbChyeF9lcXVhbF92YWwsIHBjaWVfcGh5X2Jhc2VhZGRyICsgUENJRV9QSFlfTEFORTBfUlhfQ1RSTCk7CisJd3JpdGVsKHJ4X2VxdWFsX3ZhbCwgcGNpZV9waHlfYmFzZWFkZHIgKyBQQ0lFX1BIWV9MQU5FMV9SWF9DVFJMKTsKKyNlbmRpZgorCXdyaXRlbCgweDAwMDAwMDAwLCBwY2llX3BoeV9iYXNlYWRkciArIFBDSUVfUEhZX1BDU19DVFJMKTsKKyNpZiAxCisJLyogTWFudWFsIGNhbGlicmF0aW9uIG9mIHJ4IHJlc2lzdG9yICovCisJdWRlbGF5KDEwMDApOworCisJd3JpdGVsKDB4MSwgcGNpZV9waHlfYmFzZWFkZHIgKyBQQ0lFX1BIWV9SRVNJU1RPUl9UVU5FX0NUUkwpOworCisJdWRlbGF5KDEwMCk7CisKKwl3cml0ZWwoMHgwLCBwY2llX3BoeV9iYXNlYWRkciArIFBDSUVfUEhZX1JFU0lTVE9SX1RVTkVfQ1RSTCk7CisjZW5kaWYKKyAKKyNpZiAwCisgCS8qIFNldCBib3RoIHBoeXMgaW4gZGlnaXRhbCBsb29wYmFjayAqLworIAl2YWwgPSBwY2llX3BoeV9yZWdfcmVhZCgweDIwMzApOworIAl2YWwgfD0gKDEgPDwgNCk7CisgCXBjaWVfcGh5X3JlZ193cml0ZSh2YWwsIDB4MjAzMCk7CisgCisgCXByaW50aygibGFuZTAucnhfYW5hLmN0cmwgJXhcbiIsIHBjaWVfcGh5X3JlZ19yZWFkKDB4MjAzMCkpOworIAorIAl2YWwgPSBwY2llX3BoeV9yZWdfcmVhZCgweDIxMzApOworIAl2YWwgfD0gKDEgPDwgNCk7CisgCXBjaWVfcGh5X3JlZ193cml0ZSh2YWwsIDB4MjEzMCk7CisgCisgCXByaW50aygibGFuZTEucnhfYW5hLmN0cmwgJXhcbiIsIHBjaWVfcGh5X3JlZ19yZWFkKDB4MjEzMCkpOworI2VuZGlmCisgCisJcmV0dXJuIDA7Cit9CisKK1VfQk9PVF9DTUQoCisJaW5pdHBoeSwgICAxLCAgICAgICAgICAgICAgMCwgICAgICBkb19pbml0cGh5LAorCSJpbml0cGh5ICAgIC0gaW5pdGlhbGl6ZSBQQ0llIHBoeVxuIiwKKyk7CisKKworaW50IGRvX2R1bXByZWcgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXUxNiB2YWw7CisKKyAJcHJpbnRmKCJjbG9jay5ydHVuZV9jdGwgJXhcbiIsIHBjaWVfcGh5X3JlZ19yZWFkKDB4OSkpOworIAorIAl2YWwgPSBwY2llX3BoeV9yZWdfcmVhZCgweGUpOworIAlwcmludGYoImNsb2NrLmZyZXFfc3RhdCgleCkgcHJvcF9jdGwoJXgpIGludF9jdGwoJXgpIG5jeTUoJXgpIG5jeSgleCkgcHJlc2NhbGUoJXgpXG4iLAorIAkJCXZhbCwgKHZhbCAmIDB4NyksICh2YWwgPj4gMykgJiAweDcsICh2YWwgPj4gNikgJiAweDMsICh2YWwgPj4gOCkgJiAweDFmLCAodmFsID4+IDEzKSAmIDB4Myk7CisgCisgCXZhbCA9IHBjaWVfcGh5X3JlZ19yZWFkKDB4Zik7CisgCXByaW50ZigiY2xvY2suY3RsX3N0YXQoJXgpIHVzZV9yZWZjbGtfZGF0KCV4KSBtcGxsX2Nsa19vZmYoJXgpIG1wbGxfcHdyb24oJXgpIG1wbGxfc3NfZW4oJXgpIGNrb19hbGl2ZV9jb24oJXgpIGNrb193b3JkX2NvbigleCkgcnR1bmVfdG9fdHVuZSgleCkgd2lkZV94ZmFjZSgleCkgdnBoX2lzXzNwMygleCkgdnBfaXNfMXAyKCV4KSBmYXN0X3RlY2goJXgpXG4iLAorIAkJCXZhbCwgdmFsICYgMHgxLCAodmFsID4+IDEpICYgMHgxLCAodmFsID4+IDIpICYgMHgxLCAodmFsID4+IDMpICYgMHgxLCAodmFsID4+IDQpICYgMHgzLAorIAkJCSh2YWwgPj4gNikgJiAweDcsICh2YWwgPj4gMTApICYgMHgxLCAodmFsID4+IDExKSAmIDB4MSwgKHZhbCA+PiAxMikgJiAweDEsICh2YWwgPj4gMTMpICYgMHgxLAorIAkJCSh2YWwgPj4gMTQpICYgMHgxKTsKKyAKKyAJcHJpbnRmKCJjbG9jay5sdmxfc3RhdCAleFxuIiwgcGNpZV9waHlfcmVnX3JlYWQoMHgxMCkpOworIAlwcmludGYoImNsb2NrLmN0bF9vdnJkICV4XG4iLCBwY2llX3BoeV9yZWdfcmVhZCgweDEzKSk7CisgCXByaW50ZigiY2xvY2subHZsX292cmQgJXhcbiIsIHBjaWVfcGh5X3JlZ19yZWFkKDB4MTQpKTsKKyAJcHJpbnRmKCJjbG9jay5jcmVnX292cmQgJXhcbiIsIHBjaWVfcGh5X3JlZ19yZWFkKDB4MTUpKTsKKyAJcHJpbnRmKCJjbG9jay5tcGxsX2N0bCAleFxuIiwgcGNpZV9waHlfcmVnX3JlYWQoMHgxNikpOworIAlwcmludGYoImNsb2NrLm1wbGxfdHN0ICV4XG4iLCBwY2llX3BoeV9yZWdfcmVhZCgweDE3KSk7CisgCisgCXZhbCA9IHBjaWVfcGh5X3JlZ19yZWFkKDB4MjAwMSk7CisgCXByaW50ZigibGFuZTAudHhfc3RhdCgleCkgdHhfY2tvX2VuKCV4KSB0eF9lbigleCkgdHhfY2xrX2FsaWduKCV4KSB0eF9ib29zdCgleCkgdHhfYXR0ZW4oJXgpIHR4X2VkZ2VyYXRlKCV4KVxuIiwKKyAJCQkJdmFsLCB2YWwgJiAweDEsICh2YWwgPj4gMSkgJiAweDcsICh2YWwgPj4gNCkgJiAweDEsCisgCQkJCSh2YWwgPj4gNikgJiAweGYsICh2YWwgPj4gMTApICYgMHg3LCAodmFsID4+IDEzKSAmIDB4Myk7CisgCisgCXZhbCA9IHBjaWVfcGh5X3JlZ19yZWFkKDB4MjEwMSk7CisgCXByaW50ZigibGFuZTEudHhfc3RhdCgleCkgdHhfY2tvX2VuKCV4KSB0eF9lbigleCkgdHhfY2xrX2FsaWduKCV4KSB0eF9ib29zdCgleCkgdHhfYXR0ZW4oJXgpIHR4X2VkZ2VyYXRlKCV4KVxuIiwKKyAJCQkJdmFsLCB2YWwgJiAweDEsICh2YWwgPj4gMSkgJiAweDcsICh2YWwgPj4gNCkgJiAweDEsCisgCQkJCSh2YWwgPj4gNikgJiAweGYsICh2YWwgPj4gMTApICYgMHg3LCAodmFsID4+IDEzKSAmIDB4Myk7CisgCisgCXZhbCA9IHBjaWVfcGh5X3JlZ19yZWFkKDB4MjAwMik7CisgCXByaW50ZigibGFuZTAucnhfc3RhdCgleCkgaGFsZl9yYXRlKCV4KSByeF9wbGxfcHdyb24oJXgpIHJ4X2VuKCV4KSByeF9hbGlnbl9lbigleCkgcnhfdGVybV9lbigleCkgcnhfZXF1YWxfdmFsKCV4KSByeF9kcGxsX21vZGUoJXgpIGRwbGxfcmVzZXQoJXgpIGxvc19jdGwoJXgpXG4iLAorIAkJCQl2YWwsIHZhbCAmIDB4MSwgKHZhbCA+PiAxKSAmIDB4MSwgKHZhbCA+PiAyKSAmIDB4MSwKKyAJCQkJKHZhbCA+PiAzKSAmIDB4MSwgKHZhbCA+PiA0KSAmIDB4MSwgKHZhbCA+PiA1KSAmIDB4NywgKHZhbCA+PiA4KSAmIDB4NywgKHZhbCA+PiAxMSkgJiAweDEsCisgCQkJCSh2YWwgPj4gMTIpICYgMHgzKTsKKyAKKyAJdmFsID0gcGNpZV9waHlfcmVnX3JlYWQoMHgyMTAyKTsKKyAJcHJpbnRmKCJsYW5lMS5yeF9zdGF0KCV4KSBoYWxmX3JhdGUoJXgpIHJ4X3BsbF9wd3JvbigleCkgcnhfZW4oJXgpIHJ4X2FsaWduX2VuKCV4KSByeF90ZXJtX2VuKCV4KSByeF9lcXVhbF92YWwoJXgpIHJ4X2RwbGxfbW9kZSgleCkgZHBsbF9yZXNldCgleCkgbG9zX2N0bCgleClcbiIsCisgCQkJCXZhbCwgdmFsICYgMHgxLCAodmFsID4+IDEpICYgMHgxLCAodmFsID4+IDIpICYgMHgxLAorIAkJCQkodmFsID4+IDMpICYgMHgxLCAodmFsID4+IDQpICYgMHgxLCAodmFsID4+IDUpICYgMHg3LCAodmFsID4+IDgpICYgMHg3LCAodmFsID4+IDExKSAmIDB4MSwKKyAJCQkJKHZhbCA+PiAxMikgJiAweDMpOworIAorIAl2YWwgPSBwY2llX3BoeV9yZWdfcmVhZCgweDIwMDMpOworIAlwcmludGYoImxhbmUwLm91dF9zdGF0KCV4KSByeF92YWxpZCgleCkgcnhfcGxsX3N0YXRlKCV4KSBsb3MoJXgpIHR4X2RvbmUoJXgpIHR4X3J4cHJlcygleClcbiIsCisgCQkJCXZhbCwgdmFsICYgMHgxLCAodmFsID4+IDEpICYgMHgxLCAodmFsID4+IDIpICYgMHgxLAorIAkJCQkodmFsID4+IDMpICYgMHgxLCAodmFsID4+IDQpICYgMHgxKTsKKyAKKyAJdmFsID0gcGNpZV9waHlfcmVnX3JlYWQoMHgyMTAzKTsKKyAJcHJpbnRmKCJsYW5lMS5vdXRfc3RhdCgleCkgcnhfdmFsaWQoJXgpIHJ4X3BsbF9zdGF0ZSgleCkgbG9zKCV4KSB0eF9kb25lKCV4KSB0eF9yeHByZXMoJXgpXG4iLAorIAkJCQl2YWwsIHZhbCAmIDB4MSwgKHZhbCA+PiAxKSAmIDB4MSwgKHZhbCA+PiAyKSAmIDB4MSwKKyAJCQkJKHZhbCA+PiAzKSAmIDB4MSwgKHZhbCA+PiA0KSAmIDB4MSk7CisKKwlyZXR1cm4gMDsKK30KKworVV9CT09UX0NNRCgKKwlkdW1wcmVnLCAgIDEsICAgICAgICAgICAgIDEsICAgICAgZG9fZHVtcHJlZywKKwkiZHVtcHJlZyAgICAtIGR1bXBzIGFsbCBQQ0llIHBoeSByZWdpc3RlcnNcbiIsCispOworCitpbnQgZG9fd3JpdGVyZWcgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXUxNiB2YWwsIGFkZHI7CisKKwlpZiAoYXJnYyA8IDMpCisJCXJldHVybiAtMTsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KSAmIDB4ZmZmZjsKKwlhZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTYpICYgMHhmZmZmOworCisJcHJpbnRmKCIleD0leFxuIiwgYWRkciwgdmFsKTsKKworCXBjaWVfcGh5X3JlZ193cml0ZSh2YWwsIGFkZHIpOworCisJcmV0dXJuIDA7Cit9CisKK1VfQk9PVF9DTUQoCisJd3JpdGVyZWcsICAgMywgICAgICAgICAgICAgIDAsICAgICAgZG9fd3JpdGVyZWcsCisJIndyaXRlcmVnICAgIC0gd3JpdGVzIFBDSWUgcGh5IHJlZ1xuIiwKKyk7CisKK2ludCBkb19yZWFkcmVnIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywKKwkJIGludAlhcmdjLCBjaGFyICphcmd2W10pCit7CisJdTE2IGFkZHI7CisKKwlpZiAoYXJnYyA8IDIpCisJCXJldHVybiAtMTsKKworCWFkZHIgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxNikgJiAweGZmZmY7CisKKwlwcmludGYoIiV4PSV4XG4iLCBhZGRyLCBwY2llX3BoeV9yZWdfcmVhZChhZGRyKSk7CisKKwlyZXR1cm4gMDsKK30KKworVV9CT09UX0NNRCgKKwlyZWFkcmVnLCAgIDIsICAgICAgICAgICAgIDEsICAgICAgZG9fcmVhZHJlZywKKwkicmVhZHJlZyAgICAtIHJlYWQgUENJZSBwaHkgcmVnXG4iLAorKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21tb24vY21kX3NwaS5jIGIvY29tbW9uL2NtZF9zcGkuYwppbmRleCBhNmZkZjdmLi45ZWFmMTUyIDEwMDY0NAotLS0gYS9jb21tb24vY21kX3NwaS5jCisrKyBiL2NvbW1vbi9jbWRfc3BpLmMKQEAgLTMxLDExMyArMzEsNzAgQEAKIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NQSSkKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogRGVmaW5pdGlvbnMKLSAqLwotCiAjaWZuZGVmIE1BWF9TUElfQllURVMKLSMgICBkZWZpbmUgTUFYX1NQSV9CWVRFUyAzMgkvKiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB3ZSBjYW4gaGFuZGxlICovCisjICAgZGVmaW5lIE1BWF9TUElfQllURVMgMzIgICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHdlIGNhbiBoYW5kbGUgKi8KICNlbmRpZgotCi0vKgotICogRXh0ZXJuYWwgdGFibGUgb2YgY2hpcCBzZWxlY3QgZnVuY3Rpb25zIChzZWUgdGhlIGFwcHJvcHJpYXRlIGJvYXJkCi0gKiBzdXBwb3J0IGZvciB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgdGhlIHRhYmxlKS4KLSAqLwotZXh0ZXJuIHNwaV9jaGlwc2VsX3R5cGUgc3BpX2NoaXBzZWxbXTsKLWV4dGVybiBpbnQgc3BpX2NoaXBzZWxfY250OwotCi0vKgotICogVmFsdWVzIGZyb20gbGFzdCBjb21tYW5kLgotICovCi1zdGF0aWMgaW50ICAgZGV2aWNlOwotc3RhdGljIGludCAgIGJpdGxlbjsKIHN0YXRpYyB1Y2hhciBkb3V0W01BWF9TUElfQllURVNdOwogc3RhdGljIHVjaGFyIGRpbltNQVhfU1BJX0JZVEVTXTsKIAotLyoKLSAqIFNQSSByZWFkL3dyaXRlCi0gKgotICogU3ludGF4OgotICogICBzcGkge2Rldn0ge251bV9iaXRzfSB7ZG91dH0KLSAqICAgICB7ZGV2fSBpcyB0aGUgZGV2aWNlIG51bWJlciBmb3IgY29udHJvbGxpbmcgY2hpcCBzZWxlY3QgKHNlZSBUQkQpCi0gKiAgICAge251bV9iaXRzfSBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgdG8gc2VuZCAmIHJlY2VpdmUgKGJhc2UgMTApCi0gKiAgICAge2RvdXR9IGlzIGEgaGV4YWRlY2ltYWwgc3RyaW5nIG9mIGRhdGEgdG8gc2VuZAotICogVGhlIGNvbW1hbmQgcHJpbnRzIG91dCB0aGUgaGV4YWRlY2ltYWwgc3RyaW5nIHJlY2VpdmVkIHZpYSBTUEkuCi0gKi8KLQogaW50IGRvX3NwaSAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JY2hhciAgKmNwID0gMDsKLQl1Y2hhciB0bXA7Ci0JaW50ICAgajsKLQlpbnQgICByY29kZSA9IDA7CisgICAgICAgIGludCAgIHJjb2RlID0gMDsKKyAgICAgICAgaW50IGk7CisJaW50IGNzOworCWludCBsZW47CiAKLQkvKgotCSAqIFdlIHVzZSB0aGUgbGFzdCBzcGVjaWZpZWQgcGFyYW1ldGVycywgdW5sZXNzIG5ldyBvbmVzIGFyZQotCSAqIGVudGVyZWQuCi0JICovCi0KLQlpZiAoKGZsYWcgJiBDTURfRkxBR19SRVBFQVQpID09IDApCisgICAgICAgIGlmIChhcmdjIDwgMykKIAl7Ci0JCWlmIChhcmdjID49IDIpCi0JCQlkZXZpY2UgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxMCk7Ci0JCWlmIChhcmdjID49IDMpCi0JCQliaXRsZW4gPSBzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxMCk7Ci0JCWlmIChhcmdjID49IDQpIHsKLQkJCWNwID0gYXJndlszXTsKLQkJCWZvcihqID0gMDsgKmNwOyBqKyssIGNwKyspIHsKLQkJCQl0bXAgPSAqY3AgLSAnMCc7Ci0JCQkJaWYodG1wID4gOSkKLQkJCQkJdG1wIC09ICgnQScgLSAnMCcpIC0gMTA7Ci0JCQkJaWYodG1wID4gMTUpCi0JCQkJCXRtcCAtPSAoJ2EnIC0gJ0EnKTsKLQkJCQlpZih0bXAgPiAxNSkgewotCQkJCQlwcmludGYoIkhleCBjb252ZXJzaW9uIGVycm9yIG9uICVjLCBnaXZpbmcgdXAuXG4iLCAqY3ApOwotCQkJCQlyZXR1cm4gMTsKLQkJCQl9Ci0JCQkJaWYoKGogJSAyKSA9PSAwKQotCQkJCQlkb3V0W2ogLyAyXSA9ICh0bXAgPDwgNCk7Ci0JCQkJZWxzZQotCQkJCQlkb3V0W2ogLyAyXSB8PSB0bXA7Ci0JCQl9CisJCXByaW50ZiAoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7CisJCXJldHVybiAxOworCX0KKworCWlmIChzdHJjbXAoYXJndlsxXSwicmVhZCIpID09IDApIHsKKwkJY3MgPSBzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxMCk7CisJCWlmKGFyZ2MgPT0gNCkKKwkJewkJCisJCQlsZW4gPSBzaW1wbGVfc3RydG91bChhcmd2WzNdLCBOVUxMLCAxNik7CiAJCX0KLQl9Ci0KLQlpZiAoKGRldmljZSA8IDApIHx8IChkZXZpY2UgPj0gIHNwaV9jaGlwc2VsX2NudCkpIHsKLQkJcHJpbnRmKCJJbnZhbGlkIGRldmljZSAlZCwgZ2l2aW5nIHVwLlxuIiwgZGV2aWNlKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmICgoYml0bGVuIDwgMCkgfHwgKGJpdGxlbiA+ICAoTUFYX1NQSV9CWVRFUyAqIDgpKSkgewotCQlwcmludGYoIkludmFsaWQgYml0bGVuICVkLCBnaXZpbmcgdXAuXG4iLCBiaXRsZW4pOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlkZWJ1ZyAoInNwaV9jaGlwc2VsWyVkXSA9ICUwOFhcbiIsCi0JCWRldmljZSwgKHVpbnQpc3BpX2NoaXBzZWxbZGV2aWNlXSk7Ci0KLQlpZihzcGlfeGZlcihzcGlfY2hpcHNlbFtkZXZpY2VdLCBiaXRsZW4sIGRvdXQsIGRpbikgIT0gMCkgewotCQlwcmludGYoIkVycm9yIHdpdGggdGhlIFNQSSB0cmFuc2FjdGlvbi5cbiIpOwotCQlyY29kZSA9IDE7Ci0JfSBlbHNlIHsKLQkJY3AgPSAoY2hhciAqKWRpbjsKLQkJZm9yKGogPSAwOyBqIDwgKChiaXRsZW4gKyA3KSAvIDgpOyBqKyspIHsKLQkJCXByaW50ZigiJTAyWCIsICpjcCsrKTsKKwkJZWxzZQorCQl7CisJCQlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOworCQl9CisJCXByaW50ZigiUmVhZCBjcyAlZDogIixjcyk7CisJCWZvcihpID0gMDsgaSA8IGxlbjsgaSsrKQorCQl7CisJCQljMmtfc3BpX3JlYWQoY3MsICZkb3V0LCAxKTsKKwkJCXByaW50ZigiJTAyeCAiLGRvdXRbMF0pOwogCQl9CiAJCXByaW50ZigiXG4iKTsKIAl9CiAKLQlyZXR1cm4gcmNvZGU7CisJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbMV0sIndyaXRlIikgPT0gMCkgeworCQljcyA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDEwKTsKKwkJCisJCXByaW50ZigiV3JpdGUgY3MgJWQ6ICIsY3MpOworCQlmb3IgKGkgPSAzOyBpIDwgYXJnYzsgaSsrKQorCQl7CisJCQlkaW5bMF0gPSBzaW1wbGVfc3RydG91bChhcmd2W2ldLCBOVUxMLCAxNik7CisJCQljMmtfc3BpX3dyaXRlKGNzLCAmZGluLCAxKTsKKwkJCXByaW50ZigiJTAyeCAiLGRpblswXSk7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCX0KKwllbHNlCisJeworCQlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOworCQlyZXR1cm4gMTsKKwl9CisJCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIFVfQk9PVF9DTUQoCi0Jc3NwaSwJNSwJMSwJZG9fc3BpLAotCSJzc3BpICAgIC0gU1BJIHV0aWxpdHkgY29tbWFuZHNcbiIsCi0JIjxkZXZpY2U+IDxiaXRfbGVuPiA8ZG91dD4gLSBTZW5kIDxiaXRfbGVuPiBiaXRzIGZyb20gPGRvdXQ+IG91dCB0aGUgU1BJXG4iCi0JIjxkZXZpY2U+ICAtIElkZW50aWZpZXMgdGhlIGNoaXAgc2VsZWN0IG9mIHRoZSBkZXZpY2VcbiIKLQkiPGJpdF9sZW4+IC0gTnVtYmVyIG9mIGJpdHMgdG8gc2VuZCAoYmFzZSAxMClcbiIKLQkiPGRvdXQ+ICAgIC0gSGV4YWRlY2ltYWwgc3RyaW5nIHRoYXQgZ2V0cyBzZW50XG4iCisJc3BpLAkzMiwJMSwJZG9fc3BpLAorCSJzcGkgICAgIC0gU1BJIHV0aWxpdHkgY29tbWFuZHNcbiIsCisJInNwaSByZWFkIGNoaXBzZWxlY3QgbGVuIC0gUmVhZCBsZW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIFNQSSBkZXZpY2UgXG4iCisJInNwaSB3cml0ZSBjaGlwc2VsZWN0IGJ5dGUwIDxieXRlMT4gPGJ5dGUyPiAuLi4gLSBXcml0ZSBieXRlcyB0byB0aGUgU1BJIGRldmljZVxuIgogKTsKLQotI2VuZGlmCS8qIENGR19DTURfU1BJICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbW1vbi9jb21tYW5kLmMgYi9jb21tb24vY29tbWFuZC5jCmluZGV4IGU5MTc5NzUuLjdhOWIyZTkgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jb21tYW5kLmMKKysrIGIvY29tbW9uL2NvbW1hbmQuYwpAQCAtMjcsMTIgKzI3LDQ4IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYnNwLmg+CisKKyNpZiBkZWZpbmVkIChDT05GSUdfQ09NQ0VSVE9fMTAwMCkKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGNvbWNlcnRvX3BhcnRfbm9bOF07CisjZW5kaWYKIAogaW50CiBkb192ZXJzaW9uIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlleHRlcm4gY2hhciB2ZXJzaW9uX3N0cmluZ1tdOworCWludCBjbGs7CisKKwlwcmludGYgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJcHJpbnRmICgiXG4lc1xuIiwgdmVyc2lvbl9zdHJpbmcpOworCisjaWYgZGVmaW5lZCAoQ09ORklHX0NPTUNFUlRPXzEwMDApCisJY2xrID0gSEFMX2dldF9hcm1fcGxsKCk7CisJcHJpbnRmICgiQVJNIFBMTDogJTBkIEh6XG4iLCBjbGspOworCWNsayA9IEhBTF9nZXRfYWhiX3BsbCgpOworCXByaW50ZiAoIkFIQiBQTEw6ICUwZCBIelxuIiwgY2xrKTsKKwljbGsgPSBIQUxfZ2V0X3BoeV9wbGwoKTsKKwlwcmludGYgKCJQSFkgUExMOiAlMGQgSHpcblxuIiwgY2xrKTsKKyNlbmRpZgorI2lmIDAKKwljbGsgPSBIQUxfZ2V0X2FybV9jbGsoKTsKKwlwcmludGYgKCJBUk0gQ2xvY2s6ICUwZCBIelxuIiwgY2xrKTsKKwljbGsgPSBIQUxfZ2V0X2FtYmFfY2xrKCk7CisJcHJpbnRmICgiQUhCIENsb2NrOiAlZCBIelxuIiwgY2xrKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKENPTkZJR19DT01DRVJUT18xMDAwKQorCWNsayA9IEhBTF9nZXRfZGRyX2NsaygpOworCXByaW50ZiAoIkREUiBDbG9jazogJWQgSHpcbiIsIGNsayk7CisJY2xrID0gSEFMX2dldF9pcHNlY19jbGsoKTsKKwlwcmludGYgKCJJUFNFQyBDbG9jazogJWQgSHpcbiIsIGNsayk7CisjZW5kaWYKKyNpZiAwCisgICAgICAgIHByaW50ZiAoIkREUiBTaXplIDogJWQgTUJ5dGVcbiIsIGdldF9kZHJfc2l6ZSgpIC8gKDEwMjQgKiAxMDI0KSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19NODMyNlhHKSB8fCBkZWZpbmVkKENPTkZJR19NODMyNVhHKSB8fCBkZWZpbmVkKENPTkZJR19NODMyNFhHKQorICAgICAgICBwcmludGYgKCJQYXJ0IE5vOiAlc1xuIiwgY29tY2VydG9fcGFydF9ubyk7CisjZW5kaWYKKwlwcmludGYgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9lbnZfZmxhc2guYyBiL2NvbW1vbi9lbnZfZmxhc2guYwppbmRleCAxNjc0YjMwLi40YzI4ZGEyIDEwMDY0NAotLS0gYS9jb21tb24vZW52X2ZsYXNoLmMKKysrIGIvY29tbW9uL2Vudl9mbGFzaC5jCkBAIC0xODIsNiArMTgyLDkgQEAKIAkJCQl1cF9kYXRhKTsKIAkJCWdvdG8gRG9uZTsKIAkJfQorI2lmZGVmIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisJCWJvYXJkX21hcChOVUxMLCAoKGxvbmcpZmxhc2hfYWRkcl9uZXcgKyBDRkdfRU5WX1NJWkUpKTsKKyNlbmRpZgogCQltZW1jcHkoc2F2ZWRfZGF0YSwKIAkJCSh2b2lkICopKChsb25nKWZsYXNoX2FkZHJfbmV3ICsgQ0ZHX0VOVl9TSVpFKSwgdXBfZGF0YSk7CiAJCWRlYnVnICgiRGF0YSAoc3RhcnQgMHgleCwgbGVuIDB4JXgpIHNhdmVkIGF0IDB4JXhcbiIsCkBAIC0yNjUsNiArMjY4LDExIEBACiAJaWYoZmxhc2hfcHJvYmUoKSA9PSAwKQogCQlnb3RvIGJhZF9mbGFzaDsKICNlbmRpZgorCisjaWZkZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKwlib2FyZF9tYXAoTlVMTCwgZW52X3B0cik7CisjZW5kaWYKKwogCWlmIChjcmMzMigwLCBlbnZfcHRyLT5kYXRhLCBFTlZfU0laRSkgPT0gZW52X3B0ci0+Y3JjKSB7CiAJCWdkLT5lbnZfYWRkciAgPSAodWxvbmcpJihlbnZfcHRyLT5kYXRhKTsKIAkJZ2QtPmVudl92YWxpZCA9IDE7CkBAIC0zMDIsNiArMzEwLDEwIEBACiAJCSJzZWN0X2FkZHI6ICUwOGxYICBlbnZfYWRkcjogJTA4bFggIG9mZnNldDogJTA4bFhcbiIsCiAJCWZsYXNoX3NlY3RfYWRkciwgKHVsb25nKWZsYXNoX2FkZHIsIGZsYXNoX29mZnNldCk7CiAKKyNpZmRlZiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCWJvYXJkX21hcChOVUxMLCBmbGFzaF9zZWN0X2FkZHIpOworI2VuZGlmCisKIAkvKiBjb3B5IG9sZCBjb250ZW50cyB0byB0ZW1wb3JhcnkgYnVmZmVyICovCiAJbWVtY3B5IChlbnZfYnVmZmVyLCAodm9pZCAqKWZsYXNoX3NlY3RfYWRkciwgQ0ZHX0VOVl9TRUNUX1NJWkUpOwogCmRpZmYgLS1naXQgYS9jb21tb24vaW1hZ2UuYyBiL2NvbW1vbi9pbWFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZjRjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vaW1hZ2UuYwpAQCAtMCwwICsxLDMyMTUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDggU2VtaWhhbGYKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNgorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIFVTRV9IT1NUQ0MKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDx3YXRjaGRvZy5oPgorCisjaWZkZWYgQ09ORklHX1NIT1dfQk9PVF9QUk9HUkVTUworI2luY2x1ZGUgPHN0YXR1c19sZWQuaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hBU19EQVRBRkxBU0gKKyNpbmNsdWRlIDxkYXRhZmxhc2guaD4KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0xPR0JVRkZFUgorI2luY2x1ZGUgPGxvZ2J1ZmYuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfVElNRVNUQU1QKSB8fCBkZWZpbmVkKENPTkZJR19DTURfREFURSkKKyNpbmNsdWRlIDxydGMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8aW1hZ2UuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkgfHwgZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKQorI2luY2x1ZGUgPGZkdC5oPgorI2luY2x1ZGUgPGxpYmZkdC5oPgorI2luY2x1ZGUgPGZkdF9zdXBwb3J0Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkKKyNpbmNsdWRlIDx1LWJvb3QvbWQ1Lmg+CisjaW5jbHVkZSA8c2hhMS5oPgorCitzdGF0aWMgaW50IGZpdF9jaGVja19yYW1kaXNrKGNvbnN0IHZvaWQgKmZpdCwgaW50IG9zX25vZmZzZXQsCisJCXVpbnQ4X3QgYXJjaCwgaW50IHZlcmlmeSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DTURfQkRJCitleHRlcm4gaW50IGRvX2JkaW5mbyhjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKiBjb25zdCBhcmd2W10pOworI2VuZGlmCisKKyNpbmNsdWRlIDxib290c3RhZ2UuaD4KK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCitzdGF0aWMgY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmltYWdlX2dldF9yYW1kaXNrKHVsb25nIHJkX2FkZHIsIHVpbnQ4X3QgYXJjaCwKKwkJCQkJCWludCB2ZXJpZnkpOworI2Vsc2UKKyNpbmNsdWRlICJta2ltYWdlLmgiCisjaW5jbHVkZSA8dS1ib290L21kNS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxpbWFnZS5oPgorI2VuZGlmIC8qICFVU0VfSE9TVENDKi8KKworc3RhdGljIGNvbnN0IHRhYmxlX2VudHJ5X3QgdWltYWdlX2FyY2hbXSA9IHsKKwl7CUlIX0FSQ0hfSU5WQUxJRCwJTlVMTCwJCSJJbnZhbGlkIEFSQ0giLAl9LAorCXsJSUhfQVJDSF9BTFBIQSwJCSJhbHBoYSIsCSJBbHBoYSIsCX0sCisJewlJSF9BUkNIX0FSTSwJCSJhcm0iLAkJIkFSTSIsCQl9LAorCXsJSUhfQVJDSF9JMzg2LAkJIng4NiIsCQkiSW50ZWwgeDg2IiwJfSwKKwl7CUlIX0FSQ0hfSUE2NCwJCSJpYTY0IiwJCSJJQTY0IiwJCX0sCisJewlJSF9BUkNIX002OEssCQkibTY4ayIsCQkiTTY4SyIsCQl9LAorCXsJSUhfQVJDSF9NSUNST0JMQVpFLAkibWljcm9ibGF6ZSIsCSJNaWNyb0JsYXplIiwJfSwKKwl7CUlIX0FSQ0hfTUlQUywJCSJtaXBzIiwJCSJNSVBTIiwJCX0sCisJewlJSF9BUkNIX01JUFM2NCwJCSJtaXBzNjQiLAkiTUlQUyA2NCBCaXQiLAl9LAorCXsJSUhfQVJDSF9OSU9TMiwJCSJuaW9zMiIsCSJOSU9TIElJIiwJfSwKKwl7CUlIX0FSQ0hfUFBDLAkJInBvd2VycGMiLAkiUG93ZXJQQyIsCX0sCisJewlJSF9BUkNIX1BQQywJCSJwcGMiLAkJIlBvd2VyUEMiLAl9LAorCXsJSUhfQVJDSF9TMzkwLAkJInMzOTAiLAkJIklCTSBTMzkwIiwJfSwKKwl7CUlIX0FSQ0hfU0gsCQkic2giLAkJIlN1cGVySCIsCX0sCisJewlJSF9BUkNIX1NQQVJDLAkJInNwYXJjIiwJIlNQQVJDIiwJfSwKKwl7CUlIX0FSQ0hfU1BBUkM2NCwJInNwYXJjNjQiLAkiU1BBUkMgNjQgQml0IiwJfSwKKwl7CUlIX0FSQ0hfQkxBQ0tGSU4sCSJibGFja2ZpbiIsCSJCbGFja2ZpbiIsCX0sCisJewlJSF9BUkNIX0FWUjMyLAkJImF2cjMyIiwJIkFWUjMyIiwJfSwKKwl7CUlIX0FSQ0hfTkRTMzIsCQkibmRzMzIiLAkiTkRTMzIiLAl9LAorCXsJSUhfQVJDSF9PUEVOUklTQywJIm9yMWsiLAkJIk9wZW5SSVNDIDEwMDAiLH0sCisJewktMSwJCQkiIiwJCSIiLAkJfSwKK307CisKK3N0YXRpYyBjb25zdCB0YWJsZV9lbnRyeV90IHVpbWFnZV9vc1tdID0geworCXsJSUhfT1NfSU5WQUxJRCwJTlVMTCwJCSJJbnZhbGlkIE9TIiwJCX0sCisJewlJSF9PU19MSU5VWCwJImxpbnV4IiwJIkxpbnV4IiwJCX0sCisjaWYgZGVmaW5lZChDT05GSUdfTFlOWEtESSkgfHwgZGVmaW5lZChVU0VfSE9TVENDKQorCXsJSUhfT1NfTFlOWE9TLAkibHlueG9zIiwJIkx5bnhPUyIsCQl9LAorI2VuZGlmCisJewlJSF9PU19ORVRCU0QsCSJuZXRic2QiLAkiTmV0QlNEIiwJCX0sCisJewlJSF9PU19PU0UsCSJvc2UiLAkJIkVuZWEgT1NFIiwJCX0sCisJewlJSF9PU19SVEVNUywJInJ0ZW1zIiwJIlJURU1TIiwJCX0sCisJewlJSF9PU19VX0JPT1QsCSJ1LWJvb3QiLAkiVS1Cb290IiwJCX0sCisjaWYgZGVmaW5lZChDT05GSUdfQ01EX0VMRikgfHwgZGVmaW5lZChVU0VfSE9TVENDKQorCXsJSUhfT1NfUU5YLAkicW54IiwJCSJRTlgiLAkJCX0sCisJewlJSF9PU19WWFdPUktTLAkidnh3b3JrcyIsCSJWeFdvcmtzIiwJCX0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19JTlRFR1JJVFkpIHx8IGRlZmluZWQoVVNFX0hPU1RDQykKKwl7CUlIX09TX0lOVEVHUklUWSwiaW50ZWdyaXR5IiwJIklOVEVHUklUWSIsCQl9LAorI2VuZGlmCisjaWZkZWYgVVNFX0hPU1RDQworCXsJSUhfT1NfNF80QlNELAkiNF80YnNkIiwJIjRfNEJTRCIsCQl9LAorCXsJSUhfT1NfREVMTCwJImRlbGwiLAkJIkRlbGwiLAkJCX0sCisJewlJSF9PU19FU0lYLAkiZXNpeCIsCQkiRXNpeCIsCQkJfSwKKwl7CUlIX09TX0ZSRUVCU0QsCSJmcmVlYnNkIiwJIkZyZWVCU0QiLAkJfSwKKwl7CUlIX09TX0lSSVgsCSJpcml4IiwJCSJJcml4IiwJCQl9LAorCXsJSUhfT1NfTkNSLAkibmNyIiwJCSJOQ1IiLAkJCX0sCisJewlJSF9PU19PUEVOQlNELAkib3BlbmJzZCIsCSJPcGVuQlNEIiwJCX0sCisJewlJSF9PU19QU09TLAkicHNvcyIsCQkicFNPUyIsCQkJfSwKKwl7CUlIX09TX1NDTywJInNjbyIsCQkiU0NPIiwJCQl9LAorCXsJSUhfT1NfU09MQVJJUywJInNvbGFyaXMiLAkiU29sYXJpcyIsCQl9LAorCXsJSUhfT1NfU1ZSNCwJInN2cjQiLAkJIlNWUjQiLAkJCX0sCisjZW5kaWYKKwl7CS0xLAkJIiIsCQkiIiwJCQl9LAorfTsKKworc3RhdGljIGNvbnN0IHRhYmxlX2VudHJ5X3QgdWltYWdlX3R5cGVbXSA9IHsKKwl7CUlIX1RZUEVfQUlTSU1BR0UsICAgImFpc2ltYWdlIiwgICAiRGF2aW5jaSBBSVMgaW1hZ2UiLH0sCisJewlJSF9UWVBFX0ZJTEVTWVNURU0sICJmaWxlc3lzdGVtIiwgIkZpbGVzeXN0ZW0gSW1hZ2UiLAl9LAorCXsJSUhfVFlQRV9GSVJNV0FSRSwgICAiZmlybXdhcmUiLAkgICJGaXJtd2FyZSIsCQl9LAorCXsJSUhfVFlQRV9GTEFURFQsICAgICAiZmxhdF9kdCIsICAgICJGbGF0IERldmljZSBUcmVlIiwJfSwKKwl7CUlIX1RZUEVfS0VSTkVMLAkgICAgImtlcm5lbCIsCSAgIktlcm5lbCBJbWFnZSIsCX0sCisJewlJSF9UWVBFX0tFUk5FTF9OT0xPQUQsICJrZXJuZWxfbm9sb2FkIiwgICJLZXJuZWwgSW1hZ2UgKG5vIGxvYWRpbmcgZG9uZSkiLCB9LAorCXsJSUhfVFlQRV9LV0JJTUFHRSwgICAia3diaW1hZ2UiLCAgICJLaXJrd29vZCBCb290IEltYWdlIix9LAorCXsJSUhfVFlQRV9JTVhJTUFHRSwgICAiaW14aW1hZ2UiLCAgICJGcmVlc2NhbGUgaS5NWCBCb290IEltYWdlIix9LAorCXsJSUhfVFlQRV9JTlZBTElELCAgICBOVUxMLAkgICJJbnZhbGlkIEltYWdlIiwJfSwKKwl7CUlIX1RZUEVfTVVMVEksCSAgICAibXVsdGkiLAkgICJNdWx0aS1GaWxlIEltYWdlIiwJfSwKKwl7CUlIX1RZUEVfT01BUElNQUdFLCAgIm9tYXBpbWFnZSIsICAiVEkgT01BUCBTUEwgV2l0aCBHUCBDSCIsfSwKKwl7CUlIX1RZUEVfUkFNRElTSywgICAgInJhbWRpc2siLAkgICJSQU1EaXNrIEltYWdlIiwJfSwKKwl7CUlIX1RZUEVfU0NSSVBULCAgICAgInNjcmlwdCIsCSAgIlNjcmlwdCIsCQl9LAorCXsJSUhfVFlQRV9TVEFOREFMT05FLCAic3RhbmRhbG9uZSIsICJTdGFuZGFsb25lIFByb2dyYW0iLCB9LAorCXsJSUhfVFlQRV9VQkxJTUFHRSwgICAidWJsaW1hZ2UiLCAgICJEYXZpbmNpIFVCTCBpbWFnZSIsfSwKKwl7CS0xLAkJICAgICIiLAkJICAiIiwJCQl9LAorfTsKKworc3RhdGljIGNvbnN0IHRhYmxlX2VudHJ5X3QgdWltYWdlX2NvbXBbXSA9IHsKKwl7CUlIX0NPTVBfTk9ORSwJIm5vbmUiLAkJInVuY29tcHJlc3NlZCIsCQl9LAorCXsJSUhfQ09NUF9CWklQMiwJImJ6aXAyIiwJImJ6aXAyIGNvbXByZXNzZWQiLAl9LAorCXsJSUhfQ09NUF9HWklQLAkiZ3ppcCIsCQkiZ3ppcCBjb21wcmVzc2VkIiwJfSwKKwl7CUlIX0NPTVBfTFpNQSwJImx6bWEiLAkJImx6bWEgY29tcHJlc3NlZCIsCX0sCisJewlJSF9DT01QX0xaTywJImx6byIsCQkibHpvIGNvbXByZXNzZWQiLAl9LAorCXsJLTEsCQkiIiwJCSIiLAkJCX0sCit9OworCit1bnNpZ25lZCBsb25nIGNyYzMyKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdWludCk7Cit1bnNpZ25lZCBsb25nIGNyYzMyX3dkKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdWludCwgdWludCk7CisjaWYgZGVmaW5lZChDT05GSUdfVElNRVNUQU1QKSB8fCBkZWZpbmVkKENPTkZJR19DTURfREFURSkgfHwgZGVmaW5lZChVU0VfSE9TVENDKQorc3RhdGljIHZvaWQgZ2VuaW1nX3ByaW50X3RpbWUodGltZV90IHRpbWVzdGFtcCk7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTGVnYWN5IGZvcm1hdCByb3V0aW5lcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGltYWdlX2NoZWNrX2hjcmMoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkcikKK3sKKwl1bG9uZyBoY3JjOworCXVsb25nIGxlbiA9IGltYWdlX2dldF9oZWFkZXJfc2l6ZSgpOworCWltYWdlX2hlYWRlcl90IGhlYWRlcjsKKworCS8qIENvcHkgaGVhZGVyIHNvIHdlIGNhbiBibGFuayBDUkMgZmllbGQgZm9yIHJlLWNhbGN1bGF0aW9uICovCisJbWVtbW92ZSgmaGVhZGVyLCAoY2hhciAqKWhkciwgaW1hZ2VfZ2V0X2hlYWRlcl9zaXplKCkpOworCWltYWdlX3NldF9oY3JjKCZoZWFkZXIsIDApOworCisJaGNyYyA9IGNyYzMyKDAsICh1bnNpZ25lZCBjaGFyICopJmhlYWRlciwgbGVuKTsKKworCXJldHVybiAoaGNyYyA9PSBpbWFnZV9nZXRfaGNyYyhoZHIpKTsKK30KKworaW50IGltYWdlX2NoZWNrX2RjcmMoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkcikKK3sKKwl1bG9uZyBkYXRhID0gaW1hZ2VfZ2V0X2RhdGEoaGRyKTsKKwl1bG9uZyBsZW4gPSBpbWFnZV9nZXRfZGF0YV9zaXplKGhkcik7CisJdWxvbmcgZGNyYyA9IGNyYzMyX3dkKDAsICh1bnNpZ25lZCBjaGFyICopZGF0YSwgbGVuLCBDSFVOS1NaX0NSQzMyKTsKKworCXJldHVybiAoZGNyYyA9PSBpbWFnZV9nZXRfZGNyYyhoZHIpKTsKK30KKworLyoqCisgKiBpbWFnZV9tdWx0aV9jb3VudCAtIGdldCBjb21wb25lbnQgKHN1Yi1pbWFnZSkgY291bnQKKyAqIEBoZHI6IHBvaW50ZXIgdG8gdGhlIGhlYWRlciBvZiB0aGUgbXVsdGkgY29tcG9uZW50IGltYWdlCisgKgorICogaW1hZ2VfbXVsdGlfY291bnQoKSByZXR1cm5zIG51bWJlciBvZiBjb21wb25lbnRzIGluIGEgbXVsdGkKKyAqIGNvbXBvbmVudCBpbWFnZS4KKyAqCisgKiBOb3RlOiBubyBjaGVja2luZyBvZiB0aGUgaW1hZ2UgdHlwZSBpcyBkb25lLCBjYWxsZXIgbXVzdCBwYXNzCisgKiBhIHZhbGlkIG11bHRpIGNvbXBvbmVudCBpbWFnZS4KKyAqCisgKiByZXR1cm5zOgorICogICAgIG51bWJlciBvZiBjb21wb25lbnRzCisgKi8KK3Vsb25nIGltYWdlX211bHRpX2NvdW50KGNvbnN0IGltYWdlX2hlYWRlcl90ICpoZHIpCit7CisJdWxvbmcgaSwgY291bnQgPSAwOworCXVpbnQzMl90ICpzaXplOworCisJLyogZ2V0IHN0YXJ0IG9mIHRoZSBpbWFnZSBwYXlsb2FkLCB3aGljaCBpbiBjYXNlIG9mIG11bHRpCisJICogY29tcG9uZW50IGltYWdlcyB0aGF0IHBvaW50cyB0byBhIHRhYmxlIG9mIGNvbXBvbmVudCBzaXplcyAqLworCXNpemUgPSAodWludDMyX3QgKilpbWFnZV9nZXRfZGF0YShoZHIpOworCisJLyogY291bnQgbm9uIGVtcHR5IHNsb3RzICovCisJZm9yIChpID0gMDsgc2l6ZVtpXTsgKytpKQorCQljb3VudCsrOworCisJcmV0dXJuIGNvdW50OworfQorCisvKioKKyAqIGltYWdlX211bHRpX2dldGltZyAtIGdldCBjb21wb25lbnQgZGF0YSBhZGRyZXNzIGFuZCBzaXplCisgKiBAaGRyOiBwb2ludGVyIHRvIHRoZSBoZWFkZXIgb2YgdGhlIG11bHRpIGNvbXBvbmVudCBpbWFnZQorICogQGlkeDogaW5kZXggb2YgdGhlIHJlcXVlc3RlZCBjb21wb25lbnQKKyAqIEBkYXRhOiBwb2ludGVyIHRvIGEgdWxvbmcgdmFyaWFibGUsIHdpbGwgaG9sZCBjb21wb25lbnQgZGF0YSBhZGRyZXNzCisgKiBAbGVuOiBwb2ludGVyIHRvIGEgdWxvbmcgdmFyaWFibGUsIHdpbGwgaG9sZCBjb21wb25lbnQgc2l6ZQorICoKKyAqIGltYWdlX211bHRpX2dldGltZygpIHJldHVybnMgc2l6ZSBhbmQgZGF0YSBhZGRyZXNzIGZvciB0aGUgcmVxdWVzdGVkCisgKiBjb21wb25lbnQgaW4gYSBtdWx0aSBjb21wb25lbnQgaW1hZ2UuCisgKgorICogTm90ZTogbm8gY2hlY2tpbmcgb2YgdGhlIGltYWdlIHR5cGUgaXMgZG9uZSwgY2FsbGVyIG11c3QgcGFzcworICogYSB2YWxpZCBtdWx0aSBjb21wb25lbnQgaW1hZ2UuCisgKgorICogcmV0dXJuczoKKyAqICAgICBkYXRhIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIGNvbXBvbmVudCwgaWYgaWR4IGlzIHZhbGlkCisgKiAgICAgMCBpbiBkYXRhIGFuZCBsZW4sIGlmIGlkeCBpcyBvdXQgb2YgcmFuZ2UKKyAqLwordm9pZCBpbWFnZV9tdWx0aV9nZXRpbWcoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkciwgdWxvbmcgaWR4LAorCQkJdWxvbmcgKmRhdGEsIHVsb25nICpsZW4pCit7CisJaW50IGk7CisJdWludDMyX3QgKnNpemU7CisJdWxvbmcgb2Zmc2V0LCBjb3VudCwgaW1nX2RhdGE7CisKKwkvKiBnZXQgbnVtYmVyIG9mIGNvbXBvbmVudCAqLworCWNvdW50ID0gaW1hZ2VfbXVsdGlfY291bnQoaGRyKTsKKworCS8qIGdldCBzdGFydCBvZiB0aGUgaW1hZ2UgcGF5bG9hZCwgd2hpY2ggaW4gY2FzZSBvZiBtdWx0aQorCSAqIGNvbXBvbmVudCBpbWFnZXMgdGhhdCBwb2ludHMgdG8gYSB0YWJsZSBvZiBjb21wb25lbnQgc2l6ZXMgKi8KKwlzaXplID0gKHVpbnQzMl90ICopaW1hZ2VfZ2V0X2RhdGEoaGRyKTsKKworCS8qIGdldCBhZGRyZXNzIG9mIHRoZSBwcm9wZXIgY29tcG9uZW50IGRhdGEgc3RhcnQsIHdoaWNoIG1lYW5zCisJICogc2tpcHBpbmcgc2l6ZXMgdGFibGUgKGFkZCAxIGZvciBsYXN0LCBudWxsIGVudHJ5KSAqLworCWltZ19kYXRhID0gaW1hZ2VfZ2V0X2RhdGEoaGRyKSArIChjb3VudCArIDEpICogc2l6ZW9mKHVpbnQzMl90KTsKKworCWlmIChpZHggPCBjb3VudCkgeworCQkqbGVuID0gdWltYWdlX3RvX2NwdShzaXplW2lkeF0pOworCQlvZmZzZXQgPSAwOworCisJCS8qIGdvIG92ZXIgYWxsIGluZGljZXMgcHJlY2VkaW5nIHJlcXVlc3RlZCBjb21wb25lbnQgaWR4ICovCisJCWZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykgeworCQkJLyogYWRkIHVwIGktdGggY29tcG9uZW50IHNpemUsIHJvdW5kaW5nIHVwIHRvIDQgYnl0ZXMgKi8KKwkJCW9mZnNldCArPSAodWltYWdlX3RvX2NwdShzaXplW2ldKSArIDMpICYgfjMgOworCQl9CisKKwkJLyogY2FsY3VsYXRlIGlkeC10aCBjb21wb25lbnQgZGF0YSBhZGRyZXNzICovCisJCSpkYXRhID0gaW1nX2RhdGEgKyBvZmZzZXQ7CisJfSBlbHNlIHsKKwkJKmxlbiA9IDA7CisJCSpkYXRhID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGltYWdlX3ByaW50X3R5cGUoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkcikKK3sKKwljb25zdCBjaGFyICpvcywgKmFyY2gsICp0eXBlLCAqY29tcDsKKworCW9zID0gZ2VuaW1nX2dldF9vc19uYW1lKGltYWdlX2dldF9vcyhoZHIpKTsKKwlhcmNoID0gZ2VuaW1nX2dldF9hcmNoX25hbWUoaW1hZ2VfZ2V0X2FyY2goaGRyKSk7CisJdHlwZSA9IGdlbmltZ19nZXRfdHlwZV9uYW1lKGltYWdlX2dldF90eXBlKGhkcikpOworCWNvbXAgPSBnZW5pbWdfZ2V0X2NvbXBfbmFtZShpbWFnZV9nZXRfY29tcChoZHIpKTsKKworCXByaW50ZigiJXMgJXMgJXMgKCVzKVxuIiwgYXJjaCwgb3MsIHR5cGUsIGNvbXApOworfQorCisvKioKKyAqIGltYWdlX3ByaW50X2NvbnRlbnRzIC0gcHJpbnRzIG91dCB0aGUgY29udGVudHMgb2YgdGhlIGxlZ2FjeSBmb3JtYXQgaW1hZ2UKKyAqIEBwdHI6IHBvaW50ZXIgdG8gdGhlIGxlZ2FjeSBmb3JtYXQgaW1hZ2UgaGVhZGVyCisgKiBAcDogcG9pbnRlciB0byBwcmVmaXggc3RyaW5nCisgKgorICogaW1hZ2VfcHJpbnRfY29udGVudHMoKSBmb3JtYXRzIGEgbXVsdGkgbGluZSBsZWdhY3kgaW1hZ2UgY29udGVudHMgZGVzY3JpcHRpb24uCisgKiBUaGUgcm91dGluZSBwcmludHMgb3V0IGFsbCBoZWFkZXIgZmllbGRzIGZvbGxvd2VkIGJ5IHRoZSBzaXplL29mZnNldCBkYXRhCisgKiBmb3IgTVVMVEkvU0NSSVBUIGltYWdlcy4KKyAqCisgKiByZXR1cm5zOgorICogICAgIG5vIHJldHVybmVkIHJlc3VsdHMKKyAqLwordm9pZCBpbWFnZV9wcmludF9jb250ZW50cyhjb25zdCB2b2lkICpwdHIpCit7CisJY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkciA9IChjb25zdCBpbWFnZV9oZWFkZXJfdCAqKXB0cjsKKwljb25zdCBjaGFyICpwOworCisjaWZkZWYgVVNFX0hPU1RDQworCXAgPSAiIjsKKyNlbHNlCisJcCA9ICIgICAiOworI2VuZGlmCisKKwlwcmludGYoIiVzSW1hZ2UgTmFtZTogICAlLipzXG4iLCBwLCBJSF9OTUxFTiwgaW1hZ2VfZ2V0X25hbWUoaGRyKSk7CisjaWYgZGVmaW5lZChDT05GSUdfVElNRVNUQU1QKSB8fCBkZWZpbmVkKENPTkZJR19DTURfREFURSkgfHwgZGVmaW5lZChVU0VfSE9TVENDKQorCXByaW50ZigiJXNDcmVhdGVkOiAgICAgICIsIHApOworCWdlbmltZ19wcmludF90aW1lKCh0aW1lX3QpaW1hZ2VfZ2V0X3RpbWUoaGRyKSk7CisjZW5kaWYKKwlwcmludGYoIiVzSW1hZ2UgVHlwZTogICAiLCBwKTsKKwlpbWFnZV9wcmludF90eXBlKGhkcik7CisJcHJpbnRmKCIlc0RhdGEgU2l6ZTogICAgIiwgcCk7CisJZ2VuaW1nX3ByaW50X3NpemUoaW1hZ2VfZ2V0X2RhdGFfc2l6ZShoZHIpKTsKKwlwcmludGYoIiVzTG9hZCBBZGRyZXNzOiAlMDh4XG4iLCBwLCBpbWFnZV9nZXRfbG9hZChoZHIpKTsKKwlwcmludGYoIiVzRW50cnkgUG9pbnQ6ICAlMDh4XG4iLCBwLCBpbWFnZV9nZXRfZXAoaGRyKSk7CisKKwlpZiAoaW1hZ2VfY2hlY2tfdHlwZShoZHIsIElIX1RZUEVfTVVMVEkpIHx8CisJCQlpbWFnZV9jaGVja190eXBlKGhkciwgSUhfVFlQRV9TQ1JJUFQpKSB7CisJCWludCBpOworCQl1bG9uZyBkYXRhLCBsZW47CisJCXVsb25nIGNvdW50ID0gaW1hZ2VfbXVsdGlfY291bnQoaGRyKTsKKworCQlwcmludGYoIiVzQ29udGVudHM6XG4iLCBwKTsKKwkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJCWltYWdlX211bHRpX2dldGltZyhoZHIsIGksICZkYXRhLCAmbGVuKTsKKworCQkJcHJpbnRmKCIlcyAgIEltYWdlICVkOiAiLCBwLCBpKTsKKwkJCWdlbmltZ19wcmludF9zaXplKGxlbik7CisKKwkJCWlmIChpbWFnZV9jaGVja190eXBlKGhkciwgSUhfVFlQRV9TQ1JJUFQpICYmIGkgPiAwKSB7CisJCQkJLyoKKwkJCQkgKiB0aGUgdXNlciBtYXkgbmVlZCB0byBrbm93IG9mZnNldHMKKwkJCQkgKiBpZiBwbGFubmluZyB0byBkbyBzb21ldGhpbmcgd2l0aAorCQkJCSAqIG11bHRpcGxlIGZpbGVzCisJCQkJICovCisJCQkJcHJpbnRmKCIlcyAgICBPZmZzZXQgPSAweCUwOGx4XG4iLCBwLCBkYXRhKTsKKwkJCX0KKwkJfQorCX0KK30KKworCisjaWZuZGVmIFVTRV9IT1NUQ0MKKy8qKgorICogaW1hZ2VfZ2V0X3JhbWRpc2sgLSBnZXQgYW5kIHZlcmlmeSByYW1kaXNrIGltYWdlCisgKiBAcmRfYWRkcjogcmFtZGlzayBpbWFnZSBzdGFydCBhZGRyZXNzCisgKiBAYXJjaDogZXhwZWN0ZWQgcmFtZGlzayBhcmNoaXRlY3R1cmUKKyAqIEB2ZXJpZnk6IGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBmbGFnCisgKgorICogaW1hZ2VfZ2V0X3JhbWRpc2soKSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgdmVyaWZpZWQgcmFtZGlzayBpbWFnZQorICogaGVhZGVyLiBSb3V0aW5lIHJlY2VpdmVzIGltYWdlIHN0YXJ0IGFkZHJlc3MgYW5kIGV4cGVjdGVkIGFyY2hpdGVjdHVyZQorICogZmxhZy4gVmVyaWZpY2F0aW9uIGRvbmUgY292ZXJzIGRhdGEgYW5kIGhlYWRlciBpbnRlZ3JpdHkgYW5kIG9zL3R5cGUvYXJjaAorICogZmllbGRzIGNoZWNraW5nLgorICoKKyAqIElmIGRhdGFmbGFzaCBzdXBwb3J0IGlzIGVuYWJsZWQgcm91dGluZSBjaGVja3MgZm9yIGRhdGFmbGFzaCBhZGRyZXNzZXMKKyAqIGFuZCBoYW5kbGVzIHJlcXVpcmVkIGRhdGFmbGFzaCByZWFkcy4KKyAqCisgKiByZXR1cm5zOgorICogICAgIHBvaW50ZXIgdG8gYSByYW1kaXNrIGltYWdlIGhlYWRlciwgaWYgaW1hZ2Ugd2FzIGZvdW5kIGFuZCB2YWxpZAorICogICAgIG90aGVyd2lzZSwgcmV0dXJuIE5VTEwKKyAqLworc3RhdGljIGNvbnN0IGltYWdlX2hlYWRlcl90ICppbWFnZV9nZXRfcmFtZGlzayh1bG9uZyByZF9hZGRyLCB1aW50OF90IGFyY2gsCisJCQkJCQlpbnQgdmVyaWZ5KQoreworCWNvbnN0IGltYWdlX2hlYWRlcl90ICpyZF9oZHIgPSAoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKilyZF9hZGRyOworCisJaWYgKCFpbWFnZV9jaGVja19tYWdpYyhyZF9oZHIpKSB7CisJCXB1dHMoIkJhZCBNYWdpYyBOdW1iZXJcbiIpOworCQlib290c3RhZ2VfZXJyb3IoQk9PVFNUQUdFX0lEX1JEX01BR0lDKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCFpbWFnZV9jaGVja19oY3JjKHJkX2hkcikpIHsKKwkJcHV0cygiQmFkIEhlYWRlciBDaGVja3N1bVxuIik7CisJCWJvb3RzdGFnZV9lcnJvcihCT09UU1RBR0VfSURfUkRfSERSX0NIRUNLU1VNKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYm9vdHN0YWdlX21hcmsoQk9PVFNUQUdFX0lEX1JEX01BR0lDKTsKKwlpbWFnZV9wcmludF9jb250ZW50cyhyZF9oZHIpOworCisJaWYgKHZlcmlmeSkgeworCQlwdXRzKCIgICBWZXJpZnlpbmcgQ2hlY2tzdW0gLi4uICIpOworCQlpZiAoIWltYWdlX2NoZWNrX2RjcmMocmRfaGRyKSkgeworCQkJcHV0cygiQmFkIERhdGEgQ1JDXG4iKTsKKwkJCWJvb3RzdGFnZV9lcnJvcihCT09UU1RBR0VfSURfUkRfQ0hFQ0tTVU0pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcHV0cygiT0tcbiIpOworCX0KKworCWJvb3RzdGFnZV9tYXJrKEJPT1RTVEFHRV9JRF9SRF9IRFJfQ0hFQ0tTVU0pOworCisJaWYgKCFpbWFnZV9jaGVja19vcyhyZF9oZHIsIElIX09TX0xJTlVYKSB8fAorCSAgICAhaW1hZ2VfY2hlY2tfYXJjaChyZF9oZHIsIGFyY2gpIHx8CisJICAgICFpbWFnZV9jaGVja190eXBlKHJkX2hkciwgSUhfVFlQRV9SQU1ESVNLKSkgeworCQlwcmludGYoIk5vIExpbnV4ICVzIFJhbWRpc2sgSW1hZ2VcbiIsCisJCQkJZ2VuaW1nX2dldF9hcmNoX25hbWUoYXJjaCkpOworCQlib290c3RhZ2VfZXJyb3IoQk9PVFNUQUdFX0lEX1JBTURJU0spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmRfaGRyOworfQorI2VuZGlmIC8qICFVU0VfSE9TVENDICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNoYXJlZCBkdWFsLWZvcm1hdCByb3V0aW5lcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBVU0VfSE9TVENDCitpbnQgZ2V0ZW52X3llc25vKGNoYXIgKnZhcikKK3sKKwljaGFyICpzID0gZ2V0ZW52KHZhcik7CisJcmV0dXJuIChzICYmICgqcyA9PSAnbicpKSA/IDAgOiAxOworfQorCit1bG9uZyBnZXRlbnZfYm9vdG1fbG93KHZvaWQpCit7CisJY2hhciAqcyA9IGdldGVudigiYm9vdG1fbG93Iik7CisJaWYgKHMpIHsKKwkJdWxvbmcgdG1wID0gc2ltcGxlX3N0cnRvdWwocywgTlVMTCwgMTYpOworCQlyZXR1cm4gdG1wOworCX0KKworI2lmIGRlZmluZWQoQ09ORklHX1NZU19TRFJBTV9CQVNFKQorCXJldHVybiBDT05GSUdfU1lTX1NEUkFNX0JBU0U7CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUk0pCisJcmV0dXJuIGdkLT5iZC0+YmlfZHJhbVswXS5zdGFydDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworcGh5c19zaXplX3QgZ2V0ZW52X2Jvb3RtX3NpemUodm9pZCkKK3sKKwlwaHlzX3NpemVfdCB0bXA7CisJY2hhciAqcyA9IGdldGVudigiYm9vdG1fc2l6ZSIpOworCWlmIChzKSB7CisJCXRtcCA9IChwaHlzX3NpemVfdClzaW1wbGVfc3RydG91bGwocywgTlVMTCwgMTYpOworCQlyZXR1cm4gdG1wOworCX0KKwlzID0gZ2V0ZW52KCJib290bV9sb3ciKTsKKwlpZiAocykKKwkJdG1wID0gKHBoeXNfc2l6ZV90KXNpbXBsZV9zdHJ0b3VsbChzLCBOVUxMLCAxNik7CisJZWxzZQorCQl0bXAgPSAwOworCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUk0pCisJcmV0dXJuIGdkLT5iZC0+YmlfZHJhbVswXS5zaXplIC0gdG1wOworI2Vsc2UKKwlyZXR1cm4gZ2QtPmJkLT5iaV9tZW1zaXplIC0gdG1wOworI2VuZGlmCit9CisKK3BoeXNfc2l6ZV90IGdldGVudl9ib290bV9tYXBzaXplKHZvaWQpCit7CisJcGh5c19zaXplX3QgdG1wOworCWNoYXIgKnMgPSBnZXRlbnYoImJvb3RtX21hcHNpemUiKTsKKwlpZiAocykgeworCQl0bXAgPSAocGh5c19zaXplX3Qpc2ltcGxlX3N0cnRvdWxsKHMsIE5VTEwsIDE2KTsKKwkJcmV0dXJuIHRtcDsKKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfQk9PVE1BUFNaKQorCXJldHVybiBDT05GSUdfU1lTX0JPT1RNQVBTWjsKKyNlbHNlCisJcmV0dXJuIGdldGVudl9ib290bV9zaXplKCk7CisjZW5kaWYKK30KKwordm9pZCBtZW1tb3ZlX3dkKHZvaWQgKnRvLCB2b2lkICpmcm9tLCBzaXplX3QgbGVuLCB1bG9uZyBjaHVua3N6KQoreworCWlmICh0byA9PSBmcm9tKQorCQlyZXR1cm47CisKKyNpZiBkZWZpbmVkKENPTkZJR19IV19XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJc2l6ZV90IHRhaWwgPSAobGVuID4gY2h1bmtzeikgPyBjaHVua3N6IDogbGVuOworCQlXQVRDSERPR19SRVNFVCgpOworCQltZW1tb3ZlKHRvLCBmcm9tLCB0YWlsKTsKKwkJdG8gKz0gdGFpbDsKKwkJZnJvbSArPSB0YWlsOworCQlsZW4gLT0gdGFpbDsKKwl9CisjZWxzZQkvKiAhKENPTkZJR19IV19XQVRDSERPRyB8fCBDT05GSUdfV0FUQ0hET0cpICovCisJbWVtbW92ZSh0bywgZnJvbSwgbGVuKTsKKyNlbmRpZgkvKiBDT05GSUdfSFdfV0FUQ0hET0cgfHwgQ09ORklHX1dBVENIRE9HICovCit9CisjZW5kaWYgLyogIVVTRV9IT1NUQ0MgKi8KKwordm9pZCBnZW5pbWdfcHJpbnRfc2l6ZSh1aW50MzJfdCBzaXplKQoreworI2lmbmRlZiBVU0VfSE9TVENDCisJcHJpbnRmKCIlZCBCeXRlcyA9ICIsIHNpemUpOworCXByaW50X3NpemUoc2l6ZSwgIlxuIik7CisjZWxzZQorCXByaW50ZigiJWQgQnl0ZXMgPSAlLjJmIGtCID0gJS4yZiBNQlxuIiwKKwkJCXNpemUsIChkb3VibGUpc2l6ZSAvIDEuMDI0ZTMsCisJCQkoZG91YmxlKXNpemUgLyAxLjA0ODU3NmU2KTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChDT05GSUdfVElNRVNUQU1QKSB8fCBkZWZpbmVkKENPTkZJR19DTURfREFURSkgfHwgZGVmaW5lZChVU0VfSE9TVENDKQorc3RhdGljIHZvaWQgZ2VuaW1nX3ByaW50X3RpbWUodGltZV90IHRpbWVzdGFtcCkKK3sKKyNpZm5kZWYgVVNFX0hPU1RDQworCXN0cnVjdCBydGNfdGltZSB0bTsKKworCXRvX3RtKHRpbWVzdGFtcCwgJnRtKTsKKwlwcmludGYoIiU0ZC0lMDJkLSUwMmQgICUyZDolMDJkOiUwMmQgVVRDXG4iLAorCQkJdG0udG1feWVhciwgdG0udG1fbW9uLCB0bS50bV9tZGF5LAorCQkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMpOworI2Vsc2UKKwlwcmludGYoIiVzIiwgY3RpbWUoJnRpbWVzdGFtcCkpOworI2VuZGlmCit9CisjZW5kaWYgLyogQ09ORklHX1RJTUVTVEFNUCB8fCBDT05GSUdfQ01EX0RBVEUgfHwgVVNFX0hPU1RDQyAqLworCisvKioKKyAqIGdldF90YWJsZV9lbnRyeV9uYW1lIC0gdHJhbnNsYXRlIGVudHJ5IGlkIHRvIGxvbmcgbmFtZQorICogQHRhYmxlOiBwb2ludGVyIHRvIGEgdHJhbnNsYXRpb24gdGFibGUgZm9yIGVudHJpZXMgb2YgYSBzcGVjaWZpYyB0eXBlCisgKiBAbXNnOiBtZXNzYWdlIHRvIGJlIHJldHVybmVkIHdoZW4gdHJhbnNsYXRpb24gZmFpbHMKKyAqIEBpZDogZW50cnkgaWQgdG8gYmUgdHJhbnNsYXRlZAorICoKKyAqIGdldF90YWJsZV9lbnRyeV9uYW1lKCkgd2lsbCBnbyBvdmVyIHRyYW5zbGF0aW9uIHRhYmxlIHRyeWluZyB0byBmaW5kCisgKiBlbnRyeSB0aGF0IG1hdGNoZXMgZ2l2ZW4gaWQuIElmIG1hdGNoaW5nIGVudHJ5IGlzIGZvdW5kLCBpdHMgbG9uZworICogbmFtZSBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgbG9uZyBlbnRyeSBuYW1lIGlmIHRyYW5zbGF0aW9uIHN1Y2NlZWRzCisgKiAgICAgbXNnIG90aGVyd2lzZQorICovCitjaGFyICpnZXRfdGFibGVfZW50cnlfbmFtZShjb25zdCB0YWJsZV9lbnRyeV90ICp0YWJsZSwgY2hhciAqbXNnLCBpbnQgaWQpCit7CisJZm9yICg7IHRhYmxlLT5pZCA+PSAwOyArK3RhYmxlKSB7CisJCWlmICh0YWJsZS0+aWQgPT0gaWQpCisjaWYgZGVmaW5lZChVU0VfSE9TVENDKSB8fCAhZGVmaW5lZChDT05GSUdfTkVFRFNfTUFOVUFMX1JFTE9DKQorCQkJcmV0dXJuIHRhYmxlLT5sbmFtZTsKKyNlbHNlCisJCQlyZXR1cm4gdGFibGUtPmxuYW1lICsgZ2QtPnJlbG9jX29mZjsKKyNlbmRpZgorCX0KKwlyZXR1cm4gKG1zZyk7Cit9CisKK2NvbnN0IGNoYXIgKmdlbmltZ19nZXRfb3NfbmFtZSh1aW50OF90IG9zKQoreworCXJldHVybiAoZ2V0X3RhYmxlX2VudHJ5X25hbWUodWltYWdlX29zLCAiVW5rbm93biBPUyIsIG9zKSk7Cit9CisKK2NvbnN0IGNoYXIgKmdlbmltZ19nZXRfYXJjaF9uYW1lKHVpbnQ4X3QgYXJjaCkKK3sKKwlyZXR1cm4gKGdldF90YWJsZV9lbnRyeV9uYW1lKHVpbWFnZV9hcmNoLCAiVW5rbm93biBBcmNoaXRlY3R1cmUiLAorCQkJCQlhcmNoKSk7Cit9CisKK2NvbnN0IGNoYXIgKmdlbmltZ19nZXRfdHlwZV9uYW1lKHVpbnQ4X3QgdHlwZSkKK3sKKwlyZXR1cm4gKGdldF90YWJsZV9lbnRyeV9uYW1lKHVpbWFnZV90eXBlLCAiVW5rbm93biBJbWFnZSIsIHR5cGUpKTsKK30KKworY29uc3QgY2hhciAqZ2VuaW1nX2dldF9jb21wX25hbWUodWludDhfdCBjb21wKQoreworCXJldHVybiAoZ2V0X3RhYmxlX2VudHJ5X25hbWUodWltYWdlX2NvbXAsICJVbmtub3duIENvbXByZXNzaW9uIiwKKwkJCQkJY29tcCkpOworfQorCisvKioKKyAqIGdldF90YWJsZV9lbnRyeV9pZCAtIHRyYW5zbGF0ZSBzaG9ydCBlbnRyeSBuYW1lIHRvIGlkCisgKiBAdGFibGU6IHBvaW50ZXIgdG8gYSB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgZW50cmllcyBvZiBhIHNwZWNpZmljIHR5cGUKKyAqIEB0YWJsZV9uYW1lOiB0byBiZSB1c2VkIGluIGNhc2Ugb2YgZXJyb3IKKyAqIEBuYW1lOiBlbnRyeSBzaG9ydCBuYW1lIHRvIGJlIHRyYW5zbGF0ZWQKKyAqCisgKiBnZXRfdGFibGVfZW50cnlfaWQoKSB3aWxsIGdvIG92ZXIgdHJhbnNsYXRpb24gdGFibGUgdHJ5aW5nIHRvIGZpbmQKKyAqIGVudHJ5IHRoYXQgbWF0Y2hlcyBnaXZlbiBzaG9ydCBuYW1lLiBJZiBtYXRjaGluZyBlbnRyeSBpcyBmb3VuZCwKKyAqIGl0cyBpZCByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgZW50cnkgaWQgaWYgdHJhbnNsYXRpb24gc3VjY2VlZHMKKyAqICAgICAtMSBvdGhlcndpc2UKKyAqLworaW50IGdldF90YWJsZV9lbnRyeV9pZChjb25zdCB0YWJsZV9lbnRyeV90ICp0YWJsZSwKKwkJY29uc3QgY2hhciAqdGFibGVfbmFtZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCB0YWJsZV9lbnRyeV90ICp0OworI2lmZGVmIFVTRV9IT1NUQ0MKKwlpbnQgZmlyc3QgPSAxOworCisJZm9yICh0ID0gdGFibGU7IHQtPmlkID49IDA7ICsrdCkgeworCQlpZiAodC0+c25hbWUgJiYgc3RyY2FzZWNtcCh0LT5zbmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybih0LT5pZCk7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJcbkludmFsaWQgJXMgVHlwZSAtIHZhbGlkIG5hbWVzIGFyZSIsIHRhYmxlX25hbWUpOworCWZvciAodCA9IHRhYmxlOyB0LT5pZCA+PSAwOyArK3QpIHsKKwkJaWYgKHQtPnNuYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJZnByaW50ZihzdGRlcnIsICIlYyAlcyIsIChmaXJzdCkgPyAnOicgOiAnLCcsIHQtPnNuYW1lKTsKKwkJZmlyc3QgPSAwOworCX0KKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisjZWxzZQorCWZvciAodCA9IHRhYmxlOyB0LT5pZCA+PSAwOyArK3QpIHsKKyNpZmRlZiBDT05GSUdfTkVFRFNfTUFOVUFMX1JFTE9DCisJCWlmICh0LT5zbmFtZSAmJiBzdHJjbXAodC0+c25hbWUgKyBnZC0+cmVsb2Nfb2ZmLCBuYW1lKSA9PSAwKQorI2Vsc2UKKwkJaWYgKHQtPnNuYW1lICYmIHN0cmNtcCh0LT5zbmFtZSwgbmFtZSkgPT0gMCkKKyNlbmRpZgorCQkJcmV0dXJuICh0LT5pZCk7CisJfQorCWRlYnVnKCJJbnZhbGlkICVzIFR5cGU6ICVzXG4iLCB0YWJsZV9uYW1lLCBuYW1lKTsKKyNlbmRpZiAvKiBVU0VfSE9TVENDICovCisJcmV0dXJuICgtMSk7Cit9CisKK2ludCBnZW5pbWdfZ2V0X29zX2lkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIChnZXRfdGFibGVfZW50cnlfaWQodWltYWdlX29zLCAiT1MiLCBuYW1lKSk7Cit9CisKK2ludCBnZW5pbWdfZ2V0X2FyY2hfaWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gKGdldF90YWJsZV9lbnRyeV9pZCh1aW1hZ2VfYXJjaCwgIkNQVSIsIG5hbWUpKTsKK30KKworaW50IGdlbmltZ19nZXRfdHlwZV9pZChjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAoZ2V0X3RhYmxlX2VudHJ5X2lkKHVpbWFnZV90eXBlLCAiSW1hZ2UiLCBuYW1lKSk7Cit9CisKK2ludCBnZW5pbWdfZ2V0X2NvbXBfaWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gKGdldF90YWJsZV9lbnRyeV9pZCh1aW1hZ2VfY29tcCwgIkNvbXByZXNzaW9uIiwgbmFtZSkpOworfQorCisjaWZuZGVmIFVTRV9IT1NUQ0MKKy8qKgorICogZ2VuaW1nX2dldF9mb3JtYXQgLSBnZXQgaW1hZ2UgZm9ybWF0IHR5cGUKKyAqIEBpbWdfYWRkcjogaW1hZ2Ugc3RhcnQgYWRkcmVzcworICoKKyAqIGdlbmltZ19nZXRfZm9ybWF0KCkgY2hlY2tzIHdoZXRoZXIgcHJvdmlkZWQgYWRkcmVzcyBwb2ludHMgdG8gYSB2YWxpZAorICogbGVnYWN5IG9yIEZJVCBpbWFnZS4KKyAqCisgKiBOZXcgdUltYWdlIGZvcm1hdCBhbmQgRkRUIGJsb2IgYXJlIGJhc2VkIG9uIGEgbGliZmR0LiBGRFQgYmxvYgorICogbWF5IGJlIHBhc3NlZCBkaXJlY3RseSBvciBlbWJlZGRlZCBpbiBhIEZJVCBpbWFnZS4gSW4gYm90aCBzaXR1YXRpb25zCisgKiBnZW5pbWdfZ2V0X2Zvcm1hdCgpIG11c3QgYmUgYWJsZSB0byBkZWN0ZWN0IGxpYmZkdCBoZWFkZXIuCisgKgorICogcmV0dXJuczoKKyAqICAgICBpbWFnZSBmb3JtYXQgdHlwZSBvciBJTUFHRV9GT1JNQVRfSU5WQUxJRCBpZiBubyBpbWFnZSBpcyBwcmVzZW50CisgKi8KK2ludCBnZW5pbWdfZ2V0X2Zvcm1hdCh2b2lkICppbWdfYWRkcikKK3sKKwl1bG9uZyBmb3JtYXQgPSBJTUFHRV9GT1JNQVRfSU5WQUxJRDsKKwljb25zdCBpbWFnZV9oZWFkZXJfdCAqaGRyOworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkgfHwgZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKQorCWNoYXIgKmZpdF9oZHI7CisjZW5kaWYKKworCWhkciA9IChjb25zdCBpbWFnZV9oZWFkZXJfdCAqKWltZ19hZGRyOworCWlmIChpbWFnZV9jaGVja19tYWdpYyhoZHIpKQorCQlmb3JtYXQgPSBJTUFHRV9GT1JNQVRfTEVHQUNZOworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkgfHwgZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKQorCWVsc2UgeworCQlmaXRfaGRyID0gKGNoYXIgKilpbWdfYWRkcjsKKwkJaWYgKGZkdF9jaGVja19oZWFkZXIoZml0X2hkcikgPT0gMCkKKwkJCWZvcm1hdCA9IElNQUdFX0ZPUk1BVF9GSVQ7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gZm9ybWF0OworfQorCisvKioKKyAqIGdlbmltZ19nZXRfaW1hZ2UgLSBnZXQgaW1hZ2UgZnJvbSBzcGVjaWFsIHN0b3JhZ2UgKGlmIG5lY2Vzc2FyeSkKKyAqIEBpbWdfYWRkcjogaW1hZ2Ugc3RhcnQgYWRkcmVzcworICoKKyAqIGdlbmltZ19nZXRfaW1hZ2UoKSBjaGVja3MgaWYgcHJvdmlkZWQgaW1hZ2Ugc3RhcnQgYWRkZHJlc3MgaXMgbG9jYXRlZAorICogaW4gYSBkYXRhZmxhc2ggc3RvcmFnZS4gSWYgc28sIGltYWdlIGlzIG1vdmVkIHRvIGEgc3lzdGVtIFJBTSBtZW1vcnkuCisgKgorICogcmV0dXJuczoKKyAqICAgICBpbWFnZSBzdGFydCBhZGRyZXNzIGFmdGVyIHBvc3NpYmxlIHJlbG9jYXRpb24gZnJvbSBzcGVjaWFsIHN0b3JhZ2UKKyAqLwordWxvbmcgZ2VuaW1nX2dldF9pbWFnZSh1bG9uZyBpbWdfYWRkcikKK3sKKwl1bG9uZyByYW1fYWRkciA9IGltZ19hZGRyOworCisjaWZkZWYgQ09ORklHX0hBU19EQVRBRkxBU0gKKwl1bG9uZyBoX3NpemUsIGRfc2l6ZTsKKworCWlmIChhZGRyX2RhdGFmbGFzaChpbWdfYWRkcikpIHsKKwkJLyogZ2VyIFJBTSBhZGRyZXNzICovCisJCXJhbV9hZGRyID0gQ09ORklHX1NZU19MT0FEX0FERFI7CisKKwkJLyogZ2V0IGhlYWRlciBzaXplICovCisJCWhfc2l6ZSA9IGltYWdlX2dldF9oZWFkZXJfc2l6ZSgpOworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkKKwkJaWYgKHNpemVvZihzdHJ1Y3QgZmR0X2hlYWRlcikgPiBoX3NpemUpCisJCQloX3NpemUgPSBzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpOworI2VuZGlmCisKKwkJLyogcmVhZCBpbiBoZWFkZXIgKi8KKwkJZGVidWcoIiAgIFJlYWRpbmcgaW1hZ2UgaGVhZGVyIGZyb20gZGF0YWZsYXNoIGFkZHJlc3MgIgorCQkJIiUwOGx4IHRvIFJBTSBhZGRyZXNzICUwOGx4XG4iLCBpbWdfYWRkciwgcmFtX2FkZHIpOworCisJCXJlYWRfZGF0YWZsYXNoKGltZ19hZGRyLCBoX3NpemUsIChjaGFyICopcmFtX2FkZHIpOworCisJCS8qIGdldCBkYXRhIHNpemUgKi8KKwkJc3dpdGNoIChnZW5pbWdfZ2V0X2Zvcm1hdCgodm9pZCAqKXJhbV9hZGRyKSkgeworCQljYXNlIElNQUdFX0ZPUk1BVF9MRUdBQ1k6CisJCQlkX3NpemUgPSBpbWFnZV9nZXRfZGF0YV9zaXplKAorCQkJCQkoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKilyYW1fYWRkcik7CisJCQlkZWJ1ZygiICAgTGVnYWN5IGZvcm1hdCBpbWFnZSBmb3VuZCBhdCAweCUwOGx4LCAiCisJCQkJCSJzaXplIDB4JTA4bHhcbiIsCisJCQkJCXJhbV9hZGRyLCBkX3NpemUpOworCQkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfRklUKQorCQljYXNlIElNQUdFX0ZPUk1BVF9GSVQ6CisJCQlkX3NpemUgPSBmaXRfZ2V0X3NpemUoKGNvbnN0IHZvaWQgKilyYW1fYWRkcikgLSBoX3NpemU7CisJCQlkZWJ1ZygiICAgRklUL0ZEVCBmb3JtYXQgaW1hZ2UgZm91bmQgYXQgMHglMDhseCwgIgorCQkJCQkic2l6ZSAweCUwOGx4XG4iLAorCQkJCQlyYW1fYWRkciwgZF9zaXplKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlwcmludGYoIiAgIE5vIHZhbGlkIGltYWdlIGZvdW5kIGF0IDB4JTA4bHhcbiIsCisJCQkJaW1nX2FkZHIpOworCQkJcmV0dXJuIHJhbV9hZGRyOworCQl9CisKKwkJLyogcmVhZCBpbiBpbWFnZSBkYXRhICovCisJCWRlYnVnKCIgICBSZWFkaW5nIGltYWdlIHJlbWFpbmluZyBkYXRhIGZyb20gZGF0YWZsYXNoIGFkZHJlc3MgIgorCQkJIiUwOGx4IHRvIFJBTSBhZGRyZXNzICUwOGx4XG4iLCBpbWdfYWRkciArIGhfc2l6ZSwKKwkJCXJhbV9hZGRyICsgaF9zaXplKTsKKworCQlyZWFkX2RhdGFmbGFzaChpbWdfYWRkciArIGhfc2l6ZSwgZF9zaXplLAorCQkJCShjaGFyICopKHJhbV9hZGRyICsgaF9zaXplKSk7CisKKwl9CisjZW5kaWYgLyogQ09ORklHX0hBU19EQVRBRkxBU0ggKi8KKworCXJldHVybiByYW1fYWRkcjsKK30KKworLyoqCisgKiBmaXRfaGFzX2NvbmZpZyAtIGNoZWNrIGlmIHRoZXJlIGlzIGEgdmFsaWQgRklUIGNvbmZpZ3VyYXRpb24KKyAqIEBpbWFnZXM6IHBvaW50ZXIgdG8gdGhlIGJvb3RtIGNvbW1hbmQgaGVhZGVycyBzdHJ1Y3R1cmUKKyAqCisgKiBmaXRfaGFzX2NvbmZpZygpIGNoZWNrcyBpZiB0aGVyZSBpcyBhIEZJVCBjb25maWd1cmF0aW9uIGluIHVzZQorICogKGlmIEZUSSBzdXBwb3J0IGlzIHByZXNlbnQpLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMCwgbm8gRklUIHN1cHBvcnQgb3Igbm8gY29uZmlndXJhdGlvbiBmb3VuZAorICogICAgIDEsIGNvbmZpZ3VyYXRpb24gZm91bmQKKyAqLworaW50IGdlbmltZ19oYXNfY29uZmlnKGJvb3RtX2hlYWRlcnNfdCAqaW1hZ2VzKQoreworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkKKwlpZiAoaW1hZ2VzLT5maXRfdW5hbWVfY2ZnKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCisvKioKKyAqIGJvb3RfZ2V0X3JhbWRpc2sgLSBtYWluIHJhbWRpc2sgaGFuZGxpbmcgcm91dGluZQorICogQGFyZ2M6IGNvbW1hbmQgYXJndW1lbnQgY291bnQKKyAqIEBhcmd2OiBjb21tYW5kIGFyZ3VtZW50IGxpc3QKKyAqIEBpbWFnZXM6IHBvaW50ZXIgdG8gdGhlIGJvb3RtIGltYWdlcyBzdHJ1Y3R1cmUKKyAqIEBhcmNoOiBleHBlY3RlZCByYW1kaXNrIGFyY2hpdGVjdHVyZQorICogQHJkX3N0YXJ0OiBwb2ludGVyIHRvIGEgdWxvbmcgdmFyaWFibGUsIHdpbGwgaG9sZCByYW1kaXNrIHN0YXJ0IGFkZHJlc3MKKyAqIEByZF9lbmQ6IHBvaW50ZXIgdG8gYSB1bG9uZyB2YXJpYWJsZSwgd2lsbCBob2xkIHJhbWRpc2sgZW5kCisgKgorICogYm9vdF9nZXRfcmFtZGlzaygpIGlzIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIGEgdmFsaWQgcmFtZGlzayBpbWFnZS4KKyAqIEN1cmVudGx5IHN1cHBvcnRlZCBhcmUgdGhlIGZvbGxvd2luZyByYW1kaXNrIHNvdXJjZXM6CisgKiAgICAgIC0gbXVsdGljb21wb25lbnQga2VybmVsL3JhbWRpc2sgaW1hZ2UsCisgKiAgICAgIC0gY29tbWFuZGxpbmUgcHJvdmlkZWQgYWRkcmVzcyBvZiBkZWNpY2F0ZWQgcmFtZGlzayBpbWFnZS4KKyAqCisgKiByZXR1cm5zOgorICogICAgIDAsIGlmIHJhbWRpc2sgaW1hZ2Ugd2FzIGZvdW5kIGFuZCB2YWxpZCwgb3Igc2tpcGVkCisgKiAgICAgcmRfc3RhcnQgYW5kIHJkX2VuZCBhcmUgc2V0IHRvIHJhbWRpc2sgc3RhcnQvZW5kIGFkZHJlc3NlcyBpZgorICogICAgIHJhbWRpc2sgaW1hZ2UgaXMgZm91bmQgYW5kIHZhbGlkCisgKgorICogICAgIDEsIGlmIHJhbWRpc2sgaW1hZ2UgaXMgZm91bmQgYnV0IGNvcnJ1cHRlZCwgb3IgaW52YWxpZAorICogICAgIHJkX3N0YXJ0IGFuZCByZF9lbmQgYXJlIHNldCB0byAwIGlmIG5vIHJhbWRpc2sgZXhpc3RzCisgKi8KK2ludCBib290X2dldF9yYW1kaXNrKGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdLCBib290bV9oZWFkZXJzX3QgKmltYWdlcywKKwkJdWludDhfdCBhcmNoLCB1bG9uZyAqcmRfc3RhcnQsIHVsb25nICpyZF9lbmQpCit7CisJdWxvbmcgcmRfYWRkciwgcmRfbG9hZDsKKwl1bG9uZyByZF9kYXRhLCByZF9sZW47CisJY29uc3QgaW1hZ2VfaGVhZGVyX3QgKnJkX2hkcjsKKyNpZmRlZiBDT05GSUdfU1VQUE9SVF9SQVdfSU5JVFJECisJY2hhciAqZW5kOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRklUKQorCXZvaWQJCSpmaXRfaGRyOworCWNvbnN0IGNoYXIJKmZpdF91bmFtZV9jb25maWcgPSBOVUxMOworCWNvbnN0IGNoYXIJKmZpdF91bmFtZV9yYW1kaXNrID0gTlVMTDsKKwl1bG9uZwkJZGVmYXVsdF9hZGRyOworCWludAkJcmRfbm9mZnNldDsKKwlpbnQJCWNmZ19ub2Zmc2V0OworCWNvbnN0IHZvaWQJKmRhdGE7CisJc2l6ZV90CQlzaXplOworI2VuZGlmCisKKwkqcmRfc3RhcnQgPSAwOworCSpyZF9lbmQgPSAwOworCisJLyoKKwkgKiBMb29rIGZvciBhICctJyB3aGljaCBpbmRpY2F0ZXMgdG8gaWdub3JlIHRoZQorCSAqIHJhbWRpc2sgYXJndW1lbnQKKwkgKi8KKwlpZiAoKGFyZ2MgPj0gMykgJiYgKHN0cmNtcChhcmd2WzJdLCAiLSIpID09ICAwKSkgeworCQlkZWJ1ZygiIyMgU2tpcHBpbmcgaW5pdCBSYW1kaXNrXG4iKTsKKwkJcmRfbGVuID0gcmRfZGF0YSA9IDA7CisJfSBlbHNlIGlmIChhcmdjID49IDMgfHwgZ2VuaW1nX2hhc19jb25maWcoaW1hZ2VzKSkgeworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkKKwkJaWYgKGFyZ2MgPj0gMykgeworCQkJLyoKKwkJCSAqIElmIHRoZSBpbml0IHJhbWRpc2sgY29tZXMgZnJvbSB0aGUgRklUIGltYWdlIGFuZAorCQkJICogdGhlIEZJVCBpbWFnZSBhZGRyZXNzIGlzIG9taXR0ZWQgaW4gdGhlIGNvbW1hbmQKKwkJCSAqIGxpbmUgYXJndW1lbnQsIHRyeSB0byB1c2Ugb3MgRklUIGltYWdlIGFkZHJlc3Mgb3IKKwkJCSAqIGRlZmF1bHQgbG9hZCBhZGRyZXNzLgorCQkJICovCisJCQlpZiAoaW1hZ2VzLT5maXRfdW5hbWVfb3MpCisJCQkJZGVmYXVsdF9hZGRyID0gKHVsb25nKWltYWdlcy0+Zml0X2hkcl9vczsKKwkJCWVsc2UKKwkJCQlkZWZhdWx0X2FkZHIgPSBsb2FkX2FkZHI7CisKKwkJCWlmIChmaXRfcGFyc2VfY29uZihhcmd2WzJdLCBkZWZhdWx0X2FkZHIsCisJCQkJCQkmcmRfYWRkciwgJmZpdF91bmFtZV9jb25maWcpKSB7CisJCQkJZGVidWcoIiogIHJhbWRpc2s6IGNvbmZpZyAnJXMnIGZyb20gaW1hZ2UgYXQgIgorCQkJCQkJIjB4JTA4bHhcbiIsCisJCQkJCQlmaXRfdW5hbWVfY29uZmlnLCByZF9hZGRyKTsKKwkJCX0gZWxzZSBpZiAoZml0X3BhcnNlX3N1YmltYWdlKGFyZ3ZbMl0sIGRlZmF1bHRfYWRkciwKKwkJCQkJCSZyZF9hZGRyLCAmZml0X3VuYW1lX3JhbWRpc2spKSB7CisJCQkJZGVidWcoIiogIHJhbWRpc2s6IHN1YmltYWdlICclcycgZnJvbSBpbWFnZSBhdCAiCisJCQkJCQkiMHglMDhseFxuIiwKKwkJCQkJCWZpdF91bmFtZV9yYW1kaXNrLCByZF9hZGRyKTsKKwkJCX0gZWxzZQorI2VuZGlmCisJCQl7CisJCQkJcmRfYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKKwkJCQlkZWJ1ZygiKiAgcmFtZGlzazogY21kbGluZSBpbWFnZSBhZGRyZXNzID0gIgorCQkJCQkJIjB4JTA4bHhcbiIsCisJCQkJCQlyZF9hZGRyKTsKKwkJCX0KKyNpZiBkZWZpbmVkKENPTkZJR19GSVQpCisJCX0gZWxzZSB7CisJCQkvKiB1c2UgRklUIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgaW4gZmlyc3QgYm9vdG0KKwkJCSAqIGNvbW1hbmQgYXJndW1lbnQKKwkJCSAqLworCQkJcmRfYWRkciA9ICh1bG9uZylpbWFnZXMtPmZpdF9oZHJfb3M7CisJCQlmaXRfdW5hbWVfY29uZmlnID0gaW1hZ2VzLT5maXRfdW5hbWVfY2ZnOworCQkJZGVidWcoIiogIHJhbWRpc2s6IHVzaW5nIGNvbmZpZyAnJXMnIGZyb20gaW1hZ2UgIgorCQkJCQkiYXQgMHglMDhseFxuIiwKKwkJCQkJZml0X3VuYW1lX2NvbmZpZywgcmRfYWRkcik7CisKKwkJCS8qCisJCQkgKiBDaGVjayB3aGV0aGVyIGNvbmZpZ3VyYXRpb24gaGFzIHJhbWRpc2sgZGVmaW5lZCwKKwkJCSAqIGlmIG5vdCwgZG9uJ3QgdHJ5IHRvIHVzZSBpdCwgcXVpdCBzaWxlbnRseS4KKwkJCSAqLworCQkJZml0X2hkciA9ICh2b2lkICopcmRfYWRkcjsKKwkJCWNmZ19ub2Zmc2V0ID0gZml0X2NvbmZfZ2V0X25vZGUoZml0X2hkciwKKwkJCQkJCQlmaXRfdW5hbWVfY29uZmlnKTsKKwkJCWlmIChjZmdfbm9mZnNldCA8IDApIHsKKwkJCQlkZWJ1ZygiKiAgcmFtZGlzazogbm8gc3VjaCBjb25maWdcbiIpOworCQkJCXJldHVybiAxOworCQkJfQorCisJCQlyZF9ub2Zmc2V0ID0gZml0X2NvbmZfZ2V0X3JhbWRpc2tfbm9kZShmaXRfaGRyLAorCQkJCQkJCQljZmdfbm9mZnNldCk7CisJCQlpZiAocmRfbm9mZnNldCA8IDApIHsKKwkJCQlkZWJ1ZygiKiAgcmFtZGlzazogbm8gcmFtZGlzayBpbiBjb25maWdcbiIpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisjZW5kaWYKKworCQkvKiBjb3B5IGZyb20gZGF0YWZsYXNoIGlmIG5lZWRlZCAqLworCQlyZF9hZGRyID0gZ2VuaW1nX2dldF9pbWFnZShyZF9hZGRyKTsKKworCQkvKgorCQkgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBpbml0cmQgaW1hZ2UgYXQgdGhlCisJCSAqIGFkZHJlc3MgcHJvdmlkZWQgaW4gdGhlIHNlY29uZCBib290bSBhcmd1bWVudAorCQkgKiBjaGVjayBpbWFnZSB0eXBlLCBmb3IgRklUIGltYWdlcyBnZXQgRklUIG5vZGUuCisJCSAqLworCQlzd2l0Y2ggKGdlbmltZ19nZXRfZm9ybWF0KCh2b2lkICopcmRfYWRkcikpIHsKKwkJY2FzZSBJTUFHRV9GT1JNQVRfTEVHQUNZOgorCQkJcHJpbnRmKCIjIyBMb2FkaW5nIGluaXQgUmFtZGlzayBmcm9tIExlZ2FjeSAiCisJCQkJCSJJbWFnZSBhdCAlMDhseCAuLi5cbiIsIHJkX2FkZHIpOworCisJCQlib290c3RhZ2VfbWFyayhCT09UU1RBR0VfSURfQ0hFQ0tfUkFNRElTSyk7CisJCQlyZF9oZHIgPSBpbWFnZV9nZXRfcmFtZGlzayhyZF9hZGRyLCBhcmNoLAorCQkJCQkJCWltYWdlcy0+dmVyaWZ5KTsKKworCQkJaWYgKHJkX2hkciA9PSBOVUxMKQorCQkJCXJldHVybiAxOworCisJCQlyZF9kYXRhID0gaW1hZ2VfZ2V0X2RhdGEocmRfaGRyKTsKKwkJCXJkX2xlbiA9IGltYWdlX2dldF9kYXRhX3NpemUocmRfaGRyKTsKKwkJCXJkX2xvYWQgPSBpbWFnZV9nZXRfbG9hZChyZF9oZHIpOworCQkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfRklUKQorCQljYXNlIElNQUdFX0ZPUk1BVF9GSVQ6CisJCQlmaXRfaGRyID0gKHZvaWQgKilyZF9hZGRyOworCQkJcHJpbnRmKCIjIyBMb2FkaW5nIGluaXQgUmFtZGlzayBmcm9tIEZJVCAiCisJCQkJCSJJbWFnZSBhdCAlMDhseCAuLi5cbiIsIHJkX2FkZHIpOworCisJCQlib290c3RhZ2VfbWFyayhCT09UU1RBR0VfSURfRklUX1JEX0ZPUk1BVCk7CisJCQlpZiAoIWZpdF9jaGVja19mb3JtYXQoZml0X2hkcikpIHsKKwkJCQlwdXRzKCJCYWQgRklUIHJhbWRpc2sgaW1hZ2UgZm9ybWF0IVxuIik7CisJCQkJYm9vdHN0YWdlX2Vycm9yKAorCQkJCQlCT09UU1RBR0VfSURfRklUX1JEX0ZPUk1BVCk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlib290c3RhZ2VfbWFyayhCT09UU1RBR0VfSURfRklUX1JEX0ZPUk1BVF9PSyk7CisKKwkJCWlmICghZml0X3VuYW1lX3JhbWRpc2spIHsKKwkJCQkvKgorCQkJCSAqIG5vIHJhbWRpc2sgaW1hZ2Ugbm9kZSB1bml0IG5hbWUsIHRyeSB0byBnZXQgY29uZmlnCisJCQkJICogbm9kZSBmaXJzdC4gSWYgY29uZmlnIHVuaXQgbm9kZSBuYW1lIGlzIE5VTEwKKwkJCQkgKiBmaXRfY29uZl9nZXRfbm9kZSgpIHdpbGwgdHJ5IHRvIGZpbmQgZGVmYXVsdCBjb25maWcgbm9kZQorCQkJCSAqLworCQkJCWJvb3RzdGFnZV9tYXJrKAorCQkJCQlCT09UU1RBR0VfSURfRklUX1JEX05PX1VOSVRfTkFNRSk7CisJCQkJY2ZnX25vZmZzZXQgPSBmaXRfY29uZl9nZXRfbm9kZShmaXRfaGRyLAorCQkJCQkJCWZpdF91bmFtZV9jb25maWcpOworCQkJCWlmIChjZmdfbm9mZnNldCA8IDApIHsKKwkJCQkJcHV0cygiQ291bGQgbm90IGZpbmQgY29uZmlndXJhdGlvbiAiCisJCQkJCQkibm9kZVxuIik7CisJCQkJCWJvb3RzdGFnZV9lcnJvcigKKwkJCQkJQk9PVFNUQUdFX0lEX0ZJVF9SRF9OT19VTklUX05BTUUpOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisJCQkJZml0X3VuYW1lX2NvbmZpZyA9IGZkdF9nZXRfbmFtZShmaXRfaGRyLAorCQkJCQkJCWNmZ19ub2Zmc2V0LCBOVUxMKTsKKwkJCQlwcmludGYoIiAgIFVzaW5nICclcycgY29uZmlndXJhdGlvblxuIiwKKwkJCQkJZml0X3VuYW1lX2NvbmZpZyk7CisKKwkJCQlyZF9ub2Zmc2V0ID0gZml0X2NvbmZfZ2V0X3JhbWRpc2tfbm9kZShmaXRfaGRyLAorCQkJCQkJCWNmZ19ub2Zmc2V0KTsKKwkJCQlmaXRfdW5hbWVfcmFtZGlzayA9IGZpdF9nZXRfbmFtZShmaXRfaGRyLAorCQkJCQkJCXJkX25vZmZzZXQsIE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBnZXQgcmFtZGlzayBjb21wb25lbnQgaW1hZ2Ugbm9kZSBvZmZzZXQgKi8KKwkJCQlib290c3RhZ2VfbWFyaygKKwkJCQkJQk9PVFNUQUdFX0lEX0ZJVF9SRF9VTklUX05BTUUpOworCQkJCXJkX25vZmZzZXQgPSBmaXRfaW1hZ2VfZ2V0X25vZGUoZml0X2hkciwKKwkJCQkJCWZpdF91bmFtZV9yYW1kaXNrKTsKKwkJCX0KKwkJCWlmIChyZF9ub2Zmc2V0IDwgMCkgeworCQkJCXB1dHMoIkNvdWxkIG5vdCBmaW5kIHN1YmltYWdlIG5vZGVcbiIpOworCQkJCWJvb3RzdGFnZV9lcnJvcihCT09UU1RBR0VfSURfRklUX1JEX1NVQk5PREUpOworCQkJCXJldHVybiAxOworCQkJfQorCisJCQlwcmludGYoIiAgIFRyeWluZyAnJXMnIHJhbWRpc2sgc3ViaW1hZ2VcbiIsCisJCQkJZml0X3VuYW1lX3JhbWRpc2spOworCisJCQlib290c3RhZ2VfbWFyayhCT09UU1RBR0VfSURfRklUX1JEX0NIRUNLKTsKKwkJCWlmICghZml0X2NoZWNrX3JhbWRpc2soZml0X2hkciwgcmRfbm9mZnNldCwgYXJjaCwKKwkJCQkJCWltYWdlcy0+dmVyaWZ5KSkKKwkJCQlyZXR1cm4gMTsKKworCQkJLyogZ2V0IHJhbWRpc2sgaW1hZ2UgZGF0YSBhZGRyZXNzIGFuZCBsZW5ndGggKi8KKwkJCWlmIChmaXRfaW1hZ2VfZ2V0X2RhdGEoZml0X2hkciwgcmRfbm9mZnNldCwgJmRhdGEsCisJCQkJCQkmc2l6ZSkpIHsKKwkJCQlwdXRzKCJDb3VsZCBub3QgZmluZCByYW1kaXNrIHN1YmltYWdlIGRhdGEhXG4iKTsKKwkJCQlib290c3RhZ2VfZXJyb3IoQk9PVFNUQUdFX0lEX0ZJVF9SRF9HRVRfREFUQSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlib290c3RhZ2VfbWFyayhCT09UU1RBR0VfSURfRklUX1JEX0dFVF9EQVRBX09LKTsKKworCQkJcmRfZGF0YSA9ICh1bG9uZylkYXRhOworCQkJcmRfbGVuID0gc2l6ZTsKKworCQkJaWYgKGZpdF9pbWFnZV9nZXRfbG9hZChmaXRfaGRyLCByZF9ub2Zmc2V0LCAmcmRfbG9hZCkpIHsKKwkJCQlwdXRzKCJDYW4ndCBnZXQgcmFtZGlzayBzdWJpbWFnZSBsb2FkICIKKwkJCQkJImFkZHJlc3MhXG4iKTsKKwkJCQlib290c3RhZ2VfZXJyb3IoQk9PVFNUQUdFX0lEX0ZJVF9SRF9MT0FEKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCWJvb3RzdGFnZV9tYXJrKEJPT1RTVEFHRV9JRF9GSVRfUkRfTE9BRCk7CisKKwkJCWltYWdlcy0+Zml0X2hkcl9yZCA9IGZpdF9oZHI7CisJCQlpbWFnZXMtPmZpdF91bmFtZV9yZCA9IGZpdF91bmFtZV9yYW1kaXNrOworCQkJaW1hZ2VzLT5maXRfbm9mZnNldF9yZCA9IHJkX25vZmZzZXQ7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorI2lmZGVmIENPTkZJR19TVVBQT1JUX1JBV19JTklUUkQKKwkJCWlmIChhcmdjID49IDMgJiYgKGVuZCA9IHN0cmNocihhcmd2WzJdLCAnOicpKSkgeworCQkJCXJkX2xlbiA9IHNpbXBsZV9zdHJ0b3VsKCsrZW5kLCBOVUxMLCAxNik7CisJCQkJcmRfZGF0YSA9IHJkX2FkZHI7CisJCQl9IGVsc2UKKyNlbmRpZgorCQkJeworCQkJCXB1dHMoIldyb25nIFJhbWRpc2sgSW1hZ2UgRm9ybWF0XG4iKTsKKwkJCQlyZF9kYXRhID0gcmRfbGVuID0gcmRfbG9hZCA9IDA7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGltYWdlcy0+bGVnYWN5X2hkcl92YWxpZCAmJgorCQkJaW1hZ2VfY2hlY2tfdHlwZSgmaW1hZ2VzLT5sZWdhY3lfaGRyX29zX2NvcHksCisJCQkJCQlJSF9UWVBFX01VTFRJKSkgeworCisJCS8qCisJCSAqIE5vdyBjaGVjayBpZiB3ZSBoYXZlIGEgbGVnYWN5IG11bHQtY29tcG9uZW50IGltYWdlLAorCQkgKiBnZXQgc2Vjb25kIGVudHJ5IGRhdGEgc3RhcnQgYWRkcmVzcyBhbmQgbGVuLgorCQkgKi8KKwkJYm9vdHN0YWdlX21hcmsoQk9PVFNUQUdFX0lEX1JBTURJU0spOworCQlwcmludGYoIiMjIExvYWRpbmcgaW5pdCBSYW1kaXNrIGZyb20gbXVsdGkgY29tcG9uZW50ICIKKwkJCQkiTGVnYWN5IEltYWdlIGF0ICUwOGx4IC4uLlxuIiwKKwkJCQkodWxvbmcpaW1hZ2VzLT5sZWdhY3lfaGRyX29zKTsKKworCQlpbWFnZV9tdWx0aV9nZXRpbWcoaW1hZ2VzLT5sZWdhY3lfaGRyX29zLCAxLCAmcmRfZGF0YSwgJnJkX2xlbik7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogbm8gaW5pdHJkIGltYWdlCisJCSAqLworCQlib290c3RhZ2VfbWFyayhCT09UU1RBR0VfSURfTk9fUkFNRElTSyk7CisJCXJkX2xlbiA9IHJkX2RhdGEgPSAwOworCX0KKworCWlmICghcmRfZGF0YSkgeworCQlkZWJ1ZygiIyMgTm8gaW5pdCBSYW1kaXNrXG4iKTsKKwl9IGVsc2UgeworCQkqcmRfc3RhcnQgPSByZF9kYXRhOworCQkqcmRfZW5kID0gcmRfZGF0YSArIHJkX2xlbjsKKwl9CisJZGVidWcoIiAgIHJhbWRpc2sgc3RhcnQgPSAweCUwOGx4LCByYW1kaXNrIGVuZCA9IDB4JTA4bHhcbiIsCisJCQkqcmRfc3RhcnQsICpyZF9lbmQpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfU1lTX0JPT1RfUkFNRElTS19ISUdICisvKioKKyAqIGJvb3RfcmFtZGlza19oaWdoIC0gcmVsb2NhdGUgaW5pdCByYW1kaXNrCisgKiBAbG1iOiBwb2ludGVyIHRvIGxtYiBoYW5kbGUsIHdpbGwgYmUgdXNlZCBmb3IgbWVtb3J5IG1nbXQKKyAqIEByZF9kYXRhOiByYW1kaXNrIGRhdGEgc3RhcnQgYWRkcmVzcworICogQHJkX2xlbjogcmFtZGlzayBkYXRhIGxlbmd0aAorICogQGluaXRyZF9zdGFydDogcG9pbnRlciB0byBhIHVsb25nIHZhcmlhYmxlLCB3aWxsIGhvbGQgZmluYWwgaW5pdCByYW1kaXNrCisgKiAgICAgIHN0YXJ0IGFkZHJlc3MgKGFmdGVyIHBvc3NpYmxlIHJlbG9jYXRpb24pCisgKiBAaW5pdHJkX2VuZDogcG9pbnRlciB0byBhIHVsb25nIHZhcmlhYmxlLCB3aWxsIGhvbGQgZmluYWwgaW5pdCByYW1kaXNrCisgKiAgICAgIGVuZCBhZGRyZXNzIChhZnRlciBwb3NzaWJsZSByZWxvY2F0aW9uKQorICoKKyAqIGJvb3RfcmFtZGlza19oaWdoKCkgdGFrZXMgYSByZWxvY2F0aW9uIGhpbnQgZnJvbSAiaW5pdHJkX2hpZ2giIGVudmlyb25lbWVudAorICogdmFyaWFibGUgYW5kIGlmIHJlcXVlc3RlZCByYW1kaXNrIGRhdGEgaXMgbW92ZWQgdG8gYSBzcGVjaWZpZWQgbG9jYXRpb24uCisgKgorICogSW5pdHJkX3N0YXJ0IGFuZCBpbml0cmRfZW5kIGFyZSBzZXQgdG8gZmluYWwgKGFmdGVyIHJlbG9jYXRpb24pIHJhbWRpc2sKKyAqIHN0YXJ0L2VuZCBhZGRyZXNzZXMgaWYgcmFtZGlzayBpbWFnZSBzdGFydCBhbmQgbGVuIHdlcmUgcHJvdmlkZWQsCisgKiBvdGhlcndpc2Ugc2V0IGluaXRyZF9zdGFydCBhbmQgaW5pdHJkX2VuZCBzZXQgdG8gemVyb3MuCisgKgorICogcmV0dXJuczoKKyAqICAgICAgMCAtIHN1Y2Nlc3MKKyAqICAgICAtMSAtIGZhaWx1cmUKKyAqLworaW50IGJvb3RfcmFtZGlza19oaWdoKHN0cnVjdCBsbWIgKmxtYiwgdWxvbmcgcmRfZGF0YSwgdWxvbmcgcmRfbGVuLAorCQkgIHVsb25nICppbml0cmRfc3RhcnQsIHVsb25nICppbml0cmRfZW5kKQoreworCWNoYXIJKnM7CisJdWxvbmcJaW5pdHJkX2hpZ2g7CisJaW50CWluaXRyZF9jb3B5X3RvX3JhbSA9IDE7CisKKwlpZiAoKHMgPSBnZXRlbnYoImluaXRyZF9oaWdoIikpICE9IE5VTEwpIHsKKwkJLyogYSB2YWx1ZSBvZiAibm8iIG9yIGEgc2ltaWxhciBzdHJpbmcgd2lsbCBhY3QgbGlrZSAwLAorCQkgKiB0dXJuaW5nIHRoZSAibG9hZCBoaWdoIiBmZWF0dXJlIG9mZi4gVGhpcyBpcyBpbnRlbnRpb25hbC4KKwkJICovCisJCWluaXRyZF9oaWdoID0gc2ltcGxlX3N0cnRvdWwocywgTlVMTCwgMTYpOworCQlpZiAoaW5pdHJkX2hpZ2ggPT0gfjApCisJCQlpbml0cmRfY29weV90b19yYW0gPSAwOworCX0gZWxzZSB7CisJCS8qIG5vdCBzZXQsIG5vIHJlc3RyaWN0aW9ucyB0byBsb2FkIGhpZ2ggKi8KKwkJaW5pdHJkX2hpZ2ggPSB+MDsKKwl9CisKKworI2lmZGVmIENPTkZJR19MT0dCVUZGRVIKKwkvKiBQcmV2ZW50IGluaXRyZCBmcm9tIG92ZXJ3cml0aW5nIGxvZ2J1ZmZlciAqLworCWxtYl9yZXNlcnZlKGxtYiwgbG9nYnVmZmVyX2Jhc2UoKSAtIExPR0JVRkZfT1ZFUkhFQUQsIExPR0JVRkZfUkVTRVJWRSk7CisjZW5kaWYKKworCWRlYnVnKCIjIyBpbml0cmRfaGlnaCA9IDB4JTA4bHgsIGNvcHlfdG9fcmFtID0gJWRcbiIsCisJCQlpbml0cmRfaGlnaCwgaW5pdHJkX2NvcHlfdG9fcmFtKTsKKworCWlmIChyZF9kYXRhKSB7CisJCWlmICghaW5pdHJkX2NvcHlfdG9fcmFtKSB7CS8qIHplcm8tY29weSByYW1kaXNrIHN1cHBvcnQgKi8KKwkJCWRlYnVnKCIgICBpbi1wbGFjZSBpbml0cmRcbiIpOworCQkJKmluaXRyZF9zdGFydCA9IHJkX2RhdGE7CisJCQkqaW5pdHJkX2VuZCA9IHJkX2RhdGEgKyByZF9sZW47CisJCQlsbWJfcmVzZXJ2ZShsbWIsIHJkX2RhdGEsIHJkX2xlbik7CisJCX0gZWxzZSB7CisJCQlpZiAoaW5pdHJkX2hpZ2gpCisJCQkJKmluaXRyZF9zdGFydCA9ICh1bG9uZylsbWJfYWxsb2NfYmFzZShsbWIsCisJCQkJCQlyZF9sZW4sIDB4MTAwMCwgaW5pdHJkX2hpZ2gpOworCQkJZWxzZQorCQkJCSppbml0cmRfc3RhcnQgPSAodWxvbmcpbG1iX2FsbG9jKGxtYiwgcmRfbGVuLAorCQkJCQkJCQkgMHgxMDAwKTsKKworCQkJaWYgKCppbml0cmRfc3RhcnQgPT0gMCkgeworCQkJCXB1dHMoInJhbWRpc2sgLSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJYm9vdHN0YWdlX21hcmsoQk9PVFNUQUdFX0lEX0NPUFlfUkFNRElTSyk7CisKKwkJCSppbml0cmRfZW5kID0gKmluaXRyZF9zdGFydCArIHJkX2xlbjsKKwkJCXByaW50ZigiICAgTG9hZGluZyBSYW1kaXNrIHRvICUwOGx4LCBlbmQgJTA4bHggLi4uICIsCisJCQkJCSppbml0cmRfc3RhcnQsICppbml0cmRfZW5kKTsKKworCQkJbWVtbW92ZV93ZCgodm9pZCAqKSppbml0cmRfc3RhcnQsCisJCQkJCSh2b2lkICopcmRfZGF0YSwgcmRfbGVuLCBDSFVOS1NaKTsKKworI2lmZGVmIENPTkZJR19NUAorCQkJLyoKKwkJCSAqIEVuc3VyZSB0aGUgaW1hZ2UgaXMgZmx1c2hlZCB0byBtZW1vcnkgdG8gaGFuZGxlCisJCQkgKiBBTVAgYm9vdCBzY2VuYXJpb3MgaW4gd2hpY2ggd2UgbWlnaHQgbm90IGJlCisJCQkgKiBIVyBjYWNoZSBjb2hlcmVudAorCQkJICovCisJCQlmbHVzaF9jYWNoZSgodW5zaWduZWQgbG9uZykqaW5pdHJkX3N0YXJ0LCByZF9sZW4pOworI2VuZGlmCisJCQlwdXRzKCJPS1xuIik7CisJCX0KKwl9IGVsc2UgeworCQkqaW5pdHJkX3N0YXJ0ID0gMDsKKwkJKmluaXRyZF9lbmQgPSAwOworCX0KKwlkZWJ1ZygiICAgcmFtZGlzayBsb2FkIHN0YXJ0ID0gMHglMDhseCwgcmFtZGlzayBsb2FkIGVuZCA9IDB4JTA4bHhcbiIsCisJCQkqaW5pdHJkX3N0YXJ0LCAqaW5pdHJkX2VuZCk7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJcmV0dXJuIC0xOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNfQk9PVF9SQU1ESVNLX0hJR0ggKi8KKworI2lmZGVmIENPTkZJR19PRl9MSUJGRFQKK3N0YXRpYyB2b2lkIGZkdF9lcnJvcihjb25zdCBjaGFyICptc2cpCit7CisJcHV0cygiRVJST1I6ICIpOworCXB1dHMobXNnKTsKKwlwdXRzKCIgLSBtdXN0IFJFU0VUIHRoZSBib2FyZCB0byByZWNvdmVyLlxuIik7Cit9CisKK3N0YXRpYyBjb25zdCBpbWFnZV9oZWFkZXJfdCAqaW1hZ2VfZ2V0X2ZkdCh1bG9uZyBmZHRfYWRkcikKK3sKKwljb25zdCBpbWFnZV9oZWFkZXJfdCAqZmR0X2hkciA9IChjb25zdCBpbWFnZV9oZWFkZXJfdCAqKWZkdF9hZGRyOworCisJaW1hZ2VfcHJpbnRfY29udGVudHMoZmR0X2hkcik7CisKKwlwdXRzKCIgICBWZXJpZnlpbmcgQ2hlY2tzdW0gLi4uICIpOworCWlmICghaW1hZ2VfY2hlY2tfaGNyYyhmZHRfaGRyKSkgeworCQlmZHRfZXJyb3IoImZkdCBoZWFkZXIgY2hlY2tzdW0gaW52YWxpZCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWltYWdlX2NoZWNrX2RjcmMoZmR0X2hkcikpIHsKKwkJZmR0X2Vycm9yKCJmZHQgY2hlY2tzdW0gaW52YWxpZCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcHV0cygiT0tcbiIpOworCisJaWYgKCFpbWFnZV9jaGVja190eXBlKGZkdF9oZHIsIElIX1RZUEVfRkxBVERUKSkgeworCQlmZHRfZXJyb3IoInVJbWFnZSBpcyBub3QgYSBmZHQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChpbWFnZV9nZXRfY29tcChmZHRfaGRyKSAhPSBJSF9DT01QX05PTkUpIHsKKwkJZmR0X2Vycm9yKCJ1SW1hZ2UgaXMgY29tcHJlc3NlZCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKGZkdF9jaGVja19oZWFkZXIoKGNoYXIgKilpbWFnZV9nZXRfZGF0YShmZHRfaGRyKSkgIT0gMCkgeworCQlmZHRfZXJyb3IoInVJbWFnZSBkYXRhIGlzIG5vdCBhIGZkdCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGZkdF9oZHI7Cit9CisKKy8qKgorICogZml0X2NoZWNrX2ZkdCAtIHZlcmlmeSBGSVQgZm9ybWF0IEZEVCBzdWJpbWFnZQorICogQGZpdF9oZHI6IHBvaW50ZXIgdG8gdGhlIEZJVCAgaGVhZGVyCisgKiBmZHRfbm9mZnNldDogRkRUIHN1YmltYWdlIG5vZGUgb2Zmc2V0IHdpdGhpbiBGSVQgaW1hZ2UKKyAqIEB2ZXJpZnk6IGRhdGEgQ1JDIHZlcmlmaWNhdGlvbiBmbGFnCisgKgorICogZml0X2NoZWNrX2ZkdCgpIHZlcmlmaWVzIGludGVncml0eSBvZiB0aGUgRkRUIHN1YmltYWdlIGFuZCBmcm9tCisgKiBzcGVjaWZpZWQgRklUIGltYWdlLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMSwgb24gc3VjY2VzcworICogICAgIDAsIG9uIGZhaWx1cmUKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkKK3N0YXRpYyBpbnQgZml0X2NoZWNrX2ZkdChjb25zdCB2b2lkICpmaXQsIGludCBmZHRfbm9mZnNldCwgaW50IHZlcmlmeSkKK3sKKwlmaXRfaW1hZ2VfcHJpbnQoZml0LCBmZHRfbm9mZnNldCwgIiAgICIpOworCisJaWYgKHZlcmlmeSkgeworCQlwdXRzKCIgICBWZXJpZnlpbmcgSGFzaCBJbnRlZ3JpdHkgLi4uICIpOworCQlpZiAoIWZpdF9pbWFnZV9jaGVja19oYXNoZXMoZml0LCBmZHRfbm9mZnNldCkpIHsKKwkJCWZkdF9lcnJvcigiQmFkIERhdGEgSGFzaCIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcHV0cygiT0tcbiIpOworCX0KKworCWlmICghZml0X2ltYWdlX2NoZWNrX3R5cGUoZml0LCBmZHRfbm9mZnNldCwgSUhfVFlQRV9GTEFURFQpKSB7CisJCWZkdF9lcnJvcigiTm90IGEgRkRUIGltYWdlIik7CisJCXJldHVybiAwOworCX0KKworCWlmICghZml0X2ltYWdlX2NoZWNrX2NvbXAoZml0LCBmZHRfbm9mZnNldCwgSUhfQ09NUF9OT05FKSkgeworCQlmZHRfZXJyb3IoIkZEVCBpbWFnZSBpcyBjb21wcmVzc2VkIik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorI2VuZGlmIC8qIENPTkZJR19GSVQgKi8KKworI2lmbmRlZiBDT05GSUdfU1lTX0ZEVF9QQUQKKyNkZWZpbmUgQ09ORklHX1NZU19GRFRfUEFEIDB4MzAwMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpCisvKioKKyAqIGJvb3RfZmR0X2FkZF9tZW1fcnN2X3JlZ2lvbnMgLSBNYXJrIHRoZSBtZW1yZXNlcnZlIHNlY3Rpb25zIGFzIHVudXNhYmxlCisgKiBAbG1iOiBwb2ludGVyIHRvIGxtYiBoYW5kbGUsIHdpbGwgYmUgdXNlZCBmb3IgbWVtb3J5IG1nbXQKKyAqIEBmZHRfYmxvYjogcG9pbnRlciB0byBmZHQgYmxvYiBiYXNlIGFkZHJlc3MKKyAqCisgKiBBZGRzIHRoZSBtZW1yZXNlcnZlIHJlZ2lvbnMgaW4gdGhlIGR0YiB0byB0aGUgbG1iIGJsb2NrLiAgQWRkaW5nIHRoZQorICogbWVtcmVzZXJ2ZSByZWdpb25zIHByZXZlbnRzIHUtYm9vdCBmcm9tIHVzaW5nIHRoZW0gdG8gc3RvcmUgdGhlIGluaXRyZAorICogb3IgdGhlIGZkdCBibG9iLgorICovCit2b2lkIGJvb3RfZmR0X2FkZF9tZW1fcnN2X3JlZ2lvbnMoc3RydWN0IGxtYiAqbG1iLCB2b2lkICpmZHRfYmxvYikKK3sKKwl1aW50NjRfdCBhZGRyLCBzaXplOworCWludCBpLCB0b3RhbDsKKworCWlmIChmZHRfY2hlY2tfaGVhZGVyKGZkdF9ibG9iKSAhPSAwKQorCQlyZXR1cm47CisKKwl0b3RhbCA9IGZkdF9udW1fbWVtX3JzdihmZHRfYmxvYik7CisJZm9yIChpID0gMDsgaSA8IHRvdGFsOyBpKyspIHsKKwkJaWYgKGZkdF9nZXRfbWVtX3JzdihmZHRfYmxvYiwgaSwgJmFkZHIsICZzaXplKSAhPSAwKQorCQkJY29udGludWU7CisJCXByaW50ZigiICAgcmVzZXJ2aW5nIGZkdCBtZW1vcnkgcmVnaW9uOiBhZGRyPSVsbHggc2l6ZT0lbGx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLCAodW5zaWduZWQgbG9uZyBsb25nKXNpemUpOworCQlsbWJfcmVzZXJ2ZShsbWIsIGFkZHIsIHNpemUpOworCX0KK30KKworLyoqCisgKiBib290X3JlbG9jYXRlX2ZkdCAtIHJlbG9jYXRlIGZsYXQgZGV2aWNlIHRyZWUKKyAqIEBsbWI6IHBvaW50ZXIgdG8gbG1iIGhhbmRsZSwgd2lsbCBiZSB1c2VkIGZvciBtZW1vcnkgbWdtdAorICogQG9mX2ZsYXRfdHJlZTogcG9pbnRlciB0byBhIGNoYXIqIHZhcmlhYmxlLCB3aWxsIGhvbGQgZmR0IHN0YXJ0IGFkZHJlc3MKKyAqIEBvZl9zaXplOiBwb2ludGVyIHRvIGEgdWxvbmcgdmFyaWFibGUsIHdpbGwgaG9sZCBmZHQgbGVuZ3RoCisgKgorICogYm9vdF9yZWxvY2F0ZV9mZHQoKSBhbGxvY2F0ZXMgYSByZWdpb24gb2YgbWVtb3J5IHdpdGhpbiB0aGUgYm9vdG1hcCBhbmQKKyAqIHJlbG9jYXRlcyB0aGUgb2ZfZmxhdF90cmVlIGludG8gdGhhdCByZWdpb24sIGV2ZW4gaWYgdGhlIGZkdCBpcyBhbHJlYWR5IGluCisgKiB0aGUgYm9vdG1hcC4gIEl0IGFsc28gZXhwYW5kcyB0aGUgc2l6ZSBvZiB0aGUgZmR0IGJ5IENPTkZJR19TWVNfRkRUX1BBRAorICogYnl0ZXMuCisgKgorICogb2ZfZmxhdF90cmVlIGFuZCBvZl9zaXplIGFyZSBzZXQgdG8gZmluYWwgKGFmdGVyIHJlbG9jYXRpb24pIHZhbHVlcworICoKKyAqIHJldHVybnM6CisgKiAgICAgIDAgLSBzdWNjZXNzCisgKiAgICAgIDEgLSBmYWlsdXJlCisgKi8KK2ludCBib290X3JlbG9jYXRlX2ZkdChzdHJ1Y3QgbG1iICpsbWIsIGNoYXIgKipvZl9mbGF0X3RyZWUsIHVsb25nICpvZl9zaXplKQoreworCXZvaWQJKmZkdF9ibG9iID0gKm9mX2ZsYXRfdHJlZTsKKwl2b2lkCSpvZl9zdGFydCA9IDA7CisJY2hhcgkqZmR0X2hpZ2g7CisJdWxvbmcJb2ZfbGVuID0gMDsKKwlpbnQJZXJyOworCWludAlkaXNhYmxlX3JlbG9jYXRpb24gPSAwOworCisJLyogbm90aGluZyB0byBkbyAqLworCWlmICgqb2Zfc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChmZHRfY2hlY2tfaGVhZGVyKGZkdF9ibG9iKSAhPSAwKSB7CisJCWZkdF9lcnJvcigiaW1hZ2UgaXMgbm90IGEgZmR0Iik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogcG9zaXRpb24gb24gYSA0SyBib3VuZGFyeSBiZWZvcmUgdGhlIGFsbG9jX2N1cnJlbnQgKi8KKwkvKiBQYWQgdGhlIEZEVCBieSBhIHNwZWNpZmllZCBhbW91bnQgKi8KKwlvZl9sZW4gPSAqb2Zfc2l6ZSArIENPTkZJR19TWVNfRkRUX1BBRDsKKworCS8qIElmIGZkdF9oaWdoIGlzIHNldCB1c2UgaXQgdG8gc2VsZWN0IHRoZSByZWxvY2F0aW9uIGFkZHJlc3MgKi8KKwlmZHRfaGlnaCA9IGdldGVudigiZmR0X2hpZ2giKTsKKwlpZiAoZmR0X2hpZ2gpIHsKKwkJdm9pZCAqZGVzaXJlZF9hZGRyID0gKHZvaWQgKilzaW1wbGVfc3RydG91bChmZHRfaGlnaCwgTlVMTCwgMTYpOworCisJCWlmICgoKHVsb25nKSBkZXNpcmVkX2FkZHIpID09IH4wVUwpIHsKKwkJCS8qIEFsbCBvbmVzIG1lYW5zIHVzZSBmZHQgaW4gcGxhY2UgKi8KKwkJCW9mX3N0YXJ0ID0gZmR0X2Jsb2I7CisJCQlsbWJfcmVzZXJ2ZShsbWIsICh1bG9uZylvZl9zdGFydCwgb2ZfbGVuKTsKKwkJCWRpc2FibGVfcmVsb2NhdGlvbiA9IDE7CisJCX0gZWxzZSBpZiAoZGVzaXJlZF9hZGRyKSB7CisJCQlvZl9zdGFydCA9CisJCQkgICAgKHZvaWQgKikodWxvbmcpIGxtYl9hbGxvY19iYXNlKGxtYiwgb2ZfbGVuLCAweDEwMDAsCisJCQkJCQkJICAgKHVsb25nKWRlc2lyZWRfYWRkcik7CisJCQlpZiAob2Zfc3RhcnQgPT0gMCkgeworCQkJCXB1dHMoIkZhaWxlZCB1c2luZyBmZHRfaGlnaCB2YWx1ZSBmb3IgRGV2aWNlIFRyZWUiKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQl9IGVsc2UgeworCQkJb2Zfc3RhcnQgPQorCQkJICAgICh2b2lkICopKHVsb25nKSBsbWJfYWxsb2MobG1iLCBvZl9sZW4sIDB4MTAwMCk7CisJCX0KKwl9IGVsc2UgeworCQlvZl9zdGFydCA9CisJCSAgICAodm9pZCAqKSh1bG9uZykgbG1iX2FsbG9jX2Jhc2UobG1iLCBvZl9sZW4sIDB4MTAwMCwKKwkJCQkJCSAgIGdldGVudl9ib290bV9tYXBzaXplKCkKKwkJCQkJCSAgICsgZ2V0ZW52X2Jvb3RtX2xvdygpKTsKKwl9CisKKwlpZiAob2Zfc3RhcnQgPT0gMCkgeworCQlwdXRzKCJkZXZpY2UgdHJlZSAtIGFsbG9jYXRpb24gZXJyb3JcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChkaXNhYmxlX3JlbG9jYXRpb24pIHsKKwkJLyogV2UgYXNzdW1lIHRoZXJlIGlzIHNwYWNlIGFmdGVyIHRoZSBleGlzdGluZyBmZHQgdG8gdXNlIGZvciBwYWRkaW5nICovCisJCWZkdF9zZXRfdG90YWxzaXplKG9mX3N0YXJ0LCBvZl9sZW4pOworCQlwcmludGYoIiAgIFVzaW5nIERldmljZSBUcmVlIGluIHBsYWNlIGF0ICVwLCBlbmQgJXBcbiIsCisJCSAgICAgICBvZl9zdGFydCwgb2Zfc3RhcnQgKyBvZl9sZW4gLSAxKTsKKwl9IGVsc2UgeworCQlkZWJ1ZygiIyMgZGV2aWNlIHRyZWUgYXQgJXAgLi4uICVwIChsZW49JWxkIFsweCVsWF0pXG4iLAorCQkJZmR0X2Jsb2IsIGZkdF9ibG9iICsgKm9mX3NpemUgLSAxLCBvZl9sZW4sIG9mX2xlbik7CisKKwkJcHJpbnRmKCIgICBMb2FkaW5nIERldmljZSBUcmVlIHRvICVwLCBlbmQgJXAgLi4uICIsCisJCQlvZl9zdGFydCwgb2Zfc3RhcnQgKyBvZl9sZW4gLSAxKTsKKworCQllcnIgPSBmZHRfb3Blbl9pbnRvKGZkdF9ibG9iLCBvZl9zdGFydCwgb2ZfbGVuKTsKKwkJaWYgKGVyciAhPSAwKSB7CisJCQlmZHRfZXJyb3IoImZkdCBtb3ZlIGZhaWxlZCIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlwdXRzKCJPS1xuIik7CisJfQorCisJKm9mX2ZsYXRfdHJlZSA9IG9mX3N0YXJ0OworCSpvZl9zaXplID0gb2ZfbGVuOworCisJc2V0X3dvcmtpbmdfZmR0X2FkZHIoKm9mX2ZsYXRfdHJlZSk7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXJldHVybiAxOworfQorI2VuZGlmIC8qIENPTkZJR19PRl9MSUJGRFQgKi8KKworLyoqCisgKiBib290X2dldF9mZHQgLSBtYWluIGZkdCBoYW5kbGluZyByb3V0aW5lCisgKiBAYXJnYzogY29tbWFuZCBhcmd1bWVudCBjb3VudAorICogQGFyZ3Y6IGNvbW1hbmQgYXJndW1lbnQgbGlzdAorICogQGltYWdlczogcG9pbnRlciB0byB0aGUgYm9vdG0gaW1hZ2VzIHN0cnVjdHVyZQorICogQG9mX2ZsYXRfdHJlZTogcG9pbnRlciB0byBhIGNoYXIqIHZhcmlhYmxlLCB3aWxsIGhvbGQgZmR0IHN0YXJ0IGFkZHJlc3MKKyAqIEBvZl9zaXplOiBwb2ludGVyIHRvIGEgdWxvbmcgdmFyaWFibGUsIHdpbGwgaG9sZCBmZHQgbGVuZ3RoCisgKgorICogYm9vdF9nZXRfZmR0KCkgaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgYSB2YWxpZCBmbGF0IGRldmljZSB0cmVlIGltYWdlLgorICogQ3VyZW50bHkgc3VwcG9ydGVkIGFyZSB0aGUgZm9sbG93aW5nIHJhbWRpc2sgc291cmNlczoKKyAqICAgICAgLSBtdWx0aWNvbXBvbmVudCBrZXJuZWwvcmFtZGlzayBpbWFnZSwKKyAqICAgICAgLSBjb21tYW5kbGluZSBwcm92aWRlZCBhZGRyZXNzIG9mIGRlY2ljYXRlZCByYW1kaXNrIGltYWdlLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMCwgaWYgZmR0IGltYWdlIHdhcyBmb3VuZCBhbmQgdmFsaWQsIG9yIHNraXBwZWQKKyAqICAgICBvZl9mbGF0X3RyZWUgYW5kIG9mX3NpemUgYXJlIHNldCB0byBmZHQgc3RhcnQgYWRkcmVzcyBhbmQgbGVuZ3RoIGlmCisgKiAgICAgZmR0IGltYWdlIGlzIGZvdW5kIGFuZCB2YWxpZAorICoKKyAqICAgICAxLCBpZiBmZHQgaW1hZ2UgaXMgZm91bmQgYnV0IGNvcnJ1cHRlZAorICogICAgIG9mX2ZsYXRfdHJlZSBhbmQgb2Zfc2l6ZSBhcmUgc2V0IHRvIDAgaWYgbm8gZmR0IGV4aXN0cworICovCitpbnQgYm9vdF9nZXRfZmR0KGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSwKKwkJYm9vdG1faGVhZGVyc190ICppbWFnZXMsIGNoYXIgKipvZl9mbGF0X3RyZWUsIHVsb25nICpvZl9zaXplKQoreworCWNvbnN0IGltYWdlX2hlYWRlcl90ICpmZHRfaGRyOworCXVsb25nCQlmZHRfYWRkcjsKKwljaGFyCQkqZmR0X2Jsb2IgPSBOVUxMOworCXVsb25nCQlpbWFnZV9zdGFydCwgaW1hZ2VfZGF0YSwgaW1hZ2VfZW5kOworCXVsb25nCQlsb2FkX3N0YXJ0LCBsb2FkX2VuZDsKKyNpZiBkZWZpbmVkKENPTkZJR19GSVQpCisJdm9pZAkJKmZpdF9oZHI7CisJY29uc3QgY2hhcgkqZml0X3VuYW1lX2NvbmZpZyA9IE5VTEw7CisJY29uc3QgY2hhcgkqZml0X3VuYW1lX2ZkdCA9IE5VTEw7CisJdWxvbmcJCWRlZmF1bHRfYWRkcjsKKwlpbnQJCWNmZ19ub2Zmc2V0OworCWludAkJZmR0X25vZmZzZXQ7CisJY29uc3Qgdm9pZAkqZGF0YTsKKwlzaXplX3QJCXNpemU7CisjZW5kaWYKKworCSpvZl9mbGF0X3RyZWUgPSBOVUxMOworCSpvZl9zaXplID0gMDsKKworCWlmIChhcmdjID4gMyB8fCBnZW5pbWdfaGFzX2NvbmZpZyhpbWFnZXMpKSB7CisjaWYgZGVmaW5lZChDT05GSUdfRklUKQorCQlpZiAoYXJnYyA+IDMpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgRkRUIGJsb2IgY29tZXMgZnJvbSB0aGUgRklUIGltYWdlIGFuZCB0aGUKKwkJCSAqIEZJVCBpbWFnZSBhZGRyZXNzIGlzIG9taXR0ZWQgaW4gdGhlIGNvbW1hbmQgbGluZQorCQkJICogYXJndW1lbnQsIHRyeSB0byB1c2UgcmFtZGlzayBvciBvcyBGSVQgaW1hZ2UKKwkJCSAqIGFkZHJlc3Mgb3IgZGVmYXVsdCBsb2FkIGFkZHJlc3MuCisJCQkgKi8KKwkJCWlmIChpbWFnZXMtPmZpdF91bmFtZV9yZCkKKwkJCQlkZWZhdWx0X2FkZHIgPSAodWxvbmcpaW1hZ2VzLT5maXRfaGRyX3JkOworCQkJZWxzZSBpZiAoaW1hZ2VzLT5maXRfdW5hbWVfb3MpCisJCQkJZGVmYXVsdF9hZGRyID0gKHVsb25nKWltYWdlcy0+Zml0X2hkcl9vczsKKwkJCWVsc2UKKwkJCQlkZWZhdWx0X2FkZHIgPSBsb2FkX2FkZHI7CisKKwkJCWlmIChmaXRfcGFyc2VfY29uZihhcmd2WzNdLCBkZWZhdWx0X2FkZHIsCisJCQkJCQkmZmR0X2FkZHIsICZmaXRfdW5hbWVfY29uZmlnKSkgeworCQkJCWRlYnVnKCIqICBmZHQ6IGNvbmZpZyAnJXMnIGZyb20gaW1hZ2UgYXQgIgorCQkJCQkJIjB4JTA4bHhcbiIsCisJCQkJCQlmaXRfdW5hbWVfY29uZmlnLCBmZHRfYWRkcik7CisJCQl9IGVsc2UgaWYgKGZpdF9wYXJzZV9zdWJpbWFnZShhcmd2WzNdLCBkZWZhdWx0X2FkZHIsCisJCQkJCQkmZmR0X2FkZHIsICZmaXRfdW5hbWVfZmR0KSkgeworCQkJCWRlYnVnKCIqICBmZHQ6IHN1YmltYWdlICclcycgZnJvbSBpbWFnZSBhdCAiCisJCQkJCQkiMHglMDhseFxuIiwKKwkJCQkJCWZpdF91bmFtZV9mZHQsIGZkdF9hZGRyKTsKKwkJCX0gZWxzZQorI2VuZGlmCisJCQl7CisJCQkJZmR0X2FkZHIgPSBzaW1wbGVfc3RydG91bChhcmd2WzNdLCBOVUxMLCAxNik7CisJCQkJZGVidWcoIiogIGZkdDogY21kbGluZSBpbWFnZSBhZGRyZXNzID0gIgorCQkJCQkJIjB4JTA4bHhcbiIsCisJCQkJCQlmZHRfYWRkcik7CisJCQl9CisjaWYgZGVmaW5lZChDT05GSUdfRklUKQorCQl9IGVsc2UgeworCQkJLyogdXNlIEZJVCBjb25maWd1cmF0aW9uIHByb3ZpZGVkIGluIGZpcnN0IGJvb3RtCisJCQkgKiBjb21tYW5kIGFyZ3VtZW50CisJCQkgKi8KKwkJCWZkdF9hZGRyID0gKHVsb25nKWltYWdlcy0+Zml0X2hkcl9vczsKKwkJCWZpdF91bmFtZV9jb25maWcgPSBpbWFnZXMtPmZpdF91bmFtZV9jZmc7CisJCQlkZWJ1ZygiKiAgZmR0OiB1c2luZyBjb25maWcgJyVzJyBmcm9tIGltYWdlICIKKwkJCQkJImF0IDB4JTA4bHhcbiIsCisJCQkJCWZpdF91bmFtZV9jb25maWcsIGZkdF9hZGRyKTsKKworCQkJLyoKKwkJCSAqIENoZWNrIHdoZXRoZXIgY29uZmlndXJhdGlvbiBoYXMgRkRUIGJsb2IgZGVmaW5lZCwKKwkJCSAqIGlmIG5vdCBxdWl0IHNpbGVudGx5LgorCQkJICovCisJCQlmaXRfaGRyID0gKHZvaWQgKilmZHRfYWRkcjsKKwkJCWNmZ19ub2Zmc2V0ID0gZml0X2NvbmZfZ2V0X25vZGUoZml0X2hkciwKKwkJCQkJZml0X3VuYW1lX2NvbmZpZyk7CisJCQlpZiAoY2ZnX25vZmZzZXQgPCAwKSB7CisJCQkJZGVidWcoIiogIGZkdDogbm8gc3VjaCBjb25maWdcbiIpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlmZHRfbm9mZnNldCA9IGZpdF9jb25mX2dldF9mZHRfbm9kZShmaXRfaGRyLAorCQkJCQljZmdfbm9mZnNldCk7CisJCQlpZiAoZmR0X25vZmZzZXQgPCAwKSB7CisJCQkJZGVidWcoIiogIGZkdDogbm8gZmR0IGluIGNvbmZpZ1xuIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKyNlbmRpZgorCisJCWRlYnVnKCIjIyBDaGVja2luZyBmb3IgJ0ZEVCcvJ0ZEVCBJbWFnZScgYXQgJTA4bHhcbiIsCisJCQkJZmR0X2FkZHIpOworCisJCS8qIGNvcHkgZnJvbSBkYXRhZmxhc2ggaWYgbmVlZGVkICovCisJCWZkdF9hZGRyID0gZ2VuaW1nX2dldF9pbWFnZShmZHRfYWRkcik7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gRkRUIGltYWdlIGF0IHRoZQorCQkgKiBhZGRyZXNzIHByb3ZpZGVkIGluIHRoZSBzZWNvbmQgYm9vdG0gYXJndW1lbnQKKwkJICogY2hlY2sgaW1hZ2UgdHlwZSwgZm9yIEZJVCBpbWFnZXMgZ2V0IGEgRklUIG5vZGUuCisJCSAqLworCQlzd2l0Y2ggKGdlbmltZ19nZXRfZm9ybWF0KCh2b2lkICopZmR0X2FkZHIpKSB7CisJCWNhc2UgSU1BR0VfRk9STUFUX0xFR0FDWToKKwkJCS8qIHZlcmlmeSBmZHRfYWRkciBwb2ludHMgdG8gYSB2YWxpZCBpbWFnZSBoZWFkZXIgKi8KKwkJCXByaW50ZigiIyMgRmxhdHRlbmVkIERldmljZSBUcmVlIGZyb20gTGVnYWN5IEltYWdlICIKKwkJCQkJImF0ICUwOGx4XG4iLAorCQkJCQlmZHRfYWRkcik7CisJCQlmZHRfaGRyID0gaW1hZ2VfZ2V0X2ZkdChmZHRfYWRkcik7CisJCQlpZiAoIWZkdF9oZHIpCisJCQkJZ290byBlcnJvcjsKKworCQkJLyoKKwkJCSAqIG1vdmUgaW1hZ2UgZGF0YSB0byB0aGUgbG9hZCBhZGRyZXNzLAorCQkJICogbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBpbml0aWFsIGltYWdlCisJCQkgKi8KKwkJCWltYWdlX3N0YXJ0ID0gKHVsb25nKWZkdF9oZHI7CisJCQlpbWFnZV9kYXRhID0gKHVsb25nKWltYWdlX2dldF9kYXRhKGZkdF9oZHIpOworCQkJaW1hZ2VfZW5kID0gaW1hZ2VfZ2V0X2ltYWdlX2VuZChmZHRfaGRyKTsKKworCQkJbG9hZF9zdGFydCA9IGltYWdlX2dldF9sb2FkKGZkdF9oZHIpOworCQkJbG9hZF9lbmQgPSBsb2FkX3N0YXJ0ICsgaW1hZ2VfZ2V0X2RhdGFfc2l6ZShmZHRfaGRyKTsKKworCQkJaWYgKGxvYWRfc3RhcnQgPT0gaW1hZ2Vfc3RhcnQgfHwKKwkJCSAgICBsb2FkX3N0YXJ0ID09IGltYWdlX2RhdGEpIHsKKwkJCQlmZHRfYmxvYiA9IChjaGFyICopaW1hZ2VfZGF0YTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKChsb2FkX3N0YXJ0IDwgaW1hZ2VfZW5kKSAmJiAobG9hZF9lbmQgPiBpbWFnZV9zdGFydCkpIHsKKwkJCQlmZHRfZXJyb3IoImZkdCBvdmVyd3JpdHRlbiIpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisKKwkJCWRlYnVnKCIgICBMb2FkaW5nIEZEVCBmcm9tIDB4JTA4bHggdG8gMHglMDhseFxuIiwKKwkJCQkJaW1hZ2VfZGF0YSwgbG9hZF9zdGFydCk7CisKKwkJCW1lbW1vdmUoKHZvaWQgKilsb2FkX3N0YXJ0LAorCQkJCQkodm9pZCAqKWltYWdlX2RhdGEsCisJCQkJCWltYWdlX2dldF9kYXRhX3NpemUoZmR0X2hkcikpOworCisJCQlmZHRfYmxvYiA9IChjaGFyICopbG9hZF9zdGFydDsKKwkJCWJyZWFrOworCQljYXNlIElNQUdFX0ZPUk1BVF9GSVQ6CisJCQkvKgorCQkJICogVGhpcyBjYXNlIHdpbGwgY2F0Y2ggYm90aDogbmV3IHVJbWFnZSBmb3JtYXQKKwkJCSAqIChsaWJmZHQgYmFzZWQpIGFuZCByYXcgRkRUIGJsb2IgKGFsc28gbGliZmR0CisJCQkgKiBiYXNlZCkuCisJCQkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19GSVQpCisJCQkvKiBjaGVjayBGRFQgYmxvYiB2cyBGSVQgYmxvYiAqLworCQkJaWYgKGZpdF9jaGVja19mb3JtYXQoKGNvbnN0IHZvaWQgKilmZHRfYWRkcikpIHsKKwkJCQkvKgorCQkJCSAqIEZJVCBpbWFnZQorCQkJCSAqLworCQkJCWZpdF9oZHIgPSAodm9pZCAqKWZkdF9hZGRyOworCQkJCXByaW50ZigiIyMgRmxhdHRlbmVkIERldmljZSBUcmVlIGZyb20gRklUICIKKwkJCQkJCSJJbWFnZSBhdCAlMDhseFxuIiwKKwkJCQkJCWZkdF9hZGRyKTsKKworCQkJCWlmICghZml0X3VuYW1lX2ZkdCkgeworCQkJCQkvKgorCQkJCQkgKiBubyBGRFQgYmxvYiBpbWFnZSBub2RlIHVuaXQgbmFtZSwKKwkJCQkJICogdHJ5IHRvIGdldCBjb25maWcgbm9kZSBmaXJzdC4gSWYKKwkJCQkJICogY29uZmlnIHVuaXQgbm9kZSBuYW1lIGlzIE5VTEwKKwkJCQkJICogZml0X2NvbmZfZ2V0X25vZGUoKSB3aWxsIHRyeSB0bworCQkJCQkgKiBmaW5kIGRlZmF1bHQgY29uZmlnIG5vZGUKKwkJCQkJICovCisJCQkJCWNmZ19ub2Zmc2V0ID0gZml0X2NvbmZfZ2V0X25vZGUoZml0X2hkciwKKwkJCQkJCQlmaXRfdW5hbWVfY29uZmlnKTsKKworCQkJCQlpZiAoY2ZnX25vZmZzZXQgPCAwKSB7CisJCQkJCQlmZHRfZXJyb3IoIkNvdWxkIG5vdCBmaW5kICIKKwkJCQkJCQkgICAgImNvbmZpZ3VyYXRpb24gIgorCQkJCQkJCSAgICAibm9kZVxuIik7CisJCQkJCQlnb3RvIGVycm9yOworCQkJCQl9CisKKwkJCQkJZml0X3VuYW1lX2NvbmZpZyA9IGZkdF9nZXRfbmFtZShmaXRfaGRyLAorCQkJCQkJCWNmZ19ub2Zmc2V0LCBOVUxMKTsKKwkJCQkJcHJpbnRmKCIgICBVc2luZyAnJXMnIGNvbmZpZ3VyYXRpb25cbiIsCisJCQkJCQkJZml0X3VuYW1lX2NvbmZpZyk7CisKKwkJCQkJZmR0X25vZmZzZXQgPSBmaXRfY29uZl9nZXRfZmR0X25vZGUoCisJCQkJCQkJZml0X2hkciwKKwkJCQkJCQljZmdfbm9mZnNldCk7CisJCQkJCWZpdF91bmFtZV9mZHQgPSBmaXRfZ2V0X25hbWUoZml0X2hkciwKKwkJCQkJCQlmZHRfbm9mZnNldCwgTlVMTCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogZ2V0IEZEVCBjb21wb25lbnQgaW1hZ2Ugbm9kZSBvZmZzZXQgKi8KKwkJCQkJZmR0X25vZmZzZXQgPSBmaXRfaW1hZ2VfZ2V0X25vZGUoCisJCQkJCQkJCWZpdF9oZHIsCisJCQkJCQkJCWZpdF91bmFtZV9mZHQpOworCQkJCX0KKwkJCQlpZiAoZmR0X25vZmZzZXQgPCAwKSB7CisJCQkJCWZkdF9lcnJvcigiQ291bGQgbm90IGZpbmQgc3ViaW1hZ2UgIgorCQkJCQkJCSJub2RlXG4iKTsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisKKwkJCQlwcmludGYoIiAgIFRyeWluZyAnJXMnIEZEVCBibG9iIHN1YmltYWdlXG4iLAorCQkJCQkJZml0X3VuYW1lX2ZkdCk7CisKKwkJCQlpZiAoIWZpdF9jaGVja19mZHQoZml0X2hkciwgZmR0X25vZmZzZXQsCisJCQkJCQkJaW1hZ2VzLT52ZXJpZnkpKQorCQkJCQlnb3RvIGVycm9yOworCisJCQkJLyogZ2V0IHJhbWRpc2sgaW1hZ2UgZGF0YSBhZGRyZXNzIGFuZCBsZW5ndGggKi8KKwkJCQlpZiAoZml0X2ltYWdlX2dldF9kYXRhKGZpdF9oZHIsIGZkdF9ub2Zmc2V0LAorCQkJCQkJCSZkYXRhLCAmc2l6ZSkpIHsKKwkJCQkJZmR0X2Vycm9yKCJDb3VsZCBub3QgZmluZCBGRFQgIgorCQkJCQkJCSJzdWJpbWFnZSBkYXRhIik7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCisJCQkJLyogdmVyaWZ0IHRoYXQgaW1hZ2UgZGF0YSBpcyBhIHByb3BlciBGRFQgYmxvYiAqLworCQkJCWlmIChmZHRfY2hlY2tfaGVhZGVyKChjaGFyICopZGF0YSkgIT0gMCkgeworCQkJCQlmZHRfZXJyb3IoIlN1YmltYWdlIGRhdGEgaXMgbm90IGEgRlREIik7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBtb3ZlIGltYWdlIGRhdGEgdG8gdGhlIGxvYWQgYWRkcmVzcywKKwkJCQkgKiBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIGluaXRpYWwgaW1hZ2UKKwkJCQkgKi8KKwkJCQlpbWFnZV9zdGFydCA9ICh1bG9uZylmaXRfaGRyOworCQkJCWltYWdlX2VuZCA9IGZpdF9nZXRfZW5kKGZpdF9oZHIpOworCisJCQkJaWYgKGZpdF9pbWFnZV9nZXRfbG9hZChmaXRfaGRyLCBmZHRfbm9mZnNldCwKKwkJCQkJCQkmbG9hZF9zdGFydCkgPT0gMCkgeworCQkJCQlsb2FkX2VuZCA9IGxvYWRfc3RhcnQgKyBzaXplOworCisJCQkJCWlmICgobG9hZF9zdGFydCA8IGltYWdlX2VuZCkgJiYKKwkJCQkJCQkobG9hZF9lbmQgPiBpbWFnZV9zdGFydCkpIHsKKwkJCQkJCWZkdF9lcnJvcigiRkRUIG92ZXJ3cml0dGVuIik7CisJCQkJCQlnb3RvIGVycm9yOworCQkJCQl9CisKKwkJCQkJcHJpbnRmKCIgICBMb2FkaW5nIEZEVCBmcm9tIDB4JTA4bHggIgorCQkJCQkJCSJ0byAweCUwOGx4XG4iLAorCQkJCQkJCSh1bG9uZylkYXRhLAorCQkJCQkJCWxvYWRfc3RhcnQpOworCisJCQkJCW1lbW1vdmUoKHZvaWQgKilsb2FkX3N0YXJ0LAorCQkJCQkJCSh2b2lkICopZGF0YSwgc2l6ZSk7CisKKwkJCQkJZmR0X2Jsb2IgPSAoY2hhciAqKWxvYWRfc3RhcnQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJZmR0X2Jsb2IgPSAoY2hhciAqKWRhdGE7CisJCQkJfQorCisJCQkJaW1hZ2VzLT5maXRfaGRyX2ZkdCA9IGZpdF9oZHI7CisJCQkJaW1hZ2VzLT5maXRfdW5hbWVfZmR0ID0gZml0X3VuYW1lX2ZkdDsKKwkJCQlpbWFnZXMtPmZpdF9ub2Zmc2V0X2ZkdCA9IGZkdF9ub2Zmc2V0OworCQkJCWJyZWFrOworCQkJfSBlbHNlCisjZW5kaWYKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEZEVCBibG9iCisJCQkJICovCisJCQkJZmR0X2Jsb2IgPSAoY2hhciAqKWZkdF9hZGRyOworCQkJCWRlYnVnKCIqICBmZHQ6IHJhdyBGRFQgYmxvYlxuIik7CisJCQkJcHJpbnRmKCIjIyBGbGF0dGVuZWQgRGV2aWNlIFRyZWUgYmxvYiBhdCAiCisJCQkJCSIlMDhseFxuIiwgKGxvbmcpZmR0X2Jsb2IpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwdXRzKCJFUlJPUjogRGlkIG5vdCBmaW5kIGEgY21kbGluZSBGbGF0dGVuZWQgRGV2aWNlICIKKwkJCQkiVHJlZVxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJcHJpbnRmKCIgICBCb290aW5nIHVzaW5nIHRoZSBmZHQgYmxvYiBhdCAweCVwXG4iLCBmZHRfYmxvYik7CisKKwl9IGVsc2UgaWYgKGltYWdlcy0+bGVnYWN5X2hkcl92YWxpZCAmJgorCQkJaW1hZ2VfY2hlY2tfdHlwZSgmaW1hZ2VzLT5sZWdhY3lfaGRyX29zX2NvcHksCisJCQkJCQlJSF9UWVBFX01VTFRJKSkgeworCisJCXVsb25nIGZkdF9kYXRhLCBmZHRfbGVuOworCisJCS8qCisJCSAqIE5vdyBjaGVjayBpZiB3ZSBoYXZlIGEgbGVnYWN5IG11bHRpLWNvbXBvbmVudCBpbWFnZSwKKwkJICogZ2V0IHNlY29uZCBlbnRyeSBkYXRhIHN0YXJ0IGFkZHJlc3MgYW5kIGxlbi4KKwkJICovCisJCXByaW50ZigiIyMgRmxhdHRlbmVkIERldmljZSBUcmVlIGZyb20gbXVsdGkgIgorCQkJImNvbXBvbmVudCBJbWFnZSBhdCAlMDhsWFxuIiwKKwkJCSh1bG9uZylpbWFnZXMtPmxlZ2FjeV9oZHJfb3MpOworCisJCWltYWdlX211bHRpX2dldGltZyhpbWFnZXMtPmxlZ2FjeV9oZHJfb3MsIDIsICZmZHRfZGF0YSwKKwkJCQkJJmZkdF9sZW4pOworCQlpZiAoZmR0X2xlbikgeworCisJCQlmZHRfYmxvYiA9IChjaGFyICopZmR0X2RhdGE7CisJCQlwcmludGYoIiAgIEJvb3RpbmcgdXNpbmcgdGhlIGZkdCBhdCAweCVwXG4iLCBmZHRfYmxvYik7CisKKwkJCWlmIChmZHRfY2hlY2tfaGVhZGVyKGZkdF9ibG9iKSAhPSAwKSB7CisJCQkJZmR0X2Vycm9yKCJpbWFnZSBpcyBub3QgYSBmZHQiKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCisJCQlpZiAoZmR0X3RvdGFsc2l6ZShmZHRfYmxvYikgIT0gZmR0X2xlbikgeworCQkJCWZkdF9lcnJvcigiZmR0IHNpemUgIT0gaW1hZ2Ugc2l6ZSIpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZWJ1ZygiIyMgTm8gRmxhdHRlbmVkIERldmljZSBUcmVlXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJZGVidWcoIiMjIE5vIEZsYXR0ZW5lZCBEZXZpY2UgVHJlZVxuIik7CisJCXJldHVybiAwOworCX0KKworCSpvZl9mbGF0X3RyZWUgPSBmZHRfYmxvYjsKKwkqb2Zfc2l6ZSA9IGZkdF90b3RhbHNpemUoZmR0X2Jsb2IpOworCWRlYnVnKCIgICBvZl9mbGF0X3RyZWUgYXQgMHglMDhseCBzaXplIDB4JTA4bHhcbiIsCisJCQkodWxvbmcpKm9mX2ZsYXRfdHJlZSwgKm9mX3NpemUpOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCSpvZl9mbGF0X3RyZWUgPSAwOworCSpvZl9zaXplID0gMDsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBDT05GSUdfT0ZfTElCRkRUICovCisKKyNpZmRlZiBDT05GSUdfU1lTX0JPT1RfR0VUX0NNRExJTkUKKy8qKgorICogYm9vdF9nZXRfY21kbGluZSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGtlcm5lbCBjbWRsaW5lCisgKiBAbG1iOiBwb2ludGVyIHRvIGxtYiBoYW5kbGUsIHdpbGwgYmUgdXNlZCBmb3IgbWVtb3J5IG1nbXQKKyAqIEBjbWRfc3RhcnQ6IHBvaW50ZXIgdG8gYSB1bG9uZyB2YXJpYWJsZSwgd2lsbCBob2xkIGNtZGxpbmUgc3RhcnQKKyAqIEBjbWRfZW5kOiBwb2ludGVyIHRvIGEgdWxvbmcgdmFyaWFibGUsIHdpbGwgaG9sZCBjbWRsaW5lIGVuZAorICoKKyAqIGJvb3RfZ2V0X2NtZGxpbmUoKSBhbGxvY2F0ZXMgc3BhY2UgZm9yIGtlcm5lbCBjb21tYW5kIGxpbmUgYmVsb3cKKyAqIEJPT1RNQVBTWiArIGdldGVudl9ib290bV9sb3coKSBhZGRyZXNzLiBJZiAiYm9vdGFyZ3MiIFUtYm9vdCBlbnZpcm9uZW1udAorICogdmFyaWFibGUgaXMgcHJlc2VudCBpdHMgY29udGVudHMgaXMgY29waWVkIHRvIGFsbG9jYXRlZCBrZXJuZWwKKyAqIGNvbW1hbmQgbGluZS4KKyAqCisgKiByZXR1cm5zOgorICogICAgICAwIC0gc3VjY2VzcworICogICAgIC0xIC0gZmFpbHVyZQorICovCitpbnQgYm9vdF9nZXRfY21kbGluZShzdHJ1Y3QgbG1iICpsbWIsIHVsb25nICpjbWRfc3RhcnQsIHVsb25nICpjbWRfZW5kKQoreworCWNoYXIgKmNtZGxpbmU7CisJY2hhciAqczsKKworCWNtZGxpbmUgPSAoY2hhciAqKSh1bG9uZylsbWJfYWxsb2NfYmFzZShsbWIsIENPTkZJR19TWVNfQkFSR1NJWkUsIDB4ZiwKKwkJCQlnZXRlbnZfYm9vdG1fbWFwc2l6ZSgpICsgZ2V0ZW52X2Jvb3RtX2xvdygpKTsKKworCWlmIChjbWRsaW5lID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCWlmICgocyA9IGdldGVudigiYm9vdGFyZ3MiKSkgPT0gTlVMTCkKKwkJcyA9ICIiOworCisJc3RyY3B5KGNtZGxpbmUsIHMpOworCisJKmNtZF9zdGFydCA9ICh1bG9uZykgJiBjbWRsaW5lWzBdOworCSpjbWRfZW5kID0gKmNtZF9zdGFydCArIHN0cmxlbihjbWRsaW5lKTsKKworCWRlYnVnKCIjIyBjbWRsaW5lIGF0IDB4JTA4bHggLi4uIDB4JTA4bHhcbiIsICpjbWRfc3RhcnQsICpjbWRfZW5kKTsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNfQk9PVF9HRVRfQ01ETElORSAqLworCisjaWZkZWYgQ09ORklHX1NZU19CT09UX0dFVF9LQkQKKy8qKgorICogYm9vdF9nZXRfa2JkIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUga2VybmVsIGNvcHkgb2YgYm9hcmQgaW5mbworICogQGxtYjogcG9pbnRlciB0byBsbWIgaGFuZGxlLCB3aWxsIGJlIHVzZWQgZm9yIG1lbW9yeSBtZ210CisgKiBAa2JkOiBkb3VibGUgcG9pbnRlciB0byBib2FyZCBpbmZvIGRhdGEKKyAqCisgKiBib290X2dldF9rYmQoKSBhbGxvY2F0ZXMgc3BhY2UgZm9yIGtlcm5lbCBjb3B5IG9mIGJvYXJkIGluZm8gZGF0YSBiZWxvdworICogQk9PVE1BUFNaICsgZ2V0ZW52X2Jvb3RtX2xvdygpIGFkZHJlc3MgYW5kIGtlcm5lbCBib2FyZCBpbmZvIGlzIGluaXRpYWxpemVkCisgKiB3aXRoIHRoZSBjdXJyZW50IHUtYm9vdCBib2FyZCBpbmZvIGRhdGEuCisgKgorICogcmV0dXJuczoKKyAqICAgICAgMCAtIHN1Y2Nlc3MKKyAqICAgICAtMSAtIGZhaWx1cmUKKyAqLworaW50IGJvb3RfZ2V0X2tiZChzdHJ1Y3QgbG1iICpsbWIsIGJkX3QgKiprYmQpCit7CisJKmtiZCA9IChiZF90ICopKHVsb25nKWxtYl9hbGxvY19iYXNlKGxtYiwgc2l6ZW9mKGJkX3QpLCAweGYsCisJCQkJZ2V0ZW52X2Jvb3RtX21hcHNpemUoKSArIGdldGVudl9ib290bV9sb3coKSk7CisJaWYgKCprYmQgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJKiprYmQgPSAqKGdkLT5iZCk7CisKKwlkZWJ1ZygiIyMga2VybmVsIGJvYXJkIGluZm8gYXQgMHglMDhseFxuIiwgKHVsb25nKSprYmQpOworCisjaWYgZGVmaW5lZChERUJVRykgJiYgZGVmaW5lZChDT05GSUdfQ01EX0JESSkKKwlkb19iZGluZm8oTlVMTCwgMCwgMCwgTlVMTCk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNfQk9PVF9HRVRfS0JEICovCisjZW5kaWYgLyogIVVTRV9IT1NUQ0MgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0ZJVCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE5ldyB1SW1hZ2UgZm9ybWF0IHJvdXRpbmVzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFVTRV9IT1NUQ0MKK3N0YXRpYyBpbnQgZml0X3BhcnNlX3NwZWMoY29uc3QgY2hhciAqc3BlYywgY2hhciBzZXBjLCB1bG9uZyBhZGRyX2N1cnIsCisJCXVsb25nICphZGRyLCBjb25zdCBjaGFyICoqbmFtZSkKK3sKKwljb25zdCBjaGFyICpzZXA7CisKKwkqYWRkciA9IGFkZHJfY3VycjsKKwkqbmFtZSA9IE5VTEw7CisKKwlzZXAgPSBzdHJjaHIoc3BlYywgc2VwYyk7CisJaWYgKHNlcCkgeworCQlpZiAoc2VwIC0gc3BlYyA+IDApCisJCQkqYWRkciA9IHNpbXBsZV9zdHJ0b3VsKHNwZWMsIE5VTEwsIDE2KTsKKworCQkqbmFtZSA9IHNlcCArIDE7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpdF9wYXJzZV9jb25mIC0gcGFyc2UgRklUIGNvbmZpZ3VyYXRpb24gc3BlYworICogQHNwZWM6IGlucHV0IHN0cmluZywgY29udGFpbmluZyBjb25maWd1cmF0aW9uIHNwZWMKKyAqIEBhZGRfY3VycjogY3VycmVudCBpbWFnZSBhZGRyZXNzICh0byBiZSB1c2VkIGFzIGEgcG9zc2libGUgZGVmYXVsdCkKKyAqIEBhZGRyOiBwb2ludGVyIHRvIGEgdWxvbmcgdmFyaWFibGUsIHdpbGwgaG9sZCBGSVQgaW1hZ2UgYWRkcmVzcyBvZiBhIGdpdmVuCisgKiBjb25maWd1cmF0aW9uCisgKiBAY29uZl9uYW1lIGRvdWJsZSBwb2ludGVyIHRvIGEgY2hhciwgd2lsbCBob2xkIHBvaW50ZXIgdG8gYSBjb25maWd1cmF0aW9uCisgKiB1bml0IG5hbWUKKyAqCisgKiBmaXRfcGFyc2VfY29uZigpIGV4cGVjdHMgY29uZmlndXJhdGlvbiBzcGVjIGluIHRoZSBmb3Igb2YgWzxhZGRyPl0jPGNvbmY+LAorICogd2hlcmUgPGFkZHI+IGlzIGEgRklUIGltYWdlIGFkZHJlc3MgdGhhdCBjb250YWlucyBjb25maWd1cmF0aW9uCisgKiB3aXRoIGEgPGNvbmY+IHVuaXQgbmFtZS4KKyAqCisgKiBBZGRyZXNzIHBhcnQgaXMgb3B0aW9uYWwsIGFuZCBpZiBvbWl0dGVkIGRlZmF1bHQgYWRkX2N1cnIgd2lsbAorICogYmUgdXNlZCBpbnN0ZWFkLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMSBpZiBzcGVjIGlzIGEgdmFsaWQgY29uZmlndXJhdGlvbiBzdHJpbmcsCisgKiAgICAgYWRkciBhbmQgY29uZl9uYW1lIGFyZSBzZXQgYWNjb3JkaW5nbHkKKyAqICAgICAwIG90aGVyd2lzZQorICovCitpbnQgZml0X3BhcnNlX2NvbmYoY29uc3QgY2hhciAqc3BlYywgdWxvbmcgYWRkcl9jdXJyLAorCQl1bG9uZyAqYWRkciwgY29uc3QgY2hhciAqKmNvbmZfbmFtZSkKK3sKKwlyZXR1cm4gZml0X3BhcnNlX3NwZWMoc3BlYywgJyMnLCBhZGRyX2N1cnIsIGFkZHIsIGNvbmZfbmFtZSk7Cit9CisKKy8qKgorICogZml0X3BhcnNlX3N1YmltYWdlIC0gcGFyc2UgRklUIHN1YmltYWdlIHNwZWMKKyAqIEBzcGVjOiBpbnB1dCBzdHJpbmcsIGNvbnRhaW5pbmcgc3ViaW1hZ2Ugc3BlYworICogQGFkZF9jdXJyOiBjdXJyZW50IGltYWdlIGFkZHJlc3MgKHRvIGJlIHVzZWQgYXMgYSBwb3NzaWJsZSBkZWZhdWx0KQorICogQGFkZHI6IHBvaW50ZXIgdG8gYSB1bG9uZyB2YXJpYWJsZSwgd2lsbCBob2xkIEZJVCBpbWFnZSBhZGRyZXNzIG9mIGEgZ2l2ZW4KKyAqIHN1YmltYWdlCisgKiBAaW1hZ2VfbmFtZTogZG91YmxlIHBvaW50ZXIgdG8gYSBjaGFyLCB3aWxsIGhvbGQgcG9pbnRlciB0byBhIHN1YmltYWdlIG5hbWUKKyAqCisgKiBmaXRfcGFyc2Vfc3ViaW1hZ2UoKSBleHBlY3RzIHN1YmltYWdlIHNwZWMgaW4gdGhlIGZvciBvZgorICogWzxhZGRyPl06PHN1YmltYWdlPiwgd2hlcmUgPGFkZHI+IGlzIGEgRklUIGltYWdlIGFkZHJlc3MgdGhhdCBjb250YWlucworICogc3ViaW1hZ2Ugd2l0aCBhIDxzdWJpbWc+IHVuaXQgbmFtZS4KKyAqCisgKiBBZGRyZXNzIHBhcnQgaXMgb3B0aW9uYWwsIGFuZCBpZiBvbWl0dGVkIGRlZmF1bHQgYWRkX2N1cnIgd2lsbAorICogYmUgdXNlZCBpbnN0ZWFkLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMSBpZiBzcGVjIGlzIGEgdmFsaWQgc3ViaW1hZ2Ugc3RyaW5nLAorICogICAgIGFkZHIgYW5kIGltYWdlX25hbWUgYXJlIHNldCBhY2NvcmRpbmdseQorICogICAgIDAgb3RoZXJ3aXNlCisgKi8KK2ludCBmaXRfcGFyc2Vfc3ViaW1hZ2UoY29uc3QgY2hhciAqc3BlYywgdWxvbmcgYWRkcl9jdXJyLAorCQl1bG9uZyAqYWRkciwgY29uc3QgY2hhciAqKmltYWdlX25hbWUpCit7CisJcmV0dXJuIGZpdF9wYXJzZV9zcGVjKHNwZWMsICc6JywgYWRkcl9jdXJyLCBhZGRyLCBpbWFnZV9uYW1lKTsKK30KKyNlbmRpZiAvKiAhVVNFX0hPU1RDQyAqLworCitzdGF0aWMgdm9pZCBmaXRfZ2V0X2RlYnVnKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsCisJCWNoYXIgKnByb3BfbmFtZSwgaW50IGVycikKK3sKKwlkZWJ1ZygiQ2FuJ3QgZ2V0ICclcycgcHJvcGVydHkgZnJvbSBGSVQgMHglMDhseCwgIgorCQkibm9kZTogb2Zmc2V0ICVkLCBuYW1lICVzICglcylcbiIsCisJCXByb3BfbmFtZSwgKHVsb25nKWZpdCwgbm9mZnNldCwKKwkJZml0X2dldF9uYW1lKGZpdCwgbm9mZnNldCwgTlVMTCksCisJCWZkdF9zdHJlcnJvcihlcnIpKTsKK30KKworLyoqCisgKiBmaXRfcHJpbnRfY29udGVudHMgLSBwcmludHMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUgRklUIGZvcm1hdCBpbWFnZQorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBwOiBwb2ludGVyIHRvIHByZWZpeCBzdHJpbmcKKyAqCisgKiBmaXRfcHJpbnRfY29udGVudHMoKSBmb3JtYXRzIGEgbXVsdGkgbGluZSBGSVQgaW1hZ2UgY29udGVudHMgZGVzY3JpcHRpb24uCisgKiBUaGUgcm91dGluZSBwcmludHMgb3V0IEZJVCBpbWFnZSBwcm9wZXJ0aWVzIChyb290IG5vZGUgbGV2ZWwpIGZvbGx3ZWQgYnkKKyAqIHRoZSBkZXRhaWxzIG9mIGVhY2ggY29tcG9uZW50IGltYWdlLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgbm8gcmV0dXJuZWQgcmVzdWx0cworICovCit2b2lkIGZpdF9wcmludF9jb250ZW50cyhjb25zdCB2b2lkICpmaXQpCit7CisJY2hhciAqZGVzYzsKKwljaGFyICp1bmFtZTsKKwlpbnQgaW1hZ2VzX25vZmZzZXQ7CisJaW50IGNvbmZzX25vZmZzZXQ7CisJaW50IG5vZmZzZXQ7CisJaW50IG5kZXB0aDsKKwlpbnQgY291bnQgPSAwOworCWludCByZXQ7CisJY29uc3QgY2hhciAqcDsKKyNpZiBkZWZpbmVkKENPTkZJR19USU1FU1RBTVApIHx8IGRlZmluZWQoQ09ORklHX0NNRF9EQVRFKSB8fCBkZWZpbmVkKFVTRV9IT1NUQ0MpCisJdGltZV90IHRpbWVzdGFtcDsKKyNlbmRpZgorCisjaWZkZWYgVVNFX0hPU1RDQworCXAgPSAiIjsKKyNlbHNlCisJcCA9ICIgICAiOworI2VuZGlmCisKKwkvKiBSb290IG5vZGUgcHJvcGVydGllcyAqLworCXJldCA9IGZpdF9nZXRfZGVzYyhmaXQsIDAsICZkZXNjKTsKKwlwcmludGYoIiVzRklUIGRlc2NyaXB0aW9uOiAiLCBwKTsKKwlpZiAocmV0KQorCQlwcmludGYoInVuYXZhaWxhYmxlXG4iKTsKKwllbHNlCisJCXByaW50ZigiJXNcbiIsIGRlc2MpOworCisjaWYgZGVmaW5lZChDT05GSUdfVElNRVNUQU1QKSB8fCBkZWZpbmVkKENPTkZJR19DTURfREFURSkgfHwgZGVmaW5lZChVU0VfSE9TVENDKQorCXJldCA9IGZpdF9nZXRfdGltZXN0YW1wKGZpdCwgMCwgJnRpbWVzdGFtcCk7CisJcHJpbnRmKCIlc0NyZWF0ZWQ6ICAgICAgICAgIiwgcCk7CisJaWYgKHJldCkKKwkJcHJpbnRmKCJ1bmF2YWlsYWJsZVxuIik7CisJZWxzZQorCQlnZW5pbWdfcHJpbnRfdGltZSh0aW1lc3RhbXApOworI2VuZGlmCisKKwkvKiBGaW5kIGltYWdlcyBwYXJlbnQgbm9kZSBvZmZzZXQgKi8KKwlpbWFnZXNfbm9mZnNldCA9IGZkdF9wYXRoX29mZnNldChmaXQsIEZJVF9JTUFHRVNfUEFUSCk7CisJaWYgKGltYWdlc19ub2Zmc2V0IDwgMCkgeworCQlwcmludGYoIkNhbid0IGZpbmQgaW1hZ2VzIHBhcmVudCBub2RlICclcycgKCVzKVxuIiwKKwkJCUZJVF9JTUFHRVNfUEFUSCwgZmR0X3N0cmVycm9yKGltYWdlc19ub2Zmc2V0KSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcm9jZXNzIGl0cyBzdWJub2RlcywgcHJpbnQgb3V0IGNvbXBvbmVudCBpbWFnZXMgZGV0YWlscyAqLworCWZvciAobmRlcHRoID0gMCwgY291bnQgPSAwLAorCQlub2Zmc2V0ID0gZmR0X25leHRfbm9kZShmaXQsIGltYWdlc19ub2Zmc2V0LCAmbmRlcHRoKTsKKwkgICAgIChub2Zmc2V0ID49IDApICYmIChuZGVwdGggPiAwKTsKKwkgICAgIG5vZmZzZXQgPSBmZHRfbmV4dF9ub2RlKGZpdCwgbm9mZnNldCwgJm5kZXB0aCkpIHsKKwkJaWYgKG5kZXB0aCA9PSAxKSB7CisJCQkvKgorCQkJICogRGlyZWN0IGNoaWxkIG5vZGUgb2YgdGhlIGltYWdlcyBwYXJlbnQgbm9kZSwKKwkJCSAqIGkuZS4gY29tcG9uZW50IGltYWdlIG5vZGUuCisJCQkgKi8KKwkJCXByaW50ZigiJXMgSW1hZ2UgJXUgKCVzKVxuIiwgcCwgY291bnQrKywKKwkJCQkJZml0X2dldF9uYW1lKGZpdCwgbm9mZnNldCwgTlVMTCkpOworCisJCQlmaXRfaW1hZ2VfcHJpbnQoZml0LCBub2Zmc2V0LCBwKTsKKwkJfQorCX0KKworCS8qIEZpbmQgY29uZmlndXJhdGlvbnMgcGFyZW50IG5vZGUgb2Zmc2V0ICovCisJY29uZnNfbm9mZnNldCA9IGZkdF9wYXRoX29mZnNldChmaXQsIEZJVF9DT05GU19QQVRIKTsKKwlpZiAoY29uZnNfbm9mZnNldCA8IDApIHsKKwkJZGVidWcoIkNhbid0IGdldCBjb25maWd1cmF0aW9ucyBwYXJlbnQgbm9kZSAnJXMnICglcylcbiIsCisJCQlGSVRfQ09ORlNfUEFUSCwgZmR0X3N0cmVycm9yKGNvbmZzX25vZmZzZXQpKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGdldCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdW5pdCBuYW1lIGZyb20gZGVmYXVsdCBwcm9wZXJ0eSAqLworCXVuYW1lID0gKGNoYXIgKilmZHRfZ2V0cHJvcChmaXQsIG5vZmZzZXQsIEZJVF9ERUZBVUxUX1BST1AsIE5VTEwpOworCWlmICh1bmFtZSkKKwkJcHJpbnRmKCIlcyBEZWZhdWx0IENvbmZpZ3VyYXRpb246ICclcydcbiIsIHAsIHVuYW1lKTsKKworCS8qIFByb2Nlc3MgaXRzIHN1Ym5vZGVzLCBwcmludCBvdXQgY29uZmlndXJhdGlvbnMgZGV0YWlscyAqLworCWZvciAobmRlcHRoID0gMCwgY291bnQgPSAwLAorCQlub2Zmc2V0ID0gZmR0X25leHRfbm9kZShmaXQsIGNvbmZzX25vZmZzZXQsICZuZGVwdGgpOworCSAgICAgKG5vZmZzZXQgPj0gMCkgJiYgKG5kZXB0aCA+IDApOworCSAgICAgbm9mZnNldCA9IGZkdF9uZXh0X25vZGUoZml0LCBub2Zmc2V0LCAmbmRlcHRoKSkgeworCQlpZiAobmRlcHRoID09IDEpIHsKKwkJCS8qCisJCQkgKiBEaXJlY3QgY2hpbGQgbm9kZSBvZiB0aGUgY29uZmlndXJhdGlvbnMgcGFyZW50IG5vZGUsCisJCQkgKiBpLmUuIGNvbmZpZ3VyYXRpb24gbm9kZS4KKwkJCSAqLworCQkJcHJpbnRmKCIlcyBDb25maWd1cmF0aW9uICV1ICglcylcbiIsIHAsIGNvdW50KyssCisJCQkJCWZpdF9nZXRfbmFtZShmaXQsIG5vZmZzZXQsIE5VTEwpKTsKKworCQkJZml0X2NvbmZfcHJpbnQoZml0LCBub2Zmc2V0LCBwKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBmaXRfaW1hZ2VfcHJpbnQgLSBwcmludHMgb3V0IHRoZSBGSVQgY29tcG9uZW50IGltYWdlIGRldGFpbHMKKyAqIEBmaXQ6IHBvaW50ZXIgdG8gdGhlIEZJVCBmb3JtYXQgaW1hZ2UgaGVhZGVyCisgKiBAaW1hZ2Vfbm9mZnNldDogb2Zmc2V0IG9mIHRoZSBjb21wb25lbnQgaW1hZ2Ugbm9kZQorICogQHA6IHBvaW50ZXIgdG8gcHJlZml4IHN0cmluZworICoKKyAqIGZpdF9pbWFnZV9wcmludCgpIGxpc3RzIGFsbCBtYW5kYXRvcnkgcHJvcGVyaWVzIGZvciB0aGUgcHJvY2Vzc2VkIGNvbXBvbmVudAorICogaW1hZ2UuIElmIHByZXNlbnQsIGhhc2ggbm9kZXMgYXJlIHByaW50ZWQgb3V0IGFzIHdlbGwuIExvYWQKKyAqIGFkZHJlc3MgZm9yIGltYWdlcyBvZiB0eXBlIGZpcm13YXJlIGlzIGFsc28gcHJpbnRlZCBvdXQuIFNpbmNlIHRoZSBsb2FkCisgKiBhZGRyZXNzIGlzIG5vdCBtYW5kYXRvcnkgZm9yIGZpcm13YXJlIGltYWdlcywgaXQgd2lsbCBiZSBvdXRwdXQgYXMKKyAqICJ1bmF2YWlsYWJsZSIgd2hlbiBub3QgcHJlc2VudC4KKyAqCisgKiByZXR1cm5zOgorICogICAgIG5vIHJldHVybmVkIHJlc3VsdHMKKyAqLwordm9pZCBmaXRfaW1hZ2VfcHJpbnQoY29uc3Qgdm9pZCAqZml0LCBpbnQgaW1hZ2Vfbm9mZnNldCwgY29uc3QgY2hhciAqcCkKK3sKKwljaGFyICpkZXNjOworCXVpbnQ4X3QgdHlwZSwgYXJjaCwgb3MsIGNvbXA7CisJc2l6ZV90IHNpemU7CisJdWxvbmcgbG9hZCwgZW50cnk7CisJY29uc3Qgdm9pZCAqZGF0YTsKKwlpbnQgbm9mZnNldDsKKwlpbnQgbmRlcHRoOworCWludCByZXQ7CisKKwkvKiBNYW5kYXRvcnkgcHJvcGVydGllcyAqLworCXJldCA9IGZpdF9nZXRfZGVzYyhmaXQsIGltYWdlX25vZmZzZXQsICZkZXNjKTsKKwlwcmludGYoIiVzICBEZXNjcmlwdGlvbjogICIsIHApOworCWlmIChyZXQpCisJCXByaW50ZigidW5hdmFpbGFibGVcbiIpOworCWVsc2UKKwkJcHJpbnRmKCIlc1xuIiwgZGVzYyk7CisKKwlmaXRfaW1hZ2VfZ2V0X3R5cGUoZml0LCBpbWFnZV9ub2Zmc2V0LCAmdHlwZSk7CisJcHJpbnRmKCIlcyAgVHlwZTogICAgICAgICAlc1xuIiwgcCwgZ2VuaW1nX2dldF90eXBlX25hbWUodHlwZSkpOworCisJZml0X2ltYWdlX2dldF9jb21wKGZpdCwgaW1hZ2Vfbm9mZnNldCwgJmNvbXApOworCXByaW50ZigiJXMgIENvbXByZXNzaW9uOiAgJXNcbiIsIHAsIGdlbmltZ19nZXRfY29tcF9uYW1lKGNvbXApKTsKKworCXJldCA9IGZpdF9pbWFnZV9nZXRfZGF0YShmaXQsIGltYWdlX25vZmZzZXQsICZkYXRhLCAmc2l6ZSk7CisKKyNpZm5kZWYgVVNFX0hPU1RDQworCXByaW50ZigiJXMgIERhdGEgU3RhcnQ6ICAgIiwgcCk7CisJaWYgKHJldCkKKwkJcHJpbnRmKCJ1bmF2YWlsYWJsZVxuIik7CisJZWxzZQorCQlwcmludGYoIjB4JTA4bHhcbiIsICh1bG9uZylkYXRhKTsKKyNlbmRpZgorCisJcHJpbnRmKCIlcyAgRGF0YSBTaXplOiAgICAiLCBwKTsKKwlpZiAocmV0KQorCQlwcmludGYoInVuYXZhaWxhYmxlXG4iKTsKKwllbHNlCisJCWdlbmltZ19wcmludF9zaXplKHNpemUpOworCisJLyogUmVtYWluaW5nLCB0eXBlIGRlcGVuZGVudCBwcm9wZXJ0aWVzICovCisJaWYgKCh0eXBlID09IElIX1RZUEVfS0VSTkVMKSB8fCAodHlwZSA9PSBJSF9UWVBFX1NUQU5EQUxPTkUpIHx8CisJICAgICh0eXBlID09IElIX1RZUEVfUkFNRElTSykgfHwgKHR5cGUgPT0gSUhfVFlQRV9GSVJNV0FSRSkgfHwKKwkgICAgKHR5cGUgPT0gSUhfVFlQRV9GTEFURFQpKSB7CisJCWZpdF9pbWFnZV9nZXRfYXJjaChmaXQsIGltYWdlX25vZmZzZXQsICZhcmNoKTsKKwkJcHJpbnRmKCIlcyAgQXJjaGl0ZWN0dXJlOiAlc1xuIiwgcCwgZ2VuaW1nX2dldF9hcmNoX25hbWUoYXJjaCkpOworCX0KKworCWlmICh0eXBlID09IElIX1RZUEVfS0VSTkVMKSB7CisJCWZpdF9pbWFnZV9nZXRfb3MoZml0LCBpbWFnZV9ub2Zmc2V0LCAmb3MpOworCQlwcmludGYoIiVzICBPUzogICAgICAgICAgICVzXG4iLCBwLCBnZW5pbWdfZ2V0X29zX25hbWUob3MpKTsKKwl9CisKKwlpZiAoKHR5cGUgPT0gSUhfVFlQRV9LRVJORUwpIHx8ICh0eXBlID09IElIX1RZUEVfU1RBTkRBTE9ORSkgfHwKKwkJKHR5cGUgPT0gSUhfVFlQRV9GSVJNV0FSRSkpIHsKKwkJcmV0ID0gZml0X2ltYWdlX2dldF9sb2FkKGZpdCwgaW1hZ2Vfbm9mZnNldCwgJmxvYWQpOworCQlwcmludGYoIiVzICBMb2FkIEFkZHJlc3M6ICIsIHApOworCQlpZiAocmV0KQorCQkJcHJpbnRmKCJ1bmF2YWlsYWJsZVxuIik7CisJCWVsc2UKKwkJCXByaW50ZigiMHglMDhseFxuIiwgbG9hZCk7CisJfQorCisJaWYgKCh0eXBlID09IElIX1RZUEVfS0VSTkVMKSB8fCAodHlwZSA9PSBJSF9UWVBFX1NUQU5EQUxPTkUpKSB7CisJCWZpdF9pbWFnZV9nZXRfZW50cnkoZml0LCBpbWFnZV9ub2Zmc2V0LCAmZW50cnkpOworCQlwcmludGYoIiVzICBFbnRyeSBQb2ludDogICIsIHApOworCQlpZiAocmV0KQorCQkJcHJpbnRmKCJ1bmF2YWlsYWJsZVxuIik7CisJCWVsc2UKKwkJCXByaW50ZigiMHglMDhseFxuIiwgZW50cnkpOworCX0KKworCS8qIFByb2Nlc3MgYWxsIGhhc2ggc3Vibm9kZXMgb2YgdGhlIGNvbXBvbmVudCBpbWFnZSBub2RlICovCisJZm9yIChuZGVwdGggPSAwLCBub2Zmc2V0ID0gZmR0X25leHRfbm9kZShmaXQsIGltYWdlX25vZmZzZXQsICZuZGVwdGgpOworCSAgICAgKG5vZmZzZXQgPj0gMCkgJiYgKG5kZXB0aCA+IDApOworCSAgICAgbm9mZnNldCA9IGZkdF9uZXh0X25vZGUoZml0LCBub2Zmc2V0LCAmbmRlcHRoKSkgeworCQlpZiAobmRlcHRoID09IDEpIHsKKwkJCS8qIERpcmVjdCBjaGlsZCBub2RlIG9mIHRoZSBjb21wb25lbnQgaW1hZ2Ugbm9kZSAqLworCQkJZml0X2ltYWdlX3ByaW50X2hhc2goZml0LCBub2Zmc2V0LCBwKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBmaXRfaW1hZ2VfcHJpbnRfaGFzaCAtIHByaW50cyBvdXQgdGhlIGhhc2ggbm9kZSBkZXRhaWxzCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IG9mZnNldCBvZiB0aGUgaGFzaCBub2RlCisgKiBAcDogcG9pbnRlciB0byBwcmVmaXggc3RyaW5nCisgKgorICogZml0X2ltYWdlX3ByaW50X2hhc2goKSBsaXN0cyBwcm9wZXJpZXMgZm9yIHRoZSBwcm9jZXNzZWQgaGFzaCBub2RlCisgKgorICogcmV0dXJuczoKKyAqICAgICBubyByZXR1cm5lZCByZXN1bHRzCisgKi8KK3ZvaWQgZml0X2ltYWdlX3ByaW50X2hhc2goY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgY29uc3QgY2hhciAqcCkKK3sKKwljaGFyICphbGdvOworCXVpbnQ4X3QgKnZhbHVlOworCWludCB2YWx1ZV9sZW47CisJaW50IGksIHJldDsKKworCS8qCisJICogQ2hlY2sgc3Vibm9kZSBuYW1lLCBtdXN0IGJlIGVxdWFsIHRvICJoYXNoIi4KKwkgKiBNdWx0aXBsZSBoYXNoIG5vZGVzIHJlcXVpcmUgdW5pcXVlIHVuaXQgbm9kZQorCSAqIG5hbWVzLCBlLmcuIGhhc2hAMSwgaGFzaEAyLCBldGMuCisJICovCisJaWYgKHN0cm5jbXAoZml0X2dldF9uYW1lKGZpdCwgbm9mZnNldCwgTlVMTCksCisJCQlGSVRfSEFTSF9OT0RFTkFNRSwKKwkJCXN0cmxlbihGSVRfSEFTSF9OT0RFTkFNRSkpICE9IDApCisJCXJldHVybjsKKworCWRlYnVnKCIlcyAgSGFzaCBub2RlOiAgICAnJXMnXG4iLCBwLAorCQkJZml0X2dldF9uYW1lKGZpdCwgbm9mZnNldCwgTlVMTCkpOworCisJcHJpbnRmKCIlcyAgSGFzaCBhbGdvOiAgICAiLCBwKTsKKwlpZiAoZml0X2ltYWdlX2hhc2hfZ2V0X2FsZ28oZml0LCBub2Zmc2V0LCAmYWxnbykpIHsKKwkJcHJpbnRmKCJpbnZhbGlkL3Vuc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIiVzXG4iLCBhbGdvKTsKKworCXJldCA9IGZpdF9pbWFnZV9oYXNoX2dldF92YWx1ZShmaXQsIG5vZmZzZXQsICZ2YWx1ZSwKKwkJCQkJJnZhbHVlX2xlbik7CisJcHJpbnRmKCIlcyAgSGFzaCB2YWx1ZTogICAiLCBwKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigidW5hdmFpbGFibGVcbiIpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCB2YWx1ZV9sZW47IGkrKykKKwkJCXByaW50ZigiJTAyeCIsIHZhbHVlW2ldKTsKKwkJcHJpbnRmKCJcbiIpOworCX0KKworCWRlYnVnKCIlcyAgSGFzaCBsZW46ICAgICAlZFxuIiwgcCwgdmFsdWVfbGVuKTsKK30KKworLyoqCisgKiBmaXRfZ2V0X2Rlc2MgLSBnZXQgbm9kZSBkZXNjcmlwdGlvbiBwcm9wZXJ0eQorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBub2Zmc2V0OiBub2RlIG9mZnNldAorICogQGRlc2M6IGRvdWJsZSBwb2ludGVyIHRvIHRoZSBjaGFyLCB3aWxsIGhvbGQgcG9pbnRlciB0byB0aGUgZGVzY3JwdGlvbgorICoKKyAqIGZpdF9nZXRfZGVzYygpIHJlYWRzIGRlc2NyaXB0aW9uIHByb3BlcnR5IGZyb20gYSBnaXZlbiBub2RlLCBpZgorICogZGVzY3JpcHRpb24gaXMgZm91bmQgcG9pbnRlciB0byBpdCBpcyByZXR1cmVuZWQgaW4gdGhpcmQgY2FsbCBhcmd1bWVudC4KKyAqCisgKiByZXR1cm5zOgorICogICAgIDAsIG9uIHN1Y2Nlc3MKKyAqICAgICAtMSwgb24gZmFpbHVyZQorICovCitpbnQgZml0X2dldF9kZXNjKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIGNoYXIgKipkZXNjKQoreworCWludCBsZW47CisKKwkqZGVzYyA9IChjaGFyICopZmR0X2dldHByb3AoZml0LCBub2Zmc2V0LCBGSVRfREVTQ19QUk9QLCAmbGVuKTsKKwlpZiAoKmRlc2MgPT0gTlVMTCkgeworCQlmaXRfZ2V0X2RlYnVnKGZpdCwgbm9mZnNldCwgRklUX0RFU0NfUFJPUCwgbGVuKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpdF9nZXRfdGltZXN0YW1wIC0gZ2V0IG5vZGUgdGltZXN0YW1wIHByb3BlcnR5CisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IG5vZGUgb2Zmc2V0CisgKiBAdGltZXN0YW1wOiBwb2ludGVyIHRvIHRoZSB0aW1lX3QsIHdpbGwgaG9sZCByZWFkIHRpbWVzdGFtcAorICoKKyAqIGZpdF9nZXRfdGltZXN0YW1wKCkgcmVhZHMgdGltZXN0YW1wIHBvcGVydHkgZnJvbSBnaXZlbiBub2RlLCBpZiB0aW1lc3RhbXAKKyAqIGlzIGZvdW5kIGFuZCBoYXMgYSBjb3JyZWN0IHNpemUgaXRzIHZhbHVlIGlzIHJldHVyZWQgaW4gdGhpcmQgY2FsbAorICogYXJndW1lbnQuCisgKgorICogcmV0dXJuczoKKyAqICAgICAwLCBvbiBzdWNjZXNzCisgKiAgICAgLTEsIG9uIHByb3BlcnR5IHJlYWQgZmFpbHVyZQorICogICAgIC0yLCBvbiB3cm9uZyB0aW1lc3RhbXAgc2l6ZQorICovCitpbnQgZml0X2dldF90aW1lc3RhbXAoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgdGltZV90ICp0aW1lc3RhbXApCit7CisJaW50IGxlbjsKKwljb25zdCB2b2lkICpkYXRhOworCisJZGF0YSA9IGZkdF9nZXRwcm9wKGZpdCwgbm9mZnNldCwgRklUX1RJTUVTVEFNUF9QUk9QLCAmbGVuKTsKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWZpdF9nZXRfZGVidWcoZml0LCBub2Zmc2V0LCBGSVRfVElNRVNUQU1QX1BST1AsIGxlbik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGxlbiAhPSBzaXplb2YodWludDMyX3QpKSB7CisJCWRlYnVnKCJGSVQgdGltZXN0YW1wIHdpdGggaW5jb3JyZWN0IHNpemUgb2YgKCV1KVxuIiwgbGVuKTsKKwkJcmV0dXJuIC0yOworCX0KKworCSp0aW1lc3RhbXAgPSB1aW1hZ2VfdG9fY3B1KCooKHVpbnQzMl90ICopZGF0YSkpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpdF9pbWFnZV9nZXRfbm9kZSAtIGdldCBub2RlIG9mZnNldCBmb3IgY29tcG9uZW50IGltYWdlIG9mIGEgZ2l2ZW4gdW5pdCBuYW1lCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQGltYWdlX3VuYW1lOiBjb21wb25lbnQgaW1hZ2Ugbm9kZSB1bml0IG5hbWUKKyAqCisgKiBmaXRfaW1hZ2VfZ2V0X25vZGUoKSBmaW5kcyBhIGNvbXBvbmVudCBpbWFnZSAod2l0aGluZyB0aGUgJy9pbWFnZXMnCisgKiBub2RlKSBvZiBhIHByb3ZpZGVkIHVuaXQgbmFtZS4gSWYgaW1hZ2UgaXMgZm91bmQgaXRzIG5vZGUgb2Zmc2V0IGlzCisgKiByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgaW1hZ2Ugbm9kZSBvZmZzZXQgd2hlbiBmb3VuZCAoPj0wKQorICogICAgIG5lZ2F0aXZlIG51bWJlciBvbiBmYWlsdXJlIChGRFRfRVJSXyogY29kZSkKKyAqLworaW50IGZpdF9pbWFnZV9nZXRfbm9kZShjb25zdCB2b2lkICpmaXQsIGNvbnN0IGNoYXIgKmltYWdlX3VuYW1lKQoreworCWludCBub2Zmc2V0LCBpbWFnZXNfbm9mZnNldDsKKworCWltYWdlc19ub2Zmc2V0ID0gZmR0X3BhdGhfb2Zmc2V0KGZpdCwgRklUX0lNQUdFU19QQVRIKTsKKwlpZiAoaW1hZ2VzX25vZmZzZXQgPCAwKSB7CisJCWRlYnVnKCJDYW4ndCBmaW5kIGltYWdlcyBwYXJlbnQgbm9kZSAnJXMnICglcylcbiIsCisJCQlGSVRfSU1BR0VTX1BBVEgsIGZkdF9zdHJlcnJvcihpbWFnZXNfbm9mZnNldCkpOworCQlyZXR1cm4gaW1hZ2VzX25vZmZzZXQ7CisJfQorCisJbm9mZnNldCA9IGZkdF9zdWJub2RlX29mZnNldChmaXQsIGltYWdlc19ub2Zmc2V0LCBpbWFnZV91bmFtZSk7CisJaWYgKG5vZmZzZXQgPCAwKSB7CisJCWRlYnVnKCJDYW4ndCBnZXQgbm9kZSBvZmZzZXQgZm9yIGltYWdlIHVuaXQgbmFtZTogJyVzJyAoJXMpXG4iLAorCQkJaW1hZ2VfdW5hbWUsIGZkdF9zdHJlcnJvcihub2Zmc2V0KSk7CisJfQorCisJcmV0dXJuIG5vZmZzZXQ7Cit9CisKKy8qKgorICogZml0X2ltYWdlX2dldF9vcyAtIGdldCBvcyBpZCBmb3IgYSBnaXZlbiBjb21wb25lbnQgaW1hZ2Ugbm9kZQorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBub2Zmc2V0OiBjb21wb25lbnQgaW1hZ2Ugbm9kZSBvZmZzZXQKKyAqIEBvczogcG9pbnRlciB0byB0aGUgdWludDhfdCwgd2lsbCBob2xkIG9zIG51bWVyaWMgaWQKKyAqCisgKiBmaXRfaW1hZ2VfZ2V0X29zKCkgZmluZHMgb3MgcHJvcGVydHkgaW4gYSBnaXZlbiBjb21wb25lbnQgaW1hZ2Ugbm9kZS4KKyAqIElmIHRoZSBwcm9wZXJ0eSBpcyBmb3VuZCwgaXRzIChzdHJpbmcpIHZhbHVlIGlzIHRyYW5zbGF0ZWQgdG8gdGhlIG51bWVyaWMKKyAqIGlkIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisgKgorICogcmV0dXJuczoKKyAqICAgICAwLCBvbiBzdWNjZXNzCisgKiAgICAgLTEsIG9uIGZhaWx1cmUKKyAqLworaW50IGZpdF9pbWFnZV9nZXRfb3MoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgdWludDhfdCAqb3MpCit7CisJaW50IGxlbjsKKwljb25zdCB2b2lkICpkYXRhOworCisJLyogR2V0IE9TIG5hbWUgZnJvbSBwcm9wZXJ0eSBkYXRhICovCisJZGF0YSA9IGZkdF9nZXRwcm9wKGZpdCwgbm9mZnNldCwgRklUX09TX1BST1AsICZsZW4pOworCWlmIChkYXRhID09IE5VTEwpIHsKKwkJZml0X2dldF9kZWJ1ZyhmaXQsIG5vZmZzZXQsIEZJVF9PU19QUk9QLCBsZW4pOworCQkqb3MgPSAtMTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFRyYW5zbGF0ZSBPUyBuYW1lIHRvIGlkICovCisJKm9zID0gZ2VuaW1nX2dldF9vc19pZChkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmaXRfaW1hZ2VfZ2V0X2FyY2ggLSBnZXQgYXJjaCBpZCBmb3IgYSBnaXZlbiBjb21wb25lbnQgaW1hZ2Ugbm9kZQorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBub2Zmc2V0OiBjb21wb25lbnQgaW1hZ2Ugbm9kZSBvZmZzZXQKKyAqIEBhcmNoOiBwb2ludGVyIHRvIHRoZSB1aW50OF90LCB3aWxsIGhvbGQgYXJjaCBudW1lcmljIGlkCisgKgorICogZml0X2ltYWdlX2dldF9hcmNoKCkgZmluZHMgYXJjaCBwcm9wZXJ0eSBpbiBhIGdpdmVuIGNvbXBvbmVudCBpbWFnZSBub2RlLgorICogSWYgdGhlIHByb3BlcnR5IGlzIGZvdW5kLCBpdHMgKHN0cmluZykgdmFsdWUgaXMgdHJhbnNsYXRlZCB0byB0aGUgbnVtZXJpYworICogaWQgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KKyAqCisgKiByZXR1cm5zOgorICogICAgIDAsIG9uIHN1Y2Nlc3MKKyAqICAgICAtMSwgb24gZmFpbHVyZQorICovCitpbnQgZml0X2ltYWdlX2dldF9hcmNoKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIHVpbnQ4X3QgKmFyY2gpCit7CisJaW50IGxlbjsKKwljb25zdCB2b2lkICpkYXRhOworCisJLyogR2V0IGFyY2hpdGVjdHVyZSBuYW1lIGZyb20gcHJvcGVydHkgZGF0YSAqLworCWRhdGEgPSBmZHRfZ2V0cHJvcChmaXQsIG5vZmZzZXQsIEZJVF9BUkNIX1BST1AsICZsZW4pOworCWlmIChkYXRhID09IE5VTEwpIHsKKwkJZml0X2dldF9kZWJ1ZyhmaXQsIG5vZmZzZXQsIEZJVF9BUkNIX1BST1AsIGxlbik7CisJCSphcmNoID0gLTE7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBUcmFuc2xhdGUgYXJjaGl0ZWN0dXJlIG5hbWUgdG8gaWQgKi8KKwkqYXJjaCA9IGdlbmltZ19nZXRfYXJjaF9pZChkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmaXRfaW1hZ2VfZ2V0X3R5cGUgLSBnZXQgdHlwZSBpZCBmb3IgYSBnaXZlbiBjb21wb25lbnQgaW1hZ2Ugbm9kZQorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBub2Zmc2V0OiBjb21wb25lbnQgaW1hZ2Ugbm9kZSBvZmZzZXQKKyAqIEB0eXBlOiBwb2ludGVyIHRvIHRoZSB1aW50OF90LCB3aWxsIGhvbGQgdHlwZSBudW1lcmljIGlkCisgKgorICogZml0X2ltYWdlX2dldF90eXBlKCkgZmluZHMgdHlwZSBwcm9wZXJ0eSBpbiBhIGdpdmVuIGNvbXBvbmVudCBpbWFnZSBub2RlLgorICogSWYgdGhlIHByb3BlcnR5IGlzIGZvdW5kLCBpdHMgKHN0cmluZykgdmFsdWUgaXMgdHJhbnNsYXRlZCB0byB0aGUgbnVtZXJpYworICogaWQgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KKyAqCisgKiByZXR1cm5zOgorICogICAgIDAsIG9uIHN1Y2Nlc3MKKyAqICAgICAtMSwgb24gZmFpbHVyZQorICovCitpbnQgZml0X2ltYWdlX2dldF90eXBlKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIHVpbnQ4X3QgKnR5cGUpCit7CisJaW50IGxlbjsKKwljb25zdCB2b2lkICpkYXRhOworCisJLyogR2V0IGltYWdlIHR5cGUgbmFtZSBmcm9tIHByb3BlcnR5IGRhdGEgKi8KKwlkYXRhID0gZmR0X2dldHByb3AoZml0LCBub2Zmc2V0LCBGSVRfVFlQRV9QUk9QLCAmbGVuKTsKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWZpdF9nZXRfZGVidWcoZml0LCBub2Zmc2V0LCBGSVRfVFlQRV9QUk9QLCBsZW4pOworCQkqdHlwZSA9IC0xOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogVHJhbnNsYXRlIGltYWdlIHR5cGUgbmFtZSB0byBpZCAqLworCSp0eXBlID0gZ2VuaW1nX2dldF90eXBlX2lkKGRhdGEpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpdF9pbWFnZV9nZXRfY29tcCAtIGdldCBjb21wIGlkIGZvciBhIGdpdmVuIGNvbXBvbmVudCBpbWFnZSBub2RlCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IGNvbXBvbmVudCBpbWFnZSBub2RlIG9mZnNldAorICogQGNvbXA6IHBvaW50ZXIgdG8gdGhlIHVpbnQ4X3QsIHdpbGwgaG9sZCBjb21wIG51bWVyaWMgaWQKKyAqCisgKiBmaXRfaW1hZ2VfZ2V0X2NvbXAoKSBmaW5kcyBjb21wIHByb3BlcnR5IGluIGEgZ2l2ZW4gY29tcG9uZW50IGltYWdlIG5vZGUuCisgKiBJZiB0aGUgcHJvcGVydHkgaXMgZm91bmQsIGl0cyAoc3RyaW5nKSB2YWx1ZSBpcyB0cmFuc2xhdGVkIHRvIHRoZSBudW1lcmljCisgKiBpZCB3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMCwgb24gc3VjY2VzcworICogICAgIC0xLCBvbiBmYWlsdXJlCisgKi8KK2ludCBmaXRfaW1hZ2VfZ2V0X2NvbXAoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgdWludDhfdCAqY29tcCkKK3sKKwlpbnQgbGVuOworCWNvbnN0IHZvaWQgKmRhdGE7CisKKwkvKiBHZXQgY29tcHJlc3Npb24gbmFtZSBmcm9tIHByb3BlcnR5IGRhdGEgKi8KKwlkYXRhID0gZmR0X2dldHByb3AoZml0LCBub2Zmc2V0LCBGSVRfQ09NUF9QUk9QLCAmbGVuKTsKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWZpdF9nZXRfZGVidWcoZml0LCBub2Zmc2V0LCBGSVRfQ09NUF9QUk9QLCBsZW4pOworCQkqY29tcCA9IC0xOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogVHJhbnNsYXRlIGNvbXByZXNzaW9uIG5hbWUgdG8gaWQgKi8KKwkqY29tcCA9IGdlbmltZ19nZXRfY29tcF9pZChkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmaXRfaW1hZ2VfZ2V0X2xvYWQgLSBnZXQgbG9hZCBhZGRyZXNzIHByb3BlcnR5IGZvciBhIGdpdmVuIGNvbXBvbmVudCBpbWFnZSBub2RlCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IGNvbXBvbmVudCBpbWFnZSBub2RlIG9mZnNldAorICogQGxvYWQ6IHBvaW50ZXIgdG8gdGhlIHVpbnQzMl90LCB3aWxsIGhvbGQgbG9hZCBhZGRyZXNzCisgKgorICogZml0X2ltYWdlX2dldF9sb2FkKCkgZmluZHMgbG9hZCBhZGRyZXNzIHByb3BlcnR5IGluIGEgZ2l2ZW4gY29tcG9uZW50IGltYWdlIG5vZGUuCisgKiBJZiB0aGUgcHJvcGVydHkgaXMgZm91bmQsIGl0cyB2YWx1ZSBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMCwgb24gc3VjY2VzcworICogICAgIC0xLCBvbiBmYWlsdXJlCisgKi8KK2ludCBmaXRfaW1hZ2VfZ2V0X2xvYWQoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgdWxvbmcgKmxvYWQpCit7CisJaW50IGxlbjsKKwljb25zdCB1aW50MzJfdCAqZGF0YTsKKworCWRhdGEgPSBmZHRfZ2V0cHJvcChmaXQsIG5vZmZzZXQsIEZJVF9MT0FEX1BST1AsICZsZW4pOworCWlmIChkYXRhID09IE5VTEwpIHsKKwkJZml0X2dldF9kZWJ1ZyhmaXQsIG5vZmZzZXQsIEZJVF9MT0FEX1BST1AsIGxlbik7CisJCXJldHVybiAtMTsKKwl9CisKKwkqbG9hZCA9IHVpbWFnZV90b19jcHUoKmRhdGEpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpdF9pbWFnZV9nZXRfZW50cnkgLSBnZXQgZW50cnkgcG9pbnQgYWRkcmVzcyBwcm9wZXJ0eSBmb3IgYSBnaXZlbiBjb21wb25lbnQgaW1hZ2Ugbm9kZQorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBub2Zmc2V0OiBjb21wb25lbnQgaW1hZ2Ugbm9kZSBvZmZzZXQKKyAqIEBlbnRyeTogcG9pbnRlciB0byB0aGUgdWludDMyX3QsIHdpbGwgaG9sZCBlbnRyeSBwb2ludCBhZGRyZXNzCisgKgorICogZml0X2ltYWdlX2dldF9lbnRyeSgpIGZpbmRzIGVudHJ5IHBvaW50IGFkZHJlc3MgcHJvcGVydHkgaW4gYSBnaXZlbiBjb21wb25lbnQgaW1hZ2Ugbm9kZS4KKyAqIElmIHRoZSBwcm9wZXJ0eSBpcyBmb3VuZCwgaXRzIHZhbHVlIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisgKgorICogcmV0dXJuczoKKyAqICAgICAwLCBvbiBzdWNjZXNzCisgKiAgICAgLTEsIG9uIGZhaWx1cmUKKyAqLworaW50IGZpdF9pbWFnZV9nZXRfZW50cnkoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgdWxvbmcgKmVudHJ5KQoreworCWludCBsZW47CisJY29uc3QgdWludDMyX3QgKmRhdGE7CisKKwlkYXRhID0gZmR0X2dldHByb3AoZml0LCBub2Zmc2V0LCBGSVRfRU5UUllfUFJPUCwgJmxlbik7CisJaWYgKGRhdGEgPT0gTlVMTCkgeworCQlmaXRfZ2V0X2RlYnVnKGZpdCwgbm9mZnNldCwgRklUX0VOVFJZX1BST1AsIGxlbik7CisJCXJldHVybiAtMTsKKwl9CisKKwkqZW50cnkgPSB1aW1hZ2VfdG9fY3B1KCpkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmaXRfaW1hZ2VfZ2V0X2RhdGEgLSBnZXQgZGF0YSBwcm9wZXJ0eSBhbmQgaXRzIHNpemUgZm9yIGEgZ2l2ZW4gY29tcG9uZW50IGltYWdlIG5vZGUKKyAqIEBmaXQ6IHBvaW50ZXIgdG8gdGhlIEZJVCBmb3JtYXQgaW1hZ2UgaGVhZGVyCisgKiBAbm9mZnNldDogY29tcG9uZW50IGltYWdlIG5vZGUgb2Zmc2V0CisgKiBAZGF0YTogZG91YmxlIHBvaW50ZXIgdG8gdm9pZCwgd2lsbCBob2xkIGRhdGEgcHJvcGVydHkncyBkYXRhIGFkZHJlc3MKKyAqIEBzaXplOiBwb2ludGVyIHRvIHNpemVfdCwgd2lsbCBob2xkIGRhdGEgcHJvcGVydHkncyBkYXRhIHNpemUKKyAqCisgKiBmaXRfaW1hZ2VfZ2V0X2RhdGEoKSBmaW5kcyBkYXRhIHByb3BlcnR5IGluIGEgZ2l2ZW4gY29tcG9uZW50IGltYWdlIG5vZGUuCisgKiBJZiB0aGUgcHJvcGVydHkgaXMgZm91bmQgaXRzIGRhdGEgc3RhcnQgYWRkcmVzcyBhbmQgc2l6ZSBhcmUgcmV0dXJuZWQgdG8KKyAqIHRoZSBjYWxsZXIuCisgKgorICogcmV0dXJuczoKKyAqICAgICAwLCBvbiBzdWNjZXNzCisgKiAgICAgLTEsIG9uIGZhaWx1cmUKKyAqLworaW50IGZpdF9pbWFnZV9nZXRfZGF0YShjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LAorCQljb25zdCB2b2lkICoqZGF0YSwgc2l6ZV90ICpzaXplKQoreworCWludCBsZW47CisKKwkqZGF0YSA9IGZkdF9nZXRwcm9wKGZpdCwgbm9mZnNldCwgRklUX0RBVEFfUFJPUCwgJmxlbik7CisJaWYgKCpkYXRhID09IE5VTEwpIHsKKwkJZml0X2dldF9kZWJ1ZyhmaXQsIG5vZmZzZXQsIEZJVF9EQVRBX1BST1AsIGxlbik7CisJCSpzaXplID0gMDsKKwkJcmV0dXJuIC0xOworCX0KKworCSpzaXplID0gbGVuOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpdF9pbWFnZV9oYXNoX2dldF9hbGdvIC0gZ2V0IGhhc2ggYWxnb3JpdGhtIG5hbWUKKyAqIEBmaXQ6IHBvaW50ZXIgdG8gdGhlIEZJVCBmb3JtYXQgaW1hZ2UgaGVhZGVyCisgKiBAbm9mZnNldDogaGFzaCBub2RlIG9mZnNldAorICogQGFsZ286IGRvdWJsZSBwb2ludGVyIHRvIGNoYXIsIHdpbGwgaG9sZCBwb2ludGVyIHRvIHRoZSBhbGdvcml0aG0gbmFtZQorICoKKyAqIGZpdF9pbWFnZV9oYXNoX2dldF9hbGdvKCkgZmluZHMgaGFzaCBhbGdvcml0aG0gcHJvcGVydHkgaW4gYSBnaXZlbiBoYXNoIG5vZGUuCisgKiBJZiB0aGUgcHJvcGVydHkgaXMgZm91bmQgaXRzIGRhdGEgc3RhcnQgYWRkcmVzcyBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMCwgb24gc3VjY2VzcworICogICAgIC0xLCBvbiBmYWlsdXJlCisgKi8KK2ludCBmaXRfaW1hZ2VfaGFzaF9nZXRfYWxnbyhjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCBjaGFyICoqYWxnbykKK3sKKwlpbnQgbGVuOworCisJKmFsZ28gPSAoY2hhciAqKWZkdF9nZXRwcm9wKGZpdCwgbm9mZnNldCwgRklUX0FMR09fUFJPUCwgJmxlbik7CisJaWYgKCphbGdvID09IE5VTEwpIHsKKwkJZml0X2dldF9kZWJ1ZyhmaXQsIG5vZmZzZXQsIEZJVF9BTEdPX1BST1AsIGxlbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmaXRfaW1hZ2VfaGFzaF9nZXRfdmFsdWUgLSBnZXQgaGFzaCB2YWx1ZSBhbmQgbGVuZ3RoCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IGhhc2ggbm9kZSBvZmZzZXQKKyAqIEB2YWx1ZTogZG91YmxlIHBvaW50ZXIgdG8gdWludDhfdCwgd2lsbCBob2xkIGFkZHJlc3Mgb2YgYSBoYXNoIHZhbHVlIGRhdGEKKyAqIEB2YWx1ZV9sZW46IHBvaW50ZXIgdG8gYW4gaW50LCB3aWxsIGhvbGQgaGFzaCBkYXRhIGxlbmd0aAorICoKKyAqIGZpdF9pbWFnZV9oYXNoX2dldF92YWx1ZSgpIGZpbmRzIGhhc2ggdmFsdWUgcHJvcGVydHkgaW4gYSBnaXZlbiBoYXNoIG5vZGUuCisgKiBJZiB0aGUgcHJvcGVydHkgaXMgZm91bmQgaXRzIGRhdGEgc3RhcnQgYWRkcmVzcyBhbmQgc2l6ZSBhcmUgcmV0dXJuZWQgdG8KKyAqIHRoZSBjYWxsZXIuCisgKgorICogcmV0dXJuczoKKyAqICAgICAwLCBvbiBzdWNjZXNzCisgKiAgICAgLTEsIG9uIGZhaWx1cmUKKyAqLworaW50IGZpdF9pbWFnZV9oYXNoX2dldF92YWx1ZShjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCB1aW50OF90ICoqdmFsdWUsCisJCQkJaW50ICp2YWx1ZV9sZW4pCit7CisJaW50IGxlbjsKKworCSp2YWx1ZSA9ICh1aW50OF90ICopZmR0X2dldHByb3AoZml0LCBub2Zmc2V0LCBGSVRfVkFMVUVfUFJPUCwgJmxlbik7CisJaWYgKCp2YWx1ZSA9PSBOVUxMKSB7CisJCWZpdF9nZXRfZGVidWcoZml0LCBub2Zmc2V0LCBGSVRfVkFMVUVfUFJPUCwgbGVuKTsKKwkJKnZhbHVlX2xlbiA9IDA7CisJCXJldHVybiAtMTsKKwl9CisKKwkqdmFsdWVfbGVuID0gbGVuOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpdF9zZXRfdGltZXN0YW1wIC0gc2V0IG5vZGUgdGltZXN0YW1wIHByb3BlcnR5CisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IG5vZGUgb2Zmc2V0CisgKiBAdGltZXN0YW1wOiB0aW1lc3RhbXAgdmFsdWUgdG8gYmUgc2V0CisgKgorICogZml0X3NldF90aW1lc3RhbXAoKSBhdHRlbXB0cyB0byBzZXQgdGltZXN0YW1wIHByb3BlcnR5IGluIHRoZSByZXF1ZXN0ZWQKKyAqIG5vZGUgYW5kIHJldHVybnMgb3BlcmF0aW9uIHN0YXR1cyB0byB0aGUgY2FsbGVyLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMCwgb24gc3VjY2VzcworICogICAgIC0xLCBvbiBwcm9wZXJ0eSByZWFkIGZhaWx1cmUKKyAqLworaW50IGZpdF9zZXRfdGltZXN0YW1wKHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIHRpbWVfdCB0aW1lc3RhbXApCit7CisJdWludDMyX3QgdDsKKwlpbnQgcmV0OworCisJdCA9IGNwdV90b191aW1hZ2UodGltZXN0YW1wKTsKKwlyZXQgPSBmZHRfc2V0cHJvcChmaXQsIG5vZmZzZXQsIEZJVF9USU1FU1RBTVBfUFJPUCwgJnQsCisJCQkJc2l6ZW9mKHVpbnQzMl90KSk7CisJaWYgKHJldCkgeworCQlwcmludGYoIkNhbid0IHNldCAnJXMnIHByb3BlcnR5IGZvciAnJXMnIG5vZGUgKCVzKVxuIiwKKwkJCUZJVF9USU1FU1RBTVBfUFJPUCwgZml0X2dldF9uYW1lKGZpdCwgbm9mZnNldCwgTlVMTCksCisJCQlmZHRfc3RyZXJyb3IocmV0KSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjYWxjdWxhdGVfaGFzaCAtIGNhbGN1bGF0ZSBhbmQgcmV0dXJuIGhhc2ggZm9yIHByb3ZpZGVkIGlucHV0IGRhdGEKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhCisgKiBAZGF0YV9sZW46IGRhdGEgbGVuZ3RoCisgKiBAYWxnbzogcmVxdWVzdGVkIGhhc2ggYWxnb3JpdGhtCisgKiBAdmFsdWU6IHBvaW50ZXIgdG8gdGhlIGNoYXIsIHdpbGwgaG9sZCBoYXNoIHZhbHVlIGRhdGEgKGNhbGxlciBtdXN0CisgKiBhbGxvY2F0ZSBlbm91Z2ggZnJlZSBzcGFjZSkKKyAqIHZhbHVlX2xlbjogbGVuZ3RoIG9mIHRoZSBjYWxjdWxhdGVkIGhhc2gKKyAqCisgKiBjYWxjdWxhdGVfaGFzaCgpIGNvbXB1dGVzIGlucHV0IGRhdGEgaGFzaCBhY2NvcmRpbmcgdG8gdGhlIHJlcXVlc3RlZCBhbGdvcml0aG0uCisgKiBSZXN1bHRpbmcgaGFzaCB2YWx1ZSBpcyBwbGFjZWQgaW4gY2FsbGVyIHByb3ZpZGVkICd2YWx1ZScgYnVmZmVyLCBsZW5ndGgKKyAqIG9mIHRoZSBjYWxjdWxhdGVkIGhhc2ggaXMgcmV0dXJuZWQgdmlhIHZhbHVlX2xlbiBwb2ludGVyIGFyZ3VtZW50LgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMCwgb24gc3VjY2VzcworICogICAgLTEsIHdoZW4gYWxnbyBpcyB1bnN1cHBvcnRlZAorICovCitzdGF0aWMgaW50IGNhbGN1bGF0ZV9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIGludCBkYXRhX2xlbiwgY29uc3QgY2hhciAqYWxnbywKKwkJCXVpbnQ4X3QgKnZhbHVlLCBpbnQgKnZhbHVlX2xlbikKK3sKKwlpZiAoc3RyY21wKGFsZ28sICJjcmMzMiIpID09IDApIHsKKwkJKigodWludDMyX3QgKil2YWx1ZSkgPSBjcmMzMl93ZCgwLCBkYXRhLCBkYXRhX2xlbiwKKwkJCQkJCQlDSFVOS1NaX0NSQzMyKTsKKwkJKigodWludDMyX3QgKil2YWx1ZSkgPSBjcHVfdG9fdWltYWdlKCooKHVpbnQzMl90ICopdmFsdWUpKTsKKwkJKnZhbHVlX2xlbiA9IDQ7CisJfSBlbHNlIGlmIChzdHJjbXAoYWxnbywgInNoYTEiKSA9PSAwKSB7CisJCXNoYTFfY3N1bV93ZCgodW5zaWduZWQgY2hhciAqKSBkYXRhLCBkYXRhX2xlbiwKKwkJCQkodW5zaWduZWQgY2hhciAqKSB2YWx1ZSwgQ0hVTktTWl9TSEExKTsKKwkJKnZhbHVlX2xlbiA9IDIwOworCX0gZWxzZSBpZiAoc3RyY21wKGFsZ28sICJtZDUiKSA9PSAwKSB7CisJCW1kNV93ZCgodW5zaWduZWQgY2hhciAqKWRhdGEsIGRhdGFfbGVuLCB2YWx1ZSwgQ0hVTktTWl9NRDUpOworCQkqdmFsdWVfbGVuID0gMTY7CisJfSBlbHNlIHsKKwkJZGVidWcoIlVuc3VwcG9ydGVkIGhhc2ggYWxvZ3JpdGhtXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIFVTRV9IT1NUQ0MKKy8qKgorICogZml0X3NldF9oYXNoZXMgLSBwcm9jZXNzIEZJVCBjb21wb25lbnQgaW1hZ2Ugbm9kZXMgYW5kIGNhbGN1bGF0ZSBoYXNoZXMKKyAqIEBmaXQ6IHBvaW50ZXIgdG8gdGhlIEZJVCBmb3JtYXQgaW1hZ2UgaGVhZGVyCisgKgorICogZml0X3NldF9oYXNoZXMoKSBhZGRzIGhhc2ggdmFsdWVzIGZvciBhbGwgY29tcG9uZW50IGltYWdlcyBpbiB0aGUgRklUIGJsb2IuCisgKiBIYXNoZXMgYXJlIGNhbGN1bGF0ZWQgZm9yIGFsbCBjb21wb25lbnQgaW1hZ2VzIHdoaWNoIGhhdmUgaGFzaCBzdWJub2RlcworICogd2l0aCBhbGdvcml0aG0gcHJvcGVydHkgc2V0IHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtcy4KKyAqCisgKiByZXR1cm5zCisgKiAgICAgMCwgb24gc3VjY2VzcworICogICAgIGxpYmZkdCBlcnJvciBjb2RlLCBvbiBmYWlsdXJlCisgKi8KK2ludCBmaXRfc2V0X2hhc2hlcyh2b2lkICpmaXQpCit7CisJaW50IGltYWdlc19ub2Zmc2V0OworCWludCBub2Zmc2V0OworCWludCBuZGVwdGg7CisJaW50IHJldDsKKworCS8qIEZpbmQgaW1hZ2VzIHBhcmVudCBub2RlIG9mZnNldCAqLworCWltYWdlc19ub2Zmc2V0ID0gZmR0X3BhdGhfb2Zmc2V0KGZpdCwgRklUX0lNQUdFU19QQVRIKTsKKwlpZiAoaW1hZ2VzX25vZmZzZXQgPCAwKSB7CisJCXByaW50ZigiQ2FuJ3QgZmluZCBpbWFnZXMgcGFyZW50IG5vZGUgJyVzJyAoJXMpXG4iLAorCQkJRklUX0lNQUdFU19QQVRILCBmZHRfc3RyZXJyb3IoaW1hZ2VzX25vZmZzZXQpKTsKKwkJcmV0dXJuIGltYWdlc19ub2Zmc2V0OworCX0KKworCS8qIFByb2Nlc3MgaXRzIHN1Ym5vZGVzLCBwcmludCBvdXQgY29tcG9uZW50IGltYWdlcyBkZXRhaWxzICovCisJZm9yIChuZGVwdGggPSAwLCBub2Zmc2V0ID0gZmR0X25leHRfbm9kZShmaXQsIGltYWdlc19ub2Zmc2V0LCAmbmRlcHRoKTsKKwkgICAgIChub2Zmc2V0ID49IDApICYmIChuZGVwdGggPiAwKTsKKwkgICAgIG5vZmZzZXQgPSBmZHRfbmV4dF9ub2RlKGZpdCwgbm9mZnNldCwgJm5kZXB0aCkpIHsKKwkJaWYgKG5kZXB0aCA9PSAxKSB7CisJCQkvKgorCQkJICogRGlyZWN0IGNoaWxkIG5vZGUgb2YgdGhlIGltYWdlcyBwYXJlbnQgbm9kZSwKKwkJCSAqIGkuZS4gY29tcG9uZW50IGltYWdlIG5vZGUuCisJCQkgKi8KKwkJCXJldCA9IGZpdF9pbWFnZV9zZXRfaGFzaGVzKGZpdCwgbm9mZnNldCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmaXRfaW1hZ2Vfc2V0X2hhc2hlcyAtIGNhbGN1bGF0ZS9zZXQgaGFzaGVzIGZvciBnaXZlbiBjb21wb25lbnQgaW1hZ2Ugbm9kZQorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBpbWFnZV9ub2Zmc2V0OiByZXF1ZXN0ZWQgY29tcG9uZW50IGltYWdlIG5vZGUKKyAqCisgKiBmaXRfaW1hZ2Vfc2V0X2hhc2hlcygpIGFkZHMgaGFzaCB2YWx1ZXMgZm9yIGFuIGNvbXBvbmVudCBpbWFnZSBub2RlLiBBbGwKKyAqIGV4aXN0aW5nIGhhc2ggc3Vibm9kZXMgYXJlIGNoZWNrZWQsIGlmIGFsZ29yaXRobSBwcm9wZXJ0eSBpcyBzZXQgdG8gb25lIG9mCisgKiB0aGUgc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtcywgaGFzaCB2YWx1ZSBpcyBjb21wdXRlZCBhbmQgY29ycmVzcG9uZGluZworICogaGFzaCBub2RlIHByb3BlcnR5IGlzIHNldCwgZm9yIGV4YW1wbGU6CisgKgorICogSW5wdXQgY29tcG9uZW50IGltYWdlIG5vZGUgc3RydWN0dXJlOgorICoKKyAqIG8gaW1hZ2VAMSAoYXQgaW1hZ2Vfbm9mZnNldCkKKyAqICAgfCAtIGRhdGEgPSBbYmluYXJ5IGRhdGFdCisgKiAgIG8gaGFzaEAxCisgKiAgICAgfC0gYWxnbyA9ICJzaGExIgorICoKKyAqIE91dHB1dCBjb21wb25lbnQgaW1hZ2Ugbm9kZSBzdHJ1Y3R1cmU6CisgKgorICogbyBpbWFnZUAxIChhdCBpbWFnZV9ub2Zmc2V0KQorICogICB8IC0gZGF0YSA9IFtiaW5hcnkgZGF0YV0KKyAqICAgbyBoYXNoQDEKKyAqICAgICB8LSBhbGdvID0gInNoYTEiCisgKiAgICAgfC0gdmFsdWUgPSBzaGExKGRhdGEpCisgKgorICogcmV0dXJuczoKKyAqICAgICAwIG9uIHN1Y2VzcworICogICAgPDAgb24gZmFpbHVyZQorICovCitpbnQgZml0X2ltYWdlX3NldF9oYXNoZXModm9pZCAqZml0LCBpbnQgaW1hZ2Vfbm9mZnNldCkKK3sKKwljb25zdCB2b2lkICpkYXRhOworCXNpemVfdCBzaXplOworCWNoYXIgKmFsZ287CisJdWludDhfdCB2YWx1ZVtGSVRfTUFYX0hBU0hfTEVOXTsKKwlpbnQgdmFsdWVfbGVuOworCWludCBub2Zmc2V0OworCWludCBuZGVwdGg7CisKKwkvKiBHZXQgaW1hZ2UgZGF0YSBhbmQgZGF0YSBsZW5ndGggKi8KKwlpZiAoZml0X2ltYWdlX2dldF9kYXRhKGZpdCwgaW1hZ2Vfbm9mZnNldCwgJmRhdGEsICZzaXplKSkgeworCQlwcmludGYoIkNhbid0IGdldCBpbWFnZSBkYXRhL3NpemVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogUHJvY2VzcyBhbGwgaGFzaCBzdWJub2RlcyBvZiB0aGUgY29tcG9uZW50IGltYWdlIG5vZGUgKi8KKwlmb3IgKG5kZXB0aCA9IDAsIG5vZmZzZXQgPSBmZHRfbmV4dF9ub2RlKGZpdCwgaW1hZ2Vfbm9mZnNldCwgJm5kZXB0aCk7CisJICAgICAobm9mZnNldCA+PSAwKSAmJiAobmRlcHRoID4gMCk7CisJICAgICBub2Zmc2V0ID0gZmR0X25leHRfbm9kZShmaXQsIG5vZmZzZXQsICZuZGVwdGgpKSB7CisJCWlmIChuZGVwdGggPT0gMSkgeworCQkJLyogRGlyZWN0IGNoaWxkIG5vZGUgb2YgdGhlIGNvbXBvbmVudCBpbWFnZSBub2RlICovCisKKwkJCS8qCisJCQkgKiBDaGVjayBzdWJub2RlIG5hbWUsIG11c3QgYmUgZXF1YWwgdG8gImhhc2giLgorCQkJICogTXVsdGlwbGUgaGFzaCBub2RlcyByZXF1aXJlIHVuaXF1ZSB1bml0IG5vZGUKKwkJCSAqIG5hbWVzLCBlLmcuIGhhc2hAMSwgaGFzaEAyLCBldGMuCisJCQkgKi8KKwkJCWlmIChzdHJuY21wKGZpdF9nZXRfbmFtZShmaXQsIG5vZmZzZXQsIE5VTEwpLAorCQkJCQkJRklUX0hBU0hfTk9ERU5BTUUsCisJCQkJCQlzdHJsZW4oRklUX0hBU0hfTk9ERU5BTUUpKSAhPSAwKSB7CisJCQkJLyogTm90IGEgaGFzaCBzdWJub2RlLCBza2lwIGl0ICovCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChmaXRfaW1hZ2VfaGFzaF9nZXRfYWxnbyhmaXQsIG5vZmZzZXQsICZhbGdvKSkgeworCQkJCXByaW50ZigiQ2FuJ3QgZ2V0IGhhc2ggYWxnbyBwcm9wZXJ0eSBmb3IgIgorCQkJCQkiJyVzJyBoYXNoIG5vZGUgaW4gJyVzJyBpbWFnZSBub2RlXG4iLAorCQkJCQlmaXRfZ2V0X25hbWUoZml0LCBub2Zmc2V0LCBOVUxMKSwKKwkJCQkJZml0X2dldF9uYW1lKGZpdCwgaW1hZ2Vfbm9mZnNldCwgTlVMTCkpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJaWYgKGNhbGN1bGF0ZV9oYXNoKGRhdGEsIHNpemUsIGFsZ28sIHZhbHVlLAorCQkJCQkJJnZhbHVlX2xlbikpIHsKKwkJCQlwcmludGYoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICglcykgZm9yICIKKwkJCQkJIiclcycgaGFzaCBub2RlIGluICclcycgaW1hZ2Ugbm9kZVxuIiwKKwkJCQkJYWxnbywgZml0X2dldF9uYW1lKGZpdCwgbm9mZnNldCwgTlVMTCksCisJCQkJCWZpdF9nZXRfbmFtZShmaXQsIGltYWdlX25vZmZzZXQsCisJCQkJCQkJTlVMTCkpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJaWYgKGZpdF9pbWFnZV9oYXNoX3NldF92YWx1ZShmaXQsIG5vZmZzZXQsIHZhbHVlLAorCQkJCQkJCXZhbHVlX2xlbikpIHsKKwkJCQlwcmludGYoIkNhbid0IHNldCBoYXNoIHZhbHVlIGZvciAiCisJCQkJCSInJXMnIGhhc2ggbm9kZSBpbiAnJXMnIGltYWdlIG5vZGVcbiIsCisJCQkJCWZpdF9nZXRfbmFtZShmaXQsIG5vZmZzZXQsIE5VTEwpLAorCQkJCQlmaXRfZ2V0X25hbWUoZml0LCBpbWFnZV9ub2Zmc2V0LCBOVUxMKSk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZml0X2ltYWdlX2hhc2hfc2V0X3ZhbHVlIC0gc2V0IGhhc2ggdmFsdWUgaW4gcmVxdWVzdGVkIGhhcyBub2RlCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IGhhc2ggbm9kZSBvZmZzZXQKKyAqIEB2YWx1ZTogaGFzaCB2YWx1ZSB0byBiZSBzZXQKKyAqIEB2YWx1ZV9sZW46IGhhc2ggdmFsdWUgbGVuZ3RoCisgKgorICogZml0X2ltYWdlX2hhc2hfc2V0X3ZhbHVlKCkgYXR0ZW1wdHMgdG8gc2V0IGhhc2ggdmFsdWUgaW4gYSBub2RlIGF0IG9mZnNldAorICogZ2l2ZW4gYW5kIHJldHVybnMgb3BlcmF0aW9uIHN0YXR1cyB0byB0aGUgY2FsbGVyLgorICoKKyAqIHJldHVybnMKKyAqICAgICAwLCBvbiBzdWNjZXNzCisgKiAgICAgLTEsIG9uIGZhaWx1cmUKKyAqLworaW50IGZpdF9pbWFnZV9oYXNoX3NldF92YWx1ZSh2b2lkICpmaXQsIGludCBub2Zmc2V0LCB1aW50OF90ICp2YWx1ZSwKKwkJCQlpbnQgdmFsdWVfbGVuKQoreworCWludCByZXQ7CisKKwlyZXQgPSBmZHRfc2V0cHJvcChmaXQsIG5vZmZzZXQsIEZJVF9WQUxVRV9QUk9QLCB2YWx1ZSwgdmFsdWVfbGVuKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZigiQ2FuJ3Qgc2V0IGhhc2ggJyVzJyBwcm9wZXJ0eSBmb3IgJyVzJyBub2RlKCVzKVxuIiwKKwkJCUZJVF9WQUxVRV9QUk9QLCBmaXRfZ2V0X25hbWUoZml0LCBub2Zmc2V0LCBOVUxMKSwKKwkJCWZkdF9zdHJlcnJvcihyZXQpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIFVTRV9IT1NUQ0MgKi8KKworLyoqCisgKiBmaXRfaW1hZ2VfY2hlY2tfaGFzaGVzIC0gdmVyaWZ5IGRhdGEgaW50ZXJnaXR5CisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQGltYWdlX25vZmZzZXQ6IGNvbXBvbmVudCBpbWFnZSBub2RlIG9mZnNldAorICoKKyAqIGZpdF9pbWFnZV9jaGVja19oYXNoZXMoKSBnb2VzIG92ZXIgY29tcG9uZW50IGltYWdlIGhhc2ggbm9kZXMsCisgKiByZS1jYWxjdWxhdGVzIGVhY2ggZGF0YSBoYXNoIGFuZCBjb21wYXJlcyB3aXRoIHRoZSB2YWx1ZSBzdG9yZWQgaW4gaGFzaAorICogbm9kZS4KKyAqCisgKiByZXR1cm5zOgorICogICAgIDEsIGlmIGFsbCBoYXNoZXMgYXJlIHZhbGlkCisgKiAgICAgMCwgb3RoZXJ3aXNlIChvciBvbiBlcnJvcikKKyAqLworaW50IGZpdF9pbWFnZV9jaGVja19oYXNoZXMoY29uc3Qgdm9pZCAqZml0LCBpbnQgaW1hZ2Vfbm9mZnNldCkKK3sKKwljb25zdCB2b2lkCSpkYXRhOworCXNpemVfdAkJc2l6ZTsKKwljaGFyCQkqYWxnbzsKKwl1aW50OF90CQkqZml0X3ZhbHVlOworCWludAkJZml0X3ZhbHVlX2xlbjsKKwl1aW50OF90CQl2YWx1ZVtGSVRfTUFYX0hBU0hfTEVOXTsKKwlpbnQJCXZhbHVlX2xlbjsKKwlpbnQJCW5vZmZzZXQ7CisJaW50CQluZGVwdGg7CisJY2hhcgkJKmVycl9tc2cgPSAiIjsKKworCS8qIEdldCBpbWFnZSBkYXRhIGFuZCBkYXRhIGxlbmd0aCAqLworCWlmIChmaXRfaW1hZ2VfZ2V0X2RhdGEoZml0LCBpbWFnZV9ub2Zmc2V0LCAmZGF0YSwgJnNpemUpKSB7CisJCXByaW50ZigiQ2FuJ3QgZ2V0IGltYWdlIGRhdGEvc2l6ZVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIFByb2Nlc3MgYWxsIGhhc2ggc3Vibm9kZXMgb2YgdGhlIGNvbXBvbmVudCBpbWFnZSBub2RlICovCisJZm9yIChuZGVwdGggPSAwLCBub2Zmc2V0ID0gZmR0X25leHRfbm9kZShmaXQsIGltYWdlX25vZmZzZXQsICZuZGVwdGgpOworCSAgICAgKG5vZmZzZXQgPj0gMCkgJiYgKG5kZXB0aCA+IDApOworCSAgICAgbm9mZnNldCA9IGZkdF9uZXh0X25vZGUoZml0LCBub2Zmc2V0LCAmbmRlcHRoKSkgeworCQlpZiAobmRlcHRoID09IDEpIHsKKwkJCS8qIERpcmVjdCBjaGlsZCBub2RlIG9mIHRoZSBjb21wb25lbnQgaW1hZ2Ugbm9kZSAqLworCisJCQkvKgorCQkJICogQ2hlY2sgc3Vibm9kZSBuYW1lLCBtdXN0IGJlIGVxdWFsIHRvICJoYXNoIi4KKwkJCSAqIE11bHRpcGxlIGhhc2ggbm9kZXMgcmVxdWlyZSB1bmlxdWUgdW5pdCBub2RlCisJCQkgKiBuYW1lcywgZS5nLiBoYXNoQDEsIGhhc2hAMiwgZXRjLgorCQkJICovCisJCQlpZiAoc3RybmNtcChmaXRfZ2V0X25hbWUoZml0LCBub2Zmc2V0LCBOVUxMKSwKKwkJCQkJRklUX0hBU0hfTk9ERU5BTUUsCisJCQkJCXN0cmxlbihGSVRfSEFTSF9OT0RFTkFNRSkpICE9IDApCisJCQkJY29udGludWU7CisKKwkJCWlmIChmaXRfaW1hZ2VfaGFzaF9nZXRfYWxnbyhmaXQsIG5vZmZzZXQsICZhbGdvKSkgeworCQkJCWVycl9tc2cgPSAiIGVycm9yIVxuQ2FuJ3QgZ2V0IGhhc2ggYWxnbyAiCisJCQkJCQkicHJvcGVydHkiOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQlwcmludGYoIiVzIiwgYWxnbyk7CisKKwkJCWlmIChmaXRfaW1hZ2VfaGFzaF9nZXRfdmFsdWUoZml0LCBub2Zmc2V0LCAmZml0X3ZhbHVlLAorCQkJCQkJCSZmaXRfdmFsdWVfbGVuKSkgeworCQkJCWVycl9tc2cgPSAiIGVycm9yIVxuQ2FuJ3QgZ2V0IGhhc2ggdmFsdWUgIgorCQkJCQkJInByb3BlcnR5IjsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCisJCQlpZiAoY2FsY3VsYXRlX2hhc2goZGF0YSwgc2l6ZSwgYWxnbywgdmFsdWUsCisJCQkJCQkmdmFsdWVfbGVuKSkgeworCQkJCWVycl9tc2cgPSAiIGVycm9yIVxuIgorCQkJCQkJIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtIjsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCisJCQlpZiAodmFsdWVfbGVuICE9IGZpdF92YWx1ZV9sZW4pIHsKKwkJCQllcnJfbXNnID0gIiBlcnJvciAhXG5CYWQgaGFzaCB2YWx1ZSBsZW4iOworCQkJCWdvdG8gZXJyb3I7CisJCQl9IGVsc2UgaWYgKG1lbWNtcCh2YWx1ZSwgZml0X3ZhbHVlLCB2YWx1ZV9sZW4pICE9IDApIHsKKwkJCQllcnJfbXNnID0gIiBlcnJvciFcbkJhZCBoYXNoIHZhbHVlIjsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJcHJpbnRmKCIrICIpOworCQl9CisJfQorCisJcmV0dXJuIDE7CisKK2Vycm9yOgorCXByaW50ZigiJXMgZm9yICclcycgaGFzaCBub2RlIGluICclcycgaW1hZ2Ugbm9kZVxuIiwKKwkJCWVycl9tc2csIGZpdF9nZXRfbmFtZShmaXQsIG5vZmZzZXQsIE5VTEwpLAorCQkJZml0X2dldF9uYW1lKGZpdCwgaW1hZ2Vfbm9mZnNldCwgTlVMTCkpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpdF9hbGxfaW1hZ2VfY2hlY2tfaGFzaGVzIC0gdmVyaWZ5IGRhdGEgaW50ZXJnaXR5IGZvciBhbGwgaW1hZ2VzCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICoKKyAqIGZpdF9hbGxfaW1hZ2VfY2hlY2tfaGFzaGVzKCkgZ29lcyBvdmVyIGFsbCBpbWFnZXMgaW4gdGhlIEZJVCBhbmQKKyAqIGZvciBldmVyeSBpbWFnZXMgY2hlY2tzIGlmIGFsbCBpdCdzIGhhc2hlcyBhcmUgdmFsaWQuCisgKgorICogcmV0dXJuczoKKyAqICAgICAxLCBpZiBhbGwgaGFzaGVzIG9mIGFsbCBpbWFnZXMgYXJlIHZhbGlkCisgKiAgICAgMCwgb3RoZXJ3aXNlIChvciBvbiBlcnJvcikKKyAqLworaW50IGZpdF9hbGxfaW1hZ2VfY2hlY2tfaGFzaGVzKGNvbnN0IHZvaWQgKmZpdCkKK3sKKwlpbnQgaW1hZ2VzX25vZmZzZXQ7CisJaW50IG5vZmZzZXQ7CisJaW50IG5kZXB0aDsKKwlpbnQgY291bnQ7CisKKwkvKiBGaW5kIGltYWdlcyBwYXJlbnQgbm9kZSBvZmZzZXQgKi8KKwlpbWFnZXNfbm9mZnNldCA9IGZkdF9wYXRoX29mZnNldChmaXQsIEZJVF9JTUFHRVNfUEFUSCk7CisJaWYgKGltYWdlc19ub2Zmc2V0IDwgMCkgeworCQlwcmludGYoIkNhbid0IGZpbmQgaW1hZ2VzIHBhcmVudCBub2RlICclcycgKCVzKVxuIiwKKwkJCUZJVF9JTUFHRVNfUEFUSCwgZmR0X3N0cmVycm9yKGltYWdlc19ub2Zmc2V0KSk7CisJCXJldHVybiAwOworCX0KKworCS8qIFByb2Nlc3MgYWxsIGltYWdlIHN1Ym5vZGVzLCBjaGVjayBoYXNoZXMgZm9yIGVhY2ggKi8KKwlwcmludGYoIiMjIENoZWNraW5nIGhhc2goZXMpIGZvciBGSVQgSW1hZ2UgYXQgJTA4bHggLi4uXG4iLAorCQkodWxvbmcpZml0KTsKKwlmb3IgKG5kZXB0aCA9IDAsIGNvdW50ID0gMCwKKwkJbm9mZnNldCA9IGZkdF9uZXh0X25vZGUoZml0LCBpbWFnZXNfbm9mZnNldCwgJm5kZXB0aCk7CisJCShub2Zmc2V0ID49IDApICYmIChuZGVwdGggPiAwKTsKKwkJbm9mZnNldCA9IGZkdF9uZXh0X25vZGUoZml0LCBub2Zmc2V0LCAmbmRlcHRoKSkgeworCQlpZiAobmRlcHRoID09IDEpIHsKKwkJCS8qCisJCQkgKiBEaXJlY3QgY2hpbGQgbm9kZSBvZiB0aGUgaW1hZ2VzIHBhcmVudCBub2RlLAorCQkJICogaS5lLiBjb21wb25lbnQgaW1hZ2Ugbm9kZS4KKwkJCSAqLworCQkJcHJpbnRmKCIgICBIYXNoKGVzKSBmb3IgSW1hZ2UgJXUgKCVzKTogIiwgY291bnQrKywKKwkJCQkJZml0X2dldF9uYW1lKGZpdCwgbm9mZnNldCwgTlVMTCkpOworCisJCQlpZiAoIWZpdF9pbWFnZV9jaGVja19oYXNoZXMoZml0LCBub2Zmc2V0KSkKKwkJCQlyZXR1cm4gMDsKKwkJCXByaW50ZigiXG4iKTsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBmaXRfaW1hZ2VfY2hlY2tfb3MgLSBjaGVjayB3aGV0aGVyIGltYWdlIG5vZGUgaXMgb2YgYSBnaXZlbiBvcyB0eXBlCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IGNvbXBvbmVudCBpbWFnZSBub2RlIG9mZnNldAorICogQG9zOiByZXF1ZXN0ZWQgaW1hZ2Ugb3MKKyAqCisgKiBmaXRfaW1hZ2VfY2hlY2tfb3MoKSByZWFkcyBpbWFnZSBvcyBwcm9wZXJ0eSBhbmQgY29tcGFyZXMgaXRzIG51bWVyaWMKKyAqIGlkIHdpdGggdGhlIHJlcXVlc3RlZCBvcy4gQ29tcGFyaXNvbiByZXN1bHQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KKyAqCisgKiByZXR1cm5zOgorICogICAgIDEgaWYgaW1hZ2UgaXMgb2YgZ2l2ZW4gb3MgdHlwZQorICogICAgIDAgb3RoZXJ3aXNlIChvciBvbiBlcnJvcikKKyAqLworaW50IGZpdF9pbWFnZV9jaGVja19vcyhjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCB1aW50OF90IG9zKQoreworCXVpbnQ4X3QgaW1hZ2Vfb3M7CisKKwlpZiAoZml0X2ltYWdlX2dldF9vcyhmaXQsIG5vZmZzZXQsICZpbWFnZV9vcykpCisJCXJldHVybiAwOworCXJldHVybiAob3MgPT0gaW1hZ2Vfb3MpOworfQorCisvKioKKyAqIGZpdF9pbWFnZV9jaGVja19hcmNoIC0gY2hlY2sgd2hldGhlciBpbWFnZSBub2RlIGlzIG9mIGEgZ2l2ZW4gYXJjaAorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBub2Zmc2V0OiBjb21wb25lbnQgaW1hZ2Ugbm9kZSBvZmZzZXQKKyAqIEBhcmNoOiByZXF1ZXN0ZWQgaW1hZ2VhcmNoCisgKgorICogZml0X2ltYWdlX2NoZWNrX2FyY2goKSByZWFkcyBpbWFnZSBhcmNoIHByb3BlcnR5IGFuZCBjb21wYXJlcyBpdHMgbnVtZXJpYworICogaWQgd2l0aCB0aGUgcmVxdWVzdGVkIGFyY2guIENvbXBhcmlzb24gcmVzdWx0IGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisgKgorICogcmV0dXJuczoKKyAqICAgICAxIGlmIGltYWdlIGlzIG9mIGdpdmVuIGFyY2gKKyAqICAgICAwIG90aGVyd2lzZSAob3Igb24gZXJyb3IpCisgKi8KK2ludCBmaXRfaW1hZ2VfY2hlY2tfYXJjaChjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCB1aW50OF90IGFyY2gpCit7CisJdWludDhfdCBpbWFnZV9hcmNoOworCisJaWYgKGZpdF9pbWFnZV9nZXRfYXJjaChmaXQsIG5vZmZzZXQsICZpbWFnZV9hcmNoKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChhcmNoID09IGltYWdlX2FyY2gpOworfQorCisvKioKKyAqIGZpdF9pbWFnZV9jaGVja190eXBlIC0gY2hlY2sgd2hldGhlciBpbWFnZSBub2RlIGlzIG9mIGEgZ2l2ZW4gdHlwZQorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBub2Zmc2V0OiBjb21wb25lbnQgaW1hZ2Ugbm9kZSBvZmZzZXQKKyAqIEB0eXBlOiByZXF1ZXN0ZWQgaW1hZ2UgdHlwZQorICoKKyAqIGZpdF9pbWFnZV9jaGVja190eXBlKCkgcmVhZHMgaW1hZ2UgdHlwZSBwcm9wZXJ0eSBhbmQgY29tcGFyZXMgaXRzIG51bWVyaWMKKyAqIGlkIHdpdGggdGhlIHJlcXVlc3RlZCB0eXBlLiBDb21wYXJpc29uIHJlc3VsdCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMSBpZiBpbWFnZSBpcyBvZiBnaXZlbiB0eXBlCisgKiAgICAgMCBvdGhlcndpc2UgKG9yIG9uIGVycm9yKQorICovCitpbnQgZml0X2ltYWdlX2NoZWNrX3R5cGUoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgdWludDhfdCB0eXBlKQoreworCXVpbnQ4X3QgaW1hZ2VfdHlwZTsKKworCWlmIChmaXRfaW1hZ2VfZ2V0X3R5cGUoZml0LCBub2Zmc2V0LCAmaW1hZ2VfdHlwZSkpCisJCXJldHVybiAwOworCXJldHVybiAodHlwZSA9PSBpbWFnZV90eXBlKTsKK30KKworLyoqCisgKiBmaXRfaW1hZ2VfY2hlY2tfY29tcCAtIGNoZWNrIHdoZXRoZXIgaW1hZ2Ugbm9kZSB1c2VzIGdpdmVuIGNvbXByZXNzaW9uCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IGNvbXBvbmVudCBpbWFnZSBub2RlIG9mZnNldAorICogQGNvbXA6IHJlcXVlc3RlZCBpbWFnZSBjb21wcmVzc2lvbiB0eXBlCisgKgorICogZml0X2ltYWdlX2NoZWNrX2NvbXAoKSByZWFkcyBpbWFnZSBjb21wcmVzc2lvbiBwcm9wZXJ0eSBhbmQgY29tcGFyZXMgaXRzCisgKiBudW1lcmljIGlkIHdpdGggdGhlIHJlcXVlc3RlZCBjb21wcmVzc2lvbiB0eXBlLiBDb21wYXJpc29uIHJlc3VsdCBpcworICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KKyAqCisgKiByZXR1cm5zOgorICogICAgIDEgaWYgaW1hZ2UgdXNlcyByZXF1ZXN0ZWQgY29tcHJlc3Npb24KKyAqICAgICAwIG90aGVyd2lzZSAob3Igb24gZXJyb3IpCisgKi8KK2ludCBmaXRfaW1hZ2VfY2hlY2tfY29tcChjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCB1aW50OF90IGNvbXApCit7CisJdWludDhfdCBpbWFnZV9jb21wOworCisJaWYgKGZpdF9pbWFnZV9nZXRfY29tcChmaXQsIG5vZmZzZXQsICZpbWFnZV9jb21wKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChjb21wID09IGltYWdlX2NvbXApOworfQorCisvKioKKyAqIGZpdF9jaGVja19mb3JtYXQgLSBzYW5pdHkgY2hlY2sgRklUIGltYWdlIGZvcm1hdAorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqCisgKiBmaXRfY2hlY2tfZm9ybWF0KCkgcnVucyBhIGJhc2ljIHNhbml0eSBGSVQgaW1hZ2UgdmVyaWZpY2F0aW9uLgorICogUm91dGluZSBjaGVja3MgZm9yIG1hbmRhdG9yeSBwcm9wZXJ0aWVzLCBub2RlcywgZXRjLgorICoKKyAqIHJldHVybnM6CisgKiAgICAgMSwgb24gc3VjY2VzcworICogICAgIDAsIG9uIGZhaWx1cmUKKyAqLworaW50IGZpdF9jaGVja19mb3JtYXQoY29uc3Qgdm9pZCAqZml0KQoreworCS8qIG1hbmRhdG9yeSAvIG5vZGUgJ2Rlc2NyaXB0aW9uJyBwcm9wZXJ0eSAqLworCWlmIChmZHRfZ2V0cHJvcChmaXQsIDAsIEZJVF9ERVNDX1BST1AsIE5VTEwpID09IE5VTEwpIHsKKwkJZGVidWcoIldyb25nIEZJVCBmb3JtYXQ6IG5vIGRlc2NyaXB0aW9uXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisjaWYgZGVmaW5lZChDT05GSUdfVElNRVNUQU1QKSB8fCBkZWZpbmVkKENPTkZJR19DTURfREFURSkgfHwgZGVmaW5lZChVU0VfSE9TVENDKQorCS8qIG1hbmRhdG9yeSAvIG5vZGUgJ3RpbWVzdGFtcCcgcHJvcGVydHkgKi8KKwlpZiAoZmR0X2dldHByb3AoZml0LCAwLCBGSVRfVElNRVNUQU1QX1BST1AsIE5VTEwpID09IE5VTEwpIHsKKwkJZGVidWcoIldyb25nIEZJVCBmb3JtYXQ6IG5vIHRpbWVzdGFtcFxuIik7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCisJLyogbWFuZGF0b3J5IHN1YmltYWdlcyBwYXJlbnQgJy9pbWFnZXMnIG5vZGUgKi8KKwlpZiAoZmR0X3BhdGhfb2Zmc2V0KGZpdCwgRklUX0lNQUdFU19QQVRIKSA8IDApIHsKKwkJZGVidWcoIldyb25nIEZJVCBmb3JtYXQ6IG5vIGltYWdlcyBwYXJlbnQgbm9kZVxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKioKKyAqIGZpdF9jb25mX2dldF9ub2RlIC0gZ2V0IG5vZGUgb2Zmc2V0IGZvciBjb25maWd1cmF0aW9uIG9mIGEgZ2l2ZW4gdW5pdCBuYW1lCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQGNvbmZfdW5hbWU6IGNvbmZpZ3VyYXRpb24gbm9kZSB1bml0IG5hbWUKKyAqCisgKiBmaXRfY29uZl9nZXRfbm9kZSgpIGZpbmRzIGEgY29uZmlndXJhdGlvbiAod2l0aGluZyB0aGUgJy9jb25maWd1cmF0aW9ucycKKyAqIHBhcmFudCBub2RlKSBvZiBhIHByb3ZpZGVkIHVuaXQgbmFtZS4gSWYgY29uZmlndXJhdGlvbiBpcyBmb3VuZCBpdHMgbm9kZSBvZmZzZXQKKyAqIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisgKgorICogV2hlbiBOVUxMIGlzIHByb3ZpZGVkIGluIHNlY29uZCBhcmd1bWVudCBmaXRfY29uZl9nZXRfbm9kZSgpIHdpbGwgc2VhcmNoCisgKiBmb3IgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gbm9kZSBpbnN0ZWFkLiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gbm9kZSB1bml0IG5hbWUKKyAqIGlzIHJldHJpdmVkIGZyb20gRklUX0RFRkFVTFRfUFJPUCBwcm9wZXJ0eSBvZiB0aGUgJy9jb25maWd1cmF0aW9ucycgbm9kZS4KKyAqCisgKiByZXR1cm5zOgorICogICAgIGNvbmZpZ3VyYXRpb24gbm9kZSBvZmZzZXQgd2hlbiBmb3VuZCAoPj0wKQorICogICAgIG5lZ2F0aXZlIG51bWJlciBvbiBmYWlsdXJlIChGRFRfRVJSXyogY29kZSkKKyAqLworaW50IGZpdF9jb25mX2dldF9ub2RlKGNvbnN0IHZvaWQgKmZpdCwgY29uc3QgY2hhciAqY29uZl91bmFtZSkKK3sKKwlpbnQgbm9mZnNldCwgY29uZnNfbm9mZnNldDsKKwlpbnQgbGVuOworCisJY29uZnNfbm9mZnNldCA9IGZkdF9wYXRoX29mZnNldChmaXQsIEZJVF9DT05GU19QQVRIKTsKKwlpZiAoY29uZnNfbm9mZnNldCA8IDApIHsKKwkJZGVidWcoIkNhbid0IGZpbmQgY29uZmlndXJhdGlvbnMgcGFyZW50IG5vZGUgJyVzJyAoJXMpXG4iLAorCQkJRklUX0NPTkZTX1BBVEgsIGZkdF9zdHJlcnJvcihjb25mc19ub2Zmc2V0KSk7CisJCXJldHVybiBjb25mc19ub2Zmc2V0OworCX0KKworCWlmIChjb25mX3VuYW1lID09IE5VTEwpIHsKKwkJLyogZ2V0IGNvbmZpZ3VyYXRpb24gdW5pdCBuYW1lIGZyb20gdGhlIGRlZmF1bHQgcHJvcGVydHkgKi8KKwkJZGVidWcoIk5vIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkLCB0cnlpbmcgZGVmYXVsdC4uLlxuIik7CisJCWNvbmZfdW5hbWUgPSAoY2hhciAqKWZkdF9nZXRwcm9wKGZpdCwgY29uZnNfbm9mZnNldCwKKwkJCQkJCSBGSVRfREVGQVVMVF9QUk9QLCAmbGVuKTsKKwkJaWYgKGNvbmZfdW5hbWUgPT0gTlVMTCkgeworCQkJZml0X2dldF9kZWJ1ZyhmaXQsIGNvbmZzX25vZmZzZXQsIEZJVF9ERUZBVUxUX1BST1AsCisJCQkJCWxlbik7CisJCQlyZXR1cm4gbGVuOworCQl9CisJCWRlYnVnKCJGb3VuZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb246ICclcydcbiIsIGNvbmZfdW5hbWUpOworCX0KKworCW5vZmZzZXQgPSBmZHRfc3Vibm9kZV9vZmZzZXQoZml0LCBjb25mc19ub2Zmc2V0LCBjb25mX3VuYW1lKTsKKwlpZiAobm9mZnNldCA8IDApIHsKKwkJZGVidWcoIkNhbid0IGdldCBub2RlIG9mZnNldCBmb3IgY29uZmlndXJhdGlvbiB1bml0IG5hbWU6ICIKKwkJCSInJXMnICglcylcbiIsCisJCQljb25mX3VuYW1lLCBmZHRfc3RyZXJyb3Iobm9mZnNldCkpOworCX0KKworCXJldHVybiBub2Zmc2V0OworfQorCitzdGF0aWMgaW50IF9fZml0X2NvbmZfZ2V0X3Byb3Bfbm9kZShjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LAorCQljb25zdCBjaGFyICpwcm9wX25hbWUpCit7CisJY2hhciAqdW5hbWU7CisJaW50IGxlbjsKKworCS8qIGdldCBrZXJuZWwgaW1hZ2UgdW5pdCBuYW1lIGZyb20gY29uZmlndXJhdGlvbiBrZXJuZWwgcHJvcGVydHkgKi8KKwl1bmFtZSA9IChjaGFyICopZmR0X2dldHByb3AoZml0LCBub2Zmc2V0LCBwcm9wX25hbWUsICZsZW4pOworCWlmICh1bmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gbGVuOworCisJcmV0dXJuIGZpdF9pbWFnZV9nZXRfbm9kZShmaXQsIHVuYW1lKTsKK30KKworLyoqCisgKiBmaXRfY29uZl9nZXRfa2VybmVsX25vZGUgLSBnZXQga2VybmVsIGltYWdlIG5vZGUgb2Zmc2V0IHRoYXQgY29ycmVzcG9uZHMgdG8KKyAqIGEgZ2l2ZW4gY29uZmlndXJhdGlvbgorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBub2Zmc2V0OiBjb25maWd1cmF0aW9uIG5vZGUgb2Zmc2V0CisgKgorICogZml0X2NvbmZfZ2V0X2tlcm5lbF9ub2RlKCkgcmV0cml2ZXMga2VybmVsIGltYWdlIG5vZGUgdW5pdCBuYW1lIGZyb20KKyAqIGNvbmZpZ3VyYXRpb24gRklUX0tFUk5FTF9QUk9QIHByb3BlcnR5IGFuZCB0cmFuc2xhdGVzIGl0IHRvIHRoZSBub2RlCisgKiBvZmZzZXQuCisgKgorICogcmV0dXJuczoKKyAqICAgICBpbWFnZSBub2RlIG9mZnNldCB3aGVuIGZvdW5kICg+PTApCisgKiAgICAgbmVnYXRpdmUgbnVtYmVyIG9uIGZhaWx1cmUgKEZEVF9FUlJfKiBjb2RlKQorICovCitpbnQgZml0X2NvbmZfZ2V0X2tlcm5lbF9ub2RlKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQpCit7CisJcmV0dXJuIF9fZml0X2NvbmZfZ2V0X3Byb3Bfbm9kZShmaXQsIG5vZmZzZXQsIEZJVF9LRVJORUxfUFJPUCk7Cit9CisKKy8qKgorICogZml0X2NvbmZfZ2V0X3JhbWRpc2tfbm9kZSAtIGdldCByYW1kaXNrIGltYWdlIG5vZGUgb2Zmc2V0IHRoYXQgY29ycmVzcG9uZHMgdG8KKyAqIGEgZ2l2ZW4gY29uZmlndXJhdGlvbgorICogQGZpdDogcG9pbnRlciB0byB0aGUgRklUIGZvcm1hdCBpbWFnZSBoZWFkZXIKKyAqIEBub2Zmc2V0OiBjb25maWd1cmF0aW9uIG5vZGUgb2Zmc2V0CisgKgorICogZml0X2NvbmZfZ2V0X3JhbWRpc2tfbm9kZSgpIHJldHJpdmVzIHJhbWRpc2sgaW1hZ2Ugbm9kZSB1bml0IG5hbWUgZnJvbQorICogY29uZmlndXJhdGlvbiBGSVRfS0VSTkVMX1BST1AgcHJvcGVydHkgYW5kIHRyYW5zbGF0ZXMgaXQgdG8gdGhlIG5vZGUKKyAqIG9mZnNldC4KKyAqCisgKiByZXR1cm5zOgorICogICAgIGltYWdlIG5vZGUgb2Zmc2V0IHdoZW4gZm91bmQgKD49MCkKKyAqICAgICBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZSAoRkRUX0VSUl8qIGNvZGUpCisgKi8KK2ludCBmaXRfY29uZl9nZXRfcmFtZGlza19ub2RlKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQpCit7CisJcmV0dXJuIF9fZml0X2NvbmZfZ2V0X3Byb3Bfbm9kZShmaXQsIG5vZmZzZXQsIEZJVF9SQU1ESVNLX1BST1ApOworfQorCisvKioKKyAqIGZpdF9jb25mX2dldF9mZHRfbm9kZSAtIGdldCBmZHQgaW1hZ2Ugbm9kZSBvZmZzZXQgdGhhdCBjb3JyZXNwb25kcyB0bworICogYSBnaXZlbiBjb25maWd1cmF0aW9uCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICogQG5vZmZzZXQ6IGNvbmZpZ3VyYXRpb24gbm9kZSBvZmZzZXQKKyAqCisgKiBmaXRfY29uZl9nZXRfZmR0X25vZGUoKSByZXRyaXZlcyBmZHQgaW1hZ2Ugbm9kZSB1bml0IG5hbWUgZnJvbQorICogY29uZmlndXJhdGlvbiBGSVRfS0VSTkVMX1BST1AgcHJvcGVydHkgYW5kIHRyYW5zbGF0ZXMgaXQgdG8gdGhlIG5vZGUKKyAqIG9mZnNldC4KKyAqCisgKiByZXR1cm5zOgorICogICAgIGltYWdlIG5vZGUgb2Zmc2V0IHdoZW4gZm91bmQgKD49MCkKKyAqICAgICBuZWdhdGl2ZSBudW1iZXIgb24gZmFpbHVyZSAoRkRUX0VSUl8qIGNvZGUpCisgKi8KK2ludCBmaXRfY29uZl9nZXRfZmR0X25vZGUoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCkKK3sKKwlyZXR1cm4gX19maXRfY29uZl9nZXRfcHJvcF9ub2RlKGZpdCwgbm9mZnNldCwgRklUX0ZEVF9QUk9QKTsKK30KKworLyoqCisgKiBmaXRfY29uZl9wcmludCAtIHByaW50cyBvdXQgdGhlIEZJVCBjb25maWd1cmF0aW9uIGRldGFpbHMKKyAqIEBmaXQ6IHBvaW50ZXIgdG8gdGhlIEZJVCBmb3JtYXQgaW1hZ2UgaGVhZGVyCisgKiBAbm9mZnNldDogb2Zmc2V0IG9mIHRoZSBjb25maWd1cmF0aW9uIG5vZGUKKyAqIEBwOiBwb2ludGVyIHRvIHByZWZpeCBzdHJpbmcKKyAqCisgKiBmaXRfY29uZl9wcmludCgpIGxpc3RzIGFsbCBtYW5kYXRvcnkgcHJvcGVyaWVzIGZvciB0aGUgcHJvY2Vzc2VkCisgKiBjb25maWd1cmF0aW9uIG5vZGUuCisgKgorICogcmV0dXJuczoKKyAqICAgICBubyByZXR1cm5lZCByZXN1bHRzCisgKi8KK3ZvaWQgZml0X2NvbmZfcHJpbnQoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgY29uc3QgY2hhciAqcCkKK3sKKwljaGFyICpkZXNjOworCWNoYXIgKnVuYW1lOworCWludCByZXQ7CisKKwkvKiBNYW5kYXRvcnkgcHJvcGVydGllcyAqLworCXJldCA9IGZpdF9nZXRfZGVzYyhmaXQsIG5vZmZzZXQsICZkZXNjKTsKKwlwcmludGYoIiVzICBEZXNjcmlwdGlvbjogICIsIHApOworCWlmIChyZXQpCisJCXByaW50ZigidW5hdmFpbGFibGVcbiIpOworCWVsc2UKKwkJcHJpbnRmKCIlc1xuIiwgZGVzYyk7CisKKwl1bmFtZSA9IChjaGFyICopZmR0X2dldHByb3AoZml0LCBub2Zmc2V0LCBGSVRfS0VSTkVMX1BST1AsIE5VTEwpOworCXByaW50ZigiJXMgIEtlcm5lbDogICAgICAgIiwgcCk7CisJaWYgKHVuYW1lID09IE5VTEwpCisJCXByaW50ZigidW5hdmFpbGFibGVcbiIpOworCWVsc2UKKwkJcHJpbnRmKCIlc1xuIiwgdW5hbWUpOworCisJLyogT3B0aW9uYWwgcHJvcGVydGllcyAqLworCXVuYW1lID0gKGNoYXIgKilmZHRfZ2V0cHJvcChmaXQsIG5vZmZzZXQsIEZJVF9SQU1ESVNLX1BST1AsIE5VTEwpOworCWlmICh1bmFtZSkKKwkJcHJpbnRmKCIlcyAgSW5pdCBSYW1kaXNrOiAlc1xuIiwgcCwgdW5hbWUpOworCisJdW5hbWUgPSAoY2hhciAqKWZkdF9nZXRwcm9wKGZpdCwgbm9mZnNldCwgRklUX0ZEVF9QUk9QLCBOVUxMKTsKKwlpZiAodW5hbWUpCisJCXByaW50ZigiJXMgIEZEVDogICAgICAgICAgJXNcbiIsIHAsIHVuYW1lKTsKK30KKworLyoqCisgKiBmaXRfY2hlY2tfcmFtZGlzayAtIHZlcmlmeSBGSVQgZm9ybWF0IHJhbWRpc2sgc3ViaW1hZ2UKKyAqIEBmaXRfaGRyOiBwb2ludGVyIHRvIHRoZSBGSVQgcmFtZGlzayBoZWFkZXIKKyAqIEByZF9ub2Zmc2V0OiByYW1kaXNrIHN1YmltYWdlIG5vZGUgb2Zmc2V0IHdpdGhpbiBGSVQgaW1hZ2UKKyAqIEBhcmNoOiByZXF1ZXN0ZWQgcmFtZGlzayBpbWFnZSBhcmNoaXRlY3R1cmUgdHlwZQorICogQHZlcmlmeTogZGF0YSBDUkMgdmVyaWZpY2F0aW9uIGZsYWcKKyAqCisgKiBmaXRfY2hlY2tfcmFtZGlzaygpIHZlcmlmaWVzIGludGVncml0eSBvZiB0aGUgcmFtZGlzayBzdWJpbWFnZSBhbmQgZnJvbQorICogc3BlY2lmaWVkIEZJVCBpbWFnZS4KKyAqCisgKiByZXR1cm5zOgorICogICAgIDEsIG9uIHN1Y2Nlc3MKKyAqICAgICAwLCBvbiBmYWlsdXJlCisgKi8KKyNpZm5kZWYgVVNFX0hPU1RDQworc3RhdGljIGludCBmaXRfY2hlY2tfcmFtZGlzayhjb25zdCB2b2lkICpmaXQsIGludCByZF9ub2Zmc2V0LCB1aW50OF90IGFyY2gsCisJCQkJaW50IHZlcmlmeSkKK3sKKwlmaXRfaW1hZ2VfcHJpbnQoZml0LCByZF9ub2Zmc2V0LCAiICAgIik7CisKKwlpZiAodmVyaWZ5KSB7CisJCXB1dHMoIiAgIFZlcmlmeWluZyBIYXNoIEludGVncml0eSAuLi4gIik7CisJCWlmICghZml0X2ltYWdlX2NoZWNrX2hhc2hlcyhmaXQsIHJkX25vZmZzZXQpKSB7CisJCQlwdXRzKCJCYWQgRGF0YSBIYXNoXG4iKTsKKwkJCWJvb3RzdGFnZV9lcnJvcihCT09UU1RBR0VfSURfRklUX1JEX0hBU0gpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcHV0cygiT0tcbiIpOworCX0KKworCWJvb3RzdGFnZV9tYXJrKEJPT1RTVEFHRV9JRF9GSVRfUkRfQ0hFQ0tfQUxMKTsKKwlpZiAoIWZpdF9pbWFnZV9jaGVja19vcyhmaXQsIHJkX25vZmZzZXQsIElIX09TX0xJTlVYKSB8fAorCSAgICAhZml0X2ltYWdlX2NoZWNrX2FyY2goZml0LCByZF9ub2Zmc2V0LCBhcmNoKSB8fAorCSAgICAhZml0X2ltYWdlX2NoZWNrX3R5cGUoZml0LCByZF9ub2Zmc2V0LCBJSF9UWVBFX1JBTURJU0spKSB7CisJCXByaW50ZigiTm8gTGludXggJXMgUmFtZGlzayBJbWFnZVxuIiwKKwkJCQlnZW5pbWdfZ2V0X2FyY2hfbmFtZShhcmNoKSk7CisJCWJvb3RzdGFnZV9lcnJvcihCT09UU1RBR0VfSURfRklUX1JEX0NIRUNLX0FMTCk7CisJCXJldHVybiAwOworCX0KKworCWJvb3RzdGFnZV9tYXJrKEJPT1RTVEFHRV9JRF9GSVRfUkRfQ0hFQ0tfQUxMX09LKTsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBVU0VfSE9TVENDICovCisjZW5kaWYgLyogQ09ORklHX0ZJVCAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL21paXBoeXV0aWwuYyBiL2NvbW1vbi9taWlwaHl1dGlsLmMKaW5kZXggZTQxMWU1Ny4uYTQ1YWJiOSAxMDA2NDQKLS0tIGEvY29tbW9uL21paXBoeXV0aWwuYworKysgYi9jb21tb24vbWlpcGh5dXRpbC5jCkBAIC0yMjIsNiArMjIyLDU3IEBACiAJcmV0dXJuICgoZm91bmRfZGV2KSA/IHdyaXRlX3JldCA6IDEpOwogfQogCisjZGVmaW5lIENPTUNFUlRPX1JHTUlJX0RFTEFZCisjaWZkZWYgQ09NQ0VSVE9fUkdNSUlfREVMQVkKKy8qKioqKioqKioqIE1TUEQgQ2hhbmdlICoqKioqKioqKioqLworCitpbnQgbWlpcGh5X2RlYnVnX3JlYWQoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyLCB1bnNpZ25lZCBjaGFyIHJlZykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlpZiAobWlpcGh5X3dyaXRlIChkZXZuYW1lLCBhZGRyLCBQSFlfREVCVUdfUE9SVF9BRERSRVNTLCByZWcpICE9IDApIHsKKwkJcHV0cyAoIlBIWSBEZWJ1ZyByZWdpc3RlciBmYWlsZWRcbiIpOworCX0KKworCWlmIChtaWlwaHlfcmVhZCAoZGV2bmFtZSwgYWRkciwgUEhZX0RFQlVHX1BPUlRfREFUQSwgJnZhbHVlKSAhPSAwKSB7CisJCXB1dHMgKCJQSFkgRGVidWcgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKworaW50IG1paXBoeV9kZWJ1Z193cml0ZShjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKK3sKKwlpZiAobWlpcGh5X3dyaXRlIChkZXZuYW1lLCBhZGRyLCBQSFlfREVCVUdfUE9SVF9BRERSRVNTLCByZWcpICE9IDApIHsKKwkJcHV0cyAoIlBIWSBEZWJ1ZyByZWdpc3RlciBmYWlsZWRcbiIpOworCX0KKwlpZiAobWlpcGh5X3dyaXRlIChkZXZuYW1lLCBhZGRyLCBQSFlfREVCVUdfUE9SVF9EQVRBLCB2YWx1ZSkgIT0gMCkgeworCQlwdXRzICgiUEhZIERlYnVnIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJfQorfQorCit2b2lkIG1paXBoeV9lbmFibGVfcmdtaWlfcnhfZGVsYXkoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyKQoreworICAgICAgICB1aW50MTZfdCB2YWw7CisgICAgICAgIC8vZW5hYmxlIFJ4Q2xrIGRlbGF5CisgICAgICAgIHZhbCA9IG1paXBoeV9kZWJ1Z19yZWFkKGRldm5hbWUsIGFkZHIsIDB4MCk7CisgICAgICAgIHZhbCB8PSAweDgwMDA7CisgICAgICAgIG1paXBoeV9kZWJ1Z193cml0ZShkZXZuYW1lLCBhZGRyLCAweDAsIHZhbCk7Cit9CisKK3ZvaWQgbWlpcGh5X2VuYWJsZV9yZ21paV90eF9kZWxheShjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIpCit7CisgICAgICAgIHVpbnQxNl90IHZhbDsKKyAgICAgICAgLy9lbmFibGUgVHhDbGsgZGVsYXkKKyAgICAgICAgdmFsID0gbWlpcGh5X2RlYnVnX3JlYWQoZGV2bmFtZSwgYWRkciwgMHg1KTsKKyAgICAgICAgdmFsIHw9IDB4MTAwOworICAgICAgICBtaWlwaHlfZGVidWdfd3JpdGUoZGV2bmFtZSwgYWRkciwgMHg1LCB2YWwpOworfQorLyoqKioqKioqKioqKi8KKyNlbmRpZgorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFByaW50IG91dCBsaXN0IG9mIHJlZ2lzdGVyZWQgTUlJIGNhcGFibGUgZGV2aWNlcy4KQEAgLTM0NSw2ICszOTYsMTM1IEBACiAJcmV0dXJuICgwKTsKIH0KIAoraW50IG1paXBoeV9zdXBwb3J0c18xMDAwYmFzZV90IChjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIpCit7CisJdW5zaWduZWQgc2hvcnQgcmVnOworCisJaWYgKG1paXBoeV9yZWFkIChkZXZuYW1lLCBhZGRyLCBQSFlfQk1TUiwgJnJlZykpIHsKKwkJcHV0cyAoIlBIWSBibXNyIHJlYWQgZmFpbGVkLCBhc3N1bWluZyBubyAxMDAwYlQgc3VwcG9ydFxuIik7CisJCXJldHVybiAoMCk7CisJfQorCisJaWYgKHJlZyAmIFBIWV9CTVNSX0VYVF9TVEFUKSB7CisJCWlmIChtaWlwaHlfcmVhZCAoZGV2bmFtZSwgYWRkciwgUEhZX0VYU1IsICZyZWcpKSB7CisJCQlwdXRzICgiUEhZIGV4c3IgcmVhZCBmYWlsZWQsIGFzc3VtaW5nIG5vIDEwMDBiVCBzdXBwb3J0XG4iKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKworCQlpZiAocmVnICYgKFBIWV9FWFNSXzEwMDBURiB8IFBIWV9FWFNSXzEwMDBUSCkpCisJCQlyZXR1cm4gKDEpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK2ludCBtaWlwaHlfd2FpdF9hdXRvbmVnb3RpYXRpb25fY29tcGxldGUgKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgYWRkcikKK3sKKwl1bnNpZ25lZCBzaG9ydCBibXNyOworCWludCBjb3VudCA9IDA7CisKKwl3aGlsZSAoY291bnQrKyA8IDUwMDAwKSB7CisJCWlmIChtaWlwaHlfcmVhZCAoZGV2bmFtZSwgYWRkciwgUEhZX0JNU1IsICZibXNyKSkgeworCQkJcHV0cyAoIlBIWSBibXNyIHJlYWQgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisKKwkJaWYgKGJtc3IgJiBQSFlfQk1TUl9BVVROX0NPTVApCisJCQlyZXR1cm4gMDsKKworCQl1ZGVsYXkoMTAwKTsKKwl9CisKKwlyZXR1cm4gKC0xKTsKK30KKworaW50IG1paXBoeV9zcGVlZF9kdXBsZXggKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgYWRkciwgaW50ICpzcGVlZCwgaW50ICpkdXBsZXgpCit7CisJdW5zaWduZWQgc2hvcnQgYm1jciwgYnRjciwgYnRzciwgYW5scGFyLCBhbmFyOworCisJLyogQ2hlY2sgQmFzaWMgTWFuYWdlbWVudCBDb250cm9sIFJlZ2lzdGVyIGZpcnN0LiAqLworCWlmIChtaWlwaHlfcmVhZCAoZGV2bmFtZSwgYWRkciwgUEhZX0JNQ1IsICZibWNyKSkgeworCQlwdXRzICgiUEhZIGJtY3IgcmVhZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQ2hlY2sgaWYgYXV0by1uZWdvdGlhdGlvbiBpcyBvbi4gKi8KKwlpZiAoYm1jciAmIFBIWV9CTUNSX0FVVE9OKSB7CisKKwkJaWYgKG1paXBoeV93YWl0X2F1dG9uZWdvdGlhdGlvbl9jb21wbGV0ZShkZXZuYW1lLCBhZGRyKSkgeworCQkJcHV0cyAoIlBIWSBhdXRvbmVnb3RpYXRpb24gZXJyb3JcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKG1paXBoeV9zdXBwb3J0c18xMDAwYmFzZV90KGRldm5hbWUsIGFkZHIpKSB7CisKKwkJCWlmIChtaWlwaHlfcmVhZCAoZGV2bmFtZSwgYWRkciwgUEhZXzEwMDBCVENSLCAmYnRjcikpIHsKKwkJCQlwdXRzICgiUEhZIGJ0Y3IgcmVhZCBmYWlsZWRcbiIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKworCQkJaWYgKG1paXBoeV9yZWFkIChkZXZuYW1lLCBhZGRyLCBQSFlfMTAwMEJUU1IsICZidHNyKSkgeworCQkJCXB1dHMgKCJQSFkgYnRzciByZWFkIGZhaWxlZFxuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlpZiAoKGJ0Y3IgJiBQSFlfMTAwMEJUQ1JfMTAwMEZEKSAmJiAoYnRzciAmIFBIWV8xMDAwQlRTUl8xMDAwRkQpKSB7CisJCQkJKnNwZWVkID0gXzEwMDBCQVNFVDsKKwkJCQkqZHVwbGV4ID0gRlVMTDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworIAkJCWlmICgoYnRjciAmIFBIWV8xMDAwQlRDUl8xMDAwSEQpICYmIChidHNyICYgUEhZXzEwMDBCVFNSXzEwMDBIRCkpIHsKKwkJCQkqc3BlZWQgPSBfMTAwMEJBU0VUOworCQkJCSpkdXBsZXggPSBIQUxGOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisKKwkJLyogR2V0IGxpbmsgcGFydG5lciBhYmlsaXRpZXMgcmVzdWx0cy4gKi8KKwkJaWYgKG1paXBoeV9yZWFkIChkZXZuYW1lLCBhZGRyLCBQSFlfQU5MUEFSLCAmYW5scGFyKSkgeworCQkJcHV0cyAoIlBIWSBhbmxwYXIgcmVhZCBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLyogR2V0IGFkdmVydGlzZWQgYWJpbGl0aWVzLiAqLworCQlpZiAobWlpcGh5X3JlYWQgKGRldm5hbWUsIGFkZHIsIFBIWV9BTkFSLCAmYW5hcikpIHsKKwkJCXB1dHMgKCJQSFkgYW5hciByZWdpc3RlciByZWFkIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoKGFubHBhciAmIGFuYXIgJiBQSFlfQU5MUEFSX1RYRkQpKSB7CisJCQkqc3BlZWQgPSBfMTAwQkFTRVQ7CisJCQkqZHVwbGV4ID0gRlVMTDsKKwkJfSBlbHNlIGlmICgoYW5scGFyICYgYW5hciAmIFBIWV9BTkxQQVJfVFgpKSB7CisJCQkqc3BlZWQgPSBfMTAwQkFTRVQ7CisJCQkqZHVwbGV4ID0gSEFMRjsKKwkJfSBlbHNlIGlmICgoYW5scGFyICYgYW5hciAmIFBIWV9BTkxQQVJfMTBGRCkpIHsKKwkJCSpzcGVlZCA9IF8xMEJBU0VUOworCQkJKmR1cGxleCA9IEZVTEw7CisJCX0gZWxzZSB7CisJCQkqc3BlZWQgPSBfMTBCQVNFVDsKKwkJCSpkdXBsZXggPSBIQUxGOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCisJLyogR2V0IHNwZWVkIGZyb20gYmFzaWMgY29udHJvbCBzZXR0aW5ncy4gKi8KKwlpZiAoKGJtY3IgJiBQSFlfQk1DUl9TUEVFRF9NQVNLKSA9PSBQSFlfQk1DUl8xMDAwX01CUFMpCisJCSpzcGVlZCA9IF8xMDAwQkFTRVQ7CisJZWxzZSBpZiAoKGJtY3IgJiBQSFlfQk1DUl9TUEVFRF9NQVNLKSA9PSBQSFlfQk1DUl8xMDBfTUJQUykKKwkJKnNwZWVkID0gXzEwMEJBU0VUOworCWVsc2UKKwkJKnNwZWVkID0gXzEwQkFTRVQ7CisKKwlpZiAoYm1jciAmIFBIWV9CTUNSX0RQTFgpCisJCSpkdXBsZXggPSBGVUxMOworCWVsc2UKKwkJKmR1cGxleCA9IEhBTEY7CisKKwlyZXR1cm4gMDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzUyLDQ1ICs1MzIsMTQgQEAKICAqLwogaW50IG1paXBoeV9zcGVlZCAoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyKQogewotCXVuc2lnbmVkIHNob3J0IHJlZzsKKwlpbnQgc3BlZWQsIGR1cGxleDsKIAotI2lmIGRlZmluZWQoQ09ORklHX1BIWV9HSUdFKQotCWlmIChtaWlwaHlfcmVhZCAoZGV2bmFtZSwgYWRkciwgUEhZXzEwMDBCVFNSLCAmcmVnKSkgewotCQlwcmludGYgKCJQSFkgMTAwMEJUIFN0YXR1cyByZWFkIGZhaWxlZFxuIik7Ci0JfSBlbHNlIHsKLQkJaWYgKHJlZyAhPSAweEZGRkYpIHsKLQkJCWlmICgocmVnICYgKFBIWV8xMDAwQlRTUl8xMDAwRkQgfCBQSFlfMTAwMEJUU1JfMTAwMEhEKSkgIT0wKSB7Ci0JCQkJcmV0dXJuIChfMTAwMEJBU0VUKTsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZiAvKiBDT05GSUdfUEhZX0dJR0UgKi8KLQotCS8qIENoZWNrIEJhc2ljIE1hbmFnZW1lbnQgQ29udHJvbCBSZWdpc3RlciBmaXJzdC4gKi8KLQlpZiAobWlpcGh5X3JlYWQgKGRldm5hbWUsIGFkZHIsIFBIWV9CTUNSLCAmcmVnKSkgeworCWlmIChtaWlwaHlfc3BlZWRfZHVwbGV4KGRldm5hbWUsIGFkZHIsICZzcGVlZCwgJmR1cGxleCkpIHsKIAkJcHV0cyAoIlBIWSBzcGVlZCByZWFkIGZhaWxlZCwgYXNzdW1pbmcgMTBiVFxuIik7CiAJCXJldHVybiAoXzEwQkFTRVQpOwogCX0KLQkvKiBDaGVjayBpZiBhdXRvLW5lZ290aWF0aW9uIGlzIG9uLiAqLwotCWlmICgocmVnICYgUEhZX0JNQ1JfQVVUT04pICE9IDApIHsKLQkJLyogR2V0IGF1dG8tbmVnb3RpYXRpb24gcmVzdWx0cy4gKi8KLQkJaWYgKG1paXBoeV9yZWFkIChkZXZuYW1lLCBhZGRyLCBQSFlfQU5MUEFSLCAmcmVnKSkgewotCQkJcHV0cyAoIlBIWSBBTiBzcGVlZCByZWFkIGZhaWxlZCwgYXNzdW1pbmcgMTBiVFxuIik7Ci0JCQlyZXR1cm4gKF8xMEJBU0VUKTsKLQkJfQotCQlpZiAoKHJlZyAmIFBIWV9BTkxQQVJfMTAwKSAhPSAwKSB7Ci0JCQlyZXR1cm4gKF8xMDBCQVNFVCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gKF8xMEJBU0VUKTsKLQkJfQotCX0KLQkvKiBHZXQgc3BlZWQgZnJvbSBiYXNpYyBjb250cm9sIHNldHRpbmdzLiAqLwotCWVsc2UgaWYgKHJlZyAmIFBIWV9CTUNSXzEwME1CKSB7Ci0JCXJldHVybiAoXzEwMEJBU0VUKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKF8xMEJBU0VUKTsKLQl9CiAKKwlyZXR1cm4gc3BlZWQ7CiB9CiAKIApAQCAtNDAwLDQ5ICs1NDksMTQgQEAKICAqLwogaW50IG1paXBoeV9kdXBsZXggKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgYWRkcikKIHsKLQl1bnNpZ25lZCBzaG9ydCByZWc7CisJaW50IHNwZWVkLCBkdXBsZXg7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QSFlfR0lHRSkKLQlpZiAobWlpcGh5X3JlYWQgKGRldm5hbWUsIGFkZHIsIFBIWV8xMDAwQlRTUiwgJnJlZykpIHsKLQkJcHJpbnRmICgiUEhZIDEwMDBCVCBTdGF0dXMgcmVhZCBmYWlsZWRcbiIpOwotCX0gZWxzZSB7Ci0JCWlmICggKHJlZyAhPSAweEZGRkYpICYmCi0JCSAgICAgKHJlZyAmIChQSFlfMTAwMEJUU1JfMTAwMEZEIHwgUEhZXzEwMDBCVFNSXzEwMDBIRCkpICkgewotCQkJaWYgKChyZWcgJiBQSFlfMTAwMEJUU1JfMTAwMEZEKSAhPTApIHsKLQkJCQlyZXR1cm4gKEZVTEwpOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gKEhBTEYpOwotCQkJfQotCQl9Ci0JfQotI2VuZGlmIC8qIENPTkZJR19QSFlfR0lHRSAqLwotCi0JLyogQ2hlY2sgQmFzaWMgTWFuYWdlbWVudCBDb250cm9sIFJlZ2lzdGVyIGZpcnN0LiAqLwotCWlmIChtaWlwaHlfcmVhZCAoZGV2bmFtZSwgYWRkciwgUEhZX0JNQ1IsICZyZWcpKSB7CisJaWYgKG1paXBoeV9zcGVlZF9kdXBsZXgoZGV2bmFtZSwgYWRkciwgJnNwZWVkLCAmZHVwbGV4KSkgewogCQlwdXRzICgiUEhZIGR1cGxleCByZWFkIGZhaWxlZCwgYXNzdW1pbmcgaGFsZiBkdXBsZXhcbiIpOwotCQlyZXR1cm4gKEhBTEYpOwotCX0KLQkvKiBDaGVjayBpZiBhdXRvLW5lZ290aWF0aW9uIGlzIG9uLiAqLwotCWlmICgocmVnICYgUEhZX0JNQ1JfQVVUT04pICE9IDApIHsKLQkJLyogR2V0IGF1dG8tbmVnb3RpYXRpb24gcmVzdWx0cy4gKi8KLQkJaWYgKG1paXBoeV9yZWFkIChkZXZuYW1lLCBhZGRyLCBQSFlfQU5MUEFSLCAmcmVnKSkgewotCQkJcHV0cyAoIlBIWSBBTiBkdXBsZXggcmVhZCBmYWlsZWQsIGFzc3VtaW5nIGhhbGYgZHVwbGV4XG4iKTsKLQkJCXJldHVybiAoSEFMRik7Ci0JCX0KLQotCQlpZiAoKHJlZyAmIChQSFlfQU5MUEFSXzEwRkQgfCBQSFlfQU5MUEFSX1RYRkQpKSAhPSAwKSB7Ci0JCQlyZXR1cm4gKEZVTEwpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIChIQUxGKTsKLQkJfQotCX0KLQkvKiBHZXQgc3BlZWQgZnJvbSBiYXNpYyBjb250cm9sIHNldHRpbmdzLiAqLwotCWVsc2UgaWYgKHJlZyAmIFBIWV9CTUNSX0RQTFgpIHsKLQkJcmV0dXJuIChGVUxMKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKEhBTEYpOworCQlyZXR1cm4gSEFMRjsKIAl9CiAKKwlyZXR1cm4gZHVwbGV4OwogfQogCiAjaWZkZWYgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOCmRpZmYgLS1naXQgYS9jb25maWcubWsgYi9jb25maWcubWsKaW5kZXggNmUyODBiYy4uYzZlOGIxZCAxMDA2NDQKLS0tIGEvY29uZmlnLm1rCisrKyBiL2NvbmZpZy5tawpAQCAtMTc1LDcgKzE3NSw3IEBACiAKICMgJChDUFBGTEFHUykgc2V0cyAtZywgd2hpY2ggY2F1c2VzIGdjYyB0byBwYXNzIGEgc3VpdGFibGUgLWc8Zm9ybWF0PgogIyBvcHRpb24gdG8gdGhlIGFzc2VtYmxlci4KLUFGTEFHU19ERUJVRyA6PQorQUZMQUdTX0RFQlVHIDo9IC1XYSwtZ3N0YWJzCiAKICMgdHVybiBqYnNyIGludG8ganNyIGZvciBtNjhrCiBpZmVxICgkKEFSQ0gpLG02OGspCmRpZmYgLS1naXQgYS9jcHUvYXJtMTEzNi9jb21jZXJ0by9NYWtlZmlsZSBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzQxYTEKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTEzNi9jb21jZXJ0by9NYWtlZmlsZQpAQCAtMCwwICsxLDU0IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA1CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKFNPQykuYQorCitDT0JKUwk9IGludGVycnVwdHMubyBzZXJpYWwubyBic3AubyB0cmFpbmluZy5vIG1kbWEubworU09CSlMJPSBsb3dsZXZlbF9pbml0Lm8KKworYWxsOgkkKG9iaikuZGVwZW5kICQoTElCKQorCit0cmFpbmluZy5vOiB0cmFpbmluZy5jIHRyYWluaW5nMTAwLmMgdHJhaW5pbmcxMDBfbmV3LmMgdHJhaW5pbmcxMDAwLmMKKwkkKENDKSAkKENGTEFHUykgLWZwaWMgLWMgLW8gJEAgJDwKKworYnNwLm86IGJzcC5jCisJJChDQykgJChDRkxBR1MpIC1mcGljIC1jIC1vICRAICQ8CisKK1NSQ1MgICAgOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMgICAgOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMgICA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTM2L2NvbWNlcnRvL2JzcC5jIGIvY3B1L2FybTExMzYvY29tY2VydG8vYnNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwZTMxYgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL2JzcC5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzkwMCkKKyNpbmNsdWRlICJic3A5MDAuYyIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMCkKKyNpbmNsdWRlICJic3AxMDAuYyIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMDApCisjaW5jbHVkZSAiYnNwMTAwMC5jIgorI2Vsc2UKKyNlcnJvciAiTm8gQXJjaGl0ZWN0dXJlIHNlbGVjdGVkISFAIiAKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9jcHUvYXJtMTEzNi9jb21jZXJ0by9ic3AxMDAuYyBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL2JzcDEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjBhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTEzNi9jb21jZXJ0by9ic3AxMDAuYwpAQCAtMCwwICsxLDQ5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBNaW5kc3BlZWQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQxKHZvaWQpOworc3RhdGljIHZvaWQgY29uZmlnX2JvYXJkMih2b2lkKTsKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDModm9pZCk7CitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQ0KHZvaWQpOworc3RhdGljIHZvaWQgY29uZmlnX2JvYXJkNSh2b2lkKTsKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDYodm9pZCk7CitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQ3KHZvaWQpOworc3RhdGljIHZvaWQgY29uZmlnX2JvYXJkOCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDkodm9pZCk7CitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQxMCh2b2lkKTsKKwordm9pZCBTb0NfQ2hlY2tfRGV2aWNlKHZvaWQpCit7CisJLy8gVGhpcyBzaG91bGQgcnVuIG9uIGEgTTgyMXh4IFNvQywgbGV0J3MgY2hlY2sgaXQKKwl1MzIgZGV2aWNldHlwZSA9IF9fbGUzMl90b19jcHUoKCoodm9sYXRpbGUgdTMyKikoR1BJT19ERVZJRF9SRUcpKSAmIF9fY3B1X3RvX2xlMzIoMHhGRkZGKSk7CisKKwlpZiAoZGV2aWNldHlwZSAhPSAweDE1MCkKKwl7CisJCS8vZXJyb3Igd3JvbmcgZGV2aWNlCisJCS8vIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvPworCX0KK30KKwordm9pZCBTb0NfQVBCX3NldHVwKHZvaWQpCit7CisJLy8gU2V0dGluZyBBUEIgQnVzIFdhaXQgc3RhdGVzIHRvIDEsIHNldCBwb3N0IHdyaXRlCisJKCoodm9sYXRpbGUgdTMyKikoQVBCX0FDQ0VTU19XU19SRUcpKSA9IF9fY3B1X3RvX2xlMzIoMHg0MCk7CisJCit9CisKK3ZvaWQgU29DX0FSQU1fc2V0dXAodm9pZCkKK3sKKwkvLyBkaXNhYmxlIHBpcGVsaW5lIG1vZGUgaW4gQVJBTSAKKyAgICAgICAgKCoodm9sYXRpbGUgdTMyKikoTUVNQ09SRV9CQVNFQUREUisweDE4KSkgPSBfX2NwdV90b19sZTMyKDEpOworfQorCisKK3ZvaWQgU29DX0FIQl9zZXR1cCh2b2lkKQoreworCS8vIGVuYWJsZSBhbGwgNiBtYXN0ZXJzIGZvciBBUkFNCisgICAgICAgICgqKHZvbGF0aWxlIHUzMiopKEFTQV9BUkFNX1RDX0NSX1JFRykpID0gX19jcHVfdG9fbGUzMihBU0FfVENfUkVRSURNQUVOIHwgIEFTQV9UQ19SRVFURE1FTiB8QVNBX1RDX1JFUUlQU0VDVVNCRU4gfEFTQV9UQ19SRVFBUk0wRU4gfCBBU0FfVENfUkVRQVJNMUVOIHxBU0FfVENfUkVRTURNQUVOKTsKKwkvLyBlbmFibGUgYWxsIDYgbWFzdGVycyBmb3IgRUJVUworCSgqKHZvbGF0aWxlIHUzMiopKEFTQV9FQlVTX1RDX0NSX1JFRykpID0gX19jcHVfdG9fbGUzMihBU0FfVENfUkVRSURNQUVOIHwgIEFTQV9UQ19SRVFURE1FTiB8QVNBX1RDX1JFUUlQU0VDVVNCRU4gfEFTQV9UQ19SRVFBUk0wRU4gfCBBU0FfVENfUkVRQVJNMUVOIHxBU0FfVENfUkVRTURNQUVOKTsKKworfQorCisKK3ZvaWQgU29DX1BMTF9pbml0KHZvaWQpCit7CisJSEFMX3NldF9hbWJhX2NsayhDRkdfSFpfQ0xPQ0spOworCUhBTF9zZXRfYXJtX2NsayhDRkdfQVJNX0NMT0NLKTsKKworCS8vIHNldCBQVUkKKwkqKHZvbGF0aWxlIHUzMiopKENMS0NPUkVfQ0xLRElWX0NOVFJMKSAmPSBfX2NwdV90b19sZTMyKH4oMHgxRiA8PCBQVUlfQ0xLRElWX1JBVElPX1NISUZUKSk7CisJKih2b2xhdGlsZSB1MzIqKShDTEtDT1JFX0NMS0RJVl9DTlRSTCkgfD0gX19jcHVfdG9fbGUzMigoKENGR19BUk1fQ0xPQ0sgLyAyNTAwMDAwMCkgPDwgUFVJX0NMS0RJVl9SQVRJT19TSElGVCkpOworCSoodm9sYXRpbGUgdTMyKikoQ0xLQ09SRV9DTEtESVZfQ05UUkwpICY9IF9fY3B1X3RvX2xlMzIoflBVSV9DTEtESVZfQllQQVNTKTsJCisKKwkvLyBzZXQgcGNpIGRpdmlkZXIgYW5kIHN3aXRjaCB0byByZWYgY2xrCisvLwkqKHZvbGF0aWxlIHUzMiopKENMS0NPUkVfQ0xLRElWX0NOVFJMKSAmPSB+KDB4MUYgPDwgUENJX0NMS0RJVl9SQVRJT19TSElGVCk7LworLy8JKih2b2xhdGlsZSB1MzIqKShDTEtDT1JFX0NMS0RJVl9DTlRSTCkgfD0gKChDRkdfSFpfQ0xPQ0sgLyAzMzAwMDAwMCkgPDwgUENJX0NMS0RJVl9SQVRJT19TSElGVCk7CisvLwkqKHZvbGF0aWxlIHUzMiopKENMS0NPUkVfQ0xLRElWX0NOVFJMKSAmPSB+UENJX0NMS0RJVl9CWVBBU1M7CQorfQorCitzdGF0aWMgdm9pZCBhcHBseV9kZHJfc2V0dGluZyh1MzIgYm9hcmRfY29uZmlnKQoreworCXU4IGRvX3RyYWluaW5nID0gMDsKKworCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CisJY2FzZSBCT0FSRF9DRkdfMToKKwkJY29uZmlnX2JvYXJkMSgpOworCQlicmVhazsKKwljYXNlIEJPQVJEX0NGR18yOgorCSAgICAJY29uZmlnX2JvYXJkMigpOworCQlicmVhazsKKwljYXNlIEJPQVJEX0NGR18zOgorCSAgICAJY29uZmlnX2JvYXJkMygpOworCQlicmVhazsKKwljYXNlIEJPQVJEX0NGR180OgorCSAgICAJY29uZmlnX2JvYXJkNCgpOworCQlkb190cmFpbmluZyA9IDE7CisJCWJyZWFrOworCWNhc2UgQk9BUkRfQ0ZHXzU6CisJCWNvbmZpZ19ib2FyZDUoKTsKKwkJZG9fdHJhaW5pbmcgPSAxOworCQlicmVhazsKKwljYXNlIEJPQVJEX0NGR182OgorCSAgICAJY29uZmlnX2JvYXJkNigpOworCQlicmVhazsKKwljYXNlIEJPQVJEX0NGR183OgorCSAgICAJY29uZmlnX2JvYXJkNygpOworCQlicmVhazsKKwljYXNlIEJPQVJEX0NGR184OgorCSAgICAJY29uZmlnX2JvYXJkOCgpOworCQlicmVhazsKKwljYXNlIEJPQVJEX0NGR185OgorCQljb25maWdfYm9hcmQ5KCk7IC8qIFBhY2tldCBJQUQgQzUwICovCisJCWRvX3RyYWluaW5nID0gMTsKKwkJYnJlYWs7CisJY2FzZSBCT0FSRF9DRkdfMTA6CisJCWNvbmZpZ19ib2FyZDEwKCk7IC8qIFJvdXRlciBDNTAgKi8KKwkJYnJlYWs7CisJfQorCisjaWZkZWYgRERSX1RSQUlOSU5HCisJaWYgKGRvX3RyYWluaW5nKQorCQlzdGFydF90cmFpbmluZygpOyAgLyogdHJhaW5pbmcgdG8gZmluZCBvcHRpbWFsIE9EVCB2YWx1ZXMgKHJ1biBmcm9tIEwxIGNhY2hlKSAqLworI2VuZGlmCit9CisKKwordm9pZCBTb0NfbWVtX2luaXQodTMyIGJvYXJkX2NvbmZpZykKK3sKKwl2b2xhdGlsZSB1MzIgZGVsYXlfY291bnQ7CisJdTMyIGRkcl9zaXplOworCisJLy8gR2V0IHRoZSByaWdodCBhbW91bnQgb2YgRERSIHRoZSBib2FyZCBpcyBwb3B1bGF0ZWQgd2l0aAorCWRkcl9zaXplID0gZ2V0X2Rkcl9zaXplKCk7CisJLy8gTWVtb3J5IHNldHVwIHJlZ2lzdGVyCisJKih2b2xhdGlsZSB1MzIqKShNRU1PUllfTUFYX0FERFIpID0gX19jcHVfdG9fbGUzMigoZGRyX3NpemUgLSAxKSArIE1FTU9SWV9CQVNFX0FERFIpOworCS8vIGRpc2JhbGUgUk9NIHJlbWFwCisJKih2b2xhdGlsZSB1MzIqKShNRU1PUllfQ1IpID0gX19jcHVfdG9fbGUzMigwKTsKKwkKKwkvLyBUYWtlIEREUiBjb250cm9sbGVyIG91dCBvZiByZXNldAorCSoodm9sYXRpbGUgdTMyKikoQkxPQ0tfUkVTRVRfUkVHKSB8PSBfX2NwdV90b19sZTMyKEREUl9SU1QpOworCS8vIDIwIG9wcyBkZWxheQorCWRlbGF5X2NvdW50ID0gMjA7CisJd2hpbGUoZGVsYXlfY291bnQtLSk7CisKKwkvL0FwcGx5IERFTkFMSSBERFIgY29uZmlndXJhdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGJvYXJkIAorCWFwcGx5X2Rkcl9zZXR0aW5nKGJvYXJkX2NvbmZpZyk7Cit9CisKKwordm9pZCBTb0NfbmFuZF9pbml0KHZvaWQpCit7CisJLy8gVE9ETzogdmVyaWZ5IHRpbWluZ3MKKworCS8vIENvbmZpZ3VyZSBDUzQgLSA4IGJpdHMgLSBOQU5ECisJKih2b2xhdGlsZSB1MzIqKShFWF9DUzRfQ0ZHX1JFRykgPSBfX2NwdV90b19sZTMyKEVYX01FTV9CVVNfOCB8IEVYX05BTkRfTU9ERSk7CisJLy8gdGltaW5ncyAoQ1N3ID0gOSwgUkUgV0UgOSksIAorCSoodm9sYXRpbGUgdTMyKikoRVhfQ1M0X1RNRzFfUkVHKSA9IF9fY3B1X3RvX2xlMzIoOSB8IDk8PDE2IHwgOTw8MjQpIDsKKwkqKHZvbGF0aWxlIHUzMiopKEVYX0NTRU5fUkVHKSAgfD0gX19jcHVfdG9fbGUzMihFWF9DUzRfRU4pOwkKK30KKworLyoKKyogU29DX2dwaW9fY2ZnIC0gY29uZmlndXJlIEdQSU8gcGlucyBhcyBpbnB1dCBvciBvdXRwdXQgcGlucworKgorKiBncGlvIC0gZ3BpbyBwaW4KKyoKKyogbW9kZSAtIGdwaW8gcGluIG1vZGUKKyoJR1BJT19UWVBFX09VVFBVVCA9IG91dHB1dAorKglHUElPX1RZUEVfSU5QVVQgPSBpbnB1dAorKgorKi8KK2ludCBTb0NfZ3Bpb19jZmcoaW50IGdwaW8sIGludCBtb2RlKQoreworCWlmICgoZ3BpbyA8IDApIHx8IChncGlvID4gMzEpKQorCQlnb3RvIGVycjsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgR1BJT19UWVBFX0lOUFVUOgorCWRlZmF1bHQ6CisJCSoodm9sYXRpbGUgdTMyICopIEdQSU9fT0VfUkVHICY9IF9fY3B1X3RvX2xlMzIofigxIDw8IGdwaW8pKTsKKwkJYnJlYWs7CisKKwljYXNlIEdQSU9fVFlQRV9PVVRQVVQ6CisJCSoodm9sYXRpbGUgdTMyICopIEdQSU9fT0VfUkVHIHw9IF9fY3B1X3RvX2xlMzIoMSA8PCBncGlvKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDEodm9pZCkKK3sKKwl1NjQgd3JfZHFzX3NoaWZ0ID0gMHg0MDsKKworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMF9EQVRBKSA9ICBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAxX0RBVEEpID0gIF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAxX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSAgX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wM19EQVRBKSA9ICBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wM19WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA0X0RBVEEpID0gIF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA0X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDVfREFUQSkgPSAgX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDVfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNl9EQVRBKSA9ICBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA3X0RBVEEpID0gIF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA3X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDhfREFUQSkgPSAgX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDhfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOV9EQVRBKSA9ICBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEwX0RBVEEpID0gIF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEwX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSAgX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9ICBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMl9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEzX0RBVEEpID0gIF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEzX1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTRfREFUQSkgPSAgX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNV9EQVRBKSA9ICBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNV9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE2X0RBVEEpID0gIF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE2X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTdfREFUQSkgPSAgX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzEpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9ICBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOF9WQUxfQ0ZHMSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE5X0RBVEEpID0gIF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE5X1ZBTF9DRkcxKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjBfREFUQSkgPSAgX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzEpOworCQorCS8vIHN0YXJ0IEREUkMKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSAgX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzEgfCAoMUxMIDw8IDMyKSk7CisJLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKwl3aGlsZSgoICoodm9sYXRpbGUgdTMyKikoREVOQUxJX0NUTF8wOF9EQVRBKzQpICYgX19jcHVfdG9fbGUzMigweDA0MDAwMCkpID09IDApOworCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gIF9fY3B1X3RvX2xlNjQoKCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMSAmIH4oMHgwMDAwN0YwMDAwMDAwMDAwTEwpKSB8ICh3cl9kcXNfc2hpZnQgPDwgNDApKTsKKworfQorCisKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDIodm9pZCkKK3sKKwl1NjQgd3JfZHFzX3NoaWZ0ID0gMHg0MDsKKworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAwX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAzX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDVfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA2X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wN19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDhfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA5X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEyX1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xM19WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE1X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzIpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE4X1ZBTF9DRkcyKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzIpOworCQorCS8vIHN0YXJ0IEREUkMKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMiB8ICgxTEwgPDwgMzIpKTsKKwkvL3dhaXQgaW50X3N0YXR1c1syXSAoRFJBTSBpbml0IGNvbXBsZXRlKQorCXdoaWxlKCggKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzA4X0RBVEErNCkgJiBfX2NwdV90b19sZTMyKDB4MDQwMDAwKSkgPT0gMCk7CisKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzIgJiB+KDB4MDAwMDdGMDAwMDAwMDAwMExMKSkgfCAod3JfZHFzX3NoaWZ0IDw8IDQwKSk7CisKK30KKworCitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQzKHZvaWQpCit7CisJdTY0IHdyX2Rxc19zaGlmdCA9IDB4NDA7CisKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDFfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAyX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wM19WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDRfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA1X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDdfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA4X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTBfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzExX1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMl9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTNfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE0X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNV9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTZfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE3X1ZBTF9DRkczKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMThfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOF9WQUxfQ0ZHMyk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTlfVkFMX0NGRzMpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIwX1ZBTF9DRkczKTsKKwkKKwkvLyBzdGFydCBERFJDCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzMgfCAoMUxMIDw8IDMyKSk7CisJLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKwl3aGlsZSgoICoodm9sYXRpbGUgdTMyKikoREVOQUxJX0NUTF8wOF9EQVRBKzQpICYgX19jcHVfdG9fbGUzMigweDA0MDAwMCkpID09IDApOworCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgoKHU2NClERU5BTElfQ1RMXzExX1ZBTF9DRkczICYgfigweDAwMDA3RjAwMDAwMDAwMDBMTCkpIHwgKHdyX2Rxc19zaGlmdCA8PCA0MCkpOworCit9CisKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDQodm9pZCkKK3sKKwl1NjQgd3JfZHFzX3NoaWZ0ID0gMHg0MDsKKworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAwX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMV9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAzX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNF9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDVfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA2X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wN19WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDhfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA5X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMF9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEyX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xM19WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE1X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNl9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE4X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOV9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzQpOworCQorCS8vIHN0YXJ0IEREUkMKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHNCB8ICgxTEwgPDwgMzIpKTsKKwkvL3dhaXQgaW50X3N0YXR1c1syXSAoRFJBTSBpbml0IGNvbXBsZXRlKQorCXdoaWxlKCggKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzA4X0RBVEErNCkgJiBfX2NwdV90b19sZTMyKDB4MDQwMDAwKSkgPT0gMCk7CisKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzQgJiB+KDB4MDAwMDdGMDAwMDAwMDAwMExMKSkgfCAod3JfZHFzX3NoaWZ0IDw8IDQwKSk7CisKK30KKworCitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQ1KHZvaWQpCit7CisJdTY0IHdyX2Rxc19zaGlmdCA9IDB4NDA7CisKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMF9WQUxfQ0ZHNSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDFfVkFMX0NGRzUpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAyX1ZBTF9DRkc1KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wM19WQUxfQ0ZHNSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDRfVkFMX0NGRzUpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA1X1ZBTF9DRkc1KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNl9WQUxfQ0ZHNSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDdfVkFMX0NGRzUpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA4X1ZBTF9DRkc1KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wOV9WQUxfQ0ZHNSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTBfVkFMX0NGRzUpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzExX1ZBTF9DRkc1KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMl9WQUxfQ0ZHNSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTNfVkFMX0NGRzUpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE0X1ZBTF9DRkc1KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNV9WQUxfQ0ZHNSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTZfVkFMX0NGRzUpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xN19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE3X1ZBTF9DRkc1KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMThfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOF9WQUxfQ0ZHNSk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTlfVkFMX0NGRzUpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8yMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzIwX1ZBTF9DRkc1KTsKKwkKKwkvLyBzdGFydCBERFJDCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzUgfCAoMUxMIDw8IDMyKSk7CisJLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKwl3aGlsZSgoICoodm9sYXRpbGUgdTMyKikoREVOQUxJX0NUTF8wOF9EQVRBKzQpICYgX19jcHVfdG9fbGUzMigweDA0MDAwMCkpID09IDApOworCisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgoKHU2NClERU5BTElfQ1RMXzExX1ZBTF9DRkc1ICYgfigweDAwMDA3RjAwMDAwMDAwMDBMTCkpIHwgKHdyX2Rxc19zaGlmdCA8PCA0MCkpOworCit9CisKK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDYodm9pZCkKK3sKKwl1NjQgd3JfZHFzX3NoaWZ0ID0gMHg0MDsKKworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAwX1ZBTF9DRkc2KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMV9WQUxfQ0ZHNik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzYpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAzX1ZBTF9DRkc2KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNF9WQUxfQ0ZHNik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDVfVkFMX0NGRzYpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA2X1ZBTF9DRkc2KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wN19WQUxfQ0ZHNik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDhfVkFMX0NGRzYpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA5X1ZBTF9DRkc2KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMF9WQUxfQ0ZHNik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzYpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEyX1ZBTF9DRkc2KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTNfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xM19WQUxfQ0ZHNik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzYpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE1X1ZBTF9DRkc2KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNl9WQUxfQ0ZHNik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzYpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE4X1ZBTF9DRkc2KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTlfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xOV9WQUxfQ0ZHNik7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzYpOworCQorCS8vIHN0YXJ0IEREUkMKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHNiB8ICgxTEwgPDwgMzIpKTsKKwkvL3dhaXQgaW50X3N0YXR1c1syXSAoRFJBTSBpbml0IGNvbXBsZXRlKQorCXdoaWxlKCggKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzA4X0RBVEErNCkgJiBfX2NwdV90b19sZTMyKDB4MDQwMDAwKSkgPT0gMCk7CisKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzYgJiB+KDB4MDAwMDdGMDAwMDAwMDAwMExMKSkgfCAod3JfZHFzX3NoaWZ0IDw8IDQwKSk7CisKK30KKworc3RhdGljIHZvaWQgY29uZmlnX2JvYXJkNyh2b2lkKQoreworCWNvbmZpZ19ib2FyZDUoKTsgICAgLyogY29uZmlnIDcgaXMgc2FtZSBhcyBjb25maWcgNSAqLworfQorCitzdGF0aWMgdm9pZCBjb25maWdfYm9hcmQ4KHZvaWQpCit7CisgICAgLyogRGFsaSBNb0NBIEVWTXMgaGF2ZSBzYW1lIG1lbW9yeSBzdWJzeXN0ZW0gYXMgUGFja2V0SUFEIEVWTSAqLworICAgIGNvbmZpZ19ib2FyZDQoKTsKK30KKworCisvKiBTaW1pbGFyIHRvIENvbmZpZyAjNCAoUGFja2V0IElBRCkgKi8KK3N0YXRpYyB2b2lkIGNvbmZpZ19ib2FyZDkodm9pZCkKK3sKKwl1NjQgd3JfZHFzX3NoaWZ0ID0gMHg0MDsKKworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAwX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMV9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wM19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAzX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDRfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wNF9WQUxfQ0ZHNCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDVfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA2X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wN19WQUxfQ0ZHNF9DNTApOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzA4X1ZBTF9DRkc0X0M1MCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDlfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEwX1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHNF9DNTApOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzEyX1ZBTF9DRkc0X0M1MCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTNfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE0X1ZBTF9DRkc0KTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTVfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8xNV9WQUxfQ0ZHNF9DNTApOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xNl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE2X1ZBTF9DRkc0X0M1MCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzQpOworCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xOF9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzE4X1ZBTF9DRkc0X0M1MCk7CisJKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTlfVkFMX0NGRzRfQzUwKTsKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMjBfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8yMF9WQUxfQ0ZHNF9DNTApOworCQorCS8vIHN0YXJ0IEREUkMKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMDJfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF8wMl9WQUxfQ0ZHNCB8ICgxTEwgPDwgMzIpKTsKKwkvL3dhaXQgaW50X3N0YXR1c1syXSAoRFJBTSBpbml0IGNvbXBsZXRlKQorCXdoaWxlKCggKih2b2xhdGlsZSB1MzIqKShERU5BTElfQ1RMXzA4X0RBVEErNCkgJiBfX2NwdV90b19sZTMyKDB4MDQwMDAwKSkgPT0gMCk7CisKKwkqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMTFfREFUQSkgPSBfX2NwdV90b19sZTY0KCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzRfQzUwICYgfigweDAwMDA3RjAwMDAwMDAwMDBMTCkpIHwgKHdyX2Rxc19zaGlmdCA8PCA0MCkpOworCit9CisKKy8qIEJvYXJkIGNmZyAxMCBpcyBkZWZpbmVkIGZvciBDNTAgUm91dGVyIEVWTSAqLworc3RhdGljIHZvaWQgY29uZmlnX2JvYXJkMTAodm9pZCkKK3sKKyAgICAgICAgdTY0IHdyX2Rxc19zaGlmdCA9IDB4NDA7CisKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDBfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAxX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDFfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDJfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzAzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDNfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDRfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDVfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDZfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDdfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDhfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzA5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMDlfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTBfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzExX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTFfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEyX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTJfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzEzX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTNfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE0X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTRfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE1X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTVfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE2X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTZfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTdfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE4X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMThfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE5X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMTlfVkFMX0NGRzEwKTsKKyAgICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzIwX0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfMjBfVkFMX0NGRzEwKTsKKworICAgICAgICAvLyBzdGFydCBERFJDCisgICAgICAgICoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8wMl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzAyX1ZBTF9DRkcxMCB8ICgxTEwgPDwgMzIpKTsKKyAgICAgICAgLy93YWl0IGludF9zdGF0dXNbMl0gKERSQU0gaW5pdCBjb21wbGV0ZSkKKyAgICAgICAgd2hpbGUoKCAqKHZvbGF0aWxlIHUzMiopKERFTkFMSV9DVExfMDhfREFUQSs0KSAmIF9fY3B1X3RvX2xlMzIoMHgwNDAwMDApKSA9PSAwKTsKKyAgICAgICAgCisgCSoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8xMV9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKCh1NjQpREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMTAgJiB+KDB4MDAwMDdGMDAwMDAwMDAwMExMKSkgfCAod3JfZHFzX3NoaWZ0IDw8IDQwKSk7CisKK30KKwpkaWZmIC0tZ2l0IGEvY3B1L2FybTExMzYvY29tY2VydG8vYnNwMTAwMC5jIGIvY3B1L2FybTExMzYvY29tY2VydG8vYnNwMTAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZDM4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTEzNi9jb21jZXJ0by9ic3AxMDAwLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBNaW5kc3BlZWQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCit1MzIgQ0ZHX0haX0NMT0NLOwkvKiBBbGxvdyBmb3IgQUhCIGNsb2NrIGZyZXF1ZW5jeSB0byBiZSBjaG9zZW4gYXQgcnVuIHRpbWUgKi8KKworCit2b2lkIFNvQ19DaGVja19EZXZpY2Uodm9pZCkKK3sKKwkvLyBUaGlzIHNob3VsZCBydW4gb24gYSBNODN4eHggU29DLCBsZXQncyBjaGVjayBpdAorCXUzMiBkZXZpY2V0eXBlID0gX19sZTMyX3RvX2NwdSgoKih2b2xhdGlsZSB1MzIqKShHUElPX0RFVklEX1JFRykpICYgX19jcHVfdG9fbGUzMigweEZGRkYpKTsKKworCWlmIChkZXZpY2V0eXBlICE9IDB4MTcwKQorCXsKKwkJLy9lcnJvciB3cm9uZyBkZXZpY2UKKwkJLy8gVE9ETzogd2hhdCBzaG91bGQgd2UgZG8/CisJfQorfQorCit2b2lkIFNvQ19BUEJfc2V0dXAodm9pZCkKK3sKKwkvLyBTZXR0aW5nIEFQQiBCdXMgV2FpdCBzdGF0ZXMgdG8gMCwgc2V0IHBvc3Qgd3JpdGUKKwkqKHZvbGF0aWxlIHUzMiopKEFQQl9BQ0NFU1NfV1NfUkVHKSA9IF9fY3B1X3RvX2xlMzIoMHg0MCk7Cit9CisKK3ZvaWQgU29DX0FSQU1fc2V0dXAodm9pZCkKK3sKKwkvLyBlbmFibGUgQVJBTSBjb2xsaXNpb24gZGV0ZWN0aW9uCisJLy8gcmVhZCBtb2Qgd3JpdGUgdG8gc2V0IGJpdCAyIHRvIGVuYWJsZS4gIEtlZXAgZGVmYXVsdCBvZiAzMiBieXRlIG1hc2sKKwkqKHZvbGF0aWxlIHUzMiopKE1FTUNPUkVfQkFTRUFERFIrMHg0KSB8PSBfX2NwdV90b19sZTMyKDQpOworCS8vIGRpc2FibGUgQVJBTSBwaXBlbGluZSBtb2RlCisJKih2b2xhdGlsZSB1MzIqKShNRU1DT1JFX0JBU0VBRERSKzB4MzgpID0gX19jcHVfdG9fbGUzMigwKTsKKwkvLyBzZXQgQVJBTSBwb3J0L2ZicCBwcmlvcml0eSB0byAxIAorCSoodm9sYXRpbGUgdTMyKikoTUVNQ09SRV9CQVNFQUREUisweDBDKSA9IF9fY3B1X3RvX2xlMzIoMyk7IAorfQorCisKK3ZvaWQgU29DX0FIQl9zZXR1cCh2b2lkKQoreworCS8vIEREUiBzaXplIDUxMk1CLCBzdGFydGluZyBmcm9tIDgwMDAwMDAwCisJKih2b2xhdGlsZSB1MzIqKSBBSEJfSElHSE1FTV9BRERSX1RSQU5TTEFUSU9OID0gX19jcHVfdG9fbGUzMigweDlGRkYpOyAJLy8oQUhCX0JBU0VBRERSICsgMHgwNCkKKwkvLyBEaXNhYmxlIFJFTUFQIChMb3cgTWVtIHJlZ2lvbiBpcyBtYXBwZWQgdG8gRERSIGJhc2UpCisJKih2b2xhdGlsZSB1MzIqKSBBSEJfTE9XTUVNX1JFTUFQX0NUUkwgPSBfX2NwdV90b19sZTMyKDB4MCk7CQkvLyhBSEJfQkFTRUFERFIgKyAweDAwKQorCS8vIDJuZCBzdGFnZSBsZXZlbCBtdXhzIGFyZSBjb25maWd1cmVkIHRvIHJvdW5kLXJvYmluCisJKih2b2xhdGlsZSB1MzIqKSBBSEJfU1RBR0UyX0FSQklURVJfQ0ZHCT0gX19jcHVfdG9fbGUzMigweDApOwkvLyhBSEJfQkFTRUFERFIgKyAweDA4KQorfQorCisKK3ZvaWQgU29DX1BMTF9pbml0KGludCBjZmcpCit7CisJc3RydWN0IGMxMDAwX2NmZ19jbGsgYzEwMDBfY2ZnX2Nsa190YWJsZVtdID0KKwl7CisJCVtDRkdfQ0xLXzY1MF8xODdfMzc1XSA9IHs2NTAwMDAwMDAsIDMsIDQsIDc1MDAwMDAwMCwgMiwgMiwgMjUwMDAwMDAwLCAzLCA4LCAwLCA2NTAwMDAwMDAsIDAsIDE4NzUwMDAwMCwgMzc1MDAwMDAwLCAyNTAwMDAwMDB9LCAvKiBNODMyNngsIDM3NU1IeiAqLworCQlbQ0ZHX0NMS182MDBfMTY1XzMzMF0gPSB7NjAwMDAwMDAwLCAxLCA0LCA2NjAwMDAwMDAsIDEsIDQsIDI1MDAwMDAwMCwgMywgOCwgMCwgNjAwMDAwMDAwLCAwLCAxNjUwMDAwMDAsIDMzMDAwMDAwMCwgMTEwMDAwMDAwfSwgLyogTTgzMTYwICovCisJCVtDRkdfQ0xLXzUzNF8xNzhfMzMwXSA9IHs2NjAwMDAwMDAsIDEsIDQsIDUzNDAwMDAwMCwgMSwgNCwgMjUwMDAwMDAwLCAzLCA4LCAxLCA1MzQwMDAwMDAsIDEsIDE3ODAwMDAwMCwgMzMwMDAwMDAwLCAxNzgwMDAwMDB9LCAvKiBNODMyNXggKi8KKwkJW0NGR19DTEtfNDUwXzE2NV8zMzBdID0gezQ1MDAwMDAwMCwgMSwgNCwgNjYwMDAwMDAwLCAxLCA0LCAyNTAwMDAwMDAsIDMsIDgsIDAsIDQ1MDAwMDAwMCwgMCwgMTY1MDAwMDAwLCAzMzAwMDAwMDAsIDExMDAwMDAwMH0sIC8qIE04MzI0eCAqLworCQlbQ0ZHX0NMS180MDBfMTY1XzMzMF0gPSB7NDAwMDAwMDAwLCAyLCA2LCA2NjAwMDAwMDAsIDEsIDQsIDI1MDAwMDAwMCwgMywgOCwgMCwgNDAwMDAwMDAwLCAwLCAxNjUwMDAwMDAsIDMzMDAwMDAwMCwgMTEwMDAwMDAwfSwgLyogTTgzMjQwICovCisJCVtDRkdfQ0xLXzY1MF8yMDBfMjAwXSA9IHs2NTAwMDAwMDAsIDMsIDQsIDgwMDAwMDAwMCwgMywgMiwgMjUwMDAwMDAwLCAzLCA4LCAwLCA2NTAwMDAwMDAsIDAsIDIwMDAwMDAwMCwgMjAwMDAwMDAwLCAyNjY2NjY2NjZ9LCAvKiBNODMyNngsIDIwME1IeiAqLworCQlbQ0ZHX0NMS182NTBfMTg3XzMyNV0gPSB7NjUwMDAwMDAwLCAzLCA0LCA3NTAwMDAwMDAsIDIsIDIsIDI1MDAwMDAwMCwgMywgOCwgMCwgNjUwMDAwMDAwLCAxLCAxODc1MDAwMDAsIDMyNTAwMDAwMCwgMjUwMDAwMDAwfSwgLyogQXNpYyAqLworCQlbQ0ZHX0NMS182MTBfMTg2XzM3Ml0gPSB7NjEwMDAwMDAwLCAzLCA0LCA3NDQwMDAwMDAsIDIsIDIsIDI1MDAwMDAwMCwgMywgOCwgMCwgNjEwMDAwMDAwLCAwLCAxODYwMDAwMDAsIDM3MjAwMDAwMCwgMjQ4MDAwMDAwfSAvKiBBc2ljICovCisJfTsKKwlzdHJ1Y3QgYzEwMDBfY2ZnX2NsayAqY2ZnX2NsayA9ICZjMTAwMF9jZmdfY2xrX3RhYmxlW2NmZ107CisKKwkvLyAqKHZvbGF0aWxlIHUzMiopKEdQSU9fQVJNX01FTU9SWV9TRU5TRV9SRUdTKSA9IF9fY3B1X3RvX2xlMzIoMHgxQjZEQjZEQik7IC8qIE1hcmdpbiA9IDMgKi8KKwkvLyoodm9sYXRpbGUgdTMyKikoR1BJT19BUk1fTUVNT1JZX1NFTlNFX1JFR1MpID0gX19jcHVfdG9fbGUzMigweDI0OTI0OTI0KTsgLyogTWFyZ2luID0gNCAqLworCSoodm9sYXRpbGUgdTMyKikoR1BJT19BUk1fTUVNT1JZX1NFTlNFX1JFR1MpID0gX19jcHVfdG9fbGUzMigweDJEQjZEQjZEKTsgICAgICAgLyogTWFyZ2luID0gNSAqLworCisJLy8gTWFrZSBzdXJlIEREUiBjb250cm9sbGVyIGlzIHJlc2V0CisJKih2b2xhdGlsZSB1MzIqKShDTEtDT1JFX0JMS19SRVNFVCkgJj0gX19jcHVfdG9fbGUzMih+KEJMS19SRVNFVF9ERFJfUkVGX1JFU0VUX04gfCBCTEtfUkVTRVRfRERSX0FIQl9SRVNFVF9OKSk7CisKKwlIQUxfYWxsX3BsbF9ieXBhc3MoKTsKKworCS8vIFRha2UgRERSIGNvbnRyb2xsZXIgb3V0IG9mIHJlc2V0CisJKih2b2xhdGlsZSB1MzIqKShDTEtDT1JFX0JMS19SRVNFVCkgfD0gX19jcHVfdG9fbGUzMihCTEtfUkVTRVRfRERSX1JFRl9SRVNFVF9OIHwgQkxLX1JFU0VUX0REUl9BSEJfUkVTRVRfTik7CisKKwlIQUxfc2V0X2FybV9wbGwoY2ZnX2Nsay0+YXJtX3BsbCwgY2ZnX2Nsay0+YXJtX3BsbF9uciwgY2ZnX2Nsay0+YXJtX3BsbF9vZCk7CisJSEFMX3NldF9haGJfcGxsKGNmZ19jbGstPmFoYl9wbGwsIGNmZ19jbGstPmFoYl9wbGxfbnIsIGNmZ19jbGstPmFoYl9wbGxfb2QpOworCUhBTF9zZXRfcGh5X3BsbChjZmdfY2xrLT5waHlfcGxsLCBjZmdfY2xrLT5waHlfcGxsX25yLCBjZmdfY2xrLT5waHlfcGxsX29kKTsKKworCUhBTF9zZXRfYXJtX2NsayhjZmdfY2xrLT5hcm1fY2xrLCBjZmdfY2xrLT5hcm1fY2xrLCBjZmdfY2xrLT5hcm1fZnJvbV9zY2xrMik7CisJSEFMX3NldF9haGJfZGRyX2NsayhjZmdfY2xrLT5haGJfY2xrLCBjZmdfY2xrLT5kZHJfY2xrLCBjZmdfY2xrLT5kZHJfZnJvbV9mY2xrKTsKKwlIQUxfc2V0X3BoeV9nZW1fY2xrKENGR19HRU0wX0NMT0NLLCBDRkdfR0VNMV9DTE9DSywgQ0ZHX1BIWV9DTE9DSyk7CisJSEFMX3NldF9pcHNlY19jbGsoY2ZnX2Nsay0+aXBzZWNfY2xrKTsKKworCUhBTF9hbGxfcGxsX3JlbW92ZV9ieXBhc3MoKTsKK30KKwordm9pZCBTb0NfbmFuZF9pbml0KHZvaWQpCit7CisJLy8gVE9ETzogdmVyaWZ5IHRpbWluZ3MKKworCS8vIENvbmZpZ3VyZSBDUzQgLSA4IGJpdHMgLSBOQU5ECisJKih2b2xhdGlsZSB1MzIqKShFWF9DUzRfQ0ZHX1JFRykgPSBfX2NwdV90b19sZTMyKEVYX01FTV9CVVNfOCB8IEVYX05BTkRfTU9ERSk7CisJLy8gdGltaW5ncyAoQ1N3ID0gOSwgUkUgV0UgOSksIAorCSoodm9sYXRpbGUgdTMyKikoRVhfQ1M0X1RNRzFfUkVHKSA9IF9fY3B1X3RvX2xlMzIoOSB8IDk8PDE2IHwgOTw8MjQpIDsKKwkqKHZvbGF0aWxlIHUzMiopKEVYX0NTRU5fUkVHKSAgfD0gX19jcHVfdG9fbGUzMihFWF9DUzRfRU4pOwkKK30KKworLyoKKyogU29DX2dwaW9fY2ZnIC0gY29uZmlndXJlIEdQSU8gcGlucyBhcyBpbnB1dCBvciBvdXRwdXQgcGlucworKgorKiBncGlvIC0gZ3BpbyBwaW4KKyoKKyogbW9kZSAtIGdwaW8gcGluIG1vZGUKKyoJR1BJT19UWVBFX09VVFBVVCA9IG91dHB1dAorKglHUElPX1RZUEVfSU5QVVQgPSBpbnB1dAorKgorKi8KK2ludCBTb0NfZ3Bpb19jZmcoaW50IGdwaW8sIGludCBtb2RlKQoreworCWlmICgoZ3BpbyA8IDApIHx8IChncGlvID4gMzEpKQorCQlnb3RvIGVycjsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgR1BJT19UWVBFX0lOUFVUOgorCWRlZmF1bHQ6CisJCSoodm9sYXRpbGUgdTMyICopIEdQSU9fT0VfUkVHICY9IF9fY3B1X3RvX2xlMzIofigxIDw8IGdwaW8pKTsKKwkJYnJlYWs7CisKKwljYXNlIEdQSU9fVFlQRV9PVVRQVVQ6CisJCSoodm9sYXRpbGUgdTMyICopIEdQSU9fT0VfUkVHIHw9IF9fY3B1X3RvX2xlMzIoMSA8PCBncGlvKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgYXJtX3dyaXRlNjQodTY0IGRhdGEsdm9sYXRpbGUgdTY0ICpwKQoreworICAgICAgICBpbnQgKnRwdHIgPSAmZGF0YTsKKyAgICAgICAgcmVnaXN0ZXIgaW50IHJlZ18wIF9fYXNtX18gKCJyMyIpOworICAgICAgICByZWdpc3RlciBpbnQgcmVnXzEgX19hc21fXyAoInI0Iik7CisKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgICAgICAgICJsZG1pYSAgICAgJTAsIHslMSwlMn0gICAgIFxuXHQiCisgICAgICAgICAgICAgICAgOiAiK3IiICh0cHRyKSwgIj1yIiAocmVnXzApLCAiPXIiIChyZWdfMSkKKyAgICAgICAgKTsKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAgICAgICAgICJzdG1pYSAgICAgJTAsIHslMSwlMn0gICAgIFxuXHQiCisgICAgICAgICAgICAgICAgOiAiK3IiIChwKSwgIj1yIiAocmVnXzApLCAiPXIiIChyZWdfMSkKKyAgICAgICAgKTsKK30KZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTM2L2NvbWNlcnRvL2JzcDkwMC5jIGIvY3B1L2FybTExMzYvY29tY2VydG8vYnNwOTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVjN2FkZQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL2JzcDkwMC5jCkBAIC0wLDAgKzEsMTI5IEBACisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zY2MuaD4KKworCit2b2lkIFNvQ19DaGVja19EZXZpY2Uodm9pZCkKK3sKKwkvLyBUaGlzIHNob3VsZCBydW4gb24gYSBNODI5eHggU29DLCBsZXQncyBjaGVjayBpdAorCXUzMiBkZXZpY2V0eXBlID0gKih2b2xhdGlsZSB1MzIqKSgweDEwMDgwMDJDKTsKKwlpZihkZXZpY2V0eXBlICE9IDB4MTQwKQorCXsKKwkJLy9lcnJvciB3cm9uZyBkZXZpY2UKKwkJLy8gVE9ETzogd2hhdCBzaG91bGQgd2UgZG8/CisJfQorfQordm9pZCBTb0NfUExMX2luaXQodm9pZCkKK3sKKwkvL3N5c193cml0ZV9jb250cm9sKENSX00gfCBDUl9WIHwgQ1JfQVNZTkMpOworCXUzMiBpID0gMDsvL0NSX00gfCBDUl9WIHwgQ1JfQVNZTkM7CisJLyogdHVybiBvZmYgSS9ELWNhY2hlICovCisJYXNtICgibXJjIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCI6Ij1yIiAoaSkpOworCWkgfD0gKENSX0FTWU5DKTsKKwlhc20gKCJtY3IgcDE1LCAwLCAlMCwgYzEsIGMwLCAwIjogOiJyIiAoaSkpOworCUhBTF9zZXRfYW1iYV9jbGsoMTMzMDAwMDAwKTsKKwlIQUxfc2V0X2FybV9jbGsoNDUwMDAwMDAwKTsKK30KKworCisvL3ZvaWQgU29DX21lbV9pbml0KGludCBjb250cm9sbGVyLCBpbnQgYmFzZSwgaW50IGxlbmd0aCkKK3ZvaWQgU29DX21lbV9pbml0KHZvaWQpCit7CisjaWYgMAorCS8vKih2b2xhdGlsZSB1MzIqKSgweDEwMDgwMDEwKSA9IDB4RDJkYjsKKwkvLyoodm9sYXRpbGUgdTMyKikoMHgxMDA4MDAxYykgPSAweDQyOworCS8vKih2b2xhdGlsZSB1MzIqKSgweDEwMDgwMDE0KSA9IDB4RUE7CisJKih2b2xhdGlsZSB1MzIqKSgweDEwMDgwMDEwKSA9IDB4RDRFMzsKKwkvLyBDb25maWd1cmUgU0RSQU0gQ0ZHMgorCSoodm9sYXRpbGUgdTMyKikoMHgxMDA4MDAxNCkgPSAweDAwRUE7CisJLy9Db25maWd1cmUgU0RSQU0gUkVGUkVTSAorCSoodm9sYXRpbGUgdTMyKikoMHgxMDA4MDAxOCkgPSAweDA4MjA7CisJLy9Db25maWd1cmUgU0RSQU0gUFdST04KKwkqKHZvbGF0aWxlIHUzMiopKDB4MTAwODAwMUMpID0gMHg2ODJCOworCisJKih2b2xhdGlsZSB1MzIqKSgweDEwMDYwMDAwKSA9IDB4RjsKKwkqKHZvbGF0aWxlIHUzMiopKDB4MTAwNjAwMEMpID0gNTsKKyNlbHNlCisJaWYgKDEpLy9jb250cm9sbGVyID09IDApCisJeworCQkvL21hdGlzc2Ugb25seSBoYXZlIG9uZSBTRFJBTSBjb250cm9sbGVyIHNvIHRoZSBmaXJzdCBwYXJhbSBpcyB1c2VsZXNzCisJCS8vIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgaXMgYmFzZWQgb24gYSBTRFJBTSB3aXRoIGNsb2NrIHJhdGUgMTMzIE1IeiBhbmQgc3BlZWQgZ3JhZGUgLTcKKwkJLy8gQ29uZmlndXJlIFNEUkFNIENGRzEKKwkJKih2b2xhdGlsZSB1MzIqKSgweDEwMDgwMDEwKSA9IDB4RDRFMzsKKwkJLy8gQ29uZmlndXJlIFNEUkFNIENGRzIKKwkJKih2b2xhdGlsZSB1MzIqKSgweDEwMDgwMDE0KSA9IDB4MDBFQTsKKwkJLy9Db25maWd1cmUgU0RSQU0gUkVGUkVTSAorCQkqKHZvbGF0aWxlIHUzMiopKDB4MTAwODAwMTgpID0gMHgwODIwOworCQkvL0NvbmZpZ3VyZSBTRFJBTSBQV1JPTgorCQkqKHZvbGF0aWxlIHUzMiopKDB4MTAwODAwMUMpID0gMHg2ODJCOworCQkKKwkJCisJCQorCSNpZiAwCisJCS8vIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgaXMgYmFzZWQgb24gYSBERFItU0RSQU0gd2l0aCBjbG9jayByYXRlIDEzMyBNSHogYW5kIHNwZWVkIGdyYWRlIC03NXoKKwkJLy8gQ29uZmlndXJlIFNEUkFNIENGRzEKKwkJKih2b2xhdGlsZSB1MzIqKSgweDEwMDgwMDEwKSA9IDB4RDZEQTsKKwkJLy8gQ29uZmlndXJlIFNEUkFNIENGRzIKKwkJKih2b2xhdGlsZSB1MzIqKSgweDEwMDgwMDE0KSA9IDB4MDNFQTsKKwkJLy9Db25maWd1cmUgU0RSQU0gUkVGUkVTSAorCQkqKHZvbGF0aWxlIHUzMiopKDB4MTAwODAwMTgpID0gMHgwODIwOworCQkvL0NvbmZpZ3VyZSBTRFJBTSBQV1JPTgorCQkqKHZvbGF0aWxlIHUzMiopKDB4MTAwODAwMUMpID0gMHg2ODJCOworCSNlbmRpZgorCisKKwlpZiAoUEhZU19TRFJBTSA+ICgxMjgqMHgxMDAwMDApKSB7CS8vIGhpZ2ggbWVtb3J5CisJCSoodm9sYXRpbGUgdTMyKikoMHgxMDA2MDAwMCkgPSAoUEhZU19TRFJBTSA+PjIwKTw8NDsKKwkJKih2b2xhdGlsZSB1MzIqKSgweDEwMDYwMDEwKSA9IChQSFlTX1NEUkFNID4+MjcpOwkJCQorCX0KKwllbHNlIHsKKwkJKih2b2xhdGlsZSB1MzIqKSgweDEwMDYwMDAwKSA9IChQSFlTX1NEUkFNID4+MTYpPDw0OworCX0KKworCQlzd2l0Y2ggKC8qbGVuZ3RoKi9QSFlTX1NEUkFNX1NJWkUvMHgxMDAwMDApCisJCXsKKwkJCWNhc2UgODoKKwkJCQkqKHZvbGF0aWxlIHUzMiopKDB4MTAwNjAwMDApIHw9IDB4QjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTY6CisJCQkJKih2b2xhdGlsZSB1MzIqKSgweDEwMDYwMDAwKSB8PSAweEM7CisJCQkJYnJlYWs7CisJCQljYXNlIDMyOgorCQkJCSoodm9sYXRpbGUgdTMyKikoMHgxMDA2MDAwMCkgfD0gMHhEOworCQkJCWJyZWFrOworCQkJY2FzZSA2NDoKKwkJCQkqKHZvbGF0aWxlIHUzMiopKDB4MTAwNjAwMDApIHw9IDB4RTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTI4OgorCQkJCSoodm9sYXRpbGUgdTMyKikoMHgxMDA2MDAwMCkgfD0gMHhGOworCQkJCWJyZWFrOworCQl9CQkJCisJCS8vIEVuYWJsZSBDaGlwIHNlbGVjdCAwCisJCS8vKih2b2xhdGlsZSB1MzIqKSgweDEwMDYwMDBDKSB8PSAweDE7CisJCS8vKih2b2xhdGlsZSB1MzIqKSgweDEwMDYwMDBDKSA9IDB4QzsKKwkJaWYgKFBIWVNfU0RSQU0gPiAoMTI4KjB4MTAwMDAwKSkJLy8gaGlnaCBtZW1vcnkgOiBkbyBBUkFNIHJlbWFwIHRvIGhhdmUgbWVtb3J5IEAweDAwMDAwMDAwCQkKKwkJCSoodm9sYXRpbGUgdTMyKikoMHgxMDA2MDAwQykgPSAweDExNTsKKwkJZWxzZQorCQkJKih2b2xhdGlsZSB1MzIqKSgweDEwMDYwMDBDKSA9IDB4MDU7CisJfQorI2VuZGlmCQorCQorfQorCit2b2lkIFNvQ19mbGFzaF9pbml0KHZvaWQpCit7CisJLy8gQ29uZmlndXJlIFNEUkFNIENGRzEKKwkqKHZvbGF0aWxlIHUzMiopKDB4MTAwNjAwMDQpID0gMHgwMDEwMDAwYjsKKwkvLyoodm9sYXRpbGUgdTMyKikoMHgxMDA2MDAxNCkgPSAweDEwOworCSoodm9sYXRpbGUgdTMyKikoMHgxMDA2MDAxNCkgPSAwOworCSoodm9sYXRpbGUgdTMyKikoMHgxMDA4MDAwNCkgPSAweDBEOTI7CisJKih2b2xhdGlsZSB1MzIqKSgweDEwMDYwMDBDKSB8PSAyOworCit9CisKK3ZvaWQgU29DX25hbmRfaW5pdCh2b2lkKQoreworCSoodm9sYXRpbGUgdTMyKikoMHgxMDA4MDAwQykgPSAweDA0OTI7CisJKih2b2xhdGlsZSB1MzIqKSgweDEwMDYwMDBDKSB8PSA4OworfQorCmRpZmYgLS1naXQgYS9jcHUvYXJtMTEzNi9jb21jZXJ0by9pbnRlcnJ1cHRzLmMgYi9jcHUvYXJtMTEzNi9jb21jZXJ0by9pbnRlcnJ1cHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3NmE1NAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL2ludGVycnVwdHMuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgVElNRVJfTE9BRF9WQUwJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgQ0xPQ0tfQ09VTlRfUEVSX1VTRUMJKENGR19IWl9DTE9DSyAvIDEwMDAgLyAxMDAwKQorI2RlZmluZSBVU0VDX1BFUl9USUNLCQkoMTAwMCAqIDEwMDAgLyBDRkdfSFopCisKKyNkZWZpbmUgUkVBRF9USU1FUgkJKF9fbGUzMl90b19jcHUoKCoodm9sYXRpbGUgdTMyICopVElNRVIwX0NVUlJfQ09VTlQpKSkKKworCitzdGF0aWMgdWxvbmcgdHNfY291bnQsIHRzX3VzZWM7CitzdGF0aWMgdWxvbmcgbGFzdGluYzsKKworaW50IGludGVycnVwdF9pbml0ICh2b2lkKQoreworCSoodm9sYXRpbGUgdTMyICopVElNRVIwX0NOVFJfUkVHID0gX19jcHVfdG9fbGUzMihUSU1FUl9MT0FEX1ZBTCk7CisKKwlsYXN0aW5jID0gMDsKKwl0c19jb3VudCA9IDA7CisJdHNfdXNlYyA9IDA7CisKKwlyZXR1cm4gKDApOworfQorCit2b2lkIHJlc2V0X3RpbWVyX21hc2tlZCAodm9pZCkKK3sKKwlsYXN0aW5jID0gUkVBRF9USU1FUjsKKwl0c19jb3VudCA9IDA7CisJdHNfdXNlYyA9IDA7Cit9CisKK3ZvaWQgcmVzZXRfdGltZXIgKHZvaWQpCit7CisJcmVzZXRfdGltZXJfbWFza2VkICgpOworfQorCisvKiBSZXR1cm5zIHVzZWNzIHNpbmNlIGxhc3QgdGltZXIgcmVzZXQgKi8KK3Vsb25nIGdldF90aW1lcl9yYXcgKHZvaWQpCit7CisJdWxvbmcgc3RlcDsKKwl1bG9uZyBub3cgPSBSRUFEX1RJTUVSOworCisJaWYgKG5vdyA+IGxhc3RpbmMpIHsKKwkJLyogbm9ybWFsIG1vZGUgKi8KKwkJc3RlcCA9IG5vdyAtIGxhc3RpbmM7CisJfSBlbHNlIHsKKwkJLyogd2UgaGF2ZSBhbiBvdmVyZmxvdyAuLi4gKi8KKwkJc3RlcCA9IChUSU1FUl9MT0FEX1ZBTCAtIGxhc3RpbmMpICsgbm93OworCX0KKworCWxhc3RpbmMgPSBub3c7CisKKwl0c19jb3VudCArPSBzdGVwICUgQ0xPQ0tfQ09VTlRfUEVSX1VTRUM7CisJdHNfdXNlYyArPSBzdGVwIC8gQ0xPQ0tfQ09VTlRfUEVSX1VTRUM7CisKKwlpZiAodHNfY291bnQgPj0gQ0xPQ0tfQ09VTlRfUEVSX1VTRUMpIHsKKwkJdHNfdXNlYyArPSB0c19jb3VudCAvIENMT0NLX0NPVU5UX1BFUl9VU0VDOworCQl0c19jb3VudCAlPSBDTE9DS19DT1VOVF9QRVJfVVNFQzsKKwl9CisKKwlyZXR1cm4gdHNfdXNlYzsKK30KKworLyogUmV0dXJucyB0aWNrIGNvdW50IHNpbmNlIGxhc3QgdGltZXIgcmVzZXQgKi8KK3Vsb25nIGdldF90aW1lcl9tYXNrZWQgKHZvaWQpCit7CisJcmV0dXJuIGdldF90aW1lcl9yYXcoKSAvIFVTRUNfUEVSX1RJQ0s7Cit9CisKK3Vsb25nIGdldF90aW1lciAodWxvbmcgYmFzZSkKK3sKKwlyZXR1cm4gZ2V0X3RpbWVyX21hc2tlZCAoKSAtIGJhc2U7Cit9CisKK3ZvaWQgdWRlbGF5X21hc2tlZCAodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVsb25nIGVuZHRpbWUgPSBnZXRfdGltZXJfcmF3ICgpICsgdXNlYzsKKworCXdoaWxlIChnZXRfdGltZXJfcmF3ICgpIDwgZW5kdGltZSkKKwkJOworCit9CisKK3ZvaWQgdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisJdWRlbGF5X21hc2tlZCh1c2VjKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAocmVhZCB0aW1lYmFzZSBhcyBsb25nIGxvbmcpLgorICogT24gQVJNIGl0IGp1c3QgcmV0dXJucyB0aGUgdGltZXIgdmFsdWUuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBnZXRfdGlja3Modm9pZCkKK3sKKwlyZXR1cm4gZ2V0X3RpbWVyKDApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlICh0aW1lYmFzZSBjbG9jayBmcmVxdWVuY3kpLgorICogT24gQVJNIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lciB0aWNrcyBwZXIgc2Vjb25kLgorICovCit1bG9uZyBnZXRfdGJjbGsgKHZvaWQpCit7CisJdWxvbmcgdGJjbGs7CisKKwl0YmNsayA9IENGR19IWjsKKwlyZXR1cm4gdGJjbGs7Cit9CisKKy8qCisgKgorICovCit2b2lkIHJlc2V0X2NwdSAodWxvbmcgaWdub3JlZCkKK3sKKwkvKiBzZXQgdGhlIHRpbWVvdXQgdmFsdWUgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKVRJTUVSX1dEVF9ISUdIX0JPVU5EID0gX19jcHVfdG9fbGUzMigweDEpOworCS8qIGVuYWJsZSB3YXRjaGRvZyB0aW1lciAqLworCSoodm9sYXRpbGUgdTMyICopVElNRVJfV0RUX0NPTlRST0wgPSBfX2NwdV90b19sZTMyKDB4MSk7CisKKwl3aGlsZSAoMSkgOworfQorCisvKgorICogdGltZXIgd2l0aG91dCBpbnRlcnJ1cHRzCisgKi8KKworCit2b2lkIHNldF90aW1lciAodWxvbmcgdCkKK3sKKwl0c19jb3VudCA9IDA7CisJdHNfdXNlYyA9IHQgKiBVU0VDX1BFUl9USUNLOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTExMzYvY29tY2VydG8vbG93bGV2ZWxfaW5pdC5TIGIvY3B1L2FybTExMzYvY29tY2VydG8vbG93bGV2ZWxfaW5pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NTUwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTEzNi9jb21jZXJ0by9sb3dsZXZlbF9pbml0LlMKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIFNPQyBzcGVjaWZpYyBzZXR1cCBpbmZvCisgKgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworCisuZ2xvYmwgbG93bGV2ZWxfaW5pdAorbG93bGV2ZWxfaW5pdDoKKwlsZHIJc3AsIFRNUF9TVEFDSyAvKiBzZXQgdXAgYSB0ZW1wb3Jhcnkgc3RhY2sgKi8KKworCXN0bWRiCXNwISwge2lwLCBscn0KKwlibAlic3BfaW5pdAkvKiBnbyBzZXR1cCBwbGwsIG1lbW9yeSAqLworCWxkbWlhCXNwISwge2lwLCBwY30JLyogcmVzdG9yZSByZWdpc3RlcnMgYW5kIHJldHVybiB0byBjYWxsZXIgKi8KKworCS8qIHRoZSBsaXRlcmFsIHBvb2xzIG9yaWdpbiAqLworCS5sdG9yZworVE1QX1NUQUNLOgorCS53b3JkCUNGR19JTklUX1JBTV9BRERSICsgQ0ZHX0lOSVRfU1BfT0ZGU0VUCmRpZmYgLS1naXQgYS9jcHUvYXJtMTEzNi9jb21jZXJ0by9tZG1hLmMgYi9jcHUvYXJtMTEzNi9jb21jZXJ0by9tZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ3YjI3NwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL21kbWEuYwpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMDApCisKKyNkZWZpbmUgTURNQV9HQkxfQ1RSTF9DRkcgICAgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKShNRE1BX0JBU0VBRERSICsgMHgwKSkKKyNkZWZpbmUgTURNQV9UWDFfUEFUSF9IRUFEICAgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKShNRE1BX0JBU0VBRERSICsgMHg0KSkKKyNkZWZpbmUgTURNQV9UWDFfUEFUSF9DVFIgICAgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKShNRE1BX0JBU0VBRERSICsgMHg4KSkKKyNkZWZpbmUgTURNQV9SWDFfUEFUSF9IRUFEICAgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKShNRE1BX0JBU0VBRERSICsgMHgxNCkpCisjZGVmaW5lIE1ETUFfUlgxX1BBVEhfQ1RSICAgICAgICAgICAqKCh2b2xhdGlsZSB1MzIgKikoTURNQV9CQVNFQUREUiArIDB4MTgpKQorI2RlZmluZSBNRE1BX0lOVF9NQVNLX1JFRyAgICAgICAgICAgKigodm9sYXRpbGUgdTMyICopKE1ETUFfQkFTRUFERFIgKyAweDI4KSkKKyNkZWZpbmUgTURNQV9JTlRfU1RBVFVTX1JFRzAgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKShNRE1BX0JBU0VBRERSICsgMHgyYykpCisjZGVmaW5lIE1ETUFfSU5UX1NUQVRVU19SRUcxICAgICAgICAqKCh2b2xhdGlsZSB1MzIgKikoTURNQV9CQVNFQUREUiArIDB4MzApKQorCit0eXBlZGVmIHN0cnVjdCBtZG1hX2Rlc2NfcworeworICB1MzIgZGF0YUJ1ZkFkZHI7CisgIHUzMiBjb250cm9sOworICB1MzIgbXNnMTsKKyAgdTMyIG1zZzI7Cit9IG1kbWFfZGVzY190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiBtZG1hX21lbWNweQorICogRGVzY3Rpb246CisgKiAgIEltcGxlbWVuYXRpb24gb2YgbWVtY3B5IGZ1bmN0aW9uIHVzaW5nIE1ETUEuCisgKiAgIE5vIENSQyBtZWNoYW5pc20gc3VwcG9ydGVkIGluIEMxSy4KKyAqIFBhcmFtdGVyczoKKyAqICAgc3JjOiBTb3VyY2UgYWRkcmVzcworICogICBkc3Q6IERlc3RpbmF0aW9uIGFkZHJlc3MKKyAqICAgbGVuOiBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgY29waWVkLgorICogICBjcmM6IE5vdCB1c2VkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgbWRtYV9tZW1jcHkodm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCAqY3JjKQoreworICB1MzIgc3RhdDsKKyAgaW50IGk7CisgIHVuc2lnbmVkIGNoYXIgdGVtcDFbNjRdOworICB1bnNpZ25lZCBjaGFyIHRlbXAyWzY0XTsKKworICAvL2Rlc2NyaXB0b3IgbWVtc2V0IHRvIHplcm8KKyAgZm9yKGk9MDsgaSA8IDY0OyBpKyspCisgIHsKKwl0ZW1wMVtpXSA9IDA7CisgCXRlbXAyW2ldID0gMDsKKyAgfQorCisgIGxlbiA9IGxlbiAtIChsZW4gJSA4KTsKKyAgCisgIC8vRGlzYWJsZSBNRE1BCisgIE1ETUFfR0JMX0NUUkxfQ0ZHID0gX19jcHVfdG9fbGUzMigwKTsKKworICAvL01ha2UgaXQgMTZieXRlIGFsaWduCisgIG1kbWFfZGVzY190ICp0eERlc2MgPSAobWRtYV9kZXNjX3QgKikoKCh1MzIpKHRlbXAxICsgMTYpKSAmIH4weGYpOworICBtZG1hX2Rlc2NfdCAqcnhEZXNjID0gKG1kbWFfZGVzY190ICopKCgodTMyKSh0ZW1wMiArIDE2KSkgJiB+MHhmKTsKKworICB0eERlc2MtPmRhdGFCdWZBZGRyID0gX19jcHVfdG9fbGUzMigodTMyKXNyYyk7CisgIHR4RGVzYy0+Y29udHJvbCA9IF9fY3B1X3RvX2xlMzIoKHUzMikoMHg0MTAwMjAwMCB8IChsZW4gJiAweDFmZmYpKSk7CisgIHR4RGVzYy0+bXNnMSA9IHR4RGVzYy0+bXNnMiA9IF9fY3B1X3RvX2xlMzIoMCk7CisgIE1ETUFfVFgxX1BBVEhfSEVBRCA9IF9fY3B1X3RvX2xlMzIoKHUzMil0eERlc2MpOworICBNRE1BX1RYMV9QQVRIX0NUUiA9IF9fY3B1X3RvX2xlMzIoMSk7CisKKyAgcnhEZXNjLT5kYXRhQnVmQWRkciA9IF9fY3B1X3RvX2xlMzIoKHUzMilkc3QpOworICByeERlc2MtPmNvbnRyb2wgPSBfX2NwdV90b19sZTMyKCh1MzIpKDB4NDEwMDIwMDAgfCAobGVuICYgMHgxZmZmKSkpOyAKKyAgcnhEZXNjLT5tc2cxID0gcnhEZXNjLT5tc2cyID0gX19jcHVfdG9fbGUzMigwKTsKKyAgTURNQV9SWDFfUEFUSF9IRUFEID0gX19jcHVfdG9fbGUzMigodTMyKXJ4RGVzYyk7CisgIE1ETUFfUlgxX1BBVEhfQ1RSID0gX19jcHVfdG9fbGUzMigxKTsKKworICBNRE1BX0lOVF9NQVNLX1JFRyA9IF9fY3B1X3RvX2xlMzIoMCk7CisgIE1ETUFfR0JMX0NUUkxfQ0ZHID0gX19jcHVfdG9fbGUzMigxKTsgIC8vRW5hYmxlIE1ETUEgCisKKyAgLyogd2FpdCB1bnRpbCBkbWEgZG9uZSAqLworICB3aGlsZSgoc3RhdCA9IF9fbGUzMl90b19jcHUoTURNQV9SWDFfUEFUSF9DVFIpKSAhPSAwKTsKKworICAvL01lbWNweSBkb25lLCBkaXNhYmxlIE1ETUEKKyAgTURNQV9HQkxfQ1RSTF9DRkcgPSBfX2NwdV90b19sZTMyKDApOworCisgIHJldHVybiAwOworfQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDApCisKKyNkZWZpbmUgTURNQV9NTUZJRk9fU1RBUlQgICAgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKShNRE1BX0JBU0VBRERSICsgMHgxMDApKQorI2RlZmluZSBNRE1BX01NRklGT19IRUFEUFRSICAgICAgICAgKigodm9sYXRpbGUgdTMyICopKE1ETUFfQkFTRUFERFIgKyAweDEwNCkpCisjZGVmaW5lIE1ETUFfTU1GSUZPX0xPQ0tfVFNGUl9TSVpFICAqKCh2b2xhdGlsZSB1MzIgKikoTURNQV9CQVNFQUREUiArIDB4MTA4KSkKKyNkZWZpbmUgTURNQV9NTUZJRk9fU09GVF9SRVNFVCAgICAgICooKHZvbGF0aWxlIHUzMiAqKShNRE1BX0JBU0VBRERSICsgMHgxMjApKQorCisjZGVmaW5lIE1ETUFfRklGT01NX1NUQVJUICAgICAgICAgICAqKCh2b2xhdGlsZSB1MzIgKikoTURNQV9CQVNFQUREUiArIDB4MTgwKSkKKyNkZWZpbmUgTURNQV9GSUZPTU1fSEVBRFBUUiAgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKShNRE1BX0JBU0VBRERSICsgMHgxODQpKSAKKyNkZWZpbmUgTURNQV9GSUZPTU1fTE9DS19UU0ZSX1NJWkUgICooKHZvbGF0aWxlIHUzMiAqKShNRE1BX0JBU0VBRERSICsgMHgxODgpKQorI2RlZmluZSBNRE1BX0ZJRk9NTV9TT0ZUX1JFU0VUICAgICAgKigodm9sYXRpbGUgdTMyICopKE1ETUFfQkFTRUFERFIgKyAweDFBMCkpCisKK3R5cGVkZWYgc3RydWN0IG1kbWFfYlB0cl9zCit7CisgIHUzMiBCcG9pbnRlcjsKKyAgdTMyIEJjb250cm9sOworfW1kbWFfYlB0cl90OworCit0eXBlZGVmIHN0cnVjdCBtZG1hX0ZkZXNjX3MKK3sKKyAgdTMyIEZuZXh0OworICB1MzIgRnN5c3RlbTsKKyAgdTMyIEZzdGF0dXM7CisgIHUzMiBGY29udHJvbDsKKworICBtZG1hX2JQdHJfdCBCZGVzYzsKKworfW1kbWFfRmRlc2NfdDsKKworCitpbnQgbWRtYV9tZW1jcHkodm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCAqY3JjKQoreworICB1bnNpZ25lZCBjaGFyIHRlbXAxWzY0XTsKKyAgdW5zaWduZWQgY2hhciB0ZW1wMls2NF07CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCB2YWw7CisgIGludCBpOworCisgIC8vTWFrZSBpdCAxNmJ5dGUgYWxpZ24KKyAgbWRtYV9GZGVzY190ICptbWZpZm8gPSAobWRtYV9GZGVzY190ICopKCgodTMyKSh0ZW1wMSArIDE2KSkgJiB+MHhmKTsKKyAgbWRtYV9GZGVzY190ICpmaWZvbW0gPSAobWRtYV9GZGVzY190ICopKCgodTMyKSh0ZW1wMiArIDE2KSkgJiB+MHhmKTsKKworICAvL2Rlc2NyaXB0b3IgbWVtc2V0IHRvIHplcm8KKyAgZm9yKGk9MDsgaSA8IDY0OyBpKyspCisgIHsKKwl0ZW1wMVtpXSA9IDA7CisgCXRlbXAyW2ldID0gMDsKKyAgfQorCisgIC8qIG1lbW9yeSB0byBGSUZPICovCisgIG1tZmlmby0+Rm5leHQgPSBfX2NwdV90b19sZTMyKDB4MCk7CisgIG1tZmlmby0+RnN5c3RlbSA9IF9fY3B1X3RvX2xlMzIoMCk7CisgIG1tZmlmby0+RnN0YXR1cyA9IF9fY3B1X3RvX2xlMzIoMCk7CisgIG1tZmlmby0+RmNvbnRyb2wgPSBfX2NwdV90b19sZTMyKDB4ODMpOworICBtbWZpZm8tPkJkZXNjLkJwb2ludGVyID0gX19jcHVfdG9fbGUzMigodTMyKXNyYyk7CisgIG1tZmlmby0+QmRlc2MuQmNvbnRyb2wgPSBfX2NwdV90b19sZTMyKCgweDEwMDAwIHwgKGxlbiAmIDB4ZmZmZikpKTsKKworICAvKiBGSUZPIHRvIG1lbW9yeSAqLworICBmaWZvbW0tPkZuZXh0ID0gX19jcHVfdG9fbGUzMigweDApOworICBmaWZvbW0tPkZzeXN0ZW0gPSBfX2NwdV90b19sZTMyKDB4MCk7CisgIGZpZm9tbS0+RnN0YXR1cyA9IF9fY3B1X3RvX2xlMzIoMHgwKTsKKyAgZmlmb21tLT5GY29udHJvbCA9IF9fY3B1X3RvX2xlMzIoMHg4Myk7CisgIGZpZm9tbS0+QmRlc2MuQnBvaW50ZXIgPSBfX2NwdV90b19sZTMyKCh1MzIpZHN0KTsKKyAgZmlmb21tLT5CZGVzYy5CY29udHJvbCA9IF9fY3B1X3RvX2xlMzIobGVuICYgMHhmZmZmKTsKKworICBNRE1BX01NRklGT19TT0ZUX1JFU0VUID0gX19jcHVfdG9fbGUzMigxKTsKKyAgTURNQV9GSUZPTU1fU09GVF9SRVNFVCA9IF9fY3B1X3RvX2xlMzIoMSk7CisKKyAgTURNQV9NTUZJRk9fSEVBRFBUUiA9IF9fY3B1X3RvX2xlMzIoKHUzMiltbWZpZm8pOworICBNRE1BX01NRklGT19MT0NLX1RTRlJfU0laRSA9IF9fY3B1X3RvX2xlMzIoNjQpOworCisgIE1ETUFfRklGT01NX0hFQURQVFIgPSBfX2NwdV90b19sZTMyKCh1MzIpZmlmb21tKTsKKyAgTURNQV9GSUZPTU1fTE9DS19UU0ZSX1NJWkUgPSBfX2NwdV90b19sZTMyKDY0KTsKKworICBNRE1BX01NRklGT19TVEFSVCA9IF9fY3B1X3RvX2xlMzIoMHgxKTsKKyAgTURNQV9GSUZPTU1fU1RBUlQgPSBfX2NwdV90b19sZTMyKDB4MSk7CisKKyAgd2hpbGUgKCh2YWwgPSBfX2xlMzJfdG9fY3B1KG1tZmlmby0+RnN0YXR1cykpID09IDApOworICB3aGlsZSAoKHZhbCA9IF9fbGUzMl90b19jcHUoZmlmb21tLT5Gc3RhdHVzKSkgPT0gMCk7CisKKyAgLyogUmV0dXJuIHRoZSBDUkMgdmFsdWUgKi8KKyAgKmNyYyA9IF9fbGUzMl90b19jcHUoZmlmb21tLT5Gc3lzdGVtKTsKKworICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L2FybTExMzYvY29tY2VydG8vc2VyaWFsLmMgYi9jcHUvYXJtMTEzNi9jb21jZXJ0by9zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzkzMzJiCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTExMzYvY29tY2VydG8vc2VyaWFsLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworCisjaWYgIWRlZmluZWQoQ09ORklHX1VBUlQwKSAmJiAhZGVmaW5lZChDT05GSUdfVUFSVDEpCisjZXJyb3IgbXVzdCBkZWZpbmUgb25lIG9mIENPTkZJR19VQVJUMCBvciBDT05GSUdfVUFSVDEKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IHRhZ1VBUlQxNjU1MFJFR1MgeworCXZvbGF0aWxlIHUzMiBkYXRhOwkvLyBSZWNlaXZlL1RyYW5zbWl0IGRhdGEgcmVnaXN0ZXIKKwl2b2xhdGlsZSB1MzIgaWVyOwkvLyBJbnRlcnJ1cHQgRW5hYmxlIHJlZ2lzdGVyCisJdm9sYXRpbGUgdTMyIGlpcl9mY3I7Ly8gSW50ZXJydXB0IElkZW50aXR5IHJlZ2lzdGVyIC8gRklGTyBDb250cm9sIHJlZ2lzdGVyCisJdm9sYXRpbGUgdTMyIGxjcjsJLy8gTGluZSBDb250cm9sIHJlZ2lzdGVyCisJdm9sYXRpbGUgdTMyIG1jcjsJLy8gTW9kZW0gQ29udHJvbCByZWdpc3RlcgorCXZvbGF0aWxlIHUzMiBsc3I7CS8vIExpbmUgU3RhdHVzIHJlZ2lzdGVyCisJdm9sYXRpbGUgdTMyIG1zcjsJLy8gTW9kZW0gU3RhdHVzIHJlZ2lzdGVyCisJdm9sYXRpbGUgdTMyIHNyOwkJLy8gU2NyYXRjaCByZWdpc3RlcgorfSBVQVJUMTY1NTBSRUdTLCAqUFVBUlQxNjU1MFJFR1M7CisKK3R5cGVkZWYgc3RydWN0IHRhZ1VBUlQxNjU1MERMUkVHUyB7CisJdm9sYXRpbGUgdTMyIGRsbDsJLy8gRGl2aXNvciBMYXRjaCAoTG93KQorCXZvbGF0aWxlIHUzMiBkbGg7CS8vIERpdmlzb3IgTGF0Y2ggKEhpZ2gpCit9IFVBUlQxNjU1MERMUkVHUywgKlBVQVJUMTY1NTBETFJFR1M7CisKKyNkZWZpbmUgTENSX0NIQVJfTEVOXzUJCTB4MDAJICAvKiBkZWZhdWx0ICovCisjZGVmaW5lIExDUl9DSEFSX0xFTl82CQkweDAxCisjZGVmaW5lIExDUl9DSEFSX0xFTl83CQkweDAyCisjZGVmaW5lIExDUl9DSEFSX0xFTl84CQkweDAzCisjZGVmaW5lIExDUl9PTkVfU1RPUAkJMHgwMAkgIC8qIE9uZSBzdG9wIGJpdCEgLSBkZWZhdWx0ICovCisjZGVmaW5lIExDUl9UV09fU1RPUAkJMHgwNAkgIC8qIFR3byBzdG9wIGJpdCEgKi8KKyNkZWZpbmUgTENSX1BFTgkJCQkweDA4CSAgLyogUGFyaXR5IEVuYWJsZSAqLworI2RlZmluZSBMQ1JfUEFSSVRZX05PTkUJCTB4MDAKKyNkZWZpbmUgTENSX0VQUwkJCQkweDEwCSAgLyogRXZlbiBQYXJpdHkgU2VsZWN0ICovCisjZGVmaW5lIExDUl9QUwkJCQkweDIwCSAgLyogRW5hYmxlIFBhcml0eSAgU3R1ZmYgKi8KKyNkZWZpbmUgTENSX1NCUksJCQkJMHg0MCAgLyogU3RhcnQgQnJlYWsgKi8KKyNkZWZpbmUgTENSX1BTQgkJCQkweDgwCSAgLyogUGFyaXR5IFN0dWZmIEJpdCAqLworI2RlZmluZSBMQ1JfRExBQgkJCQkweDgwICAvKiBVQVJUIDE2NTUwIERpdmlzb3IgTGF0Y2ggQXNzZXNzICovCisKKyNkZWZpbmUgTFNSX0ZJRk9FCQkoMSA8PCA3KQkvKiBGSUZPIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBMU1JfVEVNVAkJCSgxIDw8IDYpCS8qIFRyYW5zbWl0dGVyIEVtcHR5ICovCisjZGVmaW5lIExTUl9URFJRCQkJKDEgPDwgNSkJLyogVHJhbnNtaXQgRGF0YSBSZXF1ZXN0ICovCisjZGVmaW5lIExTUl9CSQkJCSgxIDw8IDQpCS8qIEJyZWFrIEludGVycnVwdCAqLworI2RlZmluZSBMU1JfRkUJCQkoMSA8PCAzKQkvKiBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lIExTUl9QRQkJCSgxIDw8IDIpCS8qIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBMU1JfT0UJCQkoMSA8PCAxKQkvKiBPdmVycnVuIEVycm9yICovCisjZGVmaW5lIExTUl9EUgkJCSgxIDw8IDApCS8qIERhdGEgUmVhZHkgKi8KKworCisjZGVmaW5lIElFUl9ETUFFCQkJKDEgPDwgNykJLyogRE1BIFJlcXVlc3RzIEVuYWJsZSAqLworI2RlZmluZSBJRVJfVVVFCQkJKDEgPDwgNikJLyogVUFSVCBVbml0IEVuYWJsZSAqLworI2RlZmluZSBJRVJfTlJaRQkJCSgxIDw8IDUpCS8qIE5SWiBjb2RpbmcgRW5hYmxlICovCisjZGVmaW5lIElFUl9SVElPRQkJCSgxIDw8IDQpCS8qIFJlY2VpdmVyIFRpbWUgT3V0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX01JRQkJCSgxIDw8IDMpCS8qIE1vZGVtIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX1JMU0UJCQkoMSA8PCAyKQkvKiBSZWNlaXZlciBMaW5lIFN0YXR1cyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIElFUl9USUUJCQkoMSA8PCAxKQkvKiBUcmFuc21pdCBEYXRhIHJlcXVlc3QgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJRVJfUkFWSUUJCQkoMSA8PCAwKQkvKiBSZWNlaXZlciBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQgRW5hYmxlICovCisKKyNkZWZpbmUgSUlSX0ZJRk9FUzEJCSgxIDw8IDcpCS8qIEZJRk8gTW9kZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lIElJUl9GSUZPRVMwCQkoMSA8PCA2KQkvKiBGSUZPIE1vZGUgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSBJSVJfVE9ECQkJKDEgPDwgMykJLyogVGltZSBPdXQgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSUlSX0lJRDIJCQkoMSA8PCAyKQkvKiBJbnRlcnJ1cHQgU291cmNlIEVuY29kZWQgKi8KKyNkZWZpbmUgSUlSX0lJRDEJCQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgU291cmNlIEVuY29kZWQgKi8KKyNkZWZpbmUgSUlSX0lQCQkJCSgxIDw8IDApCS8qIEludGVycnVwdCBQZW5kaW5nIChhY3RpdmUgbG93KSAqLworCisvKiBVQVJUIDE2NTUwIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBGQ1JfRklGT0VOCQkJMHgwMQorI2RlZmluZSBGQ1JfUkNWUlJFUwkJCTB4MDIKKyNkZWZpbmUgRkNSX1hNSVRSRVMJCQkweDA0CisKKy8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKy8vIFVBUlQgMTY1NTAKKyNkZWZpbmUgSUVSX1JYVEgJCQkweDAxCS8vIEVuYWJsZSBSZWNlaXZlZCBEYXRhIEF2YWlsYWJsZSBJbnRlcnJ1cHQKKyNkZWZpbmUgSUVSX1RYVEgJCQkweDAyCS8vIEVuYWJsZSBUcmFuc21pdHRlciBFbXB0eSBJbnRlcnJ1cHQKKworI2lmZGVmIENPTkZJR19VQVJUMAorI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMCkKK3N0YXRpYyB2b2lkIEVuYWJsZVVBUlQwKHZvaWQpCit7CisJdTMyIHRlbXA7CisJZG8geyAgICAKKyAgIAkgICB0ZW1wID0gKih2b2xhdGlsZSB1MzIgKilHUElPX0lPQ1RSTF9SRUcgfCBfX2NwdV90b19sZTMyKEdQSU9fSU9DVFJMX1VBUlQwKTsgCS8vIGVuYWJsZSBVQVJUMAorICAgCSAgICoodm9sYXRpbGUgdTMyICopR1BJT19MT0NLX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHg1NTU1NTU1NSk7IAkJCQkvLyByZW1vdmUgbG9jaworICAgCSAgICoodm9sYXRpbGUgdTMyICopR1BJT19JT0NUUkxfUkVHID0gdGVtcDsJCQkJLy8gd3JpdGUgdG8gY3RybCByZWcKKyAgIAl9IHdoaWxlICgqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMX1JFRyAhPSB0ZW1wKTsKK30KKyNlbmRpZgorI2Vsc2UKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDApCitzdGF0aWMgdm9pZCBFbmFibGVVQVJUMSh2b2lkKQoreworCXUzMiB0ZW1wOworCisJZG8geworICAgCSAgIHRlbXAgPSAqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMX1JFRyB8IF9fY3B1X3RvX2xlMzIoR1BJT19JT0NUUkxfVUFSVDEpOyAJLy8gZW5hYmxlIFVBUlQxCisJCSoodm9sYXRpbGUgdTMyICopR1BJT19MT0NLX1JFRyA9IF9fY3B1X3RvX2xlMzIoMHg1NTU1NTU1NSk7IAkJCQkvLyByZW1vdmUgbG9jaworCQkqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMX1JFRyA9IHRlbXA7CQkJCS8vIHdyaXRlIHRvIGN0cmwgcmVnCisJfSB3aGlsZSAoKih2b2xhdGlsZSB1MzIgKilHUElPX0lPQ1RSTF9SRUcgIT0gdGVtcCk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgRW5hYmxlVUFSVDEodm9pZCkKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKUdQSU9fUElOX1NFTEVDVF9SRUcgfD0gX19jcHVfdG9fbGUzMihHUElPX1BJTl9TRUxFQ1RfVUFSVDEpOyAJCS8vIGVuYWJsZSBVQVJUMQorfQorI2VuZGlmCisjZW5kaWYKKwordm9pZCBzZXJpYWxfc2V0YnJnICh2b2lkKQoreworCWludCBiYXVkcmF0ZSA9IENPTkZJR19CQVVEUkFURTsKKwl1bnNpZ25lZCBpbnQgcmVnID0gMDsKKwl1bnNpZ25lZCBpbnQgY2xrID0gSEFMX2dldF9hbWJhX2NsaygpOworI2lmZGVmIENPTkZJR19VQVJUMCAKKwlQVUFSVDE2NTUwUkVHUyB1YXJ0ID0gKFBVQVJUMTY1NTBSRUdTKSBVQVJUMF9CQVNFQUREUjsKKwlQVUFSVDE2NTUwRExSRUdTIHVhcnRfZGwgPSAoUFVBUlQxNjU1MERMUkVHUykgVUFSVDBfQkFTRUFERFI7CisjZWxzZQorCVBVQVJUMTY1NTBSRUdTIHVhcnQgPSAoUFVBUlQxNjU1MFJFR1MpIFVBUlQxX0JBU0VBRERSOworCVBVQVJUMTY1NTBETFJFR1MgdWFydF9kbCA9IChQVUFSVDE2NTUwRExSRUdTKSBVQVJUMV9CQVNFQUREUjsKKyNlbmRpZgorCisJLy9pZiAoKGJhdWRyYXRlID0gZ2QtPmJhdWRyYXRlKSA8PSAwKQorCS8vCWJhdWRyYXRlID0gQ09ORklHX0JBVURSQVRFOworCisJcmVnID0gY2xrIC8gKGJhdWRyYXRlICogMTYpOworCXVhcnQtPmxjciB8PSBfX2NwdV90b19sZTMyKExDUl9ETEFCKTsgLy8gRW5hYmxlIERpdmlzb3IgTGF0Y2ggYWNjZXNzCisJdWFydF9kbC0+ZGxsID0gX19jcHVfdG9fbGUzMihyZWcgJiAweEZGKTsgLy8gU2V0IERpdmlzb3IgTGF0Y2ggTG93CisJdWFydF9kbC0+ZGxoID0gX19jcHVfdG9fbGUzMigocmVnID4+IDgpICYgMHhGRik7IC8vIFNldCBEaXZpc29yIExhdGNoIGhpZ2gKKwl1YXJ0LT5sY3IgJj0gX19jcHVfdG9fbGUzMih+TENSX0RMQUIpOyAvLyBEaXNhYmxlIERpdmlzb3IgTGF0Y2ggYWNjZXNzCit9CisKK2ludCBzZXJpYWxfaW5pdCAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfVUFSVDAgCisJUFVBUlQxNjU1MFJFR1MgdWFydCA9IChQVUFSVDE2NTUwUkVHUykgVUFSVDBfQkFTRUFERFI7CisjZWxzZQorCVBVQVJUMTY1NTBSRUdTIHVhcnQgPSAoUFVBUlQxNjU1MFJFR1MpIFVBUlQxX0JBU0VBRERSOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVUFSVDEKKwlFbmFibGVVQVJUMSgpOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorCUVuYWJsZVVBUlQwKCk7CisjZW5kaWYKKworCXNlcmlhbF9zZXRicmcgKCk7CisJCisJdWFydC0+bGNyID0gX19jcHVfdG9fbGUzMihMQ1JfT05FX1NUT1AgfCBMQ1JfQ0hBUl9MRU5fOCk7CisJdWFydC0+aWlyX2ZjciA9IF9fY3B1X3RvX2xlMzIoRkNSX1hNSVRSRVMgfCBGQ1JfUkNWUlJFUyB8IEZDUl9GSUZPRU4pOyAvLyBSZXNldCwgRklGTworCXVhcnQtPmllciA9IF9fY3B1X3RvX2xlMzIoSUVSX1VVRSk7CQkvKiBFbmFibGUgRkZVQVJUICovCisJcmV0dXJuICgwKTsKK30KKwordm9pZCBzZXJpYWxfcHV0YyAoY29uc3QgY2hhciBjKQoreworI2lmZGVmIENPTkZJR19VQVJUMCAKKwlQVUFSVDE2NTUwUkVHUyB1YXJ0ID0gKFBVQVJUMTY1NTBSRUdTKSBVQVJUMF9CQVNFQUREUjsKKyNlbHNlCisJUFVBUlQxNjU1MFJFR1MgdWFydCA9IChQVUFSVDE2NTUwUkVHUykgVUFSVDFfQkFTRUFERFI7CisjZW5kaWYKKworCS8qIHdhaXQgZm9yIHJvb20gaW4gdGhlIHR4IEZJRk8gb24gRkZVQVJUICovCisJd2hpbGUgKCh1YXJ0LT5sc3IgJiBfX2NwdV90b19sZTMyKExTUl9URU1UKSk9PTApIDsKKwl1YXJ0LT5kYXRhID0gX19jcHVfdG9fbGUzMihjKTsKKwlpZiAoYyA9PSAnXG4nKQorCQlzZXJpYWxfcHV0YyAoJ1xyJyk7Cit9CisKK3ZvaWQgc2VyaWFsX3B1dHMgKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXNlcmlhbF9wdXRjICgqcysrKTsKKwl9Cit9CisKK2ludCBzZXJpYWxfZ2V0YyAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfVUFSVDAgCisJUFVBUlQxNjU1MFJFR1MgdWFydCA9IChQVUFSVDE2NTUwUkVHUykgVUFSVDBfQkFTRUFERFI7CisjZWxzZQorCVBVQVJUMTY1NTBSRUdTIHVhcnQgPSAoUFVBUlQxNjU1MFJFR1MpIFVBUlQxX0JBU0VBRERSOworI2VuZGlmCisKKwl3aGlsZSAoKHVhcnQtPmxzciAmIF9fY3B1X3RvX2xlMzIoTFNSX0RSKSkgPT0gMCk7CisJcmV0dXJuIChjaGFyKV9fbGUzMl90b19jcHUodWFydC0+ZGF0YSAmIF9fY3B1X3RvX2xlMzIoMHhmZikpOwkKK30KKworaW50IHNlcmlhbF90c3RjICh2b2lkKQoreworI2lmZGVmIENPTkZJR19VQVJUMCAKKwlQVUFSVDE2NTUwUkVHUyB1YXJ0ID0gKFBVQVJUMTY1NTBSRUdTKSBVQVJUMF9CQVNFQUREUjsKKyNlbHNlCisJUFVBUlQxNjU1MFJFR1MgdWFydCA9IChQVUFSVDE2NTUwUkVHUykgVUFSVDFfQkFTRUFERFI7CisjZW5kaWYKKworCXJldHVybiBfX2xlMzJfdG9fY3B1KHVhcnQtPmxzciAmIF9fY3B1X3RvX2xlMzIoTFNSX0RSKSk7Cit9CmRpZmYgLS1naXQgYS9jcHUvYXJtMTEzNi9jb21jZXJ0by90cmFpbmluZy5jIGIvY3B1L2FybTExMzYvY29tY2VydG8vdHJhaW5pbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzhmZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTExMzYvY29tY2VydG8vdHJhaW5pbmcuYwpAQCAtMCwwICsxLDM1IEBACisvKgorICogKEMpIENvcHlyaWdodCBNaW5kc3BlZWQgVGVjaG5vbG9naWVzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorCisjaWYgZGVmaW5lZChORVdfRERSX1RSQUlOSU5HKQorI2luY2x1ZGUgInRyYWluaW5nMTAwX25ldy5jIiAvKiBuZXcgZGRyIHRyYWluaW5nICovCisjZWxzZQorI2luY2x1ZGUgInRyYWluaW5nMTAwLmMiIC8qIG9sZCBkZHIgdHJhaW5pbmcgKi8KKyNlbmRpZgorCisjZWxpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDAwKQorI2luY2x1ZGUgInRyYWluaW5nMTAwMC5jIgorI2Vsc2UKKyNlcnJvciAiTm8gQXJjaGl0ZWN0dXJlIHNlbGVjdGVkISFAIiAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L2FybTExMzYvY29tY2VydG8vdHJhaW5pbmcxMDAuYyBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL3RyYWluaW5nMTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3ZTQwNAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL3RyYWluaW5nMTAwLmMKQEAgLTAsMCArMSw3NDQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKK2V4dGVybiB1MzIqICBfX3RyYWluaW5nX2RhdGFfc3RhcnQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyIHJkMDsKKwl1bnNpZ25lZCBjaGFyIHJkMTsKKwl1bnNpZ25lZCBjaGFyIHJkMjsKKwl1bnNpZ25lZCBjaGFyIHJkMzsKK30gZGxsX3JkOworCisKK3UzMiB3cl9sb29wKHU4IGRxc19pbmRleCwgdTMyIGZpbmRfbWVkaWFuKTsKK2RsbF9yZCBETExfY2hlY2sodTggZHFzX2luZGV4LCB1OCB3cl9pbmRleCwgdTMyIGZpbmRfbWVkaWFuKTsKK3UzMiB3cl9yZF90cmFuc2FjdGlvbih1MzIgdHJhbnNhY3Rpb25fc2l6ZSwgdTMyIGksICB1OCBkcXNfaW5kZXgsIHU4IHdyX2luZGV4LHU4IHJkX2luZGV4LCB1MzIgbWFzayk7Cit1MzIgYWN0dWFsX3RyYW5zYWN0aW9uKHUzMiB0cmFuc2FjdGlvbl9zaXplLCB1MzIgaSwgIHUzMiBtYXNrLCB1MzIgZGRyX2FkZHIsIHUzMiBkbGxfbnVtKTsKK3UzMiBnZXRfZGxsKHUzMiBpKTsKK3UzMiBnZXRfbWF4X2FkZHJfc3BhY2VfYml0KHZvaWQpOwordm9pZCB0cmFpbmluZ19nYmxfaW5pdCh2b2lkKTsKK3UzMiBmaW5kX2Jlc3Qodm9pZCk7CisKKwordTMyIGRkcl9hZGRyX29mZnNldDsKK3UzMiBtYXhfYWRkcl9zcGFjZV9iaXQ7Cit1OCBieXRlX2xpc3RbMTZdOwordTE2IGhhbGZfd29yZF9saXN0WzE2XTsKK3UzMiB3b3JkX2xpc3RbMTZdOwordTY0IGR3b3JkX2xpc3RbMTZdOwordTMyIGJ5dGVfbWFza1s0XTsKK3UzMiBtYXhfYWRkcl9iaXRfbGlzdFsxNV07CisKKworI2RlZmluZSBTWl8xSwkweDQwMAorI2RlZmluZSBTWl8xTQkweDEwMDAwMAorI2RlZmluZSBTWl80SwlTWl8xSyAqIDQKKyNkZWZpbmUgU1pfOEsJU1pfMUsgKiA4CisjZGVmaW5lIFNaXzE2SwlTWl8xSyAqIDE2CisjZGVmaW5lIFNaXzMySwlTWl8xSyAqIDMyCisjZGVmaW5lIFNaXzY0SwlTWl8xSyAqIDY0CisjZGVmaW5lIFNaXzEyOEsJU1pfMUsgKiAxMjgKKyNkZWZpbmUgU1pfOE0JU1pfMU0gKiA4CisjZGVmaW5lIFNaXzE2TQlTWl8xTSAqIDE2CisjZGVmaW5lIFNaXzMyTQlTWl8xTSAqIDMyCisjZGVmaW5lIFNaXzY0TQlTWl8xTSAqIDY0CisKKyNkZWZpbmUgQUREUl9KVU1QX1NJWkUJU1pfMTI4SworCisKK3ZvaWQgc3RhcnRfdHJhaW5pbmcodm9pZCkKK3sKKwkvL2luaXRpYWxpemUgZ2xvYmFsIGRhdGEKKwl0cmFpbmluZ19nYmxfaW5pdCgpOworCisJLy9zdGFydCBERFIgdHJhaW5pbmcKKwlmaW5kX2Jlc3QoKTsKK30KKwordm9pZCB0cmFpbmluZ19nYmxfaW5pdCh2b2lkKQoreworCXU4IGkgPSAwOworCXU4IF9fYnl0ZV9saXN0WzE2XSA9IHsweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LCAweDg4LCAweDE5LCAweDJhLCAweDNiLCAweDRjLCAweDVkLCAweDZlLCAweDdmfTsKKwl1MTYgX19oYWxmX3dvcmRfbGlzdFsxNl0gPSB7MHgwMDAwLCAweDExMTEsIDB4MjIyMiwgMHgzMzMzLCAweDQ0NDQsIDB4NTU1NSwgMHg2NjY2LCAweDc3NzcsIDB4MDg4OCwgMHgxOTk5LCAweDJhYWEsIDB4M2JiYiwgMHg0Y2NjLCAweDVkZGQsIDB4NmVlZSwgMHg3ZmZmfTsKKwl1MzIgX193b3JkX2xpc3RbMTZdID0gezB4MDAwMDAwMDAsIDB4MTExMTExMTEsIDB4MjIyMjIyMjIsIDB4MzMzMzMzMzMsIDB4NDQ0NDQ0NDQsIDB4NTU1NTU1NTUsIDB4NjY2NjY2NjYsIDB4Nzc3Nzc3NzcsIDB4MDg4ODg4ODgsIDB4MTk5OTk5OTksIDB4MmFhYWFhYWEsIDB4M2JiYmJiYmIsIDB4NGNjY2NjY2MsIDB4NWRkZGRkZGQsIDB4NmVlZWVlZWUsIDB4N2ZmZmZmZmZ9OworCXU2NCBfX2R3b3JkX2xpc3RbMTZdID0gezB4MDAwMDAwMDAwMDAwMDAwMExMLCAweDExMTExMTExMTExMTExMTFMTCwgMHgyMjIyMjIyMjIyMjIyMjIyTEwsIDB4MzMzMzMzMzMzMzMzMzMzM0xMLCAweDQ0NDQ0NDQ0NDQ0NDQ0NDRMTCwgMHg1NTU1NTU1NTU1NTU1NTU1TEwsIDB4NjY2NjY2NjY2NjY2NjY2NkxMLCAweDc3Nzc3Nzc3Nzc3Nzc3NzdMTCwgMHgwODg4ODg4ODg4ODg4ODg4TEwsIDB4MTk5OTk5OTk5OTk5OTk5OUxMLCAweDJhYWFhYWFhYWFhYWFhYWFMTCwgMHgzYmJiYmJiYmJiYmJiYmJiTEwsIDB4NGNjY2NjY2NjY2NjY2NjY0xMLCAweDVkZGRkZGRkZGRkZGRkZGRMTCwgMHg2ZWVlZWVlZWVlZWVlZWVlTEwsIDB4N2ZmZmZmZmZmZmZmZmZmZkxMfTsKKwl1MzIgX19ieXRlX21hc2tbNF0gID0gezB4ZmYsMHhmZjAwLDB4ZmYwMDAwLDB4ZmYwMDAwMDB9OyAKKwl1MzIgX19tYXhfYWRkcl9iaXRfbGlzdFsxNV0gPSB7MHgwMDEwMDAwMCwgMHgwMDIwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwODAwMDAwMCwgMHgxMDAwMDAwMCwgMHgyMDAwMDAwMCwgMHg0MDAwMDAwMH07CisJdTMyIF9fZGRyX2FkZHJfb2Zmc2V0ID0gMDsKKwl1MzIgX19tYXhfYWRkcl9zcGFjZV9iaXQgPSAwOworCisJLy8gcmVtYXAgZ2xvYmFsIGRhdGEgdG8gaW50ZXJuYWwgbWVtb3J5CisJZGRyX2FkZHJfb2Zmc2V0ID0gKHUzMikmX190cmFpbmluZ19kYXRhX3N0YXJ0OworCW1heF9hZGRyX3NwYWNlX2JpdCA9ICh1MzIpKCZfX3RyYWluaW5nX2RhdGFfc3RhcnQgKyBzaXplb2YoZGRyX2FkZHJfb2Zmc2V0KSk7CisJYnl0ZV9saXN0W2ldID0gKHU4KSgmX190cmFpbmluZ19kYXRhX3N0YXJ0ICsgc2l6ZW9mKG1heF9hZGRyX3NwYWNlX2JpdCkpOworCWhhbGZfd29yZF9saXN0W2ldID0gKHUxNikoJl9fdHJhaW5pbmdfZGF0YV9zdGFydCArIHNpemVvZihieXRlX2xpc3QpKTsKKwl3b3JkX2xpc3RbaV0gPSAodTMyKSgmX190cmFpbmluZ19kYXRhX3N0YXJ0ICsgc2l6ZW9mKGhhbGZfd29yZF9saXN0KSk7CisJZHdvcmRfbGlzdFtpXSA9ICh1NjQpKCZfX3RyYWluaW5nX2RhdGFfc3RhcnQgKyBzaXplb2Yod29yZF9saXN0KSk7CisKKworCWRkcl9hZGRyX29mZnNldCA9IF9fZGRyX2FkZHJfb2Zmc2V0OworCW1heF9hZGRyX3NwYWNlX2JpdCA9IF9fbWF4X2FkZHJfc3BhY2VfYml0OworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJeworCQlieXRlX2xpc3RbaV0gPSBfX2J5dGVfbGlzdFtpXTsKKwkJaGFsZl93b3JkX2xpc3RbaV0gPSBfX2hhbGZfd29yZF9saXN0W2ldOworCQl3b3JkX2xpc3RbaV0gPSBfX3dvcmRfbGlzdFtpXTsKKwkJZHdvcmRfbGlzdFtpXSA9IF9fZHdvcmRfbGlzdFtpXTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlieXRlX21hc2tbaV0gID0gX19ieXRlX21hc2tbaV07IAorCQorCWZvciAoaSA9IDA7IGkgPCAxNTsgaSsrKQorCQltYXhfYWRkcl9iaXRfbGlzdFtpXSA9IF9fbWF4X2FkZHJfYml0X2xpc3RbaV07CisKK30KKwordTMyIGZpbmRfYmVzdCh2b2lkKQoreworCXU4IGRxc19pbmQgPSBGQUlMVVJFOyAvLyBkcXMgaW5kaWNhdGlvbiBpbml0aWFsaXplIHRvIGZhaWx1cmUKKwl1OCBkcXNfbWluX3ZhbCA9IFVOU0VULCBkcXNfbWF4X3ZhbCA9IFVOU0VULCBkcXNfbWVkaWFuID0gVU5TRVQ7IAorCXU4IGRxc19pbmRleDsKKwl1OCB3cl9tZWRpYW5fdmFsLCByZF9tZWRpYW4sIHJzbHQ9IEZBSUxVUkU7CisJdTMyIGk7CisJdTMyIHdyX3JzbHQgPSBGQUlMVVJFOworCXUzMiBkbGxfbnVtOyAKKwlyZWdpc3RlciBpbnQgcmVnXzAgX19hc21fXyAoInIzIik7CisJcmVnaXN0ZXIgaW50IHJlZ18xIF9fYXNtX18gKCJyNCIpOworCXUzMiBtYXhfbWVtX3JlZzsKKwl1NjQgKmRzdCwgKnNyYzsKKwlkbGxfcmQgcmQ7CisKKyAgCWRkcl9hZGRyX29mZnNldCA9IDA7IC8vIGluaXQKKyAgCWlmICgoX19sZTY0X3RvX2NwdSgqKCZDU19NQVApKSAmIDB4MykgPT0gMykgeworICAJCW1heF9hZGRyX3NwYWNlX2JpdCA9IGdldF9tYXhfYWRkcl9zcGFjZV9iaXQoKTsKKyAgCX0KKworCWZvcihkcXNfaW5kZXggPSBMT1dfRFFTX09VVDsgZHFzX2luZGV4IDw9IEhJR0hfRFFTX09VVDsgZHFzX2luZGV4KyspIHsvLyBEUVMgbG9vcAorCQl3cl9yc2x0ID0gd3JfbG9vcChkcXNfaW5kZXgsIDApOworCQkvLyBzZXQgbWluL21heCB2YWx1ZXM7CisJCWlmICh3cl9yc2x0ICA9PSBGQUlMVVJFKSB7CisJCQlpZiAoKGRxc19taW5fdmFsICE9IFVOU0VUKSAmJiAoZHFzX21pbl92YWw9PShkcXNfaW5kZXgtMSkpKSB7CisJCQkJZHFzX21pbl92YWwgPSBVTlNFVDsKKwkJCX0KKwkJCWlmICgoZHFzX21pbl92YWwhPVVOU0VUKSAmJiAoZHFzX21heF92YWw9PVVOU0VUKSl7CisJCQkJZHFzX21heF92YWwgPSBkcXNfaW5kZXgtMTsgCisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7IC8vIFNVQ0NFU1MKKwkJCWlmIChkcXNfbWluX3ZhbD09VU5TRVQpIHsKKwkJCQlkcXNfbWluX3ZhbCA9IGRxc19pbmRleDsgCisJCQkJZHFzX2luZCA9IFNVQ0NFU1M7CisJCQl9CisJCX0gCisJfSAKKworCWlmIChkcXNfaW5kID09IEZBSUxVUkUpIHsKKwkJd3JfbWVkaWFuX3ZhbCA9IEhJR0hfRFFTX09VVDsKKwkJZHFzX21lZGlhbiAgICA9IEhJR0hfV1JfRFFTOworCQlyZC5yZDAgICAgICAgID0gSElHSF9SRDA7CisJCXJkLnJkMSAgICAgICAgPSBISUdIX1JEMTsKKwkJcmQucmQyICAgICAgICA9IEhJR0hfUkQyOworCQlyZC5yZDMgICAgICAgID0gSElHSF9SRDM7CisJCURFTkFMSV9XUl9EUVMgID0gd3JfbWVkaWFuX3ZhbDsKKwkJREVOQUxJX0RRU19PVVQgPSBkcXNfbWVkaWFuOworCQlERU5BTElfRFFTX0RFTEFZMCA9IHJkLnJkMDsKKwkJREVOQUxJX0RRU19ERUxBWTEgPSByZC5yZDE7CisJCURFTkFMSV9EUVNfREVMQVkyID0gcmQucmQyOworCQlERU5BTElfRFFTX0RFTEFZMyA9IHJkLnJkMzsKKwkJcmV0dXJuIDB4ZmZmZjsKKwl9IGVsc2UgeyAvL1NVQ0NFU1MKKwkJaWYgKChkcXNfbWluX3ZhbCE9VU5TRVQpICYmIChkcXNfbWF4X3ZhbD09VU5TRVQpKXsKKwkJCWRxc19tYXhfdmFsID0gZHFzX2luZGV4LTE7CisJCX0KKwkJZHFzX21lZGlhbiA9IChkcXNfbWluX3ZhbCArIGRxc19tYXhfdmFsKS8yOworCX0KKworCS8vIGVuZCBwcm9jZWR1cmUKKwl3cl9tZWRpYW5fdmFsID0gd3JfbG9vcChkcXNfbWVkaWFuLDEpOworCXJkID0gRExMX2NoZWNrKGRxc19tZWRpYW4sd3JfbWVkaWFuX3ZhbCwxKTsKKwlpZiAoKHJkLnJkMD09MCkgfHwgKHJkLnJkMT09MCkgfHwgKHJkLnJkMj09MCkgfHwgKHJkLnJkMz09MCkpIHsKKwkJd3JfbWVkaWFuX3ZhbCA9IEhJR0hfRFFTX09VVDsKKwkJZHFzX21lZGlhbiAgICA9IEhJR0hfV1JfRFFTOworCQlyZC5yZDAgICAgICAgID0gSElHSF9SRDA7CisJCXJkLnJkMSAgICAgICAgPSBISUdIX1JEMTsKKwkJcmQucmQyICAgICAgICA9IEhJR0hfUkQyOworCQlyZC5yZDMgICAgICAgID0gSElHSF9SRDM7CisJCURFTkFMSV9XUl9EUVMgID0gd3JfbWVkaWFuX3ZhbDsKKwkJREVOQUxJX0RRU19PVVQgPSBkcXNfbWVkaWFuOworCQlERU5BTElfRFFTX0RFTEFZMCA9IHJkLnJkMDsKKwkJREVOQUxJX0RRU19ERUxBWTEgPSByZC5yZDE7CisJCURFTkFMSV9EUVNfREVMQVkyID0gcmQucmQyOworCQlERU5BTElfRFFTX0RFTEFZMyA9IHJkLnJkMzsKKwkJcmV0dXJuIDB4ZmZmZjsgLy8gZmFpbHVyZQorCX0KKworCS8vY29uZmlndXJlIG1lZGlhbiB2YWx1ZXMKKwlERU5BTElfV1JfRFFTICA9IHdyX21lZGlhbl92YWw7CisJREVOQUxJX0RRU19PVVQgPSBkcXNfbWVkaWFuOworCURFTkFMSV9EUVNfREVMQVkwID0gcmQucmQwOworCURFTkFMSV9EUVNfREVMQVkxID0gcmQucmQxOworCURFTkFMSV9EUVNfREVMQVkyID0gcmQucmQyOworCURFTkFMSV9EUVNfREVMQVkzID0gcmQucmQzOworCisKKwltYXhfbWVtX3JlZyA9IF9fbGU2NF90b19jcHUoKigmQUhCX01BWF9NRU1fUkVHKSkgJiAoMHg4MDAwMDAwMCAtIEFERFJfSlVNUF9TSVpFKTsKKwlpPTA7CisJd2hpbGUgKGRkcl9hZGRyX29mZnNldDxtYXhfbWVtX3JlZykgeworCQlpKz0xOworCQlpZiAoKGkmMHhjKT09MCkgeworCQkJcmRfbWVkaWFuID0gcmQucmQwOworCQkJZGxsX251bT0wOworCQl9IGVsc2UgaWYgKChpJjB4Yyk9PTEpIHsgCisJCQlyZF9tZWRpYW4gPSByZC5yZDE7CisJCQlkbGxfbnVtPTE7CisJCX0gZWxzZSBpZiAoKGkmMHhjKT09MikgeyAKKwkJCXJkX21lZGlhbiA9IHJkLnJkMjsKKwkJCWRsbF9udW09MjsKKwkJfSBlbHNlIHsKKwkJCXJkX21lZGlhbiA9IHJkLnJkMzsKKwkJCWRsbF9udW09MzsKKwkJfQorCQlpZiAoKF9fbGU2NF90b19jcHUoKigmUkVEVUMpJjB4MSk9PTEpICYmICgoZGxsX251bT09MikgfHwgKGRsbF9udW09PTMpKSkgIHsKKwkJCS8vUkVEVUMgCisJCQkvL2hhbGYgZGF0YXBhdGggbW9kZSBpbiB3aGljaCBETEwyIGFuZCAzIGFyZSBub3QgdXNlZC4KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChpICYgMHgzKSB7CisJCQljYXNlIDA6IAorCQkJCXJzbHQgPSB3cl9yZF90cmFuc2FjdGlvbihCWVRFX1NaLCBkbGxfbnVtLCBkcXNfbWVkaWFuLCB3cl9tZWRpYW5fdmFsLCByZF9tZWRpYW4sMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6IAorCQkJCXJzbHQgPSB3cl9yZF90cmFuc2FjdGlvbihIQUxGX1dPUkQsIGRsbF9udW0sIGRxc19tZWRpYW4sIHdyX21lZGlhbl92YWwsIHJkX21lZGlhbiwwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjogCisJCQkJcnNsdCA9IHdyX3JkX3RyYW5zYWN0aW9uKFdPUkQsIGRsbF9udW0sIGRxc19tZWRpYW4sIHdyX21lZGlhbl92YWwsIHJkX21lZGlhbiwwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzogCisJCQkJcnNsdCA9IHdyX3JkX3RyYW5zYWN0aW9uKERPVUJMRV9XT1JELCBkbGxfbnVtLCBkcXNfbWVkaWFuLCB3cl9tZWRpYW5fdmFsLCByZF9tZWRpYW4sMCk7CisJCQkJYnJlYWs7CisJCX07CisKKwkJaWYgKHJzbHQgPT0gRkFJTFVSRSkgeworCQkJd3JfbWVkaWFuX3ZhbCA9IEhJR0hfRFFTX09VVDsKKwkJCWRxc19tZWRpYW4gICAgPSBISUdIX1dSX0RRUzsKKwkJCXJkLnJkMCAgICAgICAgPSBISUdIX1JEMDsKKwkJCXJkLnJkMSAgICAgICAgPSBISUdIX1JEMTsKKwkJCXJkLnJkMiAgICAgICAgPSBISUdIX1JEMjsKKwkJCXJkLnJkMyAgICAgICAgPSBISUdIX1JEMzsKKwkJCURFTkFMSV9XUl9EUVMgID0gd3JfbWVkaWFuX3ZhbDsKKwkJCURFTkFMSV9EUVNfT1VUID0gZHFzX21lZGlhbjsKKwkJCURFTkFMSV9EUVNfREVMQVkwID0gcmQucmQwOworCQkJREVOQUxJX0RRU19ERUxBWTEgPSByZC5yZDE7CisJCQlERU5BTElfRFFTX0RFTEFZMiA9IHJkLnJkMjsKKwkJCURFTkFMSV9EUVNfREVMQVkzID0gcmQucmQzOworCQkJcmV0dXJuIDB4ZmZmZjsKKwkJfQorCX07CisKKworCisJLy8qKiogYnVyc3QgKioqCisJZm9yIChpPTA7aTwxNjtpKyspIHsKKwkJc3JjID0gJmR3b3JkX2xpc3RbaV07CisJCWRzdCA9IDA7CisJCSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbWlhICUwLCB7JTEsJTJ9IiBcCisJICAgICAgICAJICA6ICIrciIgKHNyYyksICI9ciIgKHJlZ18wKSwgIj1yIiAocmVnXzEpIFwKKyAgICAgICAgCSAgKTsKKworCQkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG1pYSAlMCwgeyUxLCUyfSIgXAorCQkgICAgICAgICAgOiAiK3IiIChkc3QpLCAiPXIiIChyZWdfMCksICI9ciIgKHJlZ18xKSBcCisJICAgICAgICAgICk7CisKKwkJaWYgKCpzcmMhPSpkc3QpICB7CisJCQl3cl9tZWRpYW5fdmFsID0gSElHSF9EUVNfT1VUOworCQkJZHFzX21lZGlhbiAgICA9IEhJR0hfV1JfRFFTOworCQkJcmQucmQwICAgICAgICA9IEhJR0hfUkQwOworCQkJcmQucmQxICAgICAgICA9IEhJR0hfUkQxOworCQkJcmQucmQyICAgICAgICA9IEhJR0hfUkQyOworCQkJcmQucmQzICAgICAgICA9IEhJR0hfUkQzOworCQkJREVOQUxJX1dSX0RRUyAgPSB3cl9tZWRpYW5fdmFsOworCQkJREVOQUxJX0RRU19PVVQgPSBkcXNfbWVkaWFuOworCQkJREVOQUxJX0RRU19ERUxBWTAgPSByZC5yZDA7CisJCQlERU5BTElfRFFTX0RFTEFZMSA9IHJkLnJkMTsKKwkJCURFTkFMSV9EUVNfREVMQVkyID0gcmQucmQyOworCQkJREVOQUxJX0RRU19ERUxBWTMgPSByZC5yZDM7CisJCQlyZXR1cm4gMHhmZmZmOyAvL2ZhaWx1cmUKKwkJfQorCX0KKworCXJldHVybiBTVUNDRVNTOworfQorCisKK3UzMiBnZXRfbWF4X2FkZHJfc3BhY2VfYml0KHZvaWQpIHsKKwl1MzIgbWF4X21lbV9yZWc7CisJbWF4X21lbV9yZWcgPSBfX2xlMzJfdG9fY3B1KCooJkFIQl9NQVhfTUVNX1JFRykpOworCQorCWlmICgobWF4X21lbV9yZWcgJiAweDQwMDAwMDAwKSAhPSAwKSB7CisJCXJldHVybiAzMTsKKwl9IGVsc2UgaWYgKChtYXhfbWVtX3JlZyAmIDB4MjAwMDAwMDApICE9IDApIHsKKwkJcmV0dXJuIDMwOworCX0gZWxzZSBpZiAoKG1heF9tZW1fcmVnICYgMHgxMDAwMDAwMCkgIT0gMCkgeworCQlyZXR1cm4gMjk7CisJfSBlbHNlIGlmICgobWF4X21lbV9yZWcgJiAweDA4MDAwMDAwKSAhPSAwKSB7CisJCXJldHVybiAyODsKKwl9IGVsc2UgaWYgKChtYXhfbWVtX3JlZyAmIDB4MDQwMDAwMDApICE9IDApIHsKKwkJcmV0dXJuIDI3OworCX0gZWxzZSBpZiAoKG1heF9tZW1fcmVnICYgMHgwMjAwMDAwMCkgIT0gMCkgeworCQlyZXR1cm4gMjY7CisJfSBlbHNlIGlmICgobWF4X21lbV9yZWcgJiAweDAxMDAwMDAwKSAhPSAwKSB7CisJCXJldHVybiAyNTsKKwl9IGVsc2UgaWYgKChtYXhfbWVtX3JlZyAmIDB4MDA4MDAwMDApICE9IDApIHsKKwkJcmV0dXJuIDI0OworCX0gZWxzZSBpZiAoKG1heF9tZW1fcmVnICYgMHgwMDQwMDAwMCkgIT0gMCkgeworCQlyZXR1cm4gMjM7CisJfSBlbHNlIGlmICgobWF4X21lbV9yZWcgJiAweDAwMjAwMDAwKSAhPSAwKSB7CisJCXJldHVybiAyMjsKKwl9IGVsc2UgaWYgKChtYXhfbWVtX3JlZyAmIDB4MDAxMDAwMDApICE9IDApIHsKKwkJcmV0dXJuIDIxOworCX07CisJcmV0dXJuIDA7Cit9CisKK3UzMiB3cl9sb29wKHU4IGRxc19pbmRleCwgdTMyIGZpbmRfbWVkaWFuKSB7CisJdTggd3JfaW5kZXg7CisJdTMyIHJkX3JzbHQgPSBGQUlMVVJFOyAvLyAgcmQgaW5kaWNhdGlvbiBpbml0aWFsaXplIHRvIGZhaWx1cmU6IEZhaWx1cmUgb3IgU3VjY2VzcworCXU4IHdyX21pbl92YWwgPSBVTlNFVCAsIHdyX21heF92YWwgPSBVTlNFVDsKKwl1OCB3cl9tZWRpYW5fdmFsID0gRkFJTFVSRTsKKwlkbGxfcmQgcmQ7CisKKwlmb3Iod3JfaW5kZXggPSBMT1dfV1JfRFFTOyB3cl9pbmRleCA8PSBISUdIX1dSX0RRUzsgd3JfaW5kZXgrKykgeyAvKiBXUiBsb29wICovCisJCXJkID0gRExMX2NoZWNrKGRxc19pbmRleCwgd3JfaW5kZXgsZmluZF9tZWRpYW4pOworCQlyZF9yc2x0ID0gKChyZC5yZDA+MCkgJiYgKHJkLnJkMT4wKSAmJiAocmQucmQyPjApICYmIChyZC5yZDM+MCkpID8gU1VDQ0VTUyA6IEZBSUxVUkU7CisKKwkJaWYgKHJkX3JzbHQgPT0gRkFJTFVSRSkgeworCQkJaWYgKGZpbmRfbWVkaWFuID09IDEpIHsKKwkJCQlpZiAoKHdyX21pbl92YWwgIT0gVU5TRVQpICYmICh3cl9taW5fdmFsPT0od3JfaW5kZXgtMSkpKSB7CisJCQkJCXdyX21pbl92YWwgPSBVTlNFVDsKKwkJCQl9CisJCQkJaWYgKCh3cl9taW5fdmFsIT1VTlNFVCkgJiYgKHdyX21heF92YWw9PVVOU0VUKSkgeworCQkJCQl3cl9tYXhfdmFsID0gd3JfaW5kZXgtMTsKKwkJCQl9CisJCQkJaWYgKCh3cl9taW5fdmFsIT1VTlNFVCkgJiYgKHdyX21heF92YWwhPVVOU0VUKSkgeworCQkJCQl3cl9tZWRpYW5fdmFsID0gKHdyX21pbl92YWwrd3JfbWF4X3ZhbCkvMjsKKwkJCQkJcmV0dXJuIHdyX21lZGlhbl92YWw7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeyAvLyBTVUNDRVNTCisJCQlpZiAoZmluZF9tZWRpYW4gPT0gMSkgeworCQkJCWlmICh3cl9taW5fdmFsPT1VTlNFVCkgeworCQkJCQl3cl9taW5fdmFsID0gd3JfaW5kZXg7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gU1VDQ0VTUzsKKwkJCX0KKwkJfQkgCisJfQorCQorCWlmIChmaW5kX21lZGlhbiA9PSAxKSB7CisJCWlmICgod3JfbWluX3ZhbCE9VU5TRVQpICYmICh3cl9tYXhfdmFsPT1VTlNFVCkpIHsKKwkJCXdyX21heF92YWwgPSB3cl9pbmRleC0xOworCQkJd3JfbWVkaWFuX3ZhbCA9ICh3cl9taW5fdmFsK3dyX21heF92YWwpLzI7CisJCX0KKwl9OworCisJcmV0dXJuIHdyX21lZGlhbl92YWw7Cit9CisKK2RsbF9yZCBETExfY2hlY2sodTggZHFzX2luZGV4LCB1OCB3cl9pbmRleCwgdTMyIGZpbmRfbWVkaWFuKSB7CisJdTMyIHRyYW5zYWN0aW9uX3NpemU7CisJdTMyIHJzbHQgPSBGQUlMVVJFLCBkbGwwX3JzbHQgPSBGQUlMVVJFLCBkbGwxX3JzbHQgPSBGQUlMVVJFLCBkbGwyX3JzbHQgPSBGQUlMVVJFLCBkbGwzX3JzbHQgPSBGQUlMVVJFOworCXU4IHJkX2luZGV4OworCXUzMiBpOworCWRsbF9yZCByZDsKKwl1OCByZDBfbWluX3ZhbD1VTlNFVCwgcmQxX21pbl92YWw9VU5TRVQsIHJkMl9taW5fdmFsPVVOU0VULCByZDNfbWluX3ZhbD1VTlNFVDsKKwl1OCByZDBfbWF4X3ZhbD1VTlNFVCwgcmQxX21heF92YWw9VU5TRVQsIHJkMl9tYXhfdmFsPVVOU0VULCByZDNfbWF4X3ZhbD1VTlNFVDsKKwl1OCByZDBfbWVkaWFuPVVOU0VULCByZDFfbWVkaWFuPVVOU0VULCByZDJfbWVkaWFuPVVOU0VULCByZDNfbWVkaWFuPVVOU0VUOworCQorCS8vIGJ5dGUgb3JkZXIgcGVyIERMTAorCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJLy8gIDAgICAgIDEgICAgIDIgICAgIDMKKwkvLyAgNCAgICAgNSAgICAgNiAgICAgNworCS8vIERMTDAgIERMTDEgIERMTDIgIERMTDQKKwkvLy8vLy8vLy8vLyBETEwwIC8vLy8vLy8vLy8vLy8vCisJZm9yIChyZF9pbmRleCA9IExPV19SRDA7IHJkX2luZGV4IDw9IEhJR0hfUkQwOyByZF9pbmRleCsrKSB7CisJCXRyYW5zYWN0aW9uX3NpemUgPSBCWVRFX1NaOyAgIC8vIGJ5dGUgKDggYml0cykgCisJCWZvcihpID0gMDsgaSA8PSAxNTsgaT1pKzQpeyAKKwkJCXJzbHQgPSB3cl9yZF90cmFuc2FjdGlvbih0cmFuc2FjdGlvbl9zaXplLCBpLCBkcXNfaW5kZXgsd3JfaW5kZXgscmRfaW5kZXgsMSk7CisJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSBjb250aW51ZTsKKwkJCWVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgYnJlYWs7CisJCX0KKwkJaWYgKHJzbHQgPT0gU1VDQ0VTUykgeyAvLyBvbmx5IGZvciBTVUNDRVNTIGNvbnRpbnVlIGNoZWNraW5nIGZvciB0aGUgbmV4dCB0cmFuc2FjdGlvbiB3aWR0aAkgICAgICAgCisJCQl0cmFuc2FjdGlvbl9zaXplID0gRE9VQkxFX1dPUkQ7ICAgLy8gZG91YmxlLXdvcmQgKDY0IGJpdHMpIAorCQkJZm9yKGkgPSAwOyBpIDw9IDE1OyBpPWkrMTYpeyAKKwkJCQlyc2x0ID0gd3JfcmRfdHJhbnNhY3Rpb24odHJhbnNhY3Rpb25fc2l6ZSwgaSwgZHFzX2luZGV4LHdyX2luZGV4LHJkX2luZGV4LDEpOworCQkJCWlmIChyc2x0ID09IEZBSUxVUkUpIGNvbnRpbnVlOworCQkJCWVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgYnJlYWs7CisJCQl9Ly8gZW5kIG9mIHRyYW5zYWN0aW9uX3NpemUgRE9VQkxFX1dPUkQKKwkJfSAvLyBlbmQgb2YgdHJhbnNhY3Rpb25fc2l6ZSBCWVRFX1NaCisgCisJCS8vIGZpbmQgcmVzdWx0cyBvZiBkbGwgcnVuCisJCWlmIChmaW5kX21lZGlhbiA9PSAxKSB7IAorCQkJaWYgKHJzbHQgPT0gRkFJTFVSRSkgeworCQkJCWlmICgocmQwX21pbl92YWwgIT0gVU5TRVQpICYmIChyZDBfbWluX3ZhbD09KHJkX2luZGV4LTEpKSkgeworCQkJCQlyZDBfbWluX3ZhbCA9IFVOU0VUOworCQkJCX0KKwkJCQlpZiAoKHJkMF9taW5fdmFsICE9IFVOU0VUKSAgJiYgKHJkMF9tYXhfdmFsID09IFVOU0VUKSkgeworCQkJCQlyZDBfbWF4X3ZhbCA9IHJkX2luZGV4LTE7CisJCQkJCWRsbDBfcnNsdCA9IFNVQ0NFU1M7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgeworCQkJCQlpZiAocmQwX21pbl92YWwgPT0gVU5TRVQpIHsKKwkJCQkJCXJkMF9taW5fdmFsID0gcmRfaW5kZXg7CisJCQkJCX0KKwkJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSBjb250aW51ZTsKKwkJCWVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgYnJlYWs7Ly8gb25lIFNVQ0NFU1MgaXMgZW5vdWdoIHdoZW4gbm8gbWVkaWFuIGNhbGN1bGF0aW9uIGlzIG5lZWRlZAorCQl9IC8vIGRsbDAgbWVkaWFuCisJfSAvLyBETEwwCisKKwlpZiAocnNsdCA9PSBTVUNDRVNTKSBkbGwwX3JzbHQgPSBTVUNDRVNTOworCQorCWlmIChmaW5kX21lZGlhbiA9PSAxKSB7IAorCQlpZiAoKHJkMF9taW5fdmFsICE9IFVOU0VUKSAgJiYgKHJkMF9tYXhfdmFsID09IFVOU0VUKSkgeworCQkJcmQwX21heF92YWwgPSByZF9pbmRleC0xOworCQl9CisJCXJkMF9tZWRpYW4gPSAocmQwX21pbl92YWwgKyByZDBfbWF4X3ZhbCkvMjsKKwl9CisKKwkvLy8vLy8vLy8vLyBETEwxIC8vLy8vLy8vLy8vLy8vCisJZm9yIChyZF9pbmRleCA9IExPV19SRDE7IHJkX2luZGV4IDw9IEhJR0hfUkQxOyByZF9pbmRleCsrKSB7CisJCXRyYW5zYWN0aW9uX3NpemUgPSBCWVRFX1NaOyAgIC8vIGJ5dGUgKDggYml0cykgCisJCWZvcihpID0gMTsgaSA8PSAxNTsgaT1pKzQpeyAKKwkJCXJzbHQgPSB3cl9yZF90cmFuc2FjdGlvbih0cmFuc2FjdGlvbl9zaXplLCBpLCBkcXNfaW5kZXgsd3JfaW5kZXgscmRfaW5kZXgsMSk7CisJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSBjb250aW51ZTsKKwkJCWVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgYnJlYWs7CisJCX0KKwkJaWYgKHJzbHQgPT0gU1VDQ0VTUykgeyAvLyBvbmx5IGZvciBTVUNDRVNTIGNvbnRpbnVlIGNoZWNraW5nIGZvciB0aGUgbmV4dCB0cmFuc2FjdGlvbiB3aWR0aAorCQkJdHJhbnNhY3Rpb25fc2l6ZSA9IERPVUJMRV9XT1JEOyAgIC8vIGRvdWJsZS13b3JkICg2NCBiaXRzKSAKKwkJCWZvcihpID0gMTsgaSA8PSAxNTsgaT1pKzE2KXsgCisJCQkJcnNsdCA9IHdyX3JkX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uX3NpemUsIGksIGRxc19pbmRleCx3cl9pbmRleCxyZF9pbmRleCwxKTsKKwkJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSBjb250aW51ZTsKKwkJCQllbHNlIGlmIChyc2x0ID09IFNVQ0NFU1MpIGJyZWFrOworCQkJfS8vIGVuZCBvZiB0cmFuc2FjdGlvbl9zaXplIERPVUJMRV9XT1JECisJCX0gLy8gZW5kIG9mIHRyYW5zYWN0aW9uX3NpemUgQllURV9TWgorCSAKKwkJLy8gZmluZCByZXN1bHRzIG9mIGRsbCBydW4KKwkJaWYgKGZpbmRfbWVkaWFuID09IDEpIHsgCisJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSB7CisJCQkJaWYgKChyZDFfbWluX3ZhbCAhPSBVTlNFVCkgJiYgKHJkMV9taW5fdmFsPT0ocmRfaW5kZXgtMSkpKSB7CisJCQkJCXJkMV9taW5fdmFsID0gVU5TRVQ7CisJCQkJfQorCQkJCWlmICgocmQxX21pbl92YWwgIT0gVU5TRVQpICAmJiAocmQxX21heF92YWwgPT0gVU5TRVQpKSB7CisJCQkJCXJkMV9tYXhfdmFsID0gcmRfaW5kZXgtMTsKKwkJCQkJZGxsMV9yc2x0ID0gU1VDQ0VTUzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIGlmIChyc2x0ID09IFNVQ0NFU1MpIHsKKwkJCQlpZiAocmQxX21pbl92YWwgPT0gVU5TRVQpIHsKKwkJCQkJcmQxX21pbl92YWwgPSByZF9pbmRleDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSBjb250aW51ZTsKKwkJCWVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgYnJlYWs7Ly8gb25lIFNVQ0NFU1MgaXMgZW5vdWdoIHdoZW4gbm8gbWVkaWFuIGNhbGN1bGF0aW9uIGlzIG5lZWRlZAorCQl9IC8vIGRsbDEgbWVkaWFuCisJfSAvLyBETEwxCisKKworCWlmIChyc2x0ID09IFNVQ0NFU1MpIGRsbDFfcnNsdCA9IFNVQ0NFU1M7CisKKwlpZiAoZmluZF9tZWRpYW4gPT0gMSkgeyAKKwkJaWYgKChyZDFfbWluX3ZhbCAhPSBVTlNFVCkgICYmIChyZDFfbWF4X3ZhbCA9PSBVTlNFVCkpIHsKKwkJCXJkMV9tYXhfdmFsID0gcmRfaW5kZXgtMTsKKwkJfQorCQlyZDFfbWVkaWFuID0gKHJkMV9taW5fdmFsICsgcmQxX21heF92YWwpLzI7CisJfQorCisJaWYgKChfX2xlNjRfdG9fY3B1KCooJlJFRFVDKSkmMHgxKT09MSkgIHsKKwkJZGxsMl9yc2x0ID0gU1VDQ0VTUzsKKwkJZGxsM19yc2x0ID0gU1VDQ0VTUzsKKwl9IGVsc2UgeworCQkvLy8vLy8vLy8vLyBETEwyIC8vLy8vLy8vLy8vLy8vCisJCWZvciAocmRfaW5kZXggPSBMT1dfUkQyOyByZF9pbmRleCA8PSBISUdIX1JEMjsgcmRfaW5kZXgrKykgeworCQkJdHJhbnNhY3Rpb25fc2l6ZSA9IEJZVEVfU1o7ICAgLy8gYnl0ZSAoOCBiaXRzKSAKKwkJCWZvcihpID0gMjsgaSA8PSAxNTsgaT1pKzQpeyAKKwkJCQlyc2x0ID0gd3JfcmRfdHJhbnNhY3Rpb24odHJhbnNhY3Rpb25fc2l6ZSwgaSwgZHFzX2luZGV4LHdyX2luZGV4LHJkX2luZGV4LDEpOworCQkJCWlmIChyc2x0ID09IEZBSUxVUkUpIGNvbnRpbnVlOworCQkJCWVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgYnJlYWs7CisJCQl9CisJCQlpZiAocnNsdCA9PSBTVUNDRVNTKSB7IC8vIG9ubHkgZm9yIFNVQ0NFU1MgY29udGludWUgY2hlY2tpbmcgZm9yIHRoZSBuZXh0IHRyYW5zYWN0aW9uIHdpZHRoCisJCQkJdHJhbnNhY3Rpb25fc2l6ZSA9IERPVUJMRV9XT1JEOyAgIC8vIGRvdWJsZS13b3JkICg2NCBiaXRzKSAKKwkJCQlmb3IoaSA9IDI7IGkgPD0gMTU7IGk9aSsxNil7IAorCQkJCQlyc2x0ID0gd3JfcmRfdHJhbnNhY3Rpb24odHJhbnNhY3Rpb25fc2l6ZSwgaSwgZHFzX2luZGV4LHdyX2luZGV4LHJkX2luZGV4LDEpOworCQkJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSBjb250aW51ZTsKKwkJCQkJZWxzZSBpZiAocnNsdCA9PSBTVUNDRVNTKSBicmVhazsKKwkJCQl9Ly8gZW5kIG9mIHRyYW5zYWN0aW9uX3NpemUgRE9VQkxFX1dPUkQKKwkJCX0gLy8gZW5kIG9mIHRyYW5zYWN0aW9uX3NpemUgQllURV9TWgorCQkKKwkJCS8vIGZpbmQgcmVzdWx0cyBvZiBkbGwgcnVuCisJCQlpZiAoZmluZF9tZWRpYW4gPT0gMSkgeyAKKwkJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSB7CisJCQkJCWlmICgocmQyX21pbl92YWwgIT0gVU5TRVQpICYmIChyZDJfbWluX3ZhbD09KHJkX2luZGV4LTEpKSkgeworCQkJCQkJcmQyX21pbl92YWwgPSBVTlNFVDsKKwkJCQkJfQorCQkJCQlpZiAoKHJkMl9taW5fdmFsICE9IFVOU0VUKSAgJiYgKHJkMl9tYXhfdmFsID09IFVOU0VUKSkgeworCQkJCQkJcmQyX21heF92YWwgPSByZF9pbmRleC0xOworCQkJCQkJZGxsMl9yc2x0ID0gU1VDQ0VTUzsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChyc2x0ID09IFNVQ0NFU1MpIHsKKwkJCQkJaWYgKHJkMl9taW5fdmFsID09IFVOU0VUKSB7CisJCQkJCQlyZDJfbWluX3ZhbCA9IHJkX2luZGV4OworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSBjb250aW51ZTsKKwkJCQllbHNlIGlmIChyc2x0ID09IFNVQ0NFU1MpIGJyZWFrOy8vIG9uZSBTVUNDRVNTIGlzIGVub3VnaCB3aGVuIG5vIG1lZGlhbiBjYWxjdWxhdGlvbiBpcyBuZWVkZWQKKwkJCX0gLy8gZGxsMiBtZWRpYW4KKwkJfSAvLyBETEwyCisJCQorCQlpZiAocnNsdCA9PSBTVUNDRVNTKSBkbGwyX3JzbHQgPSBTVUNDRVNTOworCQkKKwkJaWYgKGZpbmRfbWVkaWFuID09IDEpIHsgCisJCQlpZiAoKHJkMl9taW5fdmFsICE9IFVOU0VUKSAgJiYgKHJkMl9tYXhfdmFsID09IFVOU0VUKSkgeworCQkJCXJkMl9tYXhfdmFsID0gcmRfaW5kZXgtMTsKKwkJCX0KKwkJCXJkMl9tZWRpYW4gPSAocmQyX21pbl92YWwgKyByZDJfbWF4X3ZhbCkvMjsKKwkJfQorCQkKKwkJLy8vLy8vLy8vLy8gRExMMyAvLy8vLy8vLy8vLy8vLworCQlmb3IgKHJkX2luZGV4ID0gTE9XX1JEMzsgcmRfaW5kZXggPD0gSElHSF9SRDM7IHJkX2luZGV4KyspIHsKKwkJCXRyYW5zYWN0aW9uX3NpemUgPSBCWVRFX1NaOyAgIC8vIGJ5dGUgKDggYml0cykgCisJCQlmb3IoaSA9IDM7IGkgPD0gMTU7IGk9aSs0KXsgCisJCQkJcnNsdCA9IHdyX3JkX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uX3NpemUsIGksIGRxc19pbmRleCx3cl9pbmRleCxyZF9pbmRleCwxKTsKKwkJCQlpZiAocnNsdCA9PSBGQUlMVVJFKSBjb250aW51ZTsKKwkJCQllbHNlIGlmIChyc2x0ID09IFNVQ0NFU1MpIGJyZWFrOworCQkJfQorCQkJaWYgKHJzbHQgPT0gU1VDQ0VTUykgeyAvLyBvbmx5IGZvciBTVUNDRVNTIGNvbnRpbnVlIGNoZWNraW5nIGZvciB0aGUgbmV4dCB0cmFuc2FjdGlvbiB3aWR0aAorCQkJCXRyYW5zYWN0aW9uX3NpemUgPSBET1VCTEVfV09SRDsgICAvLyBkb3VibGUtd29yZCAoNjQgYml0cykgCisJCQkJZm9yKGkgPSAzOyBpIDw9IDE1OyBpPWkrMTYpeyAKKwkJCQkJcnNsdCA9IHdyX3JkX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uX3NpemUsIGksIGRxc19pbmRleCx3cl9pbmRleCxyZF9pbmRleCwxKTsKKwkJCQkJaWYgKHJzbHQgPT0gRkFJTFVSRSkgY29udGludWU7CisJCQkJCWVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgYnJlYWs7CisJCQkJfS8vIGVuZCBvZiB0cmFuc2FjdGlvbl9zaXplIERPVUJMRV9XT1JECisJCQl9IC8vIGVuZCBvZiB0cmFuc2FjdGlvbl9zaXplIEJZVEVfU1oKKwkJCisJCQkvLyBmaW5kIHJlc3VsdHMgb2YgZGxsIHJ1bgorCQkJaWYgKGZpbmRfbWVkaWFuID09IDEpIHsgCisJCQkJaWYgKHJzbHQgPT0gRkFJTFVSRSkgeworCQkJCQlpZiAoKHJkM19taW5fdmFsICE9IFVOU0VUKSAmJiAocmQzX21pbl92YWw9PShyZF9pbmRleC0xKSkpIHsKKwkJCQkJCXJkM19taW5fdmFsID0gVU5TRVQ7CisJCQkJCX0KKwkJCQlpZiAoKHJkM19taW5fdmFsICE9IFVOU0VUKSAgJiYgKHJkM19tYXhfdmFsID09IFVOU0VUKSkgeworCQkJCQlyZDNfbWF4X3ZhbCA9IHJkX2luZGV4LTE7CisJCQkJCWRsbDNfcnNsdCA9IFNVQ0NFU1M7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQl9IGVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgeworCQkJCQlpZiAocmQzX21pbl92YWwgPT0gVU5TRVQpIHsKKwkJCQkJCXJkM19taW5fdmFsID0gcmRfaW5kZXg7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChyc2x0ID09IEZBSUxVUkUpIGNvbnRpbnVlOworCQkJCWVsc2UgaWYgKHJzbHQgPT0gU1VDQ0VTUykgYnJlYWs7Ly8gb25lIFNVQ0NFU1MgaXMgZW5vdWdoIHdoZW4gbm8gbWVkaWFuIGNhbGN1bGF0aW9uIGlzIG5lZWRlZAorCQkJfSAvLyBkbGwzIG1lZGlhbgorCQl9IC8vIERMTDMKKwkJaWYgKHJzbHQgPT0gU1VDQ0VTUykgZGxsM19yc2x0ID0gU1VDQ0VTUzsKKwkJaWYgKGZpbmRfbWVkaWFuID09IDEpIHsgCisJCQlpZiAoKHJkM19taW5fdmFsICE9IFVOU0VUKSAgJiYgKHJkM19tYXhfdmFsID09IFVOU0VUKSkgeworCQkJCXJkM19tYXhfdmFsID0gcmRfaW5kZXgtMTsKKwkJCX0KKwkJCXJkM19tZWRpYW4gPSAocmQzX21pbl92YWwgKyByZDNfbWF4X3ZhbCkvMjsKKwkJfQorCX07IC8vIFJFRFVDCisKKwkvLyBhbGwgZGxsIGZvdW5kIGEgc3VjY2VzcyB2YWx1ZXMgZm9yIGN1cnJlbnQgZHFzIGFuZCB3ciB2YWx1ZXMuCisJLy8gRm9yIGluaXRpYWxpemF0aW9uOiAwcyBpbmRpY2F0ZXMgRmFpbHVyZQorCXJkLnJkMCA9IDA7CisJcmQucmQxID0gMDsKKwlyZC5yZDIgPSAwOworCXJkLnJkMyA9IDA7CisJaWYgKChkbGwwX3JzbHQgJiBkbGwxX3JzbHQgJiBkbGwyX3JzbHQgJiBkbGwzX3JzbHQgJiAweDEpID09IDEpIHsvL3JldHVybiBTVUNDRVNTOworCQlpZiAoZmluZF9tZWRpYW4gPT0gMSkgeworCQkJcmQucmQwID0gcmQwX21lZGlhbjsKKwkJCXJkLnJkMSA9IHJkMV9tZWRpYW47CisJCQlyZC5yZDIgPSByZDJfbWVkaWFuOworCQkJcmQucmQzID0gcmQzX21lZGlhbjsKKwkJfSBlbHNlIHsKKwkJCS8vIDFzIGluZGljYXRlcyBTdWNjZXNzCisJCQlyZC5yZDAgPSAxOworCQkJcmQucmQxID0gMTsKKwkJCXJkLnJkMiA9IDE7CisJCQlyZC5yZDMgPSAxOworCQl9CisJfSAKKwkKKwlyZXR1cm4gcmQ7IC8vIDBzIGluZGljYXRlIEZhaWx1cmUKK30KKwordTMyIHdyX3JkX3RyYW5zYWN0aW9uKHUzMiB0cmFuc2FjdGlvbl9zaXplLCB1MzIgaSwgdTggZHFzX2luZGV4LCB1OCB3cl9pbmRleCwgdTggcmRfaW5kZXgsIHUzMiBtYXNrKSB7CisJdTMyIGRsbF9udW07CisJdTMyIGRkcl9hZGRyLCBsaW1pdF9hZGRyOworCisgCS8vIHNldCB2YWx1ZXMgZm9yIGN1cnJlbnQgdHJhbnNhY3Rpb24KKwlERU5BTElfV1JfRFFTICA9IHdyX2luZGV4OworIAlERU5BTElfRFFTX09VVCA9IGRxc19pbmRleDsKKwlkbGxfbnVtID0gZ2V0X2RsbChpKTsKKyAJc3dpdGNoIChkbGxfbnVtKSB7CisgCQljYXNlIDA6REVOQUxJX0RRU19ERUxBWTAgPSByZF9pbmRleDticmVhazsKKyAJCWNhc2UgMTpERU5BTElfRFFTX0RFTEFZMSA9IHJkX2luZGV4O2JyZWFrOworIAkJY2FzZSAyOkRFTkFMSV9EUVNfREVMQVkyID0gcmRfaW5kZXg7YnJlYWs7CisgCQljYXNlIDM6REVOQUxJX0RRU19ERUxBWTMgPSByZF9pbmRleDticmVhazsKKyAJfTsKKwkKKwlsaW1pdF9hZGRyID0gX19sZTY0X3RvX2NwdSgqKCZBSEJfTUFYX01FTV9SRUcpKSAmIDB4N2ZmZmZmZmY7CisJZGRyX2FkZHJfb2Zmc2V0ID0gKGRkcl9hZGRyX29mZnNldCArIEFERFJfSlVNUF9TSVpFKSAmIGxpbWl0X2FkZHI7IC8vIGxpbWl0IHRoZSBhZGRyZXNzIHNwYWNlIHRvIGFoYiBjb25maWd1cmVkIHZhbHVlLgorCQorCS8vIHRoZSBhZGRyZXNzIGlzIHNoaWZ0ZWQgYnkgOCB0byBlbnN1cmUgNjQgYnl0ZSB0cmFuc2FjdGlvbiBpbiByZWdpb24uCisJLy8gMHg4MDAwMDAwMCArIGRsbF9udW0gKyBvZmZzZXQgKjJeICgwIGZvciBieXRlLCAxIGZvciBoYWxmIHdvcmQgLCAyIGZvciB3b3JkLCAzIGZvciBkb3VibGUgd29yZC4pIAorCisJaWYgKChfX2xlNjRfdG9fY3B1KCooJkNTX01BUCkpICYgMHgzKSA9PSAzKSB7CisJCWRkcl9hZGRyID0gZGRyX2FkZHJfb2Zmc2V0OworCQkvLyBkZWZhdWx0IGNzIzAKKwkJZGRyX2FkZHIgJj0gKH4obWF4X2FkZHJfYml0X2xpc3RbbWF4X2FkZHJfc3BhY2VfYml0LTIxXSkpOworIAkJaWYgKGFjdHVhbF90cmFuc2FjdGlvbih0cmFuc2FjdGlvbl9zaXplLCBpLCBtYXNrLCBkZHJfYWRkciwgZGxsX251bSkgPT0gU1VDQ0VTUykgeworCQkJLy8gc2V0IGNzIzEKKwkJCWRkcl9hZGRyIHw9IG1heF9hZGRyX2JpdF9saXN0W21heF9hZGRyX3NwYWNlX2JpdC0yMV07CisJCQlyZXR1cm4gYWN0dWFsX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uX3NpemUsIGksIG1hc2ssIGRkcl9hZGRyLCBkbGxfbnVtKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBGQUlMVVJFOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIGFjdHVhbF90cmFuc2FjdGlvbih0cmFuc2FjdGlvbl9zaXplLCBpLCBtYXNrLCBkZHJfYWRkcl9vZmZzZXQsIGRsbF9udW0pOworCX0gCit9CisKK3UzMiBnZXRfZGxsKHUzMiBpKSB7CisJdTMyIHJzbHQ9MDsKKwlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOiBjYXNlIDQ6IGNhc2UgODogY2FzZSAxMiA6IHJzbHQgPSAwO2JyZWFrOworCQljYXNlIDE6IGNhc2UgNTogY2FzZSA5OiBjYXNlIDEzIDogcnNsdCA9IDE7YnJlYWs7CisJCWNhc2UgMjogY2FzZSA2OiBjYXNlIDEwOiBjYXNlIDE0OiByc2x0ID0gMjticmVhazsKKwkJY2FzZSAzOiBjYXNlIDc6IGNhc2UgMTE6IGNhc2UgMTU6IHJzbHQgPSAzO2JyZWFrOworCX07CisJcmV0dXJuIHJzbHQ7Cit9CisKK3UzMiBhY3R1YWxfdHJhbnNhY3Rpb24odTMyIHRyYW5zYWN0aW9uX3NpemUsIHUzMiBpLCB1MzIgbWFzaywgdTMyIGRkcl9hZGRyLCB1MzIgZGxsX251bSkgeworCXUzMiByc2x0ID0gRkFJTFVSRTsKKworCS8vIHBlciB0cmFuc2FjdGlvbiB3aWR0aCwgd3JpdGUgYW5kIHJlYWQgdHJhbnNhY3Rpb24uCisJc3dpdGNoICh0cmFuc2FjdGlvbl9zaXplKSB7CisJCisJY2FzZSBCWVRFX1NaOiAKKwlpZiAobWFzayA9PSAxKSB7CisJCSooJldSSVRFX1ZBTF9VOCtpK2Rkcl9hZGRyKSA9IDB4MDA7CisJCSooJldSSVRFX1ZBTF9VOCtpKzB4MTArZGRyX2FkZHIpID0gMHhhYTsKKwkJKigmV1JJVEVfVkFMX1U4K2krMHgyMCtkZHJfYWRkcikgPSAweDU1OworCQlpZiAoKCgqKCZXUklURV9WQUxfVTgraStkZHJfYWRkcikpICYgMHhmZik9PTB4MDApIHsKKwkJCWlmICgoKCooJldSSVRFX1ZBTF9VOCtpKzB4MTArZGRyX2FkZHIpKSAmIDB4ZmYpPT0weGFhKSB7CisJCQkJaWYgKCgoKigmV1JJVEVfVkFMX1U4K2krMHgyMCtkZHJfYWRkcikpICYgMHhmZik9PTB4NTUpIHsKKwkJCQkJcnNsdCA9IFNVQ0NFU1M7IC8vIHBlciBkbGwKKwkJCQl9CisJCQl9CisJCX0KKwkJKigmV1JJVEVfVkFMX1U4K2krZGRyX2FkZHIpID0gMDsvL2NsZWFyCisJCSooJldSSVRFX1ZBTF9VOCtpKzB4MTArZGRyX2FkZHIpID0gMDsvL2NsZWFyCisJCSooJldSSVRFX1ZBTF9VOCtpKzB4MjArZGRyX2FkZHIpID0gMDsvL2NsZWFyCisJfSBlbHNlIHsKKwkJKigmV1JJVEVfVkFMX1U4K2Rkcl9hZGRyKSA9IDB4MDA7CisJCSooJldSSVRFX1ZBTF9VOCsweDEwK2Rkcl9hZGRyKSA9IDB4YWE7CisJCSooJldSSVRFX1ZBTF9VOCsweDIwK2Rkcl9hZGRyKSA9IDB4NTU7CisJCWlmICgqKCZXUklURV9WQUxfVTgrZGRyX2FkZHIpID09IDB4MDApIHsKKwkJCWlmICgqKCZXUklURV9WQUxfVTgrMHgxMCtkZHJfYWRkcikgPT0gMHhhYSkgeworCQkJCWlmICgqKCZXUklURV9WQUxfVTgrMHgyMCtkZHJfYWRkcikgPT0gMHg1NSkgeworCQkJCQlyc2x0ID0gU1VDQ0VTUzsKKwkJCQl9CisJCQl9CisJCX0KKwkJKigmV1JJVEVfVkFMX1U4K2Rkcl9hZGRyKSA9IDA7IC8vY2xlYXIKKwkJKigmV1JJVEVfVkFMX1U4K2krMHgxMCtkZHJfYWRkcikgPSAwOy8vY2xlYXIKKwkJKigmV1JJVEVfVkFMX1U4K2krMHgyMCtkZHJfYWRkcikgPSAwOy8vY2xlYXIKKwl9CisJYnJlYWs7CisJCisJY2FzZSBIQUxGX1dPUkQ6ICAvLyBubyBtYXNraW5nIG9wdGlvbgorCSooJldSSVRFX1ZBTF9VMTYrZGRyX2FkZHIpID0gX19jcHVfdG9fbGUxNigweDAwMDApOworCSooJldSSVRFX1ZBTF9VMTYrMHgxMCtkZHJfYWRkcikgPSBfX2NwdV90b19sZTE2KDB4YWFhYSk7CisJKigmV1JJVEVfVkFMX1UxNisweDIwK2Rkcl9hZGRyKSA9IF9fY3B1X3RvX2xlMTYoMHg1NTU1KTsKKwlpZiAoX19sZTE2X3RvX2NwdSgqKCZXUklURV9WQUxfVTE2K2Rkcl9hZGRyKSkgPT0gMHgwMDAwKSB7CisJCWlmIChfX2xlMTZfdG9fY3B1KCooJldSSVRFX1ZBTF9VMTYrMHgxMCtkZHJfYWRkcikpID09IDB4YWFhYSkgeworCQkJaWYgKF9fbGUxNl90b19jcHUoKigmV1JJVEVfVkFMX1UxNisweDIwK2Rkcl9hZGRyKSkgPT0gMHg1NTU1KSB7CisJCQkJcnNsdCA9IFNVQ0NFU1M7CisJCQl9CisJCX0KKwl9CisJKigmV1JJVEVfVkFMX1UxNitkZHJfYWRkcikgPSBfX2NwdV90b19sZTE2KDApOyAvL2NsZWFyCisJKigmV1JJVEVfVkFMX1UxNitpKzB4MTArZGRyX2FkZHIpID0gX19jcHVfdG9fbGUxNigwKTsvL2NsZWFyCisJKigmV1JJVEVfVkFMX1UxNitpKzB4MjArZGRyX2FkZHIpID0gX19jcHVfdG9fbGUxNigwKTsvL2NsZWFyCisJYnJlYWs7CisJCisJY2FzZSBXT1JEOi8vIG5vIG1hc2tpbmcgb3B0aW9uCisJKigmV1JJVEVfVkFMX1UzMitkZHJfYWRkcikgPSBfX2NwdV90b19sZTMyKDB4MDAwMDAwMDApOworCSooJldSSVRFX1ZBTF9VMzIrMHgxMCtkZHJfYWRkcikgPSBfX2NwdV90b19sZTMyKDB4YWFhYWFhYWEpOworCSooJldSSVRFX1ZBTF9VMzIrMHgyMCtkZHJfYWRkcikgPSBfX2NwdV90b19sZTMyKDB4NTU1NTU1NTUpOworCWlmIChfX2xlMzJfdG9fY3B1KCooJldSSVRFX1ZBTF9VMzIrZGRyX2FkZHIpKSA9PSAweDAwMDAwMDAwKSB7CisJCWlmIChfX2xlMzJfdG9fY3B1KCooJldSSVRFX1ZBTF9VMzIrMHgxMCtkZHJfYWRkcikpID09IDB4YWFhYWFhYWEpIHsKKwkJCWlmIChfX2xlMzJfdG9fY3B1KCooJldSSVRFX1ZBTF9VMzIrMHgyMCtkZHJfYWRkcikpID09IDB4NTU1NTU1NTUpIHsKKwkJCQlyc2x0ID0gU1VDQ0VTUzsKKwkJCX0KKwkJfQorCX0KKwkqKCZXUklURV9WQUxfVTMyK2Rkcl9hZGRyKSA9IF9fY3B1X3RvX2xlMzIoMCk7IC8vY2xlYXIKKwkqKCZXUklURV9WQUxfVTMyKzB4MTArZGRyX2FkZHIpID0gX19jcHVfdG9fbGUzMigwKTsgLy9jbGVhcgorCSooJldSSVRFX1ZBTF9VMzIrMHgyMCtkZHJfYWRkcikgPSBfX2NwdV90b19sZTMyKDApOyAvL2NsZWFyCisJYnJlYWs7CisJCisJY2FzZSBET1VCTEVfV09SRDogLy8gbm8gbWFza2luZyA6IGZ1bGwgNjQgYml0cworCSooJldSSVRFX1ZBTF9VNjQrZGRyX2FkZHIpID0gX19jcHVfdG9fbGU2NCgweDAwMDAwMDAwMDAwMDAwMDBMTCk7CisJKigmV1JJVEVfVkFMX1U2NCsweDEwK2Rkcl9hZGRyKSA9IF9fY3B1X3RvX2xlNjQoMHgyYWFhYWFhYWFhYWFhYWFhTEwpOworCSooJldSSVRFX1ZBTF9VNjQrMHgyMCtkZHJfYWRkcikgPSBfX2NwdV90b19sZTY0KDB4NTU1NTU1NTU1NTU1NTU1NUxMKTsKKwlpZiAoX19sZTY0X3RvX2NwdSgqKCZXUklURV9WQUxfVTY0K2Rkcl9hZGRyKSkgPT0gMHgwMDAwMDAwMDAwMDAwMDAwTEwpIHsKKwkJaWYgKF9fbGU2NF90b19jcHUoKigmV1JJVEVfVkFMX1U2NCsweDEwK2Rkcl9hZGRyKSkgPT0gMHgyYWFhYWFhYWFhYWFhYWFhTEwpIHsKKwkJCWlmIChfX2xlNjRfdG9fY3B1KCooJldSSVRFX1ZBTF9VNjQrMHgyMCtkZHJfYWRkcikpID09IDB4NTU1NTU1NTU1NTU1NTU1NUxMKSB7CisJCQkJcnNsdCA9IFNVQ0NFU1M7CisJCQl9CisJCX0KKwl9CisJKigmV1JJVEVfVkFMX1U2NCtkZHJfYWRkcikgPSBfX2NwdV90b19sZTY0KDApOyAvL2NsZWFyCisJKigmV1JJVEVfVkFMX1U2NCsweDEwK2Rkcl9hZGRyKSA9IF9fY3B1X3RvX2xlNjQoMCk7IC8vY2xlYXIKKwkqKCZXUklURV9WQUxfVTY0KzB4MjArZGRyX2FkZHIpID0gX19jcHVfdG9fbGU2NCgwKTsgLy9jbGVhcgorCWJyZWFrOworCQorCX07IC8vIHN3aXRjaCB0cmFuc2FjdGlvbl9zaXplCisKKwlyZXR1cm4gcnNsdDsKK30KKworCmRpZmYgLS1naXQgYS9jcHUvYXJtMTEzNi9jb21jZXJ0by90cmFpbmluZzEwMDAuYyBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL3RyYWluaW5nMTAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzN2JjMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTEzNi9jb21jZXJ0by90cmFpbmluZzEwMDAuYwpAQCAtMCwwICsxLDc4NiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKworLy8jZGVmaW5lIEREUl9UUkFJTklOR19NT0RFX0RFQlVHX1BSSU5UUyAgMQorI3VuZGVmICBERFJfVFJBSU5JTkdfTU9ERV9ERUJVR19QUklOVFMKKworI2RlZmluZSBTWl8xSwkgICAgICAgIDB4NDAwCisjZGVmaW5lIFNaXzEyOEsgICAgICAgICAoU1pfMUsgKiAxMjgpCisjZGVmaW5lIEFERFJfSlVNUF9TSVpFICBTWl8xMjhLCisKKyNkZWZpbmUgTVRfQUREUjFfRFNUICAoRERSX0JBU0VBRERSICsgMHhmZjAwKQorI2RlZmluZSBNVF9BRERSMl9EU1QgIChERFJfQkFTRUFERFIgKyAoUEhZU19TRFJBTV9TSVpFID4+IDEpICsgMHhmZjAwKSAKKworLyogQ29udHJvbGxlciByZWdpc3RlciBkZWZpbmVzIHVzZWQgaW4gdHJhaW5pbmcgKi8KKyNkZWZpbmUgREVOQUxJX1dSX0RRU19ERUxBWTAJCSooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDExQikpCisjZGVmaW5lIERFTkFMSV9XUl9EUVNfREVMQVkxCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxMUMpKQorI2RlZmluZSBERU5BTElfV1JfRFFTX0RFTEFZMgkJKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTFEKSkKKyNkZWZpbmUgREVOQUxJX1dSX0RRU19ERUxBWTMJCSooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDExRSkpCisKKyNkZWZpbmUgREVOQUxJX1NXX0xFVkVMSU5HX1NUQVJUCSooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDI3OCkpCisjZGVmaW5lIERFTkFMSV9TV19MRVZFTElOR19NT0RFCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgyNzkpKQorI2RlZmluZSBERU5BTElfU1dfTEVWRUxJTkdfTE9BRAkJKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4Mjc2KSkKKworI2RlZmluZSBERU5BTElfRExMX01BREowCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNDgpKQorI2RlZmluZSBERU5BTElfRExMX0FESjAJCSAgICAgICAgKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTQ5KSkKKworI2RlZmluZSBERU5BTElfRExMX0FESjFfRFMwCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNEEpKQorI2RlZmluZSBERU5BTElfRExMX0FESjFfRFMxCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNEUpKQorI2RlZmluZSBERU5BTElfRExMX0FESjFfRFMyCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNTIpKQorI2RlZmluZSBERU5BTElfRExMX0FESjFfRFMzCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNTYpKQorCisjZGVmaW5lIERFTkFMSV9ETExfQURKMF9EUzAgICAgICAgICAgICAgKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTQ5KSkKKyNkZWZpbmUgREVOQUxJX0RMTF9BREowX0RTMSAgICAgICAgICAgICAqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNEQpKQorI2RlZmluZSBERU5BTElfRExMX0FESjBfRFMyICAgICAgICAgICAgICooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE1MSkpCisjZGVmaW5lIERFTkFMSV9ETExfQURKMF9EUzMgICAgICAgICAgICAgKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTU1KSkKKworI2RlZmluZSBERU5BTElfRExMX0FESjNfRFMwICAgICAgICAgICAgICooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE1OSkpCisjZGVmaW5lIERFTkFMSV9ETExfQURKM19EUzEgICAgICAgICAgICAgKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTVEKSkKKyNkZWZpbmUgREVOQUxJX0RMTF9BREozX0RTMiAgICAgICAgICAgICAqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNjEpKQorI2RlZmluZSBERU5BTElfRExMX0FESjNfRFMzICAgICAgICAgICAgICooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE2NSkpCisKK3N0YXRpYyB1OCBkb193cl9yZF90cmFuc2FjdGlvbih1MzIgZGRyX2FkZHJfb2Zmc2V0LCB1NjQqLCB1MzIqLCB1MTYgbW9kZSk7CitzdGF0aWMgaW50IG1kbWFfdGVzdCh1NjQgKik7CisKK2V4dGVybiB2b2lkIGFybV93cml0ZTY0KHU2NCBkYXRhLHZvbGF0aWxlIHU2NCAqcCk7CitleHRlcm4gaW50IG1kbWFfbWVtY3B5KHZvaWQgKnNyYywgdm9pZCAqZHN0LCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgKmNyYyk7CisKK2V4dGVybiBpbnQgc2VyaWFsX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzZXJpYWxfcHV0cyhjb25zdCBjaGFyICpzKTsKK2V4dGVybiB2b2lkIHNlcmlhbF9wdXRjKGNvbnN0IGNoYXIgYyk7CisKK3R5cGVkZWYgc3RydWN0IGFkajJfZHNfcworeworICB1OCB3aW5fc3RhcnQ7CisgIHU4IHdpbl9lbmQ7CisgIHU4IHdpbjsKKworICB1OCBnV2luOworICB1OCBnV2luX3N0YXJ0OworICB1OCBnV2luX2VuZDsKKyAgdTggaW54OyAKK31hZGoyX2RzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGFkajJfdmFsX3MKK3sKKyAgYWRqMl9kc190IGRzMDsKKyAgYWRqMl9kc190IGRzMTsKKyAgYWRqMl9kc190IGRzMjsKKyAgYWRqMl9kc190IGRzMzsKK31hZGoyX3ZhbF90OworCisjaWZkZWYgRERSX1RSQUlOSU5HX01PREVfREVCVUdfUFJJTlRTCisvKiB1c2UgdG8gcHJpbnQgb25seSBieXRlICovCitzdGF0aWMgY2hhciAqc2ltcGxlX2l0b2ExKHVuc2lnbmVkIGludCBpLCBjaGFyICpzKQoreworICAgIGNoYXIgbG9jYWxbNV07CisgICAgY2hhciAqcCA9ICZsb2NhbFs0XTsKKyAgICAqcC0tID0gJ1wwJzsKKwkgaSA9IGkgJiAweGZmOworICAgIGRvIHsKKyAgICAgICAgKnAtLSA9ICcwJyArIGkgJSAxMDsKKyAgICAgICAgaSAvPSAxMDsKKyAgICB9IHdoaWxlIChpID4gMCk7CisgICAgbWVtY3B5KHMsIHArMSwgNCk7CisgICAgcmV0dXJuIHM7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYWRqMl9kc3hfY2FsY3VsYXRlX3dpbmRvdyh1OCByZXN1bHQsIHU4IGRsbF92YWwsIHU4IGRxc19pbmRleCwgYWRqMl9kc190ICphZGoyKQoreworCXU4IHdpbjsKKyNpZmRlZiAgRERSX1RSQUlOSU5HX01PREVfREVCVUdfUFJJTlRTCisJY2hhciBzWzVdOworCXU4IGRzeCA9IDA7CisjZW5kaWYKKworCWlmICghcmVzdWx0KSAvKiBzdWNjZXNzICovIAorCXsKKwkgIAkvKiBpdHMgZmlyc3QgdGltZSBzdWNjZXNzLCBzdGFydCBjb3VudGluZyBmcm9tIGhlcmUgKi8KKwkJaWYgKGFkajItPndpbl9zdGFydCA9PSAwKQorCQl7CisJCQlhZGoyLT53aW5fc3RhcnQgPSBhZGoyLT53aW5fZW5kID0gZGxsX3ZhbDsKKwkJfQorCQllbHNlICB7CisJCQlhZGoyLT53aW5fZW5kKys7CisJCQkvKiBjbG9zZSB0aGUgd2luZG93LCBpZiB3ZSByZWFjaCB0aGUgZW5kIHBvaW50IG9mIGFkajEgcmFuZ2UgKi8KKwkJCWlmIChkbGxfdmFsID09IEFESjFfTUFYX1ZBTCkgIHsKKwkJCQl3aW4gPSAoYWRqMi0+d2luX2VuZCAtIGFkajItPndpbl9zdGFydCkgKyAxOworCQkJICAgICAgICBpZiAoYWRqMi0+d2luIDwgd2luKQorCQkJCQlhZGoyLT53aW4gPSB3aW47CisKKwkJCQkvKiBpcyB0aGlzIHdpbmRvdyBiaWdnZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lLCB0aGVuIHRha2UgaXQgKi8KKwkJCQlpZiAoYWRqMi0+Z1dpbiA8IHdpbikKKwkJCQl7CisJCQkJCWFkajItPmdXaW4gPSB3aW47CisJCQkJCWFkajItPmdXaW5fc3RhcnQgPSBhZGoyLT53aW5fc3RhcnQ7CisJCQkJCWFkajItPmdXaW5fZW5kID0gYWRqMi0+d2luX2VuZDsKKwkJCQkJYWRqMi0+aW54ID0gZHFzX2luZGV4OyAKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZWxzZSAvKiBmYWlsdXJlICovCisJeworCQlpZiAoYWRqMi0+d2luX3N0YXJ0ID09IDApCisJCXsKKwkJCS8vd2luZG93IG5vdCB5ZXQgc3RhcnRlZCwgc28gbm90aGluZyB0byBkbyAKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vdGhpcyB3aW5kb3cgZW5kcyBoZXJlLGNhbGN1bGF0ZSB3aW5kb3cgc2l6ZQorCQkJd2luID0gKGFkajItPndpbl9lbmQgLSBhZGoyLT53aW5fc3RhcnQpICsgMTsKKworI2lmZGVmICBERFJfVFJBSU5JTkdfTU9ERV9ERUJVR19QUklOVFMKKwkgICAgCQlzZXJpYWxfcHV0YygnXG4nKTsKKwkJCWlmIChyZXN1bHQgJiAweDEpCisJCQkJZHN4ID0gMDsKKwkJCWVsc2UgaWYgKHJlc3VsdCAmIDB4MikKKwkJCQlkc3ggPSAxOworCQkJZWxzZSBpZiAocmVzdWx0ICYgMHg0KQorCQkJCWRzeCA9IDI7CisJCQllbHNlIGlmIChyZXN1bHQgJiAweDgpCisJCQkJZHN4ID0gMzsKKwkgICAgCQlzZXJpYWxfcHV0YygnWycpOworCQkJc2VyaWFsX3B1dHMoImRzIik7CisJICAgIAkJc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKGRzeCxzKSk7CisJICAgIAkJc2VyaWFsX3B1dGMoJzonKTsKKwkgICAgCQlzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEoYWRqMi0+d2luX3N0YXJ0LHMpKTsKKwkgICAgCQlzZXJpYWxfcHV0YygnLScpOworCSAgICAJCXNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMShhZGoyLT53aW5fZW5kLHMpKTsKKwkgICAgCQlzZXJpYWxfcHV0YygnPScpOworCSAgICAJCXNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMSh3aW4scykpOworCSAgICAJCXNlcmlhbF9wdXRjKCddJyk7CisjZW5kaWYKKworCQkJaWYgKGFkajItPndpbiA8IHdpbikKKwkJCXsKKwkJCQlhZGoyLT53aW4gPSB3aW47CisJCQl9CisKKwkJCS8vaXMgdGhpcyB3aW5kb3cgYmlnZ2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSwgdGhlbiB0YWtlIGl0CisJCQlpZiAoYWRqMi0+Z1dpbiA8IHdpbikKKwkJCXsKKwkJCQlhZGoyLT5nV2luID0gd2luOworCQkJCWFkajItPmdXaW5fc3RhcnQgPSBhZGoyLT53aW5fc3RhcnQ7CisJCQkJYWRqMi0+Z1dpbl9lbmQgPSBhZGoyLT53aW5fZW5kOworCQkJCWFkajItPmlueCA9IGRxc19pbmRleDsgCisJCQl9CisKKwkJCS8qIHJlc2V0IHdpbmRvdyBwb2ludGVyIHRvIG1lYXN1cmUgbmV4dCB3aW5kb3cgKi8KKwkJCWFkajItPndpbl9zdGFydCA9IGFkajItPndpbl9lbmQgPSAwOworCQl9CisJfSAvKiBmYWlsdXJlICovCisKKwlyZXR1cm47Cit9CQorCisvKiBmb3IgYmFzaW5nIG9uIGFkajIgbWluIHZhbHVlIGxvZ2ljIHN1cHBvcnQgKi8KK3N0YXRpYyBpbnQgZ2V0X2FkajJfYWRqdXN0ZWRfdmFsdWUodW5zaWduZWQgaW50ICphZGoyX2RzeCwgYWRqMl92YWxfdCAqYWRqMiwgdTE2IGRkcjE2Yml0X21vZGUpCit7CisgIHU4IGksIGFkajJfdmFsOworICB1MTYgZHMsIHNoaWZ0OworICB1OCB3aW5fc3RhcnQsIHdpbl9lbmQsIHdpbjsKKyAgdTggZ3dpbl9zdGFydCwgZ3dpbl9lbmQsIGd3aW47CisjaWZkZWYgIEREUl9UUkFJTklOR19NT0RFX0RFQlVHX1BSSU5UUworICB1bnNpZ25lZCBjaGFyIHNbNV07CisjZW5kaWYKKworICBmb3IoZHM9MDsgZHMgPCA0OyBkcysrKSB7CisKKyAgICBpZiAoKGRzID09IDIpICYmIChkZHIxNmJpdF9tb2RlKSkKKyAgICAgIGdvdG8gZG9uZTsKKworICAgIHNoaWZ0ID0gZHMgKiA4OworCisgICAgd2luX3N0YXJ0ID0gd2luX2VuZCA9IHdpbiA9IDA7CisgICAgZ3dpbl9zdGFydCA9IGd3aW5fZW5kID0gZ3dpbiA9IDA7CisKKyNpZmRlZiAgRERSX1RSQUlOSU5HX01PREVfREVCVUdfUFJJTlRTCisgICAgc2VyaWFsX3B1dHMoImRzIik7CisgICAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKGRzLCBzKSk7CisgICAgc2VyaWFsX3B1dGMoJ1xuJyk7CisjZW5kaWYKKworICAgIGZvcihpPUFESjJfTUlOX1ZBTDsgaSA8PSBBREoyX01BWF9WQUw7IGkrKykgeworCisgICAgICAgYWRqMl92YWwgPSAodTgpKChhZGoyX2RzeFtpXSA+PiBzaGlmdCkgJiAweGZmKTsKKworICAgICAgICAvKiBpZiwgYWRqMiB2YWwgaXMgYWNjZXB0ZWQgKi8KKyAgICAgICBpZiAoYWRqMl92YWwgPj0gQURKMV9NSU5fQUNDRVBURURfV0lORE9XKSAgeworICAgICAgICAgIGlmICh3aW5fc3RhcnQgPT0gMCkgIHsKKwkgICAgd2luX3N0YXJ0ID0gd2luX2VuZCA9IGk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworCSAgICB3aW5fZW5kKys7CisJICAgIC8qIGNsb3NlIHRoZSB3aW5kb3csIGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgYWRqMiByYW5nZSAqLworCSAgICBpZiAoaSA9PSBBREoyX01BWF9WQUwpICB7CisgICAgICAgICAgICAgIHdpbiA9IHdpbl9lbmQgLSB3aW5fc3RhcnQgKyAxOworCSAgICAgIGlmIChnd2luIDwgd2luKSB7CisJICAgICAgICBnd2luID0gd2luOworCSAgICAgICAgZ3dpbl9zdGFydCA9IHdpbl9zdGFydDsKKwkgICAgICAgIGd3aW5fZW5kID0gd2luX2VuZDsKKwkgICAgICB9CisKKyNpZmRlZiAgRERSX1RSQUlOSU5HX01PREVfREVCVUdfUFJJTlRTCisgICAgCSAgICAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKHdpbl9zdGFydCwgcykpOworICAgICAgICAgICAgIHNlcmlhbF9wdXRjKCctJyk7CisgICAgCSAgICAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKHdpbl9lbmQsIHMpKTsKKyAgICAgICAgICAgICBzZXJpYWxfcHV0YygnPScpOworICAgIAkgICAgIHNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMSh3aW4sIHMpKTsKKyAgICAJICAgICBzZXJpYWxfcHV0YygnXG4nKTsKKyNlbmRpZgorCisJICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgIHsKKyAgICAgICAgLyogaWYgKHdpbl9zdGFydCA9PSAwKSBkbyBub3RoaW5nICovCisgICAgICAgIGlmICh3aW5fc3RhcnQgIT0gMCkgIHsKKwkgIHdpbiA9IHdpbl9lbmQgLSB3aW5fc3RhcnQgKyAxOworCSAgaWYgKGd3aW4gPCB3aW4pIHsKKwkgICAgZ3dpbiA9IHdpbjsKKwkgICAgZ3dpbl9zdGFydCA9IHdpbl9zdGFydDsKKwkgICAgZ3dpbl9lbmQgPSB3aW5fZW5kOworCSAgfQorCisjaWZkZWYgIEREUl9UUkFJTklOR19NT0RFX0RFQlVHX1BSSU5UUworICAgIAkgIHNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMSh3aW5fc3RhcnQsIHMpKTsKKyAgICAgICAgICBzZXJpYWxfcHV0YygnLScpOworICAgIAkgIHNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMSh3aW5fZW5kLCBzKSk7CisgICAgICAgICAgc2VyaWFsX3B1dGMoJz0nKTsKKyAgICAJICBzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEod2luLCBzKSk7CisgICAgCSAgc2VyaWFsX3B1dGMoJ1xuJyk7CisjZW5kaWYKKworCSAgd2luX3N0YXJ0ID0gd2luX2VuZCA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IC8qIGVuZCBvZiBmb3IgKGFkajIgZm9yIGEgZ2l2ZW4gZHMpICovCisKKyAgICAvKiBjaGVjayBmb3IgYWRqMiByYW5nZSBzaXplICovCisgICAgaWYgKGd3aW4gPCBBREoyX01JTl9BQ0NFUFRFRF9SQU5HRSkgIHsKKwlyZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKGd3aW4gPCBBREoyX0FDQ0VQVEVEX1JBTkdFKSB7CisgICAgICAgIHNlcmlhbF9wdXRzKCJcbldBUk5JTkcgLSBERFIgVHJhaW5pbmcgcmVzdWx0cyBtYXkgYmUgTWFyZ2luYWxcbiIpOworICAgIH0KKworICAgIHN3aXRjaCAoZHMpIHsKKyAgICAgIGNhc2UgMCA6CisgICAgICAgIGFkajItPmRzMC5pbnggPSAoZ3dpbl9zdGFydCArIGd3aW5fZW5kKSA+PiAxOworICAgICAgICBhZGoyLT5kczAuZ1dpbiA9IGFkajJfZHN4W2FkajItPmRzMC5pbnhdICYgMHhmZjsKKwlicmVhazsKKyAgICAgIGNhc2UgMSA6IAorICAgICAgICBhZGoyLT5kczEuaW54ID0gKGd3aW5fc3RhcnQgKyBnd2luX2VuZCkgPj4gMTsKKyAgICAgICAgYWRqMi0+ZHMxLmdXaW4gPSAoYWRqMl9kc3hbYWRqMi0+ZHMxLmlueF0gJiAweGZmMDApID4+IDg7CisJYnJlYWs7CisgICAgICBjYXNlIDIgOgorICAgICAgICBhZGoyLT5kczIuaW54ID0gKGd3aW5fc3RhcnQgKyBnd2luX2VuZCkgPj4gMTsKKyAgICAgICAgYWRqMi0+ZHMyLmdXaW4gPSAoYWRqMl9kc3hbYWRqMi0+ZHMyLmlueF0gJiAweGZmMDAwMCkgPj4gMTY7CisJYnJlYWs7CisgICAgICBjYXNlIDM6CisgICAgICAgIGFkajItPmRzMy5pbnggPSAoZ3dpbl9zdGFydCArIGd3aW5fZW5kKSA+PiAxOworICAgICAgICBhZGoyLT5kczMuZ1dpbiA9IChhZGoyX2RzeFthZGoyLT5kczMuaW54XSAmIDB4ZmYwMDAwMDApID4+IDI0OworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9CisgIH0gLyogZW5kIG9mIGZvcihkcykgKi8KKworZG9uZToKKyAgaWYgKGRkcjE2Yml0X21vZGUpICB7CisgICAgIGlmICgoYWRqMi0+ZHMwLmdXaW4gPCBBREoxX0FDQ0VQVEVEX1dJTkRPVykgfHwgKGFkajItPmRzMS5nV2luIDwgQURKMV9BQ0NFUFRFRF9XSU5ET1cpKSAgIHsKKyAgICAgICBnb3RvIHdhcm5pbmc7CisgICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICAgaWYgKChhZGoyLT5kczAuZ1dpbiA8IEFESjFfQUNDRVBURURfV0lORE9XKSB8fCAoYWRqMi0+ZHMxLmdXaW4gPCBBREoxX0FDQ0VQVEVEX1dJTkRPVykgfHwKKyAgICAgICAgIChhZGoyLT5kczIuZ1dpbiA8IEFESjFfQUNDRVBURURfV0lORE9XKSB8fCAoYWRqMi0+ZHMzLmdXaW4gPCBBREoxX0FDQ0VQVEVEX1dJTkRPVykpICAgeworICAgICAgIGdvdG8gd2FybmluZzsKKyAgICAgfQorICB9CisgIHJldHVybiAwOworCit3YXJuaW5nOgorICBzZXJpYWxfcHV0cygiXG5XQVJOSU5HIC0gRERSIFRyYWluaW5nIHJlc3VsdHMgbWF5IGJlIE1hcmdpbmFsXG4iKTsKKyAgcmV0dXJuIDA7Cit9CisKKworLyogcmUtY2FsY3VsYXRlIHRoZSB3aW5fc3RhcnQgYW5kIHdpbl9lbmQgdmFsdWVzIGZvciB0aGUgY2hvb3NlbiBhZGoyICovCit2b2lkIHJlY2FsY3VsYXRlX2FkajFfd2luZG93KHU4IGRkcjE2Yml0X21vZGUsIGFkajJfdmFsX3QgKmFkajIsCisJCQkgICB1NjQgKmR3b3JkX2xpc3QsIHUzMiAqd29yZF9saXN0KQoreworICB1OCBkbGxfdmFsOworICB1OCBkczsKKyAgdTMyIHJlc3VsdDsKKyAgdTMyIGRxc19pbmRleDsKKyAgdTMyIGRkcl9hZGRyX29mZnNldCA9IDA7CisgIHU2NCBkcXNfdmFsdWU7CisgIAorICAvKiBSZXNldCB3aW5kb3cgcG9pbnRlcnMgKi8KKyAgYWRqMi0+ZHMwLndpbl9zdGFydCA9IGFkajItPmRzMC53aW5fZW5kID0gMDsKKyAgYWRqMi0+ZHMxLndpbl9zdGFydCA9IGFkajItPmRzMS53aW5fZW5kID0gMDsKKyAgYWRqMi0+ZHMyLndpbl9zdGFydCA9IGFkajItPmRzMi53aW5fZW5kID0gMDsKKyAgYWRqMi0+ZHMzLndpbl9zdGFydCA9IGFkajItPmRzMy53aW5fZW5kID0gMDsKKworICBhZGoyLT5kczAud2luID0gMDsKKyAgYWRqMi0+ZHMxLndpbiA9IDA7CisgIGFkajItPmRzMi53aW4gPSAwOworICBhZGoyLT5kczMud2luID0gMDsKKworICBhZGoyLT5kczAuZ1dpbiA9IDA7CisgIGFkajItPmRzMS5nV2luID0gMDsKKyAgYWRqMi0+ZHMyLmdXaW4gPSAwOworICBhZGoyLT5kczMuZ1dpbiA9IDA7CisKKyAgZm9yKGRzID0gMDsgZHMgPCA0OyBkcysrKSB7CisgICAgCisgICAgaWYgKChkcyA9PSAyKSAmJiAoZGRyMTZiaXRfbW9kZSkpCisgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRzID09IDApCisgICAgICAgZHFzX2luZGV4ID0gYWRqMi0+ZHMwLmlueDsKKyAgICBlbHNlIGlmIChkcyA9PSAxKQorICAgICAgIGRxc19pbmRleCA9IGFkajItPmRzMS5pbng7CisgICAgZWxzZSBpZiAoZHMgPT0gMikKKyAgICAgICBkcXNfaW5kZXggPSBhZGoyLT5kczIuaW54OworICAgIGVsc2UgaWYgKGRzID09IDMpCisgICAgICAgZHFzX2luZGV4ID0gYWRqMi0+ZHMzLmlueDsKKworICAgIC8qIENvbmZpZ3VyZSB0aGUgV1JMVkxfREVMQVlfWCB2YWx1ZXMgKi8KKyAgICBpZiAoZGRyMTZiaXRfbW9kZSkgeworICAgICAgZHFzX3ZhbHVlID0gX19sZTY0X3RvX2NwdSgoKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM1X0RBVEEpKSkgJiAweGZmZmZmZjAwMDBmZmZmZmZVTEw7CisgICAgICBkcXNfdmFsdWUgfD0gKHU2NCkoKCh1NjQpZHFzX2luZGV4IDw8IDI0KSB8ICgodTY0KWRxc19pbmRleCA8PCAzMikgKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBkcXNfdmFsdWUgPSBfX2xlNjRfdG9fY3B1KCgqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfMzVfREFUQSkpKSAmIDB4ZmYwMDAwMDAwMGZmZmZmZlVMTDsKKyAgICAgIGRxc192YWx1ZSB8PSAodTY0KSgoKHU2NClkcXNfaW5kZXggPDwgMjQpIHwgKCh1NjQpZHFzX2luZGV4IDw8IDMyKSB8ICgodTY0KWRxc19pbmRleCA8PCA0MCkgfCAoKHU2NClkcXNfaW5kZXggPDwgNDgpKTsKKyAgICB9CisgICAgYXJtX3dyaXRlNjQoZHFzX3ZhbHVlLCAodm9sYXRpbGUgdTY0ICopREVOQUxJX0NUTF8zNV9EQVRBKTsgLy9zaG91bGQgYmUgNjRiaXQgd3JpdGUKKworICAgIC8vc2V0IHN3IGxldmVsaW5nIG1vZGUKKyAgICAqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82N19WQUxfQ0ZHMSB8ICgxTEwgPDwgOCkpOworICAgIC8vc3cgbGV2ZWxpbmcgbG9hZAorICAgICoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82Nl9EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY2X1ZBTF9DRkcxIHwgKDFMTCA8PCA0OCkpOworICAgIC8vcmVzZXQgc3cgbGV2ZWxpbmcgbW9kZQorICAgICoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY3X1ZBTF9DRkcxKTsKKworICAgIC8qIExvb3BpbmcgdGhyb3VnaCBBREpfMSByYW5nZSAqLworICAgIGZvciAoZGxsX3ZhbCA9IEFESjFfTUlOX1ZBTDsgZGxsX3ZhbCA8PSBBREoxX01BWF9WQUw7IGRsbF92YWwrKykKKyAgICB7CisgICAgICAvKiBDb25maWd1cmUgZGxsIHdyaXRlIGNsaWNrIGFkai0xIHZhbHVlcyAqLworICAgICAgREVOQUxJX0RMTF9BREoxX0RTMCA9ICh1OClkbGxfdmFsOworICAgICAgREVOQUxJX0RMTF9BREoxX0RTMSA9ICh1OClkbGxfdmFsOworICAgICAgaWYgKCFkZHIxNmJpdF9tb2RlKSAgeworICAgICAgICBERU5BTElfRExMX0FESjFfRFMyID0gKHU4KWRsbF92YWw7CisgICAgICAgIERFTkFMSV9ETExfQURKMV9EUzMgPSAodTgpZGxsX3ZhbDsKKyAgICAgIH0KKworICAgICAgcmVzdWx0ID0gZG9fd3JfcmRfdHJhbnNhY3Rpb24oZGRyX2FkZHJfb2Zmc2V0LGR3b3JkX2xpc3Qsd29yZF9saXN0LCBkZHIxNmJpdF9tb2RlKTsKKyAgICAgIGRkcl9hZGRyX29mZnNldCA9IChkZHJfYWRkcl9vZmZzZXQgKyBBRERSX0pVTVBfU0laRSkgJiAoUEhZU19TRFJBTV9TSVpFIC0xKTsKKworICAgICAgaWYgKGRzID09IDApCisgICAgICAgIGFkajJfZHN4X2NhbGN1bGF0ZV93aW5kb3coKHJlc3VsdCAmIDB4MSksIGRsbF92YWwsIGFkajItPmRzMC5pbngsICZhZGoyLT5kczApOworICAgICAgZWxzZSBpZiAoZHMgPT0gMSkKKyAgICAgICAgYWRqMl9kc3hfY2FsY3VsYXRlX3dpbmRvdygocmVzdWx0ICYgMHgyKSwgZGxsX3ZhbCwgYWRqMi0+ZHMxLmlueCwgJmFkajItPmRzMSk7CisgICAgICBlbHNlIGlmIChkcyA9PSAyKQkKKyAgICAgICAgICBhZGoyX2RzeF9jYWxjdWxhdGVfd2luZG93KChyZXN1bHQgJiAweDQpLCBkbGxfdmFsLCBhZGoyLT5kczIuaW54LCAmYWRqMi0+ZHMyKTsKKyAgICAgIGVsc2UgaWYgKGRzID09IDMpCisgICAgICAgICAgYWRqMl9kc3hfY2FsY3VsYXRlX3dpbmRvdygocmVzdWx0ICYgMHg4KSwgZGxsX3ZhbCwgYWRqMi0+ZHMzLmlueCwgJmFkajItPmRzMyk7CisgICAgfSAvKiBmb3IgbG9vcCBmcm9tIGRsbCBtaW4gdG8gbWF4IChBREpfMSkgKi8gCisKKyAgfSAvKiBmb3IgZWFjaCBkcyAqLworCisgIHJldHVybjsKK30KKworLyogZmluZCB0aGUgYSBiaWdnZXIgZGxsIGNsayB3aW5kb3cgZm9yIHRoZSBnaXZlbiBkcXMgdmFsdWUgKi8KKy8qIGZpbmQgYSBkbGwgd3IgY2xrIHdpbmRvdyBmb3IgYSBnaXZlbiBkcXNfaW5kZXgsCisgKiB0aGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGdsb2JhbCBkbGwgYW5kIGRxcyB2YWx1ZXMsIGlmIGl0cyBmaW5kcyBhbnkgYmlnZ2VyIHdpbmRvdworICogdGhhbiBwcmV2aW91cyB3aW5kb3csIGFuZCB0aGVuIGZpbmFsbHkgaXQgY29uZmlndXJlcyB0aGUgaWRlbnRpZmllZCBkcXMgYW5kIGRsbCB2YWx1ZXMKKyAqIHRvIEREUiBjb250cm9sbGVyICAqLwordm9pZCBzdGFydF90cmFpbmluZyh2b2lkKQoreworICB1MzIgd29yZF9saXN0WzE2XSAgPSB7IDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MTIzNDU2NzgsIDB4OWFiY2RlZjAsCisJCQkgMHhmN2Y3MDIwMiwgMHhkZmRmMjAyMCwgMHg4MDQwN2ZiZiwgMHgwODA0MDIwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDgwODBmZGZkLCAweDA4MDhkZmRmLCAweGE1YTU1YTVhLCAweDVhNWFhNWE1LAorCQkJIDB4YWFhYTU1NTUsIDB4NTU1NWFhYWEsIDB4MDAwMGZmZmYsIDB4MDAwMGZmZmZ9OworCisgIHU2NCBkd29yZF9saXN0WzE2XSAgPSB7MHhmZmZmZmZmZjAwMDAwMDAwVUxMLCAweGZmZmZmZmZmMDAwMDAwMDBVTEwsIAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIzNDU2Nzg3NjU0MzIxMFVMTCwgMHgwMTIzNDU2Nzg5YWJjZGVmVUxMLAorCQkJIDB4ZjdmN2Y3ZjcwMjAyMDIwMlVMTCwgMHhkZmRmZGZkZjIwMjAyMDIwVUxMLAorIAkJICAgICAgICAgMHg4MDQwMjAxMDdmYmZkZmVmVUxMLCAweDA4MDQwMjAxMTAyMDQwODBVTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDgwODA4MGZkZmRmZGZkVUxMLCAweDA4MDgwODA4ZGZkZmRmZGZVTEwsCisJCQkgMHhhNWE1YTVhNTVhNWE1YTVhVUxMLCAweDVhNWE1YTVhYTVhNWE1YTVVTEwsCisJCQkgMHhhYWFhYWFhYTU1NTU1NTU1VUxMLCAweDU1NTU1NTU1YWFhYWFhYWFVTEwsCisJCQkgMHgwMDAwMDAwMGZmZmZmZmZmVUxMLCAweDAwMDAwMDAwZmZmZmZmZmZVTEwKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgdTggZGxsX3ZhbDsKKyAgdTggcmVzdWx0OworICB1OCBkcXNfaW5kZXg7CisgIHUzMiBkZHJfYWRkcl9vZmZzZXQgPSAwOworICB1NjQgZHFzX3ZhbHVlOworICBhZGoyX3ZhbF90IGFkajI7CisgIHUxNiBkZHIxNmJpdF9tb2RlID0gMDsKKworICB1bnNpZ25lZCBjaGFyIHNiW10gPSAiXG5ERFIgVHJhaW5pbmciOworICB1bnNpZ25lZCBjaGFyIHNkW10gPSAiRG9uZSI7CisgIHVuc2lnbmVkIGNoYXIgc2ZbXSA9ICJGYWlsIjsKKworI2lmZGVmIEREUl9UUkFJTklOR19NT0RFX0RFQlVHX1BSSU5UUworICB1bnNpZ25lZCBjaGFyIGFkajJfc1tdID0gIlxuQWRqMjoiOworICBjaGFyIHNbNV07CisgIHU4IGk7IAorI2VuZGlmCisKKyAgdW5zaWduZWQgaW50IGFkajJfZHN4WzI1Nl07CisKKyAgLyogSW5pdCBvZiBVQVJUIHdpbGwgYmUgZG9uZSBsYXRlciB0aHJvdWdoIG1haW4gaW5pdCBzZXF1ZW5jZSwKKyAgICogc28gZG9pbmcgaW5pdCB0d2ljZSBkb2VzIGl0IG1ha2UgYW55IGhhcm0/Pz8/LCBJIHRoaW5rIE5PICovCisgIHNlcmlhbF9pbml0KCk7CisKKyAgc2VyaWFsX3B1dHMoc2IpOworCisgIC8qIGNoZWNrIGZvciAxNmJpdCBtb2RlICovCisgIGlmKF9fbGU2NF90b19jcHUoKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzE4X0RBVEEpKSAmIDB4MDAwMDAwMDAwMTAwMDAwMFVMTCkKKyAgICBkZHIxNmJpdF9tb2RlID0gMTsKKworICBhZGoyLmRzMC5nV2luID0gMDsKKyAgYWRqMi5kczEuZ1dpbiA9IDA7CisgIGFkajIuZHMyLmdXaW4gPSAwOworICBhZGoyLmRzMy5nV2luID0gMDsKKworICAgIC8qIExvb3BpbmcgdGhyb3VnaCBBREpfMiByYW5nZSAqLworICAgIGZvcihkcXNfaW5kZXggPSBBREoyX01JTl9WQUw7IGRxc19pbmRleCA8PSBBREoyX01BWF9WQUw7IGRxc19pbmRleCsrKQorICAgIHsKKyNpZmRlZiAgRERSX1RSQUlOSU5HX01PREVfREVCVUdfUFJJTlRTCisgICAgICBzZXJpYWxfcHV0cyhhZGoyX3MpOworICAgICAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKGRxc19pbmRleCwgcykpOworICAgICAgc2VyaWFsX3B1dGMoJzonKTsKKyNlbmRpZgorICAgICAgc2VyaWFsX3B1dGMoJy4nKTsKKworICAgICAgLyogQ29uZmlndXJlIHRoZSBXUkxWTF9ERUxBWV9YIHZhbHVlcyAqLworICAgICAgaWYgKGRkcjE2Yml0X21vZGUpIHsKKyAgICAgICAgZHFzX3ZhbHVlID0gX19sZTY0X3RvX2NwdSgoKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM1X0RBVEEpKSkgJiAweGZmZmZmZjAwMDBmZmZmZmZVTEw7CisgICAgICAgIGRxc192YWx1ZSB8PSAodTY0KSgoKHU2NClkcXNfaW5kZXggPDwgMjQpIHwgKCh1NjQpZHFzX2luZGV4IDw8IDMyKSApOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGRxc192YWx1ZSA9IF9fbGU2NF90b19jcHUoKCoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF8zNV9EQVRBKSkpICYgMHhmZjAwMDAwMDAwZmZmZmZmVUxMOworICAgICAgICBkcXNfdmFsdWUgfD0gKHU2NCkoKCh1NjQpZHFzX2luZGV4IDw8IDI0KSB8ICgodTY0KWRxc19pbmRleCA8PCAzMikgfCAoKHU2NClkcXNfaW5kZXggPDwgNDApIHwgKCh1NjQpZHFzX2luZGV4IDw8IDQ4KSk7CisgICAgICB9CisgICAgICBhcm1fd3JpdGU2NChkcXNfdmFsdWUsICh2b2xhdGlsZSB1NjQgKilERU5BTElfQ1RMXzM1X0RBVEEpOyAvL3Nob3VsZCBiZSA2NGJpdCB3cml0ZQorCisgICAgICAvL3NldCBzdyBsZXZlbGluZyBtb2RlCisgICAgICAqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjdfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82N19WQUxfQ0ZHMSB8ICgxTEwgPDwgOCkpOworICAgICAgLy9zdyBsZXZlbGluZyBsb2FkCisgICAgICAqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMSB8ICgxTEwgPDwgNDgpKTsKKyAgICAgIC8vcmVzZXQgc3cgbGV2ZWxpbmcgbW9kZQorICAgICAgKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzY3X0RBVEEpID0gX19jcHVfdG9fbGU2NCgodTY0KURFTkFMSV9DVExfNjdfVkFMX0NGRzEpOworCisgICAgICAvKiBSZXNldCB3aW5kb3cgcG9pbnRlcnMgKi8KKyAgICAgIGFkajIuZHMwLndpbl9zdGFydCA9IGFkajIuZHMwLndpbl9lbmQgPSAwOworICAgICAgYWRqMi5kczEud2luX3N0YXJ0ID0gYWRqMi5kczEud2luX2VuZCA9IDA7CisgICAgICBhZGoyLmRzMi53aW5fc3RhcnQgPSBhZGoyLmRzMi53aW5fZW5kID0gMDsKKyAgICAgIGFkajIuZHMzLndpbl9zdGFydCA9IGFkajIuZHMzLndpbl9lbmQgPSAwOworICAgICAgYWRqMi5kczAud2luID0gMDsKKyAgICAgIGFkajIuZHMxLndpbiA9IDA7CisgICAgICBhZGoyLmRzMi53aW4gPSAwOworICAgICAgYWRqMi5kczMud2luID0gMDsKKworICAgICAgLyogTG9vcGluZyB0aHJvdWdoIEFESl8xIHJhbmdlICovCisgICAgICBmb3IgKGRsbF92YWwgPSBBREoxX01JTl9WQUw7IGRsbF92YWwgPD0gQURKMV9NQVhfVkFMOyBkbGxfdmFsKyspCisgICAgICB7CisgICAgICAgIC8qIENvbmZpZ3VyZSBkbGwgd3JpdGUgY2xpY2sgYWRqLTEgdmFsdWVzICovCisgICAgICAgIERFTkFMSV9ETExfQURKMV9EUzAgPSAodTgpZGxsX3ZhbDsKKyAgICAgICAgREVOQUxJX0RMTF9BREoxX0RTMSA9ICh1OClkbGxfdmFsOworCWlmICghZGRyMTZiaXRfbW9kZSkgIHsKKyAgICAgICAgICBERU5BTElfRExMX0FESjFfRFMyID0gKHU4KWRsbF92YWw7CisgICAgICAgICAgREVOQUxJX0RMTF9BREoxX0RTMyA9ICh1OClkbGxfdmFsOworCX0KKworICAgICAgICByZXN1bHQgPSBkb193cl9yZF90cmFuc2FjdGlvbihkZHJfYWRkcl9vZmZzZXQsZHdvcmRfbGlzdCx3b3JkX2xpc3QsIGRkcjE2Yml0X21vZGUpOworICAgICAgICBkZHJfYWRkcl9vZmZzZXQgPSAoZGRyX2FkZHJfb2Zmc2V0ICsgQUREUl9KVU1QX1NJWkUpICYgKFBIWVNfU0RSQU1fU0laRSAtMSk7CisKKwlhZGoyX2RzeF9jYWxjdWxhdGVfd2luZG93KChyZXN1bHQgJiAweDEpLCBkbGxfdmFsLCBkcXNfaW5kZXgsICZhZGoyLmRzMCk7CisJYWRqMl9kc3hfY2FsY3VsYXRlX3dpbmRvdygocmVzdWx0ICYgMHgyKSwgZGxsX3ZhbCwgZHFzX2luZGV4LCAmYWRqMi5kczEpOworCWlmICghZGRyMTZiaXRfbW9kZSkgIHsKKwkgIGFkajJfZHN4X2NhbGN1bGF0ZV93aW5kb3coKHJlc3VsdCAmIDB4NCksIGRsbF92YWwsIGRxc19pbmRleCwgJmFkajIuZHMyKTsKKwkgIGFkajJfZHN4X2NhbGN1bGF0ZV93aW5kb3coKHJlc3VsdCAmIDB4OCksIGRsbF92YWwsIGRxc19pbmRleCwgJmFkajIuZHMzKTsKKwl9CisgICAgICB9IC8qIGZvciBsb29wIGZyb20gZGxsIG1pbiB0byBtYXggKEFESl8xKSAqLyAKKworICAgICAgLyogc3RvcmUgdGhlIGFkajIgd2luIHZhbHVlcyAqLworICAgICAgaWYgKGRkcjE2Yml0X21vZGUpCisgICAgICAgIGFkajJfZHN4W2Rxc19pbmRleF0gPSAoYWRqMi5kczEud2luIDw8IDgpIHwgKGFkajIuZHMwLndpbik7CisgICAgICBlbHNlCisgICAgICAgIGFkajJfZHN4W2Rxc19pbmRleF0gPSAoYWRqMi5kczMud2luIDw8IDI0KSB8IChhZGoyLmRzMi53aW4gPDwgMTYpIHwgKGFkajIuZHMxLndpbiA8PCA4KSB8IChhZGoyLmRzMC53aW4pOworCisgICAgfSAvL0VuZCBvZiBBREpfMgorCisjaWZkZWYgRERSX1RSQUlOSU5HX01PREVfREVCVUdfUFJJTlRTCisgIHNlcmlhbF9wdXRjKCdcbicpOworICBzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEoYWRqMi5kczAuZ1dpbixzKSk7CisgIHNlcmlhbF9wdXRjKCctJyk7CisgIHNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMShhZGoyLmRzMC5pbngscykpOworICBzZXJpYWxfcHV0YygnXG4nKTsKKyAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKGFkajIuZHMxLmdXaW4scykpOworICBzZXJpYWxfcHV0YygnLScpOworICBzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEoYWRqMi5kczEuaW54LHMpKTsKKyAgc2VyaWFsX3B1dGMoJ1xuJyk7CisgIGlmICghZGRyMTZiaXRfbW9kZSkgIHsKKyAgICBzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEoYWRqMi5kczIuZ1dpbixzKSk7CisgICAgc2VyaWFsX3B1dGMoJy0nKTsKKyAgICBzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEoYWRqMi5kczIuaW54LHMpKTsKKyAgICBzZXJpYWxfcHV0YygnXG4nKTsKKyAgICBzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEoYWRqMi5kczMuZ1dpbixzKSk7CisgICAgc2VyaWFsX3B1dGMoJy0nKTsKKyAgICBzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEoYWRqMi5kczMuaW54LHMpKTsKKyAgICBzZXJpYWxfcHV0YygnLScpOworICB9CisKKyAgc2VyaWFsX3B1dGMoJ1xuJyk7CisgIC8qIGRzMCAqLworICBmb3IgKGk9QURKMl9NSU5fVkFMOyBpIDw9IEFESjJfTUFYX1ZBTDsgaSsrKSB7CisgIAlzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEoKGFkajJfZHN4W2ldICYgMHhmZikscykpOworICAJc2VyaWFsX3B1dGMoJywnKTsKKyAgfQorICBzZXJpYWxfcHV0YygnXG4nKTsKKworICAvKiBkczEgKi8KKyAgc2VyaWFsX3B1dGMoJ1xuJyk7CisgIGZvciAoaT1BREoyX01JTl9WQUw7IGkgPD0gQURKMl9NQVhfVkFMOyBpKyspIHsKKyAgCXNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMSgoYWRqMl9kc3hbaV0gJiAweGZmMDApID4+IDgscykpOworICAJc2VyaWFsX3B1dGMoJywnKTsKKyAgfQorICBzZXJpYWxfcHV0YygnXG4nKTsKKworICBpZiAoIWRkcjE2Yml0X21vZGUpICB7CisgICAgLyogZHMyICovCisgICAgc2VyaWFsX3B1dGMoJ1xuJyk7CisgICAgZm9yIChpPUFESjJfTUlOX1ZBTDsgaSA8PSBBREoyX01BWF9WQUw7IGkrKykgeworICAJc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKChhZGoyX2RzeFtpXSAmIDB4ZmYwMDAwKSA+PiAxNixzKSk7CisgIAlzZXJpYWxfcHV0YygnLCcpOworICAgIH0KKyAgICBzZXJpYWxfcHV0YygnXG4nKTsKKworICAgIC8qIGRzMyAqLworICAgIHNlcmlhbF9wdXRjKCdcbicpOworICAgIGZvciAoaT1BREoyX01JTl9WQUw7IGkgPD0gQURKMl9NQVhfVkFMOyBpKyspIHsKKyAgCXNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMSgoYWRqMl9kc3hbaV0gJiAweGZmMDAwMDAwKSA+PiAyNCxzKSk7CisgIAlzZXJpYWxfcHV0YygnLCcpOworICAgIH0KKyAgICBzZXJpYWxfcHV0YygnXG4nKTsKKyAgfQorI2VuZGlmCisKKyAgaWYgKGdldF9hZGoyX2FkanVzdGVkX3ZhbHVlKGFkajJfZHN4LCAmYWRqMiwgZGRyMTZiaXRfbW9kZSkgPCAwKQorICAgICBnb3RvIGVycm9yOworCisjaWZkZWYgRERSX1RSQUlOSU5HX01PREVfREVCVUdfUFJJTlRTCisgIHNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMShhZGoyLmRzMC5nV2luLHMpKTsKKyAgc2VyaWFsX3B1dGMoJy0nKTsKKyAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKGFkajIuZHMwLmlueCxzKSk7CisgIHNlcmlhbF9wdXRjKCdcbicpOworICBzZXJpYWxfcHV0cyhzaW1wbGVfaXRvYTEoYWRqMi5kczEuZ1dpbixzKSk7CisgIHNlcmlhbF9wdXRjKCctJyk7CisgIHNlcmlhbF9wdXRzKHNpbXBsZV9pdG9hMShhZGoyLmRzMS5pbngscykpOworICBzZXJpYWxfcHV0YygnXG4nKTsKKyAgaWYgKCFkZHIxNmJpdF9tb2RlKSB7CisgICAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKGFkajIuZHMyLmdXaW4scykpOworICAgIHNlcmlhbF9wdXRjKCctJyk7CisgICAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKGFkajIuZHMyLmlueCxzKSk7CisgICAgc2VyaWFsX3B1dGMoJ1xuJyk7CisgICAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKGFkajIuZHMzLmdXaW4scykpOworICAgIHNlcmlhbF9wdXRjKCctJyk7CisgICAgc2VyaWFsX3B1dHMoc2ltcGxlX2l0b2ExKGFkajIuZHMzLmlueCxzKSk7CisgICAgc2VyaWFsX3B1dGMoJy0nKTsKKyAgfQorI2VuZGlmCisKKyAgcmVjYWxjdWxhdGVfYWRqMV93aW5kb3coZGRyMTZiaXRfbW9kZSwgJmFkajIsIGR3b3JkX2xpc3QsIHdvcmRfbGlzdCk7CisKKyAgLyogQ29uZmlndXJlIHRoZSBXUkxWTF9ERUxBWV9YIHZhbHVlcyAoQURKXzIpICovCisgIGlmIChkZHIxNmJpdF9tb2RlKSB7CisgICAgZHFzX3ZhbHVlID0gX19sZTY0X3RvX2NwdSgoKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM1X0RBVEEpKSkgJiAweGZmZmZmZjAwMDBmZmZmZmZVTEw7CisgICAgZHFzX3ZhbHVlIHw9ICh1NjQpKCgodTY0KShhZGoyLmRzMC5pbngpIDw8IDI0KSB8IAorCQkgICAgICgodTY0KShhZGoyLmRzMS5pbngpIDw8IDMyKSk7CisgIH0KKyAgZWxzZSB7CisgICAgZHFzX3ZhbHVlID0gX19sZTY0X3RvX2NwdSgoKih2b2xhdGlsZSB1NjQqKShERU5BTElfQ1RMXzM1X0RBVEEpKSkgJiAweGZmMDAwMDAwMDBmZmZmZmZVTEw7CisgICAgZHFzX3ZhbHVlIHw9ICh1NjQpKCgodTY0KShhZGoyLmRzMC5pbngpIDw8IDI0KSB8IAorCQkgICAgICgodTY0KShhZGoyLmRzMS5pbngpIDw8IDMyKSB8IAorCQkgICAgICgodTY0KShhZGoyLmRzMi5pbngpIDw8IDQwKSB8IAorCQkgICAgICgodTY0KShhZGoyLmRzMy5pbngpIDw8IDQ4KSk7CisgIH0KKyAgYXJtX3dyaXRlNjQoZHFzX3ZhbHVlLCAodm9sYXRpbGUgdTY0ICopREVOQUxJX0NUTF8zNV9EQVRBKTsgLy9zaG91bGQgYmUgNjRiaXQgd3JpdGUKKworICAvL3NldCBzdyBsZXZlbGluZyBtb2RlCisgICoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY3X1ZBTF9DRkcxIHwgKDFMTCA8PCA4KSk7CisgIC8vc3cgbGV2ZWxpbmcgbG9hZAorICAqKHZvbGF0aWxlIHU2NCopKERFTkFMSV9DVExfNjZfREFUQSkgPSBfX2NwdV90b19sZTY0KCh1NjQpREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMSB8ICgxTEwgPDwgNDgpKTsKKyAgLy9yZXNldCBzdyBsZXZlbGluZyBtb2RlCisgICoodm9sYXRpbGUgdTY0KikoREVOQUxJX0NUTF82N19EQVRBKSA9IF9fY3B1X3RvX2xlNjQoKHU2NClERU5BTElfQ1RMXzY3X1ZBTF9DRkcxKTsKKworICAvKiBDb25maWd1cmUgd3JfY2xrIEFESl8xICovCisgIERFTkFMSV9ETExfQURKMV9EUzAgPSAodTgpKChhZGoyLmRzMC5nV2luX3N0YXJ0ICsgYWRqMi5kczAuZ1dpbl9lbmQpID4+IDEpOworICBERU5BTElfRExMX0FESjFfRFMxID0gKHU4KSgoYWRqMi5kczEuZ1dpbl9zdGFydCArIGFkajIuZHMxLmdXaW5fZW5kKSA+PiAxKTsKKyAgaWYgKCFkZHIxNmJpdF9tb2RlKSAgeworICAgIERFTkFMSV9ETExfQURKMV9EUzIgPSAodTgpKChhZGoyLmRzMi5nV2luX3N0YXJ0ICsgYWRqMi5kczIuZ1dpbl9lbmQpID4+IDEpOworICAgIERFTkFMSV9ETExfQURKMV9EUzMgPSAodTgpKChhZGoyLmRzMy5nV2luX3N0YXJ0ICsgYWRqMi5kczMuZ1dpbl9lbmQpID4+IDEpOworICB9CisKKyAgLyogdHJhaW5pbmcgdmVyaWZpY2F0aW9uIHVzaW5nIE1ETUEgdHJhbnNmZXJzICovCisgIGlmIChtZG1hX3Rlc3QoZHdvcmRfbGlzdCkpCisgIHsKKyAgICBnb3RvIGVycm9yOworICB9CisKKyAgc2VyaWFsX3B1dHMoc2QpOworICByZXR1cm47CisKK2Vycm9yOgorICBzZXJpYWxfcHV0cyhzZik7CisgIC8vd2F0Y2ggZG9nIHJlc2V0CisgIC8vKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilUSU1FUl9XRFRfSElHSF9CT1VORCA9IDE7CisgIC8vKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilUSU1FUl9XRFRfQ09OVFJPTCA9IDE7CisgIHdoaWxlKDEpOworCisgIHJldHVybjsKK30KKworc3RhdGljIHU4IGRvX3dyX3JkX3RyYW5zYWN0aW9uKHUzMiBkZHJfYWRkcmVzc19vZmZzZXQsIHU2NCAqZHdvcmRfbGlzdCwgdTMyICp3b3JkLCB1MTYgZGRyMTZiaXRfbW9kZSkKK3sKKyAgdTggajsKKyAgcmVnaXN0ZXIgaW50IHJlZ18wIF9fYXNtX18gKCJyMyIpOworICByZWdpc3RlciBpbnQgcmVnXzEgX19hc21fXyAoInI0Iik7CisgIHU2NCAqc3JjLCAqZHN0OworICB1MzIgcmVhZF92YWw7CisgIHU4IHJldF92YWwgPSAwOworCisgIGRkcl9hZGRyZXNzX29mZnNldCAmPSB+MHgzOworCisgICAgLyogRG8gNjRiaXQgd3IrcmQgKi8KKyAgICBkc3QgPSAodTY0ICopKEREUl9CQVNFQUREUitkZHJfYWRkcmVzc19vZmZzZXQpOworICAgIHNyYyA9IGR3b3JkX2xpc3Q7CisgICAgZm9yKGo9MDsgaiA8IDE2OyBqKyspCisgICAgeworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsZG1pYSAlMCwgeyUxLCUyfSIgXAorICAgICAgICAgIDogIityIiAoc3JjKSwgIj1yIiAocmVnXzApLCAiPXIiIChyZWdfMSkgXAorCSAgKTsKKworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdG1pYSAlMCwgeyUxLCUyfSIgXAorICAgICAgICAgIDogIityIiAoZHN0KSwgIj1yIiAocmVnXzApLCAiPXIiIChyZWdfMSkgXAorCSAgKTsKKworICAgICAgaWYgKCgqc3JjICYgMHgwMDAwMDBmZjAwMDAwMGZmTEwpICE9ICgqZHN0ICYgMHgwMDAwMDBmZjAwMDAwMGZmTEwpKQorICAgICAgeworICAgICAgICByZXRfdmFsIHw9IDE7CisgICAgICB9CisgICAgICBpZiAoKCpzcmMgJiAweDAwMDBmZjAwMDAwMGZmMDBMTCkgIT0gKCpkc3QgJiAweDAwMDBmZjAwMDAwMGZmMDBMTCkpCisgICAgICB7CisgICAgICAgIHJldF92YWwgfD0gMSA8PCAxOworICAgICAgfQorCisgICAgICBpZiAoIWRkcjE2Yml0X21vZGUpICB7CisgICAgICAgIGlmICgoKnNyYyAmIDB4MDBmZjAwMDAwMGZmMDAwMExMKSAhPSAoKmRzdCAmIDB4MDBmZjAwMDAwMGZmMDAwMExMKSkKKyAgICAgICAgeworICAgICAgICAgIHJldF92YWwgfD0gMSA8PCAyOworICAgICAgICB9CisgICAgICAgIGlmICgoKnNyYyAmIDB4ZmYwMDAwMDBmZjAwMDAwMExMKSAhPSAoKmRzdCAmIDB4ZmYwMDAwMDBmZjAwMDAwMExMKSkKKyAgICAgICAgeworICAgICAgICAgIHJldF92YWwgfD0gMSA8PCAzOworICAgICAgICB9CisgICAgICB9CisgICAgICAqZHN0ID0gX19jcHVfdG9fbGU2NCgwKTsgLy9jbGVhciBsb2NhdGlvbgorCisgICAgICBkc3QrKzsgCisgICAgICBzcmMrKzsKKyAgICB9CisKKyAgICAvKiBEbyAzMmJpdCB3cityZCAqLworICAgIGZvciAoaj0wOyBqIDwgMTY7IGorKykKKyAgICB7CisgICAgICAqKCgodm9sYXRpbGUgdTMyICopKEREUl9CQVNFQUREUitkZHJfYWRkcmVzc19vZmZzZXQpKSArIGopID0gX19jcHVfdG9fbGUzMigqd29yZCk7CisKKyAgICAgIHJlYWRfdmFsID0gX19sZTMyX3RvX2NwdSgqKCgodm9sYXRpbGUgdTMyICopKEREUl9CQVNFQUREUitkZHJfYWRkcmVzc19vZmZzZXQpKSArIGopKTsKKyAgICAgIGlmICgocmVhZF92YWwgJiAweDAwMDAwMEZGKSAhPSAoKndvcmQgJiAweDAwMDAwMGZmKSkKKyAgICAgIHsKKwkgICAgICByZXRfdmFsIHw9IDE7CisgICAgICB9CisgICAgICBpZiAoKHJlYWRfdmFsICYgMHgwMDAwZmYwMCkgIT0gKCp3b3JkICYgMHgwMDAwZmYwMCkpCisgICAgICB7CisJICAgICAgcmV0X3ZhbCB8PSAxIDw8IDE7CisgICAgICB9CisgICAgICBpZiAoIWRkcjE2Yml0X21vZGUpICB7CisgICAgICAgIGlmICgocmVhZF92YWwgJiAweDAwZmYwMDAwKSAhPSAoKndvcmQgJiAweDAwZmYwMDAwKSkKKyAgICAgICAgeworCSAgICAgIHJldF92YWwgfD0gMSA8PCAyOworICAgICAgICB9CisgICAgICAgIGlmICgocmVhZF92YWwgJiAweGZmMDAwMDAwKSAhPSAoKndvcmQgJiAweGZmMDAwMDAwKSkKKyAgICAgICAgeworCSAgICAgIHJldF92YWwgfD0gMSA8PCAzOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgICooKCh2b2xhdGlsZSB1MzIgKikoRERSX0JBU0VBRERSK2Rkcl9hZGRyZXNzX29mZnNldCkpICsgaikgPSBfX2NwdV90b19sZTMyKDApOyAvL2NsZWFyIGxvY2F0aW9uCisgICAgICB3b3JkKys7CisgICAgICBkZHJfYWRkcmVzc19vZmZzZXQgPSAoZGRyX2FkZHJlc3Nfb2Zmc2V0ICsgQUREUl9KVU1QX1NJWkUpICYgKFBIWVNfU0RSQU1fU0laRSAtMSk7CisgICAgfQorCisgICAgcmV0dXJuIHJldF92YWw7Cit9CisKKy8qCisgKiBPbiBzdWNjZXNzIHJldHVybnMgMCAKKyAqLyAKK3N0YXRpYyBpbnQgbWRtYV90ZXN0KHU2NCAqZHdvcmRfbGlzdCkKK3sKKyAgaW50IGlpLGo7CisgIHVuc2lnbmVkIGludCAqbWRtYV9kYXRhID0gKHUzMiAqKTB4ODEwMDAwMDA7CisgIHVuc2lnbmVkIGludCAqZGRyX2RzdDsKKyAgdW5zaWduZWQgaW50IGRhdGFfbGVuW10gPSB7MTAyNCwgMTAzMiwgMTA0OCwgMTA2NH07CisKKyAgLyogaW5pdCBtZG1hIGRhdGEsIGF0IHRoaXMgcG9pbnQgd2UgYXJlIHN1cmUgdGhhdCAzMmJpdCB3ci9yZCBvcGVyYXRpb25zIGFyZSBnb29kICovCisgIHUzMiAqZGF0YVB0ciA9ICh1MzIgKilkd29yZF9saXN0OworICBmb3Ioaj0wOyBqIDwgOTsgaisrKQorICB7CisgICAgZm9yKGlpPTA7IGlpIDwgMzI7IGlpKyspCisgICAgICBtZG1hX2RhdGFbMzIqaiArIGlpXSA9IF9fY3B1X3RvX2xlMzIoZGF0YVB0cltpaV0pOworICB9CisKKyAgZm9yKGo9MDsgaiA8IDQ7IGorKykKKyAgeworICAgICAgZGRyX2RzdCA9ICh1bnNpZ25lZCBpbnQgKikoKGogJSAyKSA/IE1UX0FERFIxX0RTVCA6IE1UX0FERFIyX0RTVCk7CisgICAgICBkYXRhUHRyID0gbWRtYV9kYXRhOworCisgICAgICBtZG1hX21lbWNweSgodm9pZCAqKW1kbWFfZGF0YSwgKHZvaWQgKilkZHJfZHN0LCBkYXRhX2xlbltqXSwgTlVMTCk7CisKKyAgICAgIGZvcihpaT0wOyBpaSA8IGRhdGFfbGVuW2pdID4+IDI7IGlpKyspCisgICAgICAgIGlmIChfX2xlMzJfdG9fY3B1KCpkYXRhUHRyKyspICE9IF9fbGUzMl90b19jcHUoKmRkcl9kc3QrKykpCisJICByZXR1cm4gMTsKKyAgfQorCisgIHJldHVybiAwOyAvL01ETUEgdGVzdCBwYXNzCit9CmRpZmYgLS1naXQgYS9jcHUvYXJtMTEzNi9jb21jZXJ0by90cmFpbmluZzEwMF9uZXcuYyBiL2NwdS9hcm0xMTM2L2NvbWNlcnRvL3RyYWluaW5nMTAwX25ldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDI3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtMTEzNi9jb21jZXJ0by90cmFpbmluZzEwMF9uZXcuYwpAQCAtMCwwICsxLDQyMyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKworI2RlZmluZSBTWl8xSwkweDQwMAorI2RlZmluZSBTWl8xMjhLICAoU1pfMUsgKiAxMjgpCisjZGVmaW5lIEFERFJfSlVNUF9TSVpFICBTWl8xMjhLCisjZGVmaW5lIE1JTl9WQUxJRF9XSU5ET1dfU0laRSA1CisKKyNkZWZpbmUgTk9fT0ZfUEFUVEVSTlMgICAxNiAKKworI2RlZmluZSBXUVNfU1RBUlQgIDB4MzAgCisjZGVmaW5lIFdRU19FTkQgICAgMHg2MAorI2RlZmluZSBET1NfU1RBUlQgIDB4NTUKKyNkZWZpbmUgRE9TX0VORCAgICAweDc1CisjZGVmaW5lIERERF9TVEFSVCAgMHg5CisjZGVmaW5lIERERF9FTkQgICAgMHgzMAorCitzdGF0aWMgaW50IGRvX3dyX3JkX3ZlcmlmeSh1NjQgKik7CisKK3UzMiBkb193cl9yZF90cmFuc2FjdGlvbih1MzIsIHUzMiosIHU2NCopOwordTMyIGRvX3dyX3JkX3RyYW5zYWN0aW9uNjQodTMyIGRkcl9hZGRyZXNzX29mZnNldCwgdTY0Kik7CisKK2V4dGVybiBpbnQgc2VyaWFsX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzZXJpYWxfcHV0cyhjb25zdCBjaGFyICpzKTsKK2V4dGVybiB2b2lkIHNlcmlhbF9wdXRjKGNvbnN0IGNoYXIgYyk7CisKKyNpZiAwCisvKiBiZWxvbmdzIGluIHV0aWxpdHkuYyAqLworc3RhdGljIGNoYXIgKnNpbXBsZV9pdG9hKHVuc2lnbmVkIGludCBpKQoreworICAgIC8qIDIxIGRpZ2l0cyBwbHVzIG51bGwgdGVybWluYXRvciwgZ29vZCBmb3IgNjQtYml0IG9yIHNtYWxsZXIgaW50cyAqLworICAgIHN0YXRpYyBjaGFyIGxvY2FsWzIyXTsKKyAgICBjaGFyICpwID0gJmxvY2FsWzIxXTsKKyAgICAqcC0tID0gJ1wwJzsKKyAgICBkbyB7CisgICAgICAgICpwLS0gPSAnMCcgKyBpICUgMTA7CisgICAgICAgIGkgLz0gMTA7CisgICAgfSB3aGlsZSAoaSA+IDApOworICAgIHJldHVybiBwICsgMTsKK30KKyNlbmRpZgorCisKK2V4dGVybiBpbnQgbWRtYV9tZW1jcHkodm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCAqY3JjKTsKKy8qCisgKiBPbiBzdWNjZXNzIHJldHVybnMgMCAKKyAqLyAKK3N0YXRpYyBpbnQgbWRtYV90ZXN0KHU2NCAqZHdvcmRfbGlzdCkKK3sKKyAgaW50IGlpLGo7CisgIHVuc2lnbmVkIGludCAqbWRtYV9kYXRhID0gKHUzMiAqKTB4ODEwMDAwMDA7CisgIHVuc2lnbmVkIGludCBkZHJfdG1wID0gMHg4MDAwMjAwMDsKKyAgdW5zaWduZWQgaW50IGRkcl9kc3Q7CisgIHVuc2lnbmVkIGludCBjcmMxLCBjcmMyOworICB1bnNpZ25lZCBzaG9ydCBkYXRhX2xlbltdID0gezEwMjQsIDEwMzIsIDEwNDgsIDEwNjR9OworCisgIC8qIGluaXQgbWRtYSBkYXRhLCBhdCB0aGlzIHBvaW50IHdlIGFyZSBzdXJlIHRoYXQgMzJiaXQgd3IvcmQgb3BlcmF0aW9ucyBhcmUgZ29vZCAqLworICB1MzIgKmRhdGFQdHIgPSAodTMyICopZHdvcmRfbGlzdDsKKyAgZm9yKGo9MDsgaiA8IDk7IGorKykKKyAgeworICAgIGZvcihpaT0wOyBpaSA8IDMyOyBpaSsrKQorICAgICAgbWRtYV9kYXRhWzMyKmogKyBpaV0gPSBfX2NwdV90b19sZTMyKGRhdGFQdHJbaWldKTsKKyAgfQorCisgIGZvcihpaT0wOyBpaSA8IDQ7IGlpKyspCisgIHsKKyAgICAgIGRkcl9kc3QgPSAoaWkgJSAyKSA/IDB4ODAwMGZmMDAgOiAweDgzMDBmZjAwOworCisgICAgICAvL0NSQyBmb3Igd3JpdGUKKyAgICAgIG1kbWFfbWVtY3B5KCh2b2lkICopbWRtYV9kYXRhLCAodm9pZCAqKWRkcl9kc3QsIGRhdGFfbGVuW2lpXSwgJmNyYzEpOworCisgICAgICAvL0NSQyBmb3IgcmVhZAorICAgICAgbWRtYV9tZW1jcHkoKHZvaWQgKilkZHJfZHN0LCAodm9pZCAqKWRkcl90bXAsIGRhdGFfbGVuW2lpXSwgJmNyYzIpOworCisgICAgICBpZihjcmMxICE9IGNyYzIpCisgICAgICAgcmV0dXJuIDE7CisgIH0KKworICByZXR1cm4gMDsgLy9NRE1BIHRlc3QgcGFzcworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZ1bmN0aW9uOiBzdGFydF90cmFpbmluZworICogRGVzY3JpcHRpb246CisgKiAgIERvIHRoZSBERFIgdHJhaW5pbmcgYW5kIGNvbmZpZ3VyZXMgdGhlIGJlc3QgdmFsdWVzLgorICogTm8gcmV0dXJuIHZhbHVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzdGFydF90cmFpbmluZyh2b2lkKQoreworCisgIHUzMiB3b3JkX2xpc3RbTk9fT0ZfUEFUVEVSTlNdICA9IHsgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHgxMjM0NTY3OCwgMHg5YWJjZGVmMCwKKwkJCSAweGY3ZjcwMjAyLCAweGRmZGYyMDIwLCAweDgwNDA3ZmJmLCAweDA4MDQwMjA0LAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA4MGZkZmQsIDB4MDgwOGRmZGYsIDB4YTVhNTVhNWEsIDB4NWE1YWE1YTUsCisJCQkgMHhhYWFhNTU1NSwgMHg1NTU1YWFhYSwgMHgwMDAwZmZmZiwgMHgwMDAwZmZmZn07CisKKworICB1NjQgZHdvcmRfbGlzdFtOT19PRl9QQVRURVJOU10gID0gezB4ZmZmZmZmZmYwMDAwMDAwMFVMTCwgMHhmZmZmZmZmZjAwMDAwMDAwVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDEyMzQ1Njc4NzY1NDMyMTBVTEwsIDB4MDEyMzQ1Njc4OWFiY2RlZlVMTCwKKwkJCSAweGY3ZjdmN2Y3MDIwMjAyMDJVTEwsIDB4ZGZkZmRmZGYyMDIwMjAyMFVMTCwKKyAJCSAgICAgICAgIDB4ODA0MDIwMTA3ZmJmZGZlZlVMTCwgMHgwODA0MDIwMTEwMjA0MDgwVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA4MDgwODBmZGZkZmRmZFVMTCwgMHgwODA4MDgwOGRmZGZkZmRmVUxMLAorCQkJIDB4YTVhNWE1YTU1YTVhNWE1YVVMTCwgMHg1YTVhNWE1YWE1YTVhNWE1VUxMLAorCQkJIDB4YWFhYWFhYWE1NTU1NTU1NVVMTCwgMHg1NTU1NTU1NWFhYWFhYWFhVUxMLAorCQkJIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCwgMHgwMDAwMDAwMGZmZmZmZmZmVUxMCisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgIHVuc2lnbmVkIGNoYXIgZ2JsX3dxc19Wc3RhcnQsIGdibF93cXNfVmVuZCwgY2ZnX3dxc19Wc3RhcnQsIGNmZ193cXNfVmVuZCwgd3FzX2lueCwgd3FzX1ZzdGFydDsKKyAgdW5zaWduZWQgY2hhciBnYmxfZG9zLGNmZ19kb3MsIGRvc19pbng7CisgIHVuc2lnbmVkIGNoYXIgZ2JsX2RkZF9Wc3RhcnQsZ2JsX2RkZF9WZW5kLCBkZGRfVnN0YXJ0LCBkZGRfaW54LGRkZF9tZWRpYW47CisgIGludCByZXN1bHQ7CisgIHUzMiBkZHJfYWRkcl9vZmZzZXQgPSAweGZmMDA7CisgIHVuc2lnbmVkIGNoYXIgc2JbXSA9ICJERFIgVHJhaW5pbmciOworICB1bnNpZ25lZCBjaGFyIHNmW10gPSAiRmFpbCI7CisgIHVuc2lnbmVkIGNoYXIgc2RbXSA9ICJEb25lIjsKKyAgdW5zaWduZWQgY2hhciBjaCA9ICcuJzsKKworICAvKiBJbml0IG9mIFVBUlQgd2lsbCBiZSBkb25lIGxhdGVyIHRocm91Z2ggbWFpbiBpbml0IHNlcXVlbmNlLAorICAgKiBzbyBkb2luZyBpbml0IHR3aWNlIGRvZXMgaXQgbWFrZSBhbnkgaGFybT8/Pz8sIEkgdGhpbmsgTk8gKi8KKyAgc2VyaWFsX2luaXQoKTsKKworICBzZXJpYWxfcHV0cyhzYik7CisKKyAgZ2JsX2RkZF9Wc3RhcnQgPSBnYmxfZGRkX1ZlbmQgPSBkZGRfVnN0YXJ0ID0gMDsKKyAgY2ZnX3dxc19Wc3RhcnQgPSBjZmdfd3FzX1ZlbmQgPSAwOworICBnYmxfZG9zID0gY2ZnX2RvcyA9IDA7CisKKyAgZm9yKGRkZF9pbnggPSBERERfU1RBUlQ7IGRkZF9pbnggPD0gREREX0VORDsgZGRkX2lueCsrKSAgCisgIHsKKyAgICBzZXJpYWxfcHV0YyhjaCk7CisKKyAgICBnYmxfd3FzX1ZlbmQgPSBnYmxfd3FzX1ZzdGFydCA9IDA7CisKKyAgICAvKiBDb25maWd1cmUgREREIHZhbHVlICovCisgICAgREVOQUxJX0RRU19ERUxBWTAgPSBkZGRfaW54OworICAgIERFTkFMSV9EUVNfREVMQVkxID0gZGRkX2lueDsKKyAgICBERU5BTElfRFFTX0RFTEFZMiA9IGRkZF9pbng7CisgICAgREVOQUxJX0RRU19ERUxBWTMgPSBkZGRfaW54OworCisgICAgZm9yIChkb3NfaW54ID0gRE9TX1NUQVJUOyBkb3NfaW54IDw9IERPU19FTkQ7IGRvc19pbngrKykgIAorICAgIHsKKyAgICAgIC8qIGNvbmZpZ3VyZSBET1MgdmFsdWUgKi8KKyAgICAgIERFTkFMSV9EUVNfT1VUICA9IGRvc19pbng7CisKKyAgICAgIHdxc19Wc3RhcnQgPSAwOworICAgICAgZm9yICh3cXNfaW54ID0gV1FTX1NUQVJUOyB3cXNfaW54IDw9IFdRU19FTkQ7IHdxc19pbngrKykgCisgICAgICB7CisgICAgICAgIC8qIENvbmZpZ3VyZSBXUVMgdmFsdWUgKi8KKwlERU5BTElfV1JfRFFTICAgPSB3cXNfaW54OworCisJcmVzdWx0ID0gIGRvX3dyX3JkX3RyYW5zYWN0aW9uKGRkcl9hZGRyX29mZnNldCx3b3JkX2xpc3QsIGR3b3JkX2xpc3QpOworCisgICAgICAgIGRkcl9hZGRyX29mZnNldCA9IChkZHJfYWRkcl9vZmZzZXQgKyBBRERSX0pVTVBfU0laRSkgJiAoUEhZU19TRFJBTV9TSVpFIC0gMSk7CisKKwlpZiAocmVzdWx0KSAKKyAgICAgICAgeyAgLy9yZXN1bHQgPT0gRkFJTCAKKwkgIC8qIGNoZWNrIGlzIHRoaXMgYSB3aW5kb3cgY2xvc2luZyAqLworCSAgaWYgKHdxc19Wc3RhcnQgPT0gMCkgIAorICAgICAgICAgIHsgLy9ObyB2YWxpZCB3aW5kb3cgc3RhcnRlZCAKKwkgICAgLy9EbyBub3RoaW5nCisJICB9CisJICBlbHNlICAKKyAgICAgICAgICB7ICAvL2VuZCBvZiBhIHZhbGlkIHdpbmRvdyAKKyAgICAgICAgICAgICBpZiAoKHdxc19pbnggLSB3cXNfVnN0YXJ0KSA+IChnYmxfd3FzX1ZlbmQgLSBnYmxfd3FzX1ZzdGFydCkpICAKKyAgICAgICAgICAgICB7CisJICAgICAgIGdibF93cXNfVnN0YXJ0ID0gd3FzX1ZzdGFydDsKKwkgICAgICAgZ2JsX3dxc19WZW5kICAgPSB3cXNfaW54OworCSAgICAgICBnYmxfZG9zID0gZG9zX2lueDsKKwkgICAgIH0KKwkgICAgIC8vZWxzZSAgRG8gbm90aGluZworICAgICAgICAgICAgIC8veworICAgICAgICAgICAgIC8vfQorCSAgICAgd3FzX1ZzdGFydCA9IDA7CisgICAgICAgICAgfQorCX0KKyAgICAgICAgZWxzZSAgCisgICAgICAgIHsgLy9yZXN1bHRzID09IFNVQ0NFU1MKKyAgICAgICAgICBpZiAod3FzX1ZzdGFydCA9PSAwKSAKKyAgICAgICAgICB7IC8vY2hlY2sgaXMgdGhpcyBhIGJlZ2luaW5nIG9mIHZhbGlkIHdpbmRvdworCSAgICB3cXNfVnN0YXJ0ID0gd3FzX2lueDsKKwkgIH0KKwkgIC8vZWxzZSAKKyAgICAgICAgICAvL3sgCisJICAgIC8vRG8gbm90aGluZworCSAgLy99CisJfQorICAgICAgfSAvL3dxc19sb29wIGVuZAorCisgICAgfSAvL2Rvc19sb29wIGVuZAorCisgICAgaWYgKChnYmxfd3FzX1ZlbmQgLSBnYmxfd3FzX1ZzdGFydCkgPiBNSU5fVkFMSURfV0lORE9XX1NJWkUpICAKKyAgICB7IC8vYWNjZXB0ZWQgd2luZG93IHJhbmdlIAorICAgICAgaWYgKGRkZF9Wc3RhcnQgPT0gMCkgCisgICAgICB7ICAvL3ZhbGlkIGRkZCB3aW5kb3cgbm90IHlldCBzdGFydGVkCisJZGRkX1ZzdGFydCA9IGRkZF9pbng7CisgICAgICB9CisgICAgICAvL2Vsc2UgCisgICAgICAvL3sKKyAgICAgICAgLy9kbyBub3RoaW5nCisgICAgICAvL30KKyAgICB9CisgICAgZWxzZSAKKyAgICB7CisgICAgICBpZiAoZGRkX1ZzdGFydCA9PSAwKSAKKyAgICAgIHsgLy9ubyBhY2NlcHRlZCB3aW5kb3cgcmFuZ2UgJiBubyBhY2NlcHRlZCB3aW5kb3cgc3RhcnRlZCB0aWxsIG5vdworCS8vRG8gbm90aGluZworICAgICAgfQorICAgICAgZWxzZSAKKyAgICAgIHsKKyAgICAgICAgaWYgKChnYmxfZGRkX1ZlbmQgLSBnYmxfZGRkX1ZzdGFydCkgPCAoZGRkX2lueCAtIGRkZF9Wc3RhcnQpKSAKKyAgICAgICAgeworCSAgZ2JsX2RkZF9WZW5kID0gZGRkX2lueDsKKwkgIGdibF9kZGRfVnN0YXJ0ID0gZGRkX1ZzdGFydDsKKwl9CisJLy9lbHNlIAorICAgICAgICAvL3sKKwkgIC8vRG8gbm90aGluZworCS8vfQorCWRkZF9Wc3RhcnQgPSAwOworICAgICAgfQorICAgIH0KKworICAgIGlmICggKGdibF93cXNfVmVuZCAtIGdibF93cXNfVnN0YXJ0KSA+IChjZmdfd3FzX1ZlbmQgLSBjZmdfd3FzX1ZzdGFydCkpIAorICAgIHsKKyAgICAgIGNmZ193cXNfVmVuZCA9IGdibF93cXNfVmVuZDsKKyAgICAgIGNmZ193cXNfVnN0YXJ0ID0gZ2JsX3dxc19Wc3RhcnQ7CisgICAgICBjZmdfZG9zICAgICAgPSBnYmxfZG9zOworICAgIH0KKyAgfSAvL2RkZF9sb29wIGVuZAorCisKKyAgaWYgKChjZmdfd3FzX1ZlbmQgLSBjZmdfd3FzX1ZzdGFydCkgPCBNSU5fVkFMSURfV0lORE9XX1NJWkUpCisgIHsKKyAgICBzZXJpYWxfcHV0cyhzZik7CisgICAgd2hpbGUoMSk7CisgIH0KKworICBkZGRfbWVkaWFuID0gKGdibF9kZGRfVmVuZCArIGdibF9kZGRfVnN0YXJ0KSA+PiAxOworICBERU5BTElfRFFTX0RFTEFZMCA9IGRkZF9tZWRpYW47CisgIERFTkFMSV9EUVNfREVMQVkxID0gZGRkX21lZGlhbjsKKyAgREVOQUxJX0RRU19ERUxBWTIgPSBkZGRfbWVkaWFuOworICBERU5BTElfRFFTX0RFTEFZMyA9IGRkZF9tZWRpYW47CisKKyAgREVOQUxJX0RRU19PVVQgID0gY2ZnX2RvczsKKyAgREVOQUxJX1dSX0RRUyAgID0gKGNmZ193cXNfVmVuZCArIGNmZ193cXNfVnN0YXJ0KSA+PiAxOworCisgIC8qIERvIHZlcmlmeSB0aGUgdHJhaW5pbmcgdmFsdWVzICovCisgIC8qIDhCaXQsMTZiaXQsMzJiaXQsNjRiaXQgd3IvcmQgKi8KKyAgcmVzdWx0ID0gZG9fd3JfcmRfdmVyaWZ5KGR3b3JkX2xpc3QpOworCisgIC8qIE1ETUEgd3IvcmQgKi8gCisgIGlmICghcmVzdWx0KQorICAgIHJlc3VsdCA9IG1kbWFfdGVzdChkd29yZF9saXN0KTsKKworICBpZiAocmVzdWx0KQorICB7CisgICAgc2VyaWFsX3B1dHMoc2YpOworICAgIHdoaWxlKDEpOworICB9CisKKyAgc2VyaWFsX3B1dHMoc2QpOworICByZXR1cm47Cit9CisKK3UzMiBkb193cl9yZF90cmFuc2FjdGlvbih1MzIgZGRyX2FkZHJfb2Zmc2V0LCB1MzIgKndvcmQsIHU2NCAqZHdvcmRfbGlzdCkKK3sKKyAgICB1MzIgaTsKKworICAgIC8qIERvIDY0Yml0IHdyK3JkICovCisgICAgaWYgKGRvX3dyX3JkX3RyYW5zYWN0aW9uNjQoZGRyX2FkZHJfb2Zmc2V0LGR3b3JkX2xpc3QpKQorCSAgICByZXR1cm4gMTsgLy9mYWlsdXJlCisKKyAgICAvKiBEbyAzMmJpdCB3cityZCAqLworICAgIGZvciAoaT0wOyBpIDwgTk9fT0ZfUEFUVEVSTlM7IGkrKykKKyAgICB7CisgICAgICAqKCh2b2xhdGlsZSB1MzIgKikoRERSX0JBU0VBRERSICsgZGRyX2FkZHJfb2Zmc2V0KSArIGkpID0gX19jcHVfdG9fbGUzMigqd29yZCk7CisKKyAgICAgIGlmIChfX2xlMzJfdG9fY3B1KCooKHZvbGF0aWxlIHUzMiAqKShERFJfQkFTRUFERFIgKyBkZHJfYWRkcl9vZmZzZXQpICsgaSkpICE9ICp3b3JkKQorICAgICAgeworICAgICAgICAvL3JlYXNzaWduIHRvIHplcm8gCisgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKShERFJfQkFTRUFERFIgKyBkZHJfYWRkcl9vZmZzZXQpICsgaSkgPSBfX2NwdV90b19sZTMyKDApOworCisJcmV0dXJuIDE7IC8vZmFpbHVyZQorICAgICAgfQorICAgICAgd29yZCsrOworCisgICAgICAvL3JlYXNzaWduIHRvIHplcm8gCisgICAgICAqKCh2b2xhdGlsZSB1MzIgKikoRERSX0JBU0VBRERSICsgZGRyX2FkZHJfb2Zmc2V0KSArIGkpID0gX19jcHVfdG9fbGUzMigwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsgLy9zdWNjZXNzCit9CisKK3UzMiBkb193cl9yZF90cmFuc2FjdGlvbjY0KHUzMiBkZHJfYWRkcmVzc19vZmZzZXQsIHU2NCAqZHdvcmRfbGlzdCkKK3sKKyAgdTggajsKKyAgcmVnaXN0ZXIgaW50IHJlZ18wIF9fYXNtX18gKCJyMyIpOworICByZWdpc3RlciBpbnQgcmVnXzEgX19hc21fXyAoInI0Iik7CisgIHU2NCAqc3JjLCpkc3QsKmR2YWw7CisgIHU2NCBkd29yZF9zdG9yZVtOT19PRl9QQVRURVJOU107CisKKyAgLyogNjRiaXQgYnVyc3Qgd3JpdGUgKi8KKyAgZHN0ID0gKCh2b2xhdGlsZSB1NjQgKikgKEREUl9CQVNFQUREUiArIGRkcl9hZGRyZXNzX29mZnNldCkpOworICBzcmMgPSBkd29yZF9saXN0OworICBmb3Ioaj0wOyBqIDwgTk9fT0ZfUEFUVEVSTlM7IGorKykKKyAgeworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibGRtaWEgJTAsIHslMSwlMn0iIFwKKyAgICAgICAgICA6ICIrciIgKHNyYyksICI9ciIgKHJlZ18wKSwgIj1yIiAocmVnXzEpIFwKKwkgICk7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bWlhICUwLCB7JTEsJTJ9IiBcCisgICAgICAgICAgOiAiK3IiIChkc3QpLCAiPXIiIChyZWdfMCksICI9ciIgKHJlZ18xKSBcCisJICApOworCisgICAgaWYgKCpzcmMgIT0gKCpkc3QpKQorICAgICAgcmV0dXJuIDB4MTsKKworICAgIHNyYysrOworICAgIGRzdCsrOworICB9CisKKyAgLyogNjRiaXQgYnVyc3QgcmVhZCAxNiB0aW1lcyAqLworICBzcmMgPSAoKHU2NCAqKShERFJfQkFTRUFERFIgKyBkZHJfYWRkcmVzc19vZmZzZXQpKTsKKyAgZHN0ID0gZHdvcmRfc3RvcmU7CisgIGR2YWwgPSBkd29yZF9saXN0OworICBmb3Ioaj0wOyBqIDwgTk9fT0ZfUEFUVEVSTlM7IGorKykKKyAgeworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibGRtaWEgJTAsIHslMSwlMn0iIFwKKyAgICAgICAgICA6ICIrciIgKHNyYyksICI9ciIgKHJlZ18wKSwgIj1yIiAocmVnXzEpIFwKKwkgICk7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bWlhICUwLCB7JTEsJTJ9IiBcCisgICAgICAgICAgOiAiK3IiIChkc3QpLCAiPXIiIChyZWdfMCksICI9ciIgKHJlZ18xKSBcCisJICApOworCisgICAgaWYgKCpkdmFsICE9ICpkc3QpCisgICAgeworICAgICAgLy9yZWFzc2lnbiB0byB6ZXJvCisgICAgICAqc3JjID0gX19jcHVfdG9fbGU2NCgweDBVTEwpOworCisgICAgICByZXR1cm4gMHgxOworICAgIH0KKworICAgIC8vcmVhc3NpZ24gdG8gemVybworICAgICpzcmMgPSBfX2NwdV90b19sZTY0KDB4MFVMTCk7CisKKyAgICBzcmMrKzsKKyAgICBkc3QrKzsKKyAgICBkdmFsKys7CisgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb193cl9yZF92ZXJpZnkodTY0ICpkd29yZF9saXN0KQoreworICB1OCBpOworICB1MzIgZGRyX2FkZHJfb2Zmc2V0ID0gMHhmZmZmMDA7CisgIHU4ICpsaXN0OCA9ICh1OCAqKWR3b3JkX2xpc3Q7CisgIHUxNiAqbGlzdDE2ID0gKHUxNiAqKWR3b3JkX2xpc3Q7CisgIHUzMiAqbGlzdDMyID0gKHUzMiAqKWR3b3JkX2xpc3Q7CisgIHU2NCAqc3JjX2FyYW0sICpkc3RfZGRyOworICByZWdpc3RlciBpbnQgcmVnXzAgX19hc21fXyAoInIzIik7CisgIHJlZ2lzdGVyIGludCByZWdfMSBfX2FzbV9fICgicjQiKTsKKworICBzcmNfYXJhbSA9IGR3b3JkX2xpc3Q7CisgIGRzdF9kZHIgPSAoKHU2NCAqKShERFJfQkFTRUFERFIgKyBkZHJfYWRkcl9vZmZzZXQpKTsKKyAgZm9yIChpPTA7IGkgPCBOT19PRl9QQVRURVJOUzsgaSsrKQorICB7CisgICAgLy84Yml0CisgICAgKigodm9sYXRpbGUgdTggKikoRERSX0JBU0VBRERSICsgZGRyX2FkZHJfb2Zmc2V0KSArIGkpID0gKihsaXN0OCtpKTsKKyAgICBpZiAoKigodm9sYXRpbGUgdTggKikoRERSX0JBU0VBRERSICsgZGRyX2FkZHJfb2Zmc2V0KSArIGkpICE9ICoobGlzdDgraSkpCisgICAgICByZXR1cm4gMHgxOworCisgICAgLy8xNmJpdAorICAgICooKHZvbGF0aWxlIHUxNiAqKShERFJfQkFTRUFERFIgKyBkZHJfYWRkcl9vZmZzZXQpICsgaSkgPSBfX2NwdV90b19sZTE2KCoobGlzdDE2K2kpKTsKKyAgICBpZiAoX19sZTE2X3RvX2NwdSgqKCh2b2xhdGlsZSB1MTYgKikoRERSX0JBU0VBRERSICsgZGRyX2FkZHJfb2Zmc2V0KSArIGkpKSAhPSAqKGxpc3QxNitpKSkKKyAgICAgIHJldHVybiAweDE7CisKKyAgICAvLzMyYml0CisgICAgKigodm9sYXRpbGUgdTMyICopKEREUl9CQVNFQUREUiArIGRkcl9hZGRyX29mZnNldCkgKyBpKSA9IF9fY3B1X3RvX2xlMzIoKihsaXN0MzIraSkpOworICAgIGlmIChfX2xlMzJfdG9fY3B1KCooKHZvbGF0aWxlIHUzMiAqKShERFJfQkFTRUFERFIgKyBkZHJfYWRkcl9vZmZzZXQpICsgaSkpICE9ICoobGlzdDMyK2kpKQorICAgICAgcmV0dXJuIDB4MTsKKworICAgIC8vNjRiaXQKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkbWlhICUwLCB7JTEsJTJ9IiBcCisgICAgICAgICAgOiAiK3IiIChzcmNfYXJhbSksICI9ciIgKHJlZ18wKSwgIj1yIiAocmVnXzEpIFwKKwkgICk7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0bWlhICUwLCB7JTEsJTJ9IiBcCisgICAgICAgICAgOiAiK3IiIChkc3RfZGRyKSwgIj1yIiAocmVnXzApLCAiPXIiIChyZWdfMSkgXAorCSAgKTsKKworICAgIGlmICgqc3JjX2FyYW0gIT0gKCpkc3RfZGRyKSkKKyAgICAgIHJldHVybiAweDE7CisKKyAgICBkc3RfZGRyKys7CisgICAgc3JjX2FyYW0rKzsKKworICAgIGRkcl9hZGRyX29mZnNldCA9IChkZHJfYWRkcl9vZmZzZXQgKyBBRERSX0pVTVBfU0laRSkgJiAoUEhZU19TRFJBTV9TSVpFIC0gMSk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTM2L2NvbmZpZy5tayBiL2NwdS9hcm0xMTM2L2NvbmZpZy5tawppbmRleCBlMzllNzc0Li5lYmRmNzBiIDEwMDY0NAotLS0gYS9jcHUvYXJtMTEzNi9jb25maWcubWsKKysrIGIvY3B1L2FybTExMzYvY29uZmlnLm1rCkBAIC0yMCwxMSArMjAsMjYgQEAKICMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICMgTUEgMDIxMTEtMTMwNyBVU0EKICMKLVBMQVRGT1JNX1JFTEZMQUdTICs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nICAtZm5vLWNvbW1vbiAtZmZpeGVkLXI4IFwKLQktbXNvZnQtZmxvYXQKKworaW5jbHVkZSAkKFRPUERJUikvaW5jbHVkZS9jb25maWcubWsKKworUExBVEZPUk1fUkVMRkxBR1MgKz0gLWZuby1zdHJpY3QtYWxpYXNpbmcgIC1mbm8tY29tbW9uIC1mZml4ZWQtcjggCisKK2lmZGVmIEJFOF9NT0RFCitQTEFURk9STV9SRUxGTEFHUyArPSAtbWJpZy1lbmRpYW4gLU80IC1EQkU4X01PREUKK2Vsc2UKK1BMQVRGT1JNX1JFTEZMQUdTICs9IC1tc29mdC1mbG9hdAorZW5kaWYKIAogIyBNYWtlIEFSTXY1IHRvIGFsbG93IG1vcmUgY29tcGlsZXJzIHRvIHdvcmssIGV2ZW4gdGhvdWdoIGl0cyB2Ni4KLVBMQVRGT1JNX0NQUEZMQUdTICs9IC1tYXJjaD1hcm12NQorI1BMQVRGT1JNX0NQUEZMQUdTICs9IC1tYXJjaD1hcm12NQorUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcmNoPWFybXY2aiAKKworaWZkZWYgQkU4X01PREUKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1tYmlnLWVuZGlhbgorUExBVEZPUk1fTERGTEFHUyArPSAtLWJlOCAtRUIKK2VuZGlmCisKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIwogIyBTdXBwbHkgb3B0aW9ucyBhY2NvcmRpbmcgdG8gY29tcGlsZXIgdmVyc2lvbgpkaWZmIC0tZ2l0IGEvY3B1L2FybTExMzYvY3B1LmMgYi9jcHUvYXJtMTEzNi9jcHUuYwppbmRleCBmYTc4ZWFhLi40MzhjNjRjIDEwMDY0NAotLS0gYS9jcHUvYXJtMTEzNi9jcHUuYworKysgYi9jcHUvYXJtMTEzNi9jcHUuYwpAQCAtMzMsNyArMzMsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2lmICFkZWZpbmVkKENPTkZJR19JTlRFR1JBVE9SKSAmJiAhIGRlZmluZWQoQ09ORklHX0FSQ0hfQ0lOVEVHUkFUT1IpCisjaWYgIWRlZmluZWQoQ09ORklHX0lOVEVHUkFUT1IpICYmICEgZGVmaW5lZChDT05GSUdfQVJDSF9DSU5URUdSQVRPUikgJiYgIWRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzkwMCkgJiYgIWRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMCkgJiYgIWRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMDApCiAjaW5jbHVkZSA8YXNtL2FyY2gvb21hcDI0MjAuaD4KICNlbmRpZgogCkBAIC0xNjMsMyArMTYzLDI2IEBACiB7CiAJcmV0dXJuKHJlYWRfcDE1X2MxICgpICYgQzFfSUMpICE9IDA7CiB9CisKK3ZvaWQgZGNhY2hlX2VuYWJsZSAodm9pZCkKK3sKKwl1bG9uZyByZWc7CisKKwlyZWcgPSByZWFkX3AxNV9jMSAoKTsJLyogZ2V0IGNvbnRyb2wgcmVnLiAqLworCWNwX2RlbGF5ICgpOworCXdyaXRlX3AxNV9jMSAocmVnIHwgQzFfREMpOworfQorCit2b2lkIGRjYWNoZV9kaXNhYmxlICh2b2lkKQoreworCXVsb25nIHJlZzsKKworCXJlZyA9IHJlYWRfcDE1X2MxICgpOworCWNwX2RlbGF5ICgpOworCXdyaXRlX3AxNV9jMSAocmVnICYgfkMxX0RDKTsKK30KKworaW50IGRjYWNoZV9zdGF0dXMgKHZvaWQpCit7CisJcmV0dXJuKHJlYWRfcDE1X2MxICgpICYgQzFfREMpICE9IDA7Cit9CmRpZmYgLS1naXQgYS9jcHUvYXJtMTEzNi9pbnRlcnJ1cHRzLmMgYi9jcHUvYXJtMTEzNi9pbnRlcnJ1cHRzLmMKaW5kZXggMWRjMzZkMC4uYTliZGRhNyAxMDA2NDQKLS0tIGEvY3B1L2FybTExMzYvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9hcm0xMTM2L2ludGVycnVwdHMuYwpAQCAtMzMsMTYgKzMzLDE3IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYml0cy5oPgogCi0jaWYgIWRlZmluZWQoQ09ORklHX0lOVEVHUkFUT1IpICYmICEgZGVmaW5lZChDT05GSUdfQVJDSF9DSU5URUdSQVRPUikKKyNpZiAhZGVmaW5lZChDT05GSUdfSU5URUdSQVRPUikgJiYgISBkZWZpbmVkKENPTkZJR19BUkNIX0NJTlRFR1JBVE9SKSAmJiAhIGRlZmluZWQgKENPTkZJR19DT01DRVJUT185MDApICYmICEgZGVmaW5lZCAoQ09ORklHX0NPTUNFUlRPXzEwMCkgJiYgISBkZWZpbmVkIChDT05GSUdfQ09NQ0VSVE9fMTAwMCkKICMgaW5jbHVkZSA8YXNtL2FyY2gvb21hcDI0MjAuaD4KICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL3Byb2MtYXJtdi9wdHJhY2UuaD4KLQorI2lmICAhZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fOTAwKSAmJiAhIGRlZmluZWQgKENPTkZJR19DT01DRVJUT18xMDApICYmICEgZGVmaW5lZCAoQ09ORklHX0NPTUNFUlRPXzEwMDApCiAjZGVmaW5lIFRJTUVSX0xPQURfVkFMIDAKIAogLyogbWFjcm8gdG8gcmVhZCB0aGUgMzIgYml0IHRpbWVyICovCiAjZGVmaW5lIFJFQURfVElNRVIgKCoodm9sYXRpbGUgdWxvbmcgKikoQ0ZHX1RJTUVSQkFTRStUQ1JSKSkKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1VTRV9JUlEKIC8qIGVuYWJsZSBJUlEgaW50ZXJydXB0cyAqLwpAQCAtMTc2LDcgKzE3Nyw3IEBACiAJYmFkX21vZGUgKCk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JTlRFR1JBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0NJTlRFR1JBVE9SKQorI2lmIChkZWZpbmVkKENPTkZJR19JTlRFR1JBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0NJTlRFR1JBVE9SKSkgfHwgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fOTAwKSAgfHwgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKSB8fCBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDAwKQogLyogVXNlIHRoZSBJbnRlZ3JhdG9yQ1AgZnVuY3Rpb24gZnJvbSBib2FyZC9pbnRlZ3JhdG9yY3AuYyAqLwogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvY3B1L2FybTExMzYvc3RhcnQuUyBiL2NwdS9hcm0xMTM2L3N0YXJ0LlMKaW5kZXggMTdjN2E4My4uYjg2OWFmNiAxMDA2NDQKLS0tIGEvY3B1L2FybTExMzYvc3RhcnQuUworKysgYi9jcHUvYXJtMTEzNi9zdGFydC5TCkBAIC0zMCw5ICszMCwyMSBAQAogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgotI2lmICFkZWZpbmVkKENPTkZJR19JTlRFR1JBVE9SKSAmJiAhIGRlZmluZWQoQ09ORklHX0FSQ0hfQ0lOVEVHUkFUT1IpCisjaWYgIWRlZmluZWQoQ09ORklHX0lOVEVHUkFUT1IpICYmICEgZGVmaW5lZChDT05GSUdfQVJDSF9DSU5URUdSQVRPUikgJiYgISBkZWZpbmVkIChDT05GSUdfQ09NQ0VSVE9fOTAwKSAmJiAhZGVmaW5lZCAoQ09ORklHX0NPTUNFUlRPXzEwMCkgJiYgIWRlZmluZWQgKENPTkZJR19DT01DRVJUT18xMDAwKQogI2luY2x1ZGUgPGFzbS9hcmNoL29tYXAyNDIwLmg+CisjZWxpZiAgZGVmaW5lZCAoQ09ORklHX0NPTUNFUlRPXzkwMCkgIHx8IGRlZmluZWQgKENPTkZJR19DT01DRVJUT18xMDApIHx8IGRlZmluZWQgKENPTkZJR19DT01DRVJUT18xMDApIHx8IGRlZmluZWQgKENPTkZJR19DT01DRVJUT18xMDAwKQorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2VuZGlmCisKKwkvKiBSZXZlcnNlIGVuZGlhbiovCisJLm1hY3JvIFJFVl9FTkRJQU4gZHN0LCBzcmMKKyNpZiBkZWZpbmVkKEJFOF9NT0RFKQorCXJldiAgXGRzdCwgXHNyYworI2Vsc2UKKwlub3AKKyNlbmRpZgorCS5lbmRtCisKIC5nbG9ibCBfc3RhcnQKIF9zdGFydDogYglyZXNldAogCWxkcglwYywgX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgpAQCAtMTAzLDYgKzExNSw2MCBAQAogICovCiAKIHJlc2V0OgorI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMCkKKyNpZiBkZWZpbmVkKEJFOF9NT0RFKQorCXNldGVuZAliZQorI2VuZGlmCisvKgorCXJlbW92ZSBsb2NrCisqLworCWxkcglyMiwgPUdQSU9fTE9DS19SRUcKKwlsZHIJcjMsID1HUElPX0lPQ1RSTF9WQUwKKwlzdHIJcjMsIFtyMl0KKwlsZHIJcjIsID1HUElPX0lPQ1RSTF9SRUcKKwlsZHIJcjMsIFtyMl0KKyNpZiBkZWZpbmVkKEJFOF9NT0RFKQorCVJFVl9FTkRJQU4JcjMsIHIzCisjZW5kaWYKKy8qCisJZW5hYmxlIGFkZHJlc3MgbGluZSBBMTUtQTIxCisqLworCW9ycglyMywgcjMsICMweEYKKyNpZiBkZWZpbmVkKEJFOF9NT0RFKQorCVJFVl9FTkRJQU4JcjMsIHIzCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwMCkKKyNpZiBkZWZpbmVkKEJFOF9NT0RFKQorCXNldGVuZAliZQorI2VuZGlmCisvKgorCWVuYWJsZSBhZGRyZXNzIGxpbmUgQTEzLUEyMQorKi8KKwlsZHIJcjIsID1HUElPX1BJTl9TRUxFQ1RfUkVHCisJbGRyCXIzLCBbcjJdCisjaWYgZGVmaW5lZChCRThfTU9ERSkKKwlSRVZfRU5ESUFOCXIzLCByMworI2VuZGlmCisgICAgICAgIGJpYwlyMywgcjMsICMweDQwICAgICAgICAgICBAIGNsZWFyIGJpdHMgNgorICAgICAgICBiaWMJcjMsIHIzLCAjMHg0RjAwICAgICAgICAgQCBjbGVhciBiaXRzIDE0LDExOjgKKyAgICAgICAgYmljCXIzLCByMywgIzB4RTAwMDAwMDAgICAgIEAgY2xlYXIgYml0cyAzMToyOQorI2lmIGRlZmluZWQoQkU4X01PREUpCisJUkVWX0VORElBTglyMywgcjMKKyNlbmRpZgorI2VuZGlmCisJc3RyCXIzLCBbcjJdCisKKyNpZm5kZWYgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKyNpZm5kZWYgQ09ORklHX1VCT09UX0xPQURFRF9JTl9BUkFNCisJLyogV2Ugd2VyZSBydW5uaW5nIGZyb20gb2Zmc2V0IDB4MCwgbm93IGp1bXAgdG8gQm9vdCBGTEFTSCBhZGRyZXNzLAorICAgICAgICAgICBzbyB0aGF0IHdlIGNhbiBjb25maWd1cmUgU0RSQU0gKi8KKyAgICAgICBsZHIgcGMsID0gRVhQX0NTMF9CQVNFQUREUiAgKyByb21fc2Vjb25kX2xvYyAtIFRFWFRfQkFTRQorI2VuZGlmCisjZW5kaWYKK3JvbV9zZWNvbmRfbG9jOgorCiAJLyoKIAkgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCiAJICovCkBAIC0xOTYsNiArMjYyLDEyIEBACiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkvKiBmbHVzaCB2My92NCBjYWNoZSAqLwogCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdjQgVExCICovCiAKKyNpZiBkZWZpbmVkKEJFOF9NT0RFKQorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAgICAvKiByZWFkIGNvbnRyb2wgcmVnICovCisJb3JyCXIwLCByMCwgIygxIDw8IDI1KSAgICAgIC8qIGVuYWJsZSBiZS04IG1vZGUgKi8KKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwICAgLyogd3JpdGUgY29udHJvbCByZWcgKi8KKyNlbmRpZiAvL0JFOF9NT0RFCisKIAkvKgogCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKIAkgKi8KQEAgLTIwNCw2ICsyNzYsNyBAQAogCWJpYwlyMCwgcjAsICMweDAwMDAwMDg3CUAgY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkKIAlvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMiAoQSkgQWxpZ24KIAlvcnIJcjAsIHIwLCAjMHgwMDAwMTAwMAlAIHNldCBiaXQgMTIgKEkpIEktQ2FjaGUKKwlvcnIJcjAsIHIwLCAjMHgwMDQwMDAwMAlAIHNldCBiaXQgMjIgKFUpIAogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAKIAogCS8qCkBAIC0zOTgsNyArNDcxLDcgQEAKIAkJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSSBjYWNoZQogCQltb3YJcGMsIGxyCQkJQCBiYWNrIHRvIGNhbGxlcgogCi0jaWYgZGVmaW5lZChDT05GSUdfSU5URUdSQVRPUikgJiYgZGVmaW5lZChDT05GSUdfQVJDSF9DSU5URUdSQVRPUikKKyNpZiAoZGVmaW5lZChDT05GSUdfSU5URUdSQVRPUikgJiYgZGVmaW5lZChDT05GSUdfQVJDSF9DSU5URUdSQVRPUikpIHx8IGRlZmluZWQgKENPTkZJR19DT01DRVJUT185MDApIHx8IGRlZmluZWQgKENPTkZJR19DT01DRVJUT18xMDApIHx8IGRlZmluZWQgKENPTkZJR19DT01DRVJUT18xMDAwKQogLyogVXNlIHRoZSBJbnRlZ3JhdG9yQ1AgZnVuY3Rpb24gZnJvbSBib2FyZC9pbnRlZ3JhdG9yY3AvcGxhdGZvcm0uUyAqLwogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvY29tY2VydG8vTWFrZWZpbGUgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGQwMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyMHQvY29tY2VydG8vTWFrZWZpbGUKQEAgLTAsMCArMSw0NyBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDYKKyMgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoU09DKS5hCisKK09CSlMJPSBlbWFjLm8gaW50ZXJydXB0cy5vIHNlcmlhbC5vIGJzcC5vIHNwaS5vCitTT0JKUwk9IGxvd2xldmVsX2luaXQubworCithbGw6IC5kZXBlbmQgJChMSUIpCisKKyQoTElCKTogJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCisKK2JzcC5vOiBic3AuYworCSQoQ0MpICQoQ0ZMQUdTKSAtZnBpYyAtYyAtbyAkQCAkPAorCitpbnRlcnJ1cHRzLmM6IGludGVycnVwdHM1MzAuYyBpbnRlcnJ1cHRzODAwLmMKKworc2VyaWFsLmM6IHNlcmlhbC0xNjU1MC5jIHNlcmlhbDUzMC5jCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOiBNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJJChDQykgLU0gJChDRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2NvbWNlcnRvL2JzcC5jIGIvY3B1L2FybTkyMHQvY29tY2VydG8vYnNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1YjM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjB0L2NvbWNlcnRvL2JzcC5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fNTMwKQorI2luY2x1ZGUgImJzcF81MzAuYyIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fNTE1KSB8fCBkZWZpbmVkKENPTkZJR19DT01DRVJUT184MDApCisjaW5jbHVkZSAiYnNwXzUxNS5jIgorI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9jb21jZXJ0by9ic3BfNTE1LmMgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by9ic3BfNTE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxMDg1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjB0L2NvbWNlcnRvL2JzcF81MTUuYwpAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKworLyoKKyogU29DX2NzX2NmZyAtIGNvbmZpZ3VyZSBDaGlwIFNlbGVjdCBzZXR0aW5ncworKgorKiBjcyAtIGNoaXAgc2VsZWN0IGlkCisqCisqIGVuYWJsZSAtIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBDUworKgkxID0gZW5hYmxlCisqCTAgPSBkaXNhYmxlCisqCisqIGNmZyAtIGNoaXAgc2VsZWN0IGNvbmZpZ3VyYXRpb24sIGlnbm9yZWQgaWYgZW5hYmxlID0gMAorKgorKi8KK2ludCBTb0NfY3NfY2ZnKGludCBjcywgaW50IGVuYWJsZSwgc3RydWN0IGNzX2NmZyAqY2ZnKQoreworCXUzMiBzZWdtZW50X3NpemUgPSAwOworCXUzMiBiYXNlYWRkciA9IDA7IAorCXUzMiBleHRfYmFzZWFkZHIgPSAwOworCisJaWYgKChjcyAhPSBFWFBfQ1NTRDApICYmIChjcyAhPSBFWFBfQ1NTRDEpICYmIChjcyAhPSBFWFBfQ1NCT09UKSAmJgorCSAgICAoY3MgIT0gRVhQX0NTUDApICYmIChjcyAhPSBFWFBfQ1NQMSkgJiYgKGNzICE9IEVYUF9DU1AyKSAmJgorCSAgICAoY3MgIT0gU0RSX0NTU0QwKSAmJiAoY3MgIT0gU0RSX0NTU0QxKSkKKwkJZ290byBlcnI7CisKKwlpZiAoZW5hYmxlID09IENTX0RJU0FCTEUpIHsKKwkJLyogRGlzYWJsZSB0aGUgQ1MgYW5kIGV4aXQgKi8KKwkJKih2b2xhdGlsZSB1MzIgKikgQVNEX0NTRSAmPSB+KDEgPDwgY3MpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2ZnLT5tZW10eXBlID09IENTX01FTVRZUEVfU0RSQU0pIHsKKwkJLyogT3RoZXIgQ1MgZG9uJ3Qgc3VwcG9ydCBTRFJBTSAqLworCQlpZiAoKGNzICE9IEVYUF9DU1NEMCkgJiYgKGNzICE9IFNEUl9DU1NEMCkpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoKGNzID09IEVYUF9DU1NEMCkgfHwgKGNzID09IEVYUF9DU1NEMSkgfHwgKGNzID09IFNEUl9DU1NEMCkgfHwgKGNzID09IFNEUl9DU1NEMSkpIHsKKwkJYmFzZWFkZHIgPSBjZmctPmJhc2VhZGRyICYgMHgwN0ZGRkZGRjsKKwkJZXh0X2Jhc2VhZGRyID0gY2ZnLT5iYXNlYWRkciAmIDB4RjgwMDAwMDA7CisKKwkJaWYgKGV4dF9iYXNlYWRkcikgeworCQkJLyogRXh0ZW5kZWQgTWVtb3J5ICovCisKKwkJCWlmICgoZXh0X2Jhc2VhZGRyICYgMHhjMDAwMDAwMCkgIT0gMHg4MDAwMDAwMCkKKwkJCQlnb3RvIG91dDsKKworCQkJc3dpdGNoIChjZmctPnNpemUpIHsKKwkJCWNhc2UgMHgxMDAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4ODsgLyogMU1CICovCisJCQkJYnJlYWs7CQorCisJCQljYXNlIDB4MjAwMDAwOiBzZWdtZW50X3NpemUgPSAweDk7IC8qIDJNQiAqLworCQkJCWJyZWFrOwkKKworCQkJY2FzZSAweDQwMDAwMDogc2VnbWVudF9zaXplID0gMHhhOyAvKiA0TUIgKi8KKwkJCQlicmVhazsJCisKKwkJCWNhc2UgMHg4MDAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4YjsvKiA4TUIgKi8KKwkJCQlicmVhazsJCisKKwkJCWNhc2UgMHgxMDAwMDAwOiBzZWdtZW50X3NpemUgPSAweGM7LyogMTZNQiAqLworCQkJCWJyZWFrOwkKKworCQkJY2FzZSAweDIwMDAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4ZDsgLyogMzJNQiAqLworCQkJCWJyZWFrOwkKKworCQkJZGVmYXVsdDoKKwkJCQljZmctPnNpemUgPSAweDQwMDAwMDA7CisJCQljYXNlIDB4NDAwMDAwMDoKKwkJCQlzZWdtZW50X3NpemUgPSAweGU7IC8qIDY0TUIgKi8KKwkJCQkKKwkJCQlicmVhazsJCisKKwkJCWNhc2UgMHg4MDAwMDAwOiBzZWdtZW50X3NpemUgPSAweGY7IC8qIDEyOE1CICovCisJCQkJYnJlYWs7CQorCisJCQljYXNlIDB4MTAwMDAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4MDsgLyogMjU2TUIgKi8KKwkJCQlicmVhazsJCisKKwkJCWNhc2UgMHgyMDAwMDAwMDogc2VnbWVudF9zaXplID0gMHgxOyAvKiA1MTJNQiAqLworCQkJCWJyZWFrOwkKKworCQkJY2FzZSAweDQwMDAwMDAwOiBzZWdtZW50X3NpemUgPSAweDI7IC8qIDFHYiAqLworCQkJCWJyZWFrOwkKKwkJCX0KKworCQkJLyogTWFrZSBzdXJlIHRoZSBiYXNlIGFkZHJlc3MgaXMgYWxpZ25lZCBvbiBzaXplIGJvdW5kYXJ5ICovCisJCQliYXNlYWRkciAmPSB+KGNmZy0+c2l6ZSAtIDEpOworCisJCX0gZWxzZSB7CisJCQkvKiBMb3cgTWVtb3J5ICovCisKKwkJCXN3aXRjaCAoY2ZnLT5zaXplKSB7CisJCQljYXNlIDB4MTAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4MDsgLyogNjRLQiAqLworCQkJCWJyZWFrOwkKKworCQkJY2FzZSAweDIwMDAwOiBzZWdtZW50X3NpemUgPSAweDU7IC8qIDEyOEtCICovCisJCQkJYnJlYWs7CQorCisJCQljYXNlIDB4NDAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4NjsgLyogMjU2S0IgKi8KKwkJCQlicmVhazsJCisKKwkJCWNhc2UgMHg4MDAwMDogc2VnbWVudF9zaXplID0gMHg3OyAvKiA1MTJLQiAqLworCQkJCWJyZWFrOwkKKworCQkJY2FzZSAweDEwMDAwMDogc2VnbWVudF9zaXplID0gMHg4OyAvKiAxTUIgKi8KKwkJCQlicmVhazsJCisKKwkJCWNhc2UgMHgyMDAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4OTsgLyogMk1CICovCisJCQkJYnJlYWs7CQorCisJCQljYXNlIDB4NDAwMDAwOiBzZWdtZW50X3NpemUgPSAweGE7IC8qIDRNQiAqLworCQkJCWJyZWFrOwkKKworCQkJY2FzZSAweDgwMDAwMDogc2VnbWVudF9zaXplID0gMHhiOyAvKiA4TUIgKi8KKwkJCQlicmVhazsJCisKKwkJCWNhc2UgMHgxMDAwMDAwOiBzZWdtZW50X3NpemUgPSAweGM7IC8qIDE2TUIgKi8KKwkJCQlicmVhazsJCisKKwkJCWNhc2UgMHgyMDAwMDAwOiBzZWdtZW50X3NpemUgPSAweGQ7IC8qIDMyTUIgKi8KKwkJCQlicmVhazsJCisKKwkJCWRlZmF1bHQ6CisJCQljYXNlIDB4NDAwMDAwMDoKKwkJCQlzZWdtZW50X3NpemUgPSAweGU7IC8qIDY0TUIgKi8KKwkJCQljZmctPnNpemUgPSAweDQwMDAwMDAwOworCQkJCWJyZWFrOwkKKworCQkJY2FzZSAweDgwMDAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4ZjsgLyogMTI4TUIgKi8KKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTWFrZSBzdXJlIHRoZSBiYXNlIGFkZHJlc3MgaXMgYWxpZ25lZCBvbiBzaXplIGJvdW5kYXJ5ICovCisJCQliYXNlYWRkciAmPSB+KGNmZy0+c2l6ZSAtIDEpOworCQl9CisJfQorCQorCXN3aXRjaCAoY3MpIHsKKwljYXNlIEVYUF9DU1NEMDoKKworCQkqKHZvbGF0aWxlIHUzMiAqKSBBU0RfTUJBX0VYUF9DU1NEMCA9ICgoYmFzZWFkZHIgPj4gMTYpIDw8IDQpIHwgc2VnbWVudF9zaXplOworCQkqKHZvbGF0aWxlIHUzMiAqKSBBU0RfRVhBX0VYUF9DU1NEMCA9IChleHRfYmFzZWFkZHIgPj4gMjcpOworCisJCWlmIChjZmctPm1lbXR5cGUgPT0gQ1NfTUVNVFlQRV9TRFJBTSkgeworCQkJKih2b2xhdGlsZSB1MzIgKikgU0RDMF9DU1NEMF9DRkcgPSAoKCh1MzIpY2ZnLT5tZW10eXBlICYgMHgxKSA8PCA5KTsKKworCQkJKih2b2xhdGlsZSB1MzIgKikgU0RDMF9TRFJBTV9DRkcxID0gKCgodTMyKWNmZy0+dHJhcyAmIDB4NykgPDwgMTMpIHwKKwkJCQkJCSgoKHUzMiljZmctPnRyYyAmIDB4ZikgPDwgOSkgfAorCQkJCQkJKCgodTMyKWNmZy0+dHJjZCAmIDB4NykgPDwgNikgfAorCQkJCQkJKCgodTMyKWNmZy0+dHJwICYgMHg3KSA8PCAzKSB8CisJCQkJCQkoKHUzMiljZmctPmNsICYgMHg3KTsKKworCQkJKih2b2xhdGlsZSB1MzIgKikgU0RDMF9TRFJBTV9SRUZSRVNIID0gKHUzMiljZmctPnJlZmNudCAmIDB4ZmZmOworCisJCQkqKHZvbGF0aWxlIHUzMiAqKSBTREMwX1NEUkFNX1BPV0VST04gPSAodTMyKWNmZy0+cHdyb25jbnQgJiAweGZmZmY7CisKKwkJCSoodm9sYXRpbGUgdTMyICopIFNEQzBfU0RSQU1fQ0ZHMiA9ICgoKHUzMiljZmctPm1lbWNoaXBfZHR5cGUgJiAweDMpIDw8IDExKSB8CisJCQkJCQkoKCh1MzIpY2ZnLT50d3IgJiAweDMpIDw8IDgpIHwKKwkJCQkJCSgxIDw8IDcpIHwKKwkJCQkJCSgxIDw8IDYpIHwKKwkJCQkJCSgoKHUzMiljZmctPmJ1c3dpZHRoICYgMHgxKSA8PCA1KSB8CisJCQkJCQkoKCh1MzIpY2ZnLT50bXJkICYgMHg3KSA8PCAyKSB8CisJCQkJCQkoKHUzMiljZmctPnRycmQgJiAweDMpOworCQl9IGVsc2UgeworCQkJKih2b2xhdGlsZSB1MzIgKikgU0RDMF9DU1NEMF9DRkcgPSAoKCh1MzIpY2ZnLT5idXN3aWR0aCAmIDB4MykgPDwgMTEpIHwKKwkJCQkJKCgoKHUzMiljZmctPmFkZHJzZXR1cCA+PiAyKSAmIDB4MSkgPDwgMTApIHwKKwkJCQkJKCgodTMyKWNmZy0+bWVtdHlwZSAmIDB4MSkgPDwgOSkgfAorCQkJCQkoKCh1MzIpY2ZnLT5hZGRyc2V0dXAgJiAweDMpIDw8IDcpIHwKKwkJCQkJKCgodTMyKWNmZy0+bGV2ZWwgJiAweDEpIDw8IDYpIHwKKwkJCQkJKCgodTMyKWNmZy0+ZHFtX21vZGUgJiAweDEpIDw8IDUpIHwKKwkJCQkJKCgodTMyKWNmZy0+Y21kd2lkdGggJiAweGYpIDw8IDEpOworCQl9CisKKwkJKih2b2xhdGlsZSB1MzIgKikgQVNEX0NTRSB8PSAoMSA8PCBFWFBfQ1NTRDApOworCisJCWJyZWFrOworCisJY2FzZSBFWFBfQ1NTRDE6IAorCQkqKHZvbGF0aWxlIHUzMiAqKSBBU0RfTUJBX0VYUF9DU1NEMSA9ICgoYmFzZWFkZHIgPj4gMTYpIDw8IDQpIHwgc2VnbWVudF9zaXplOworCQkqKHZvbGF0aWxlIHUzMiAqKSBBU0RfRVhBX0VYUF9DU1NEMSA9IChleHRfYmFzZWFkZHIgPj4gMjcpOworCisJCSoodm9sYXRpbGUgdTMyICopIFNEQzBfQ1NTRDFfQ0ZHID0gKCgodTMyKWNmZy0+YnVzd2lkdGggJiAweDMpIDw8IDExKSB8CisJCQkJCSgoKCh1MzIpY2ZnLT5hZGRyc2V0dXAgPj4gMikgJiAweDEpIDw8IDEwKSB8CisJCQkJCSgoKHUzMiljZmctPm1lbXR5cGUgJiAweDEpIDw8IDkpIHwKKwkJCQkJKCgodTMyKWNmZy0+YWRkcnNldHVwICYgMHgzKSA8PCA3KSB8CisJCQkJCSgoKHUzMiljZmctPmxldmVsICYgMHgxKSA8PCA2KSB8CisJCQkJCSgoKHUzMiljZmctPmRxbV9tb2RlICYgMHgxKSA8PCA1KSB8CisJCQkJCSgoKHUzMiljZmctPmNtZHdpZHRoICYgMHhmKSA8PCAxKTsKKworCQkqKHZvbGF0aWxlIHUzMiAqKSBBU0RfQ1NFIHw9ICgxIDw8IEVYUF9DU1NEMSk7CisJCisJCWJyZWFrOworCisJY2FzZSBFWFBfQ1NCT09UOgorCQkqKHZvbGF0aWxlIHUzMiAqKVNEQzBfQ1NCT09UX0NGRyA9ICgoKHUzMiljZmctPmJ1c3dpZHRoICYgMHgzKSA8PCAxMSkgfAorCQkJCQkoKCgodTMyKWNmZy0+YWRkcnNldHVwID4+IDIpICYgMHgxKSA8PCAxMCkgfAorCQkJCQkoKCh1MzIpY2ZnLT5tZW10eXBlICYgMHgxKSA8PCA5KSB8CisJCQkJCSgoKHUzMiljZmctPmFkZHJzZXR1cCAmIDB4MykgPDwgNykgfAorCQkJCQkoKCh1MzIpY2ZnLT5sZXZlbCAmIDB4MSkgPDwgNikgfAorCQkJCQkoKCh1MzIpY2ZnLT5kcW1fbW9kZSAmIDB4MSkgPDwgNSkgfAorCQkJCQkoKCh1MzIpY2ZnLT5jbWR3aWR0aCAmIDB4ZikgPDwgMSk7CisJCQorCQkqKHZvbGF0aWxlIHUzMiAqKUFTRF9DU0UgfD0gKDEgPDwgRVhQX0NTQk9PVCk7CisJCQorCQlicmVhazsKKworCWNhc2UgRVhQX0NTUDA6CisJCSoodm9sYXRpbGUgdTMyICopU0RDMF9DU1AwX0NGRyA9ICgoKHUzMiljZmctPmJ1c3dpZHRoICYgMHgzKSA8PCAxMSkgfAorCQkJCQkoKCgodTMyKWNmZy0+YWRkcnNldHVwID4+IDIpICYgMHgxKSA8PCAxMCkgfAorCQkJCQkoKCh1MzIpY2ZnLT5tZW10eXBlICYgMHgxKSA8PCA5KSB8CisJCQkJCSgoKHUzMiljZmctPmFkZHJzZXR1cCAmIDB4MykgPDwgNykgfAorCQkJCQkoKCh1MzIpY2ZnLT5sZXZlbCAmIDB4MSkgPDwgNikgfAorCQkJCQkoKCh1MzIpY2ZnLT5kcW1fbW9kZSAmIDB4MSkgPDwgNSkgfAorCQkJCQkoKCh1MzIpY2ZnLT5jbWR3aWR0aCAmIDB4ZikgPDwgMSk7CisJCQorCQkqKHZvbGF0aWxlIHUzMiAqKUFTRF9DU0UgfD0gKDEgPDwgRVhQX0NTUDApOworCisJCWJyZWFrOworCisJY2FzZSBFWFBfQ1NQMToKKwkJKih2b2xhdGlsZSB1MzIgKilTREMwX0NTUDFfQ0ZHID0gKCgodTMyKWNmZy0+YnVzd2lkdGggJiAweDMpIDw8IDExKSB8CisJCQkJCSgoKCh1MzIpY2ZnLT5hZGRyc2V0dXAgPj4gMikgJiAweDEpIDw8IDEwKSB8CisJCQkJCSgoKHUzMiljZmctPm1lbXR5cGUgJiAweDEpIDw8IDkpIHwKKwkJCQkJKCgodTMyKWNmZy0+YWRkcnNldHVwICYgMHgzKSA8PCA3KSB8CisJCQkJCSgoKHUzMiljZmctPmxldmVsICYgMHgxKSA8PCA2KSB8CisJCQkJCSgoKHUzMiljZmctPmRxbV9tb2RlICYgMHgxKSA8PCA1KSB8CisJCQkJCSgoKHUzMiljZmctPmNtZHdpZHRoICYgMHhmKSA8PCAxKTsKKworCQkqKHZvbGF0aWxlIHUzMiAqKUFTRF9DU0UgfD0gKDEgPDwgRVhQX0NTUDEpOworCQkKKwkJYnJlYWs7CisKKwljYXNlIEVYUF9DU1AyOgorCQkqKHZvbGF0aWxlIHUzMiAqKVNEQzBfQ1NQMl9DRkcgPSAoKCh1MzIpY2ZnLT5idXN3aWR0aCAmIDB4MykgPDwgMTEpIHwKKwkJCQkJKCgoKHUzMiljZmctPmFkZHJzZXR1cCA+PiAyKSAmIDB4MSkgPDwgMTApIHwKKwkJCQkJKCgodTMyKWNmZy0+bWVtdHlwZSAmIDB4MSkgPDwgOSkgfAorCQkJCQkoKCh1MzIpY2ZnLT5hZGRyc2V0dXAgJiAweDMpIDw8IDcpIHwKKwkJCQkJKCgodTMyKWNmZy0+bGV2ZWwgJiAweDEpIDw8IDYpIHwKKwkJCQkJKCgodTMyKWNmZy0+ZHFtX21vZGUgJiAweDEpIDw8IDUpIHwKKwkJCQkJKCgodTMyKWNmZy0+Y21kd2lkdGggJiAweGYpIDw8IDEpOworCisJCSoodm9sYXRpbGUgdTMyICopQVNEX0NTRSB8PSAoMSA8PCBFWFBfQ1NQMik7CisJCQorCQlicmVhazsKKwkKKwljYXNlIFNEUl9DU1NEMDoKKwkJKih2b2xhdGlsZSB1MzIgKikgQVNEX01CQV9TRFJfQ1NTRDAgPSAoKGJhc2VhZGRyID4+IDE2KSA8PCA0KSB8IHNlZ21lbnRfc2l6ZTsKKwkJKih2b2xhdGlsZSB1MzIgKikgQVNEX0VYQV9TRFJfQ1NTRDAgPSAoZXh0X2Jhc2VhZGRyID4+IDI3KTsKKworCQlpZiAoY2ZnLT5tZW10eXBlID09IENTX01FTVRZUEVfU0RSQU0pIHsKKworCQkJKih2b2xhdGlsZSB1MzIgKikgU0RDMV9DU1NEMF9DRkcgPSAoKCh1MzIpY2ZnLT5tZW10eXBlICYgMHgxKSA8PCA5KTsKKworCQkJKih2b2xhdGlsZSB1MzIgKikgU0RDMV9TRFJBTV9DRkcxID0gKCgodTMyKWNmZy0+dHJhcyAmIDB4NykgPDwgMTMpIHwKKwkJCQkJCSgoKHUzMiljZmctPnRyYyAmIDB4ZikgPDwgOSkgfAorCQkJCQkJKCgodTMyKWNmZy0+dHJjZCAmIDB4NykgPDwgNikgfAorCQkJCQkJKCgodTMyKWNmZy0+dHJwICYgMHg3KSA8PCAzKSB8CisJCQkJCQkoKHUzMiljZmctPmNsICYgMHg3KTsKKworCQkJKih2b2xhdGlsZSB1MzIgKikgU0RDMV9TRFJBTV9SRUZSRVNIID0gKHUzMiljZmctPnJlZmNudCAmIDB4ZmZmOworCisJCQkqKHZvbGF0aWxlIHUzMiAqKSBTREMxX1NEUkFNX1BPV0VST04gPSAodTMyKWNmZy0+cHdyb25jbnQgJiAweGZmZmY7CisKKwkJCSoodm9sYXRpbGUgdTMyICopIFNEQzFfU0RSQU1fQ0ZHMiA9ICgoKHUzMiljZmctPm1lbWNoaXBfZHR5cGUgJiAweDMpIDw8IDExKSB8CisJCQkJCQkoKCh1MzIpY2ZnLT50d3IgJiAweDMpIDw8IDgpIHwKKwkJCQkJCSgxIDw8IDcpIHwKKwkJCQkJCSgxIDw8IDYpIHwKKwkJCQkJCSgoKHUzMiljZmctPmJ1c3dpZHRoICYgMHgxKSA8PCA1KSB8CisJCQkJCQkoKCh1MzIpY2ZnLT50bXJkICYgMHg3KSA8PCAyKSB8CisJCQkJCQkoKHUzMiljZmctPnRycmQgJiAweDMpOworCQl9IGVsc2UgeworCQkJKih2b2xhdGlsZSB1MzIgKikgU0RDMV9DU1NEMF9DRkcgPSAoKCh1MzIpY2ZnLT5idXN3aWR0aCAmIDB4MykgPDwgMTEpIHwKKwkJCQkJKCgoKHUzMiljZmctPmFkZHJzZXR1cCA+PiAyKSAmIDB4MSkgPDwgMTApIHwKKwkJCQkJKCgodTMyKWNmZy0+bWVtdHlwZSAmIDB4MSkgPDwgOSkgfAorCQkJCQkoKCh1MzIpY2ZnLT5hZGRyc2V0dXAgJiAweDMpIDw8IDcpIHwKKwkJCQkJKCgodTMyKWNmZy0+bGV2ZWwgJiAweDEpIDw8IDYpIHwKKwkJCQkJKCgodTMyKWNmZy0+ZHFtX21vZGUgJiAweDEpIDw8IDUpIHwKKwkJCQkJKCgodTMyKWNmZy0+Y21kd2lkdGggJiAweGYpIDw8IDEpOworCQl9CisKKwkJKih2b2xhdGlsZSB1MzIgKilBU0RfQ1NFIHw9ICgxIDw8IFNEUl9DU1NEMCk7CisKKwkJYnJlYWs7CisKKwljYXNlIFNEUl9DU1NEMToKKwkJKih2b2xhdGlsZSB1MzIgKikgQVNEX01CQV9TRFJfQ1NTRDEgPSAoKGJhc2VhZGRyID4+IDE2KSA8PCA0KSB8IHNlZ21lbnRfc2l6ZTsKKwkJKih2b2xhdGlsZSB1MzIgKikgQVNEX0VYQV9TRFJfQ1NTRDEgPSAoZXh0X2Jhc2VhZGRyID4+IDI3KTsKKworCQkqKHZvbGF0aWxlIHUzMiAqKSBTREMxX0NTU0QxX0NGRyA9ICgoKHUzMiljZmctPmJ1c3dpZHRoICYgMHgzKSA8PCAxMSkgfAorCQkJCQkoKCgodTMyKWNmZy0+YWRkcnNldHVwID4+IDIpICYgMHgxKSA8PCAxMCkgfAorCQkJCQkoKCh1MzIpY2ZnLT5tZW10eXBlICYgMHgxKSA8PCA5KSB8CisJCQkJCSgoKHUzMiljZmctPmFkZHJzZXR1cCAmIDB4MykgPDwgNykgfAorCQkJCQkoKCh1MzIpY2ZnLT5sZXZlbCAmIDB4MSkgPDwgNikgfAorCQkJCQkoKCh1MzIpY2ZnLT5kcW1fbW9kZSAmIDB4MSkgPDwgNSkgfAorCQkJCQkoKCh1MzIpY2ZnLT5jbWR3aWR0aCAmIDB4ZikgPDwgMSk7CisKKwkJKih2b2xhdGlsZSB1MzIgKilBU0RfQ1NFIHw9ICgxIDw8IFNEUl9DU1NEMSk7CisJCisJCWJyZWFrOworCX0KKworb3V0OgorCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIC0xOworfQorCisKK2ludCBTb0NfaGlnaF9tZW1fY2ZnIChpbnQgY3MpCit7CisJc3dpdGNoIChjcykgeworCWNhc2UgRVhQX0NTU0QwOgorCQkqKHZvbGF0aWxlIHUzMiAqKUFTRF9DU0UgJj0gfigoMSA8PCA3KSB8ICgxIDw8IDExKSk7CisKKwkJYnJlYWs7CisKKwljYXNlIEVYUF9DU1NEMToKKwkJKih2b2xhdGlsZSB1MzIgKilBU0RfQ1NFIHw9ICgxIDw8IDcpOworCQkqKHZvbGF0aWxlIHUzMiAqKUFTRF9DU0UgJj0gfigxIDw8IDExKTsKKworCQlicmVhazsKKworCWNhc2UgU0RSX0NTU0QwOgorCQkqKHZvbGF0aWxlIHUzMiAqKUFTRF9DU0UgJj0gfigxIDw8IDcpOworCQkqKHZvbGF0aWxlIHUzMiAqKUFTRF9DU0UgfD0gKDEgPDwgMTEpOworCisJCWJyZWFrOworCisJY2FzZSBTRFJfQ1NTRDE6CisJCSoodm9sYXRpbGUgdTMyICopQVNEX0NTRSB8PSAoMSA8PCA3KSB8ICgxIDw8IDExKTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gZXJyOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIC0xOworfQorCisKK2ludCBTb0NfbWVtX2RpdmlkZXJfY2ZnICh1MzIgYWRkcmVzcywgaW50IHNkYykKK3sKKwlzd2l0Y2ggKHNkYykgeworCWNhc2UgQkVMTE9XX01FTV9TREMwOgorCQkqKHZvbGF0aWxlIHUzMiAqKUFTRF9DU0UgJj0gfigxIDw8IDEyKTsKKworCQlicmVhazsKKworCWNhc2UgQkVMTE9XX01FTV9TREMxOgorCQkqKHZvbGF0aWxlIHUzMiAqKUFTRF9DU0UgfD0gKDEgPDwgMTIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gZXJyOworCX0KKworCSoodm9sYXRpbGUgdTMyICopQVNEX01FTV9ESVZJREVSID0gKGFkZHJlc3MgJiAweEZGODAwMDAwKSA+PiAxNjsKKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIC0xOworfQorCisvKgorKiBTb0NfcGxsX2NmZyAtIHVzZWQgdG8gY29uZmlndXJlIEFSTSBhbmQgQU1CQSBidXMgY2xvY2sgZnJlcXVlbmNpZXMKKyoKKyogbW9kZSAtIEFSTSBjbG9jayBtb2RlLAorKgkxID0gYXN5bmMsIGluZGVwZW5kZW50IEFSTSBhbmQgQU1CQSBidXMgY2xvY2sgZnJlcXVlbmNpZXMgKFBMTDIgdXNlZCBmb3IgYnVzIGNsb2NrKS4KKyoJMCA9IHN5bmMsIEFNQkEgYnVzIGNsb2NrIGhhbGYgQVJNIGNsb2NrIGZyZXF1ZW5jeSAoUExMMiBub3QgdXNlZCkKKyoKKyogYXJtX2NsayAtIEFSTSBjbG9jayBmcmVxdWVuY3kgaW4gSHoKKyoKKyogYnVzX2NsayAtIEFNQkEgQlVTIGNsb2NrIGZyZXF1ZW5jeSBpbiBIegorKgorKi8KK2ludCBTb0NfcGxsX2NmZyAoaW50IG1vZGUsIHVuc2lnbmVkIGludCBhcm1fY2xrLCB1bnNpZ25lZCBpbnQgYnVzX2NsaykKK3sKKwl2b2xhdGlsZSB1MzIgZGVsYXlfY291bnQ7CisJdTMyIGNsa2Y7CisJdTMyIGk7CisKKwlpZiAobW9kZSA9PSBDTEtfTU9ERV9BU1lOQykgeworCQkvKiBzZXQgQVJNIGFzeW5jIGNsb2NrIG1vZGUgKi8KKwkJYXNtICgibXJjIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCI6Ij1yIiAoaSkpOworCQlpIHw9IDB4QzAwMDAwMDA7CisJCWFzbSAoIm1jciBwMTUsIDAsICUwLCBjMSwgYzAsIDAiOiA6InIiIChpKSk7CisKKwkJLyogYXN5bmMgbW9kZSAqLworCQljbGtmID0gKDQgKiBidXNfY2xrKSAvIENGR19SRUZDTEtGUkVROworCisJCS8qIGJ1cyBzZXR1cCAqLworCQkvKiBzZXQgUExMIGludG8gQllQQVNTIG1vZGUgKi8KKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FNQkFfUExMIHw9IFBMTF9CWVBBU1M7CisKKwkJLyogd2FpdCA1MDB1cyBmb3IgUExMIHRvIGxvY2sgKi8KKwkJZGVsYXlfY291bnQgPSAxMDAwOworCQl3aGlsZSAoZGVsYXlfY291bnQtLSk7CisKKwkJLyogRGlzYWJsZSB0aGUgUExMLCBieSB3cml0aW5nIFBMTCBDb250cm9sIFJlZ2lzdGVyIGJpdCAyNSA9IDEuICovCisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BTUJBX1BMTCB8PSBQTExfUE9XRVI7IAorCQorCQkvKiBQcm9ncmFtIHRoZSBQTEwgdG8gdGhlIGRlc2lyZWQgdmFsdWUgYW5kIGVuYWJsZSB0aGUgUExMLCBieSB3cml0aW5nIFBMTCBDb250cm9sIFJlZ2lzdGVyIGZpZWxkcyBXLCBYLCBhbmQgWSwgICovCisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BTUJBX1BMTCA9IFBMTF9CWVBBU1MgfCBQTExfUE9XRVIgfCAoY2xrZiAmIDB4N2YpOworCisJCS8qIGFuZCB3cml0aW5nIGJpdCAyNSA9IDAuICovCisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BTUJBX1BMTCA9IFBMTF9NVVhTRUwgfCAoY2xrZiAmIDB4N2YpOworCX0gZWxzZSB7CisJCS8qIHNldCBBUk0gc3luYyBjbG9jayBtb2RlICovCisJCWFzbSAoIm1yYyBwMTUsIDAsICUwLCBjMSwgYzAsIDAiOiI9ciIgKGkpKTsKKwkJaSB8PSAweDQwMDAwMDAwOworCQlhc20gKCJtY3IgcDE1LCAwLCAlMCwgYzEsIGMwLCAwIjogOiJyIiAoaSkpOworCX0KKworCS8qIEFSTSBzZXR1cCAqLworCWNsa2YgPSAoMiAqIGFybV9jbGspIC8gQ0ZHX1JFRkNMS0ZSRVE7CisJCisJLyogc2V0IFBMTCBpbnRvIEJZUEFTUyBtb2RlICovCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9QTEwgfD0gUExMX0JZUEFTUzsKKworCS8qIHdhaXQgNTAwdXMgZm9yIFBMTCB0byBsb2NrICovCisJZGVsYXlfY291bnQgPSAxMDAwOworCXdoaWxlIChkZWxheV9jb3VudC0tKTsKKworCS8qIERpc2FibGUgdGhlIFBMTCwgYnkgd3JpdGluZyBQTEwgQ29udHJvbCBSZWdpc3RlciBiaXQgMjUgPSAxLiAqLworCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fUExMIHw9IFBMTF9QT1dFUjsgCisJCisJLyogUHJvZ3JhbSB0aGUgUExMIHRvIHRoZSBkZXNpcmVkIHZhbHVlIGFuZCBlbmFibGUgdGhlIFBMTCwgYnkgd3JpdGluZyBQTEwgQ29udHJvbCBSZWdpc3RlciBmaWVsZHMgVywgWCwgYW5kIFkgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX1BMTCA9IFBMTF9CWVBBU1MgfCBQTExfUE9XRVIgfCAoY2xrZiAmIDB4N2YpOyAKKworCS8qYW5kIHdyaXRpbmcgYml0IDI1ID0gMC4gKi8KKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX1BMTCAmPSB+UExMX1BPV0VSOyAKKworCS8qIFRha2UgdGhlIFBMTCBvdXQgb2YgYnlwYXNzIG1vZGUsIGJ5IHdyaXRpbmcgUExMIENvbnRyb2wgUmVnaXN0ZXIgYml0IDI0ID0gMC4gKi8KKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX1BMTCAmPSB+UExMX0JZUEFTUzsKKworCS8vIFJlZjogCisJLy8gMSkgUExMIEluaXRpYWxpemF0aW9uIFByb2NlZHVyZSAgKDgyWFhYLUVSUi0wMDEtQS5wZGYgKQorCS8vIDIpIE04MjV4eCBQTEwgUmVnaXN0ZXJzIGNoYXB0ZXIucGRmCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyogU29DX2dwaW9fY2ZnIC0gY29uZmlndXJlIEdQSU8gcGlucyBhcyBpbnB1dCBvciBvdXRwdXQgcGlucworKgorKiBncGlvIC0gZ3BpbyBwaW4KKyoKKyogbW9kZSAtIGdwaW8gcGluIG1vZGUKKyoJR1BJT19UWVBFX09VVFBVVCA9IG91dHB1dAorKglHUElPX1RZUEVfSU5QVVQgPSBpbnB1dAorKgorKi8KK2ludCBTb0NfZ3Bpb19jZmcoaW50IGdwaW8sIGludCBtb2RlKQoreworCisJaWYgKChncGlvIDwgMCkgfHwgKGdwaW8gPiAzMSkpCisJCWdvdG8gZXJyOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBHUElPX1RZUEVfSU5QVVQ6CisJCSoodm9sYXRpbGUgdTMyICopIEdQSU9fT1VUUFVUX0VOQUJMRSAmPSB+KDEgPDwgZ3Bpbyk7CisKKwkJYnJlYWs7CisKKwljYXNlIEdQSU9fVFlQRV9PVVRQVVQ6CisJCWlmICgoZ3BpbyA9PSAxOCkgfHwgKGdwaW8gPT0gMTkpKQorCQkJZ290byBlcnI7CisKKwkJKih2b2xhdGlsZSB1MzIgKikgR1BJT19PVVRQVVRfRU5BQkxFIHw9IDEgPDwgZ3BpbzsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gZXJyOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXJldHVybiAtMTsKK30KKworaW50IFNvQ19pb2N0cmxfY2ZnKGludCByZXNvdXJjZSwgaW50IGVuYWJsZSkKK3sKKwl1MzIgYml0bWFzazsKKwl1MzIgdmFsOworCisJc3dpdGNoIChyZXNvdXJjZSkgeworCWNhc2UgSU9DVFJMX1NQSV9CVVM6CisJCWJpdG1hc2sgPSAoMHgzIDw8IDQpOworCQlicmVhazsKKworCWNhc2UgSU9DVFJMX1VBUlQwOgorCQliaXRtYXNrID0gKDB4MyA8PCAxMik7CisJCWJyZWFrOworCisJY2FzZSBJT0NUUkxfVUFSVDE6CisJCWJpdG1hc2sgPSAoMHgzIDw8IDE0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1RSTF9FWFBBMjFfQTIyOgorCQliaXRtYXNrID0gKDB4MyA8PCAyNCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ290byBlcnI7CisJfQorCisJaWYgKGVuYWJsZSkgeworCQlkbyB7CisJCQl2YWwgPSAqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMIHwgYml0bWFzazsKKwkJCSoodm9sYXRpbGUgdTMyICopR1BJT19MT0NLID0gMHg1NTU1NTU1NTsJLyogcmVtb3ZlIGxvY2sgKi8KKwkJCSoodm9sYXRpbGUgdTMyICopR1BJT19JT0NUUkwgPSB2YWw7CisJCX0gd2hpbGUgKCgqKHZvbGF0aWxlIHUzMiAqKUdQSU9fSU9DVFJMICYgYml0bWFzaykgIT0gYml0bWFzayk7CisJfSBlbHNlIHsKKwkJZG8geworCQkJdmFsID0gKih2b2xhdGlsZSB1MzIgKilHUElPX0lPQ1RSTCAmIH5iaXRtYXNrOworCQkJKih2b2xhdGlsZSB1MzIgKilHUElPX0xPQ0sgPSAweDU1NTU1NTU1OwkvKiByZW1vdmUgbG9jayAqLworCQkJKih2b2xhdGlsZSB1MzIgKilHUElPX0lPQ1RSTCA9IHZhbDsKKwkJfSB3aGlsZSAoKCoodm9sYXRpbGUgdTMyICopR1BJT19JT0NUUkwgJiBiaXRtYXNrKSk7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLTE7Cit9CisKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2NvbWNlcnRvL2JzcF81MzAuYyBiL2NwdS9hcm05MjB0L2NvbWNlcnRvL2JzcF81MzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM5YzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyMHQvY29tY2VydG8vYnNwXzUzMC5jCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorCisvKgorKiBTb0NfY3NfY2ZnIC0gY29uZmlndXJlIENoaXAgU2VsZWN0IHNldHRpbmdzCisqCisqIGNzIC0gY2hpcCBzZWxlY3QgaWQKKyoKKyogZW5hYmxlIC0gZW5hYmxlIG9yIGRpc2FibGUgdGhlIENTCisqCTEgPSBlbmFibGUKKyoJMCA9IGRpc2FibGUKKyoKKyogY2ZnIC0gY2hpcCBzZWxlY3QgY29uZmlndXJhdGlvbiwgaWdub3JlZCBpZiBlbmFibGUgPSAwCisqCisqLworaW50IFNvQ19jc19jZmcoaW50IGNzLCBpbnQgZW5hYmxlLCBzdHJ1Y3QgY3NfY2ZnICpjZmcpCit7CisJdTMyIHNlZ21lbnRfc2l6ZSA9IDA7CisJdTMyIGJhc2VhZGRyID0gMDsgCisKKwlpZiAoKGNzICE9IEVYUF9DU1NEMCkgJiYgKGNzICE9IEVYUF9DU1NEMSkgJiYgKGNzICE9IEVYUF9DU0JPT1QpICYmCisJICAgIChjcyAhPSBFWFBfQ1NQMCkpCisJCWdvdG8gZXJyOworCisJaWYgKGVuYWJsZSA9PSBDU19ESVNBQkxFKSB7CisJCS8qIERpc2FibGUgdGhlIENTIGFuZCBleGl0ICovCisJCSoodm9sYXRpbGUgdTMyICopIEFTRF9DU0UgJj0gfigxIDw8IGNzKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNmZy0+bWVtdHlwZSA9PSBDU19NRU1UWVBFX1NEUkFNKSB7CisJCS8qIE90aGVyIENTIGRvbid0IHN1cHBvcnQgU0RSQU0gKi8KKwkJaWYgKGNzICE9IEVYUF9DU1NEMCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmICgoY3MgPT0gRVhQX0NTU0QwKSB8fCAoY3MgPT0gRVhQX0NTU0QxKSkgeworCQliYXNlYWRkciA9IGNmZy0+YmFzZWFkZHIgJiAweDA3RkZGRkZGOworCisJCXN3aXRjaCAoY2ZnLT5zaXplKSB7CisJCWNhc2UgMHgxMDAwMDogc2VnbWVudF9zaXplID0gMHgwOyAvKiA2NEtCICovCisJCQlicmVhazsJCisKKwkJY2FzZSAweDIwMDAwOiBzZWdtZW50X3NpemUgPSAweDU7IC8qIDEyOEtCICovCisJCQlicmVhazsJCisKKwkJY2FzZSAweDQwMDAwOiBzZWdtZW50X3NpemUgPSAweDY7IC8qIDI1NktCICovCisJCQlicmVhazsJCisKKwkJY2FzZSAweDgwMDAwOiBzZWdtZW50X3NpemUgPSAweDc7IC8qIDUxMktCICovCisJCQlicmVhazsJCisKKwkJY2FzZSAweDEwMDAwMDogc2VnbWVudF9zaXplID0gMHg4OyAvKiAxTUIgKi8KKwkJCWJyZWFrOwkKKworCQljYXNlIDB4MjAwMDAwOiBzZWdtZW50X3NpemUgPSAweDk7IC8qIDJNQiAqLworCQkJYnJlYWs7CQorCisJCWNhc2UgMHg0MDAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4YTsgLyogNE1CICovCisJCQlicmVhazsJCisKKwkJY2FzZSAweDgwMDAwMDogc2VnbWVudF9zaXplID0gMHhiOyAvKiA4TUIgKi8KKwkJCWJyZWFrOwkKKworCQljYXNlIDB4MTAwMDAwMDogc2VnbWVudF9zaXplID0gMHhjOyAvKiAxNk1CICovCisJCQlicmVhazsJCisKKwkJY2FzZSAweDIwMDAwMDA6IHNlZ21lbnRfc2l6ZSA9IDB4ZDsgLyogMzJNQiAqLworCQkJYnJlYWs7CQorCisJCWRlZmF1bHQ6CisJCWNhc2UgMHg0MDAwMDAwOgorCQkJc2VnbWVudF9zaXplID0gMHhlOyAvKiA2NE1CICovCisJCQljZmctPnNpemUgPSAweDQwMDAwMDA7CisJCQlicmVhazsJCisJCX0KKworCQkvKiBNYWtlIHN1cmUgdGhlIGJhc2UgYWRkcmVzcyBpcyBhbGlnbmVkIG9uIHNpemUgYm91bmRhcnkgKi8KKwkJYmFzZWFkZHIgJj0gfihjZmctPnNpemUgLSAxKTsKKwl9CisJCisJc3dpdGNoIChjcykgeworCWNhc2UgRVhQX0NTU0QwOgorCisJCSoodm9sYXRpbGUgdTMyICopIEFTRF9NQkFfRVhQX0NTU0QwID0gKChiYXNlYWRkciA+PiAxNikgPDwgNCkgfCBzZWdtZW50X3NpemU7CisKKwkJaWYgKGNmZy0+bWVtdHlwZSA9PSBDU19NRU1UWVBFX1NEUkFNKSB7CisJCQkqKHZvbGF0aWxlIHUzMiAqKSBTREMwX0NTU0QwX0NGRyA9ICgoKHUzMiljZmctPm1lbXR5cGUgJiAweDEpIDw8IDkpOworCisJCQkqKHZvbGF0aWxlIHUzMiAqKSBTREMwX1NEUkFNX0NGRzEgPSAoKCh1MzIpY2ZnLT50cmFzICYgMHg3KSA8PCAxMykgfAorCQkJCQkJKCgodTMyKWNmZy0+dHJjICYgMHhmKSA8PCA5KSB8CisJCQkJCQkoKCh1MzIpY2ZnLT50cmNkICYgMHg3KSA8PCA2KSB8CisJCQkJCQkoKCh1MzIpY2ZnLT50cnAgJiAweDcpIDw8IDMpIHwKKwkJCQkJCSgodTMyKWNmZy0+Y2wgJiAweDcpOworCisJCQkqKHZvbGF0aWxlIHUzMiAqKSBTREMwX1NEUkFNX1JFRlJFU0ggPSAodTMyKWNmZy0+cmVmY250ICYgMHhmZmY7CisKKwkJCSoodm9sYXRpbGUgdTMyICopIFNEQzBfU0RSQU1fUE9XRVJPTiA9ICh1MzIpY2ZnLT5wd3JvbmNudCAmIDB4ZmZmZjsKKworCQkJKih2b2xhdGlsZSB1MzIgKikgU0RDMF9TRFJBTV9DRkcyID0gKCgodTMyKWNmZy0+bWVtY2hpcF9kdHlwZSAmIDB4MykgPDwgMTEpIHwKKwkJCQkJCSgoKHUzMiljZmctPnR3ciAmIDB4MykgPDwgOCkgfAorCQkJCQkJKDEgPDwgNykgfAorCQkJCQkJKDEgPDwgNikgfAorCQkJCQkJKCgodTMyKWNmZy0+YnVzd2lkdGggJiAweDEpIDw8IDUpIHwKKwkJCQkJCSgoKHUzMiljZmctPnRtcmQgJiAweDcpIDw8IDIpIHwKKwkJCQkJCSgodTMyKWNmZy0+dHJyZCAmIDB4Myk7CisJCX0gZWxzZSB7CisJCQkqKHZvbGF0aWxlIHUzMiAqKSBTREMwX0NTU0QwX0NGRyA9ICgoKHUzMiljZmctPmJ1c3dpZHRoICYgMHgzKSA8PCAxMSkgfAorCQkJCQkoKCgodTMyKWNmZy0+YWRkcnNldHVwID4+IDIpICYgMHgxKSA8PCAxMCkgfAorCQkJCQkoKCh1MzIpY2ZnLT5tZW10eXBlICYgMHgxKSA8PCA5KSB8CisJCQkJCSgoKHUzMiljZmctPmFkZHJzZXR1cCAmIDB4MykgPDwgNykgfAorCQkJCQkoKCh1MzIpY2ZnLT5sZXZlbCAmIDB4MSkgPDwgNikgfAorCQkJCQkoKCh1MzIpY2ZnLT5kcW1fbW9kZSAmIDB4MSkgPDwgNSkgfAorCQkJCQkoKCh1MzIpY2ZnLT5jbWR3aWR0aCAmIDB4ZikgPDwgMSk7CisJCX0KKworCQkqKHZvbGF0aWxlIHUzMiAqKSBBU0RfQ1NFIHw9ICgxIDw8IEVYUF9DU1NEMCk7CisKKwkJYnJlYWs7CisKKwljYXNlIEVYUF9DU1NEMTogCisJCSoodm9sYXRpbGUgdTMyICopIEFTRF9NQkFfRVhQX0NTU0QxID0gKChiYXNlYWRkciA+PiAxNikgPDwgNCkgfCBzZWdtZW50X3NpemU7CisKKwkJKih2b2xhdGlsZSB1MzIgKikgU0RDMF9DU1NEMV9DRkcgPSAoKCh1MzIpY2ZnLT5idXN3aWR0aCAmIDB4MykgPDwgMTEpIHwKKwkJCQkJKCgoKHUzMiljZmctPmFkZHJzZXR1cCA+PiAyKSAmIDB4MSkgPDwgMTApIHwKKwkJCQkJKCgodTMyKWNmZy0+bWVtdHlwZSAmIDB4MSkgPDwgOSkgfAorCQkJCQkoKCh1MzIpY2ZnLT5hZGRyc2V0dXAgJiAweDMpIDw8IDcpIHwKKwkJCQkJKCgodTMyKWNmZy0+bGV2ZWwgJiAweDEpIDw8IDYpIHwKKwkJCQkJKCgodTMyKWNmZy0+ZHFtX21vZGUgJiAweDEpIDw8IDUpIHwKKwkJCQkJKCgodTMyKWNmZy0+Y21kd2lkdGggJiAweGYpIDw8IDEpOworCisJCSoodm9sYXRpbGUgdTMyICopIEFTRF9DU0UgfD0gKDEgPDwgRVhQX0NTU0QxKTsKKwkKKwkJYnJlYWs7CisKKwljYXNlIEVYUF9DU0JPT1Q6CisJCSoodm9sYXRpbGUgdTMyICopU0RDMF9DU0JPT1RfQ0ZHID0gKCgodTMyKWNmZy0+YnVzd2lkdGggJiAweDMpIDw8IDExKSB8CisJCQkJCSgoKCh1MzIpY2ZnLT5hZGRyc2V0dXAgPj4gMikgJiAweDEpIDw8IDEwKSB8CisJCQkJCSgoKHUzMiljZmctPm1lbXR5cGUgJiAweDEpIDw8IDkpIHwKKwkJCQkJKCgodTMyKWNmZy0+YWRkcnNldHVwICYgMHgzKSA8PCA3KSB8CisJCQkJCSgoKHUzMiljZmctPmxldmVsICYgMHgxKSA8PCA2KSB8CisJCQkJCSgoKHUzMiljZmctPmRxbV9tb2RlICYgMHgxKSA8PCA1KSB8CisJCQkJCSgoKHUzMiljZmctPmNtZHdpZHRoICYgMHhmKSA8PCAxKTsKKwkJCisJCSoodm9sYXRpbGUgdTMyICopQVNEX0NTRSB8PSAoMSA8PCBFWFBfQ1NCT09UKTsKKwkJCisJCWJyZWFrOworCisJY2FzZSBFWFBfQ1NQMDoKKwkJKih2b2xhdGlsZSB1MzIgKilTREMwX0NTUDBfQ0ZHID0gKCgodTMyKWNmZy0+YnVzd2lkdGggJiAweDMpIDw8IDExKSB8CisJCQkJCSgoKCh1MzIpY2ZnLT5hZGRyc2V0dXAgPj4gMikgJiAweDEpIDw8IDEwKSB8CisJCQkJCSgoKHUzMiljZmctPm1lbXR5cGUgJiAweDEpIDw8IDkpIHwKKwkJCQkJKCgodTMyKWNmZy0+YWRkcnNldHVwICYgMHgzKSA8PCA3KSB8CisJCQkJCSgoKHUzMiljZmctPmxldmVsICYgMHgxKSA8PCA2KSB8CisJCQkJCSgoKHUzMiljZmctPmRxbV9tb2RlICYgMHgxKSA8PCA1KSB8CisJCQkJCSgoKHUzMiljZmctPmNtZHdpZHRoICYgMHhmKSA8PCAxKTsKKwkJCisJCSoodm9sYXRpbGUgdTMyICopQVNEX0NTRSB8PSAoMSA8PCBFWFBfQ1NQMCk7CisKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLTE7Cit9CisKKworaW50IFNvQ19oaWdoX21lbV9jZmcgKGludCBjcykKK3sKKwlzd2l0Y2ggKGNzKSB7CisJY2FzZSBFWFBfQ1NTRDA6CisJCSoodm9sYXRpbGUgdTMyICopQVNEX0NTRSAmPSB+KDEgPDwgNyk7CisKKwkJYnJlYWs7CisKKwljYXNlIEVYUF9DU1NEMToKKwkJKih2b2xhdGlsZSB1MzIgKilBU0RfQ1NFIHw9ICgxIDw8IDcpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisqIFNvQ19wbGxfY2ZnIC0gdXNlZCB0byBjb25maWd1cmUgQVJNIGFuZCBBTUJBIGJ1cyBjbG9jayBmcmVxdWVuY2llcworKgorKiBtb2RlIC0gQVJNIGNsb2NrIG1vZGUsCisqCTEgPSBhc3luYywgaW5kZXBlbmRlbnQgQVJNIGFuZCBBTUJBIGJ1cyBjbG9jayBmcmVxdWVuY2llcyAoUExMMiB1c2VkIGZvciBidXMgY2xvY2spLgorKgkwID0gc3luYywgQU1CQSBidXMgY2xvY2sgaGFsZiBBUk0gY2xvY2sgZnJlcXVlbmN5IChQTEwyIG5vdCB1c2VkKQorKgorKiBhcm1fY2xrIC0gQVJNIGNsb2NrIGZyZXF1ZW5jeSBpbiBIegorKgorKiBidXNfY2xrIC0gQU1CQSBCVVMgY2xvY2sgZnJlcXVlbmN5IGluIEh6CisqCisqLworaW50IFNvQ19wbGxfY2ZnIChpbnQgbW9kZSwgdW5zaWduZWQgaW50IGFybV9jbGssIHVuc2lnbmVkIGludCBidXNfY2xrKQoreworCXZvbGF0aWxlIHUzMiBkZWxheV9jb3VudDsKKwl1MzIgY2xrZjsKKwl1MzIgaTsKKworCWlmIChtb2RlID09IENMS19NT0RFX0FTWU5DKSB7CisJCS8qIHNldCBBUk0gYXN5bmMgY2xvY2sgbW9kZSAqLworCQlhc20gKCJtcmMgcDE1LCAwLCAlMCwgYzEsIGMwLCAwIjoiPXIiIChpKSk7CisJCWkgfD0gMHhDMDAwMDAwMDsKKwkJYXNtICgibWNyIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCI6IDoiciIgKGkpKTsKKworCQkvKiBhc3luYyBtb2RlICovCisJCWNsa2YgPSAoNCAqIGJ1c19jbGspIC8gQ0ZHX1JFRkNMS0ZSRVE7CisKKwkJLyogYnVzIHNldHVwICovCisJCS8qIHNldCBQTEwgaW50byBCWVBBU1MgbW9kZSAqLworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQU1CQV9QTEwgfD0gUExMX0JZUEFTUzsKKworCQkvKiB3YWl0IDUwMHVzIGZvciBQTEwgdG8gbG9jayAqLworCQlkZWxheV9jb3VudCA9IDEwMDA7CisJCXdoaWxlIChkZWxheV9jb3VudC0tKTsKKworCQkvKiBEaXNhYmxlIHRoZSBQTEwsIGJ5IHdyaXRpbmcgUExMIENvbnRyb2wgUmVnaXN0ZXIgYml0IDI1ID0gMS4gKi8KKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FNQkFfUExMIHw9IFBMTF9QT1dFUjsgCisJCisJCS8qIFByb2dyYW0gdGhlIFBMTCB0byB0aGUgZGVzaXJlZCB2YWx1ZSBhbmQgZW5hYmxlIHRoZSBQTEwsIGJ5IHdyaXRpbmcgUExMIENvbnRyb2wgUmVnaXN0ZXIgZmllbGRzIFcsIFgsIGFuZCBZLCAgKi8KKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FNQkFfUExMID0gUExMX0JZUEFTUyB8IFBMTF9QT1dFUiB8IChjbGtmICYgMHg3Zik7CisKKwkJLyogYW5kIHdyaXRpbmcgYml0IDI1ID0gMC4gKi8KKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FNQkFfUExMID0gUExMX01VWFNFTCB8IChjbGtmICYgMHg3Zik7CisJfSBlbHNlIHsKKwkJLyogc2V0IEFSTSBzeW5jIGNsb2NrIG1vZGUgKi8KKwkJYXNtICgibXJjIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCI6Ij1yIiAoaSkpOworCQlpIHw9IDB4NDAwMDAwMDA7CisJCWFzbSAoIm1jciBwMTUsIDAsICUwLCBjMSwgYzAsIDAiOiA6InIiIChpKSk7CisJfQorCisJLyogQVJNIHNldHVwICovCisJY2xrZiA9ICgyICogYXJtX2NsaykgLyBDRkdfUkVGQ0xLRlJFUTsKKwkKKwkvKiBzZXQgUExMIGludG8gQllQQVNTIG1vZGUgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX1BMTCB8PSBQTExfQllQQVNTOworCisJLyogd2FpdCA1MDB1cyBmb3IgUExMIHRvIGxvY2sgKi8KKwlkZWxheV9jb3VudCA9IDEwMDA7CisJd2hpbGUgKGRlbGF5X2NvdW50LS0pOworCisJLyogRGlzYWJsZSB0aGUgUExMLCBieSB3cml0aW5nIFBMTCBDb250cm9sIFJlZ2lzdGVyIGJpdCAyNSA9IDEuICovCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9QTEwgfD0gUExMX1BPV0VSOyAKKwkKKwkvKiBQcm9ncmFtIHRoZSBQTEwgdG8gdGhlIGRlc2lyZWQgdmFsdWUgYW5kIGVuYWJsZSB0aGUgUExMLCBieSB3cml0aW5nIFBMTCBDb250cm9sIFJlZ2lzdGVyIGZpZWxkcyBXLCBYLCBhbmQgWSAqLworCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fUExMID0gUExMX0JZUEFTUyB8IFBMTF9QT1dFUiB8IChjbGtmICYgMHg3Zik7IAorCisJLyphbmQgd3JpdGluZyBiaXQgMjUgPSAwLiAqLworCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fUExMICY9IH5QTExfUE9XRVI7IAorCisJLyogVGFrZSB0aGUgUExMIG91dCBvZiBieXBhc3MgbW9kZSwgYnkgd3JpdGluZyBQTEwgQ29udHJvbCBSZWdpc3RlciBiaXQgMjQgPSAwLiAqLworCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fUExMICY9IH5QTExfQllQQVNTOworCisJLy8gUmVmOiAKKwkvLyAxKSBQTEwgSW5pdGlhbGl6YXRpb24gUHJvY2VkdXJlICAoODJYWFgtRVJSLTAwMS1BLnBkZiApCisJLy8gMikgTTgyNXh4IFBMTCBSZWdpc3RlcnMgY2hhcHRlci5wZGYKKworCXJldHVybiAwOworfQorCisvKgorKiBTb0NfZ3Bpb19jZmcgLSBjb25maWd1cmUgR1BJTyBwaW5zIGFzIGlucHV0IG9yIG91dHB1dCBwaW5zCisqCisqIGdwaW8gLSBncGlvIHBpbgorKgorKiBtb2RlIC0gZ3BpbyBwaW4gbW9kZQorKglHUElPX1RZUEVfT1VUUFVUID0gb3V0cHV0CisqCUdQSU9fVFlQRV9JTlBVVCA9IGlucHV0CisqCisqLworaW50IFNvQ19ncGlvX2NmZyhpbnQgZ3BpbywgaW50IG1vZGUpCit7CisKKwlpZiAoKGdwaW8gPCAwKSB8fCAoZ3BpbyA+IDcpKQorCQlnb3RvIGVycjsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgR1BJT19UWVBFX0lOUFVUOgorCQkqKHZvbGF0aWxlIHUzMiAqKSBHUElPX09VVFBVVF9FTkFCTEUgJj0gfigxIDw8IGdwaW8pOworCisJCWJyZWFrOworCisJY2FzZSBHUElPX1RZUEVfT1VUUFVUOgorCQkqKHZvbGF0aWxlIHUzMiAqKSBHUElPX09VVFBVVF9FTkFCTEUgfD0gMSA8PCBncGlvOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ290byBlcnI7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIC0xOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvY29tY2VydG8vZW1hYy5jIGIvY3B1L2FybTkyMHQvY29tY2VydG8vZW1hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjA2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by9lbWFjLmMKQEAgLTAsMCArMSw3MzAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9ORVQpICYmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPX0VNQUMpCisKKyNpZiAhZGVmaW5lZChDT05GSUdfRU1BQzApICYmICFkZWZpbmVkKENPTkZJR19FTUFDMSkKKyNlcnJvciBtdXN0IGRlZmluZSBvbmUgb2YgQ09ORklHX0VNQUMwIG9yIENPTkZJR19FTUFDMQorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxuZXQuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX01JSSkgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKQorI2luY2x1ZGUgPG1paXBoeS5oPgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0RFVk5BTUVfU0laRQk4CisKK3N0cnVjdCBiZGVzYyB7CisJdm9sYXRpbGUgdTggKmJwdHI7CisJdm9sYXRpbGUgdTMyIGJjb250cm9sOworCXUzMiBkdW1teTE7CisJdTMyIGR1bW15MjsKK307CisKK3N0cnVjdCBmZGVzYyB7CisJLyogSGFyZHdhcmUgbWFwcGVkIGZpZWxkcyAqLworCXZvaWQgKm5leHQ7CQkvKiA0IGJ5dGVzICovCisJdm9sYXRpbGUgdTMyIHN5c3RlbTsJLyogNCBieXRlcyAqLworCXZvbGF0aWxlIHUzMiBmc3RhdHVzOwkvKiA0IGJ5dGVzICovCisJdm9sYXRpbGUgdTMyIGZjb250cm9sOwkvKiA0IGJ5dGVzICovCisJc3RydWN0IGJkZXNjIGJkZXNjOwkvKiAxNiBieXRlcyAqLworfTsKKworCitzdHJ1Y3QgZW1hY19kZXYgeworCWNoYXIgZGV2bmFtZVtNQVhfREVWTkFNRV9TSVpFXTsKKworCXUzMiBiYXNlYWRkcjsKKwl1MzIgaWRtYV9iYXNlYWRkcjsKKworCXM4IG1paWZkbDsKKwlzOCBtaWkxMDBsOworCisJdW5zaWduZWQgaW50IG1kX2NsazsKKwl1OCBwaHlfYWRkcjsKKworCXU4IG1paV9tb2RlOworCXU4IHBoeWN0cmxkaXM7CisJdTggbWlpX2xpbmtfcG9sOworfTsKKworCitzdGF0aWMgc3RydWN0IGVtYWNfZGV2IGVtYWMwID0geworCS5kZXZuYW1lID0gImVtYWMwIiwKKwkuYmFzZWFkZHIgPSBFTUFDMF9CQVNFQUREUiwKKwkuaWRtYV9iYXNlYWRkciA9IElETUFfRU1BQzBfQkFTRUFERFIsCisKKyNpZmRlZiBDT05GSUdfRU1BQzBfTUlJRkRMCisJLm1paWZkbCA9IENPTkZJR19FTUFDMF9NSUlGREwsCisjZWxzZQorCS5taWlmZGwgPSAtMSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0VNQUMwX01JSTEwMEwKKwkubWlpMTAwbCA9IENPTkZJR19FTUFDMF9NSUkxMDBMLAorI2Vsc2UKKwkubWlpMTAwbCA9IC0xLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRU1BQzBfTUlJX01PREUKKwkubWlpX21vZGUgPSBDT05GSUdfRU1BQzBfTUlJX01PREUsCisjZWxzZQorCS5taWlfbW9kZSA9IEVNQUNfUk1JSV9TTUlJX01PREUsCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FTUFDMF9QSFlDVFJMRElTCisJLnBoeWN0cmxkaXMgPSBDT05GSUdfRU1BQzBfUEhZQ1RSTERJUywKKyNlbHNlCisJLnBoeWN0cmxkaXMgPSAweDEsCisjZW5kaWYKKworI2lmIENPTkZJR19FTUFDMF9NSUlfTElOS19QT0wKKwkubWlpX2xpbmtfcG9sID0gQ09ORklHX0VNQUMwX01JSV9MSU5LX1BPTCwKKyNlbHNlCisJLm1paV9saW5rX3BvbCA9IDB4MCwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0VNQUMwX01EQ0xPQ0sKKwkubWRfY2xrID0gQ09ORklHX0VNQUMwX01EQ0xPQ0ssCisjZWxzZQorCS5tZF9jbGsgPSAyNTAwMDAwLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRU1BQzBfUEhZX0FERFIKKwkucGh5X2FkZHIgPSBDT05GSUdfRU1BQzBfUEhZX0FERFIsCisjZWxzZQorCS5waHlfYWRkciA9IDB4MDAsCisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE9fODAwCitzdGF0aWMgc3RydWN0IGVtYWNfZGV2IGVtYWMxID0geworCS5kZXZuYW1lID0gImVtYWMxIiwKKwkuYmFzZWFkZHIgPSBFTUFDMV9CQVNFQUREUiwKKwkuaWRtYV9iYXNlYWRkciA9IElETUFfRU1BQzFfQkFTRUFERFIsCisKKyNpZmRlZiBDT05GSUdfRU1BQzFfTUlJRkRMCisJLm1paWZkbCA9IENPTkZJR19FTUFDMV9NSUlGREwsCisjZWxzZQorCS5taWlmZGwgPSAtMSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0VNQUMxX01JSTEwMEwKKwkubWlpMTAwbCA9IENPTkZJR19FTUFDMV9NSUkxMDBMLAorI2Vsc2UKKwkubWlpMTAwbCA9IC0xLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRU1BQzFfTUlJX01PREUKKwkubWlpX21vZGUgPSBDT05GSUdfRU1BQzFfTUlJX01PREUsCisjZWxzZQorCS5taWlfbW9kZSA9IEVNQUNfUk1JSV9TTUlJX01PREUsCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FTUFDMV9QSFlDVFJMRElTCisJLnBoeWN0cmxkaXMgPSBDT05GSUdfRU1BQzFfUEhZQ1RSTERJUywKKyNlbHNlCisJLnBoeWN0cmxkaXMgPSAweDEsCisjZW5kaWYKKworI2lmIENPTkZJR19FTUFDMV9NSUlfTElOS19QT0wKKwkubWlpX2xpbmtfcG9sID0gQ09ORklHX0VNQUMxX01JSV9MSU5LX1BPTCwKKyNlbHNlCisJLm1paV9saW5rX3BvbCA9IDB4MCwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0VNQUMxX01EQ0xPQ0sKKwkubWRfY2xrID0gQ09ORklHX0VNQUMxX01EQ0xPQ0ssCisjZWxzZQorCS5tZF9jbGsgPSAyNTAwMDAwLAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRU1BQzFfUEhZX0FERFIKKwkucGh5X2FkZHIgPSBDT05GSUdfRU1BQzFfUEhZX0FERFIsCisjZWxzZQorCS5waHlfYWRkciA9IDB4MDAsCisjZW5kaWYKK307CisjZW5kaWYgLyogQ09ORklHX0NPTUNFUlRPXzgwMCAqLworCisjaWZkZWYgQ09ORklHX0VNQUMwCitzdGF0aWMgc3RydWN0IGVtYWNfZGV2ICplbWFjID0gJmVtYWMwOworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgZW1hY19kZXYgKmVtYWMgPSAmZW1hYzE7CisjZW5kaWYKKworI2RlZmluZSBOVU1fUlhfREVTQwkJMTYKKyNkZWZpbmUgTUFYX1JYX0JVRkZfU0laRQkyMDQ4CisKK3N0YXRpYyB1MzIgcnhfbmV4dDsKK3N0YXRpYyB1OCByeF9yaW5nX2RhdGFfYnVmZltOVU1fUlhfREVTQyAqIE1BWF9SWF9CVUZGX1NJWkVdOworCitzdGF0aWMgc3RydWN0IGZkZXNjIGJ1ZmZfYWxpZ25lZFtOVU1fUlhfREVTQ10gX19hdHRyaWJ1dGUoKGFsaWduZWQoMTYpKSk7CisKK3N0YXRpYyBzdHJ1Y3QgZmRlc2MgdHhfZmRlc2MgX19hdHRyaWJ1dGUoKGFsaWduZWQoMTYpKSk7CisKK3N0YXRpYyBzdHJ1Y3QgZmRlc2MgKnJ4X3Jpbmc7CisKKyNkZWZpbmUgRU1BQ19kaXNhYmxlX3J4KGVtYWMpXAorCSoodm9sYXRpbGUgdTMyICopKChlbWFjKS0+YmFzZWFkZHIgKyBFTUFDX1JYQ1RSTCkgJj0gflJYX0VOCisKKyNkZWZpbmUgRU1BQ19kaXNhYmxlX3R4KGVtYWMpXAorCSoodm9sYXRpbGUgdTMyICopKChlbWFjKS0+YmFzZWFkZHIgKyBFTUFDX1RYQ1RSTCkgJj0gflRYX0VOCisKKyNkZWZpbmUgRU1BQ19lbmFibGVfcngoZW1hYylcCisJKih2b2xhdGlsZSB1MzIgKikoKGVtYWMpLT5iYXNlYWRkciArIEVNQUNfUlhDVFJMKSB8PSBSWF9FTgorCisjZGVmaW5lIEVNQUNfZW5hYmxlX3R4KGVtYWMpXAorCSoodm9sYXRpbGUgdTMyICopKChlbWFjKS0+YmFzZWFkZHIgKyBFTUFDX1RYQ1RSTCkgfD0gVFhfRU4KKworCitzdGF0aWMgaW50IGdldF9tZGNja3NlKGludCBtZF9jbGspCit7CisJdW5zaWduZWQgaW50IGRpdiA9IENGR19IWl9DTE9DSyAvIG1kX2NsazsKKworCWlmIChkaXYgPiA2MCkKKwkJcmV0dXJuIDB4MzsKKwllbHNlIGlmIChkaXYgPiAyOCkKKwkJcmV0dXJuIDB4MjsKKwllbHNlIGlmIChkaXYgPiAxNikKKwkJcmV0dXJuIDB4MTsKKwllbHNlCisJCXJldHVybiAweDA7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19NSUkpIHx8IChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01JSSkKKworc3RhdGljIGludCBjb21jZXJ0b19taWlwaHlfd3JpdGUoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIHNob3J0IHZhbHVlKQoreworCXN0cnVjdCBlbWFjX2RldiAqZW1hYzsKKworCWlmICgoYWRkciA+IDMxKSB8fCAocmVnID4gMzEpKQorCQlyZXR1cm4gMTsKKworCWlmICghc3RyY21wKGRldm5hbWUsIGVtYWMwLmRldm5hbWUpKQorCQllbWFjID0gJmVtYWMwOworI2lmZGVmIENPTkZJR19DT01DRVJUT184MDAKKwllbHNlIGlmICghc3RyY21wKGRldm5hbWUsIGVtYWMxLmRldm5hbWUpKQorCQllbWFjID0gJmVtYWMxOworI2VuZGlmCisJZWxzZQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX01EQ0EpICYgRU1BQ19NRElPX0JVU1kpCisJCXJldHVybiAxOworCisJLyogc3RhcnQgYSB3cml0ZSAqLworCSoodm9sYXRpbGUgdTMyICopKGVtYWMtPmJhc2VhZGRyICsgRU1BQ19NRERBVEEpID0gdmFsdWU7CisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX01EQ0EpID0gKHJlZyB8IChhZGRyIDw8IDUpIHwgRU1BQ19NRElPX1dSSVRFIHwgRU1BQ19NRElPX0JVU1kpOworCisJd2hpbGUgKCoodm9sYXRpbGUgdTMyICopKGVtYWMtPmJhc2VhZGRyICsgRU1BQ19NRENBKSAmIEVNQUNfTURJT19CVVNZKSA7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGNvbWNlcnRvX21paXBoeV9yZWFkKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgYWRkciwKKwkJCXVuc2lnbmVkIGNoYXIgcmVnLCB1bnNpZ25lZCBzaG9ydCAqdmFsdWUpCit7CisJc3RydWN0IGVtYWNfZGV2ICplbWFjOworCisJaWYgKChhZGRyID4gMzEpIHx8IChyZWcgPiAzMSkpCisJCXJldHVybiAxOworCisJaWYgKCFzdHJjbXAoZGV2bmFtZSwgZW1hYzAuZGV2bmFtZSkpCisJCWVtYWMgPSAmZW1hYzA7CisjaWZkZWYgQ09ORklHX0NPTUNFUlRPXzgwMAorCWVsc2UgaWYgKCFzdHJjbXAoZGV2bmFtZSwgZW1hYzEuZGV2bmFtZSkpCisJCWVtYWMgPSAmZW1hYzE7CisjZW5kaWYKKwllbHNlCisJCXJldHVybiAtMTsKKworCWlmICgqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfTURDQSkgJiBFTUFDX01ESU9fQlVTWSkKKwkJcmV0dXJuIDE7CisKKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfTURDQSkgPSAocmVnIHwgKGFkZHIgPDwgNSkgfCBFTUFDX01ESU9fQlVTWSk7CisKKwl3aGlsZSAoKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX01EQ0EpICYgRU1BQ19NRElPX0JVU1kpIDsKKworCSp2YWx1ZSA9ICoodm9sYXRpbGUgdTMyICopKGVtYWMtPmJhc2VhZGRyICsgRU1BQ19NRERBVEEpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHUzMiBnZXRfb2NyX21paV9jZmcoc3RydWN0IGVtYWNfZGV2ICplbWFjLCB1MzIgb2NyKQoreworCXVuc2lnbmVkIHNob3J0IHRtcDsKKworCW1paXBoeV9yZWFkKGVtYWMtPmRldm5hbWUsIGVtYWMtPnBoeV9hZGRyLCBQSFlfQk1TUiwgJnRtcCk7CisKKyNpZmRlZiBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04KKwlpZiAobWlpcGh5X2xpbmsoZW1hYy0+ZGV2bmFtZSwgZW1hYy0+cGh5X2FkZHIpKQorCQlvY3IgJj0gfkVNQUNfT0NSX01JSTEwMEw7CisJZWxzZQorCQlvY3IgfD0gRU1BQ19PQ1JfTUlJMTAwTDsKKyNlbHNlCisJb2NyICY9IH5FTUFDX09DUl9NSUkxMDBMOworI2VuZGlmIC8qIENGR19GQVVMVF9FQ0hPX0xJTktfRE9XTiAqLworCWlmIChlbWFjLT5taWlmZGwgPCAwKSB7CisJCS8qIGdldCBsaW5rIGR1cGxleCBmcm9tIHBoeSAqLworCQlpZiAobWlpcGh5X2R1cGxleChlbWFjLT5kZXZuYW1lLCBlbWFjLT5waHlfYWRkcikgPT0gSEFMRikKKwkJCW9jciB8PSBFTUFDX09DUl9NSUlGREw7CisJCWVsc2UKKwkJCW9jciAmPSB+RU1BQ19PQ1JfTUlJRkRMOworCX0gZWxzZSB7CisJCS8qIGZvcmNlIGxpbmsgZHVwbGV4ICovCisJCWlmIChlbWFjLT5taWlmZGwpCisJCQlvY3IgfD0gRU1BQ19PQ1JfTUlJRkRMOworCQllbHNlCisJCQlvY3IgJj0gfkVNQUNfT0NSX01JSUZETDsKKwl9CisKKwlpZiAoZW1hYy0+bWlpMTAwbCA8IDApIHsKKwkJLyogZ2V0IGxpbmsgc3BlZWQgZnJvbSBwaHkgKi8KKwkJaWYgKG1paXBoeV9zcGVlZChlbWFjLT5kZXZuYW1lLCBlbWFjLT5waHlfYWRkcikgPT0gXzEwQkFTRVQpCisJCQlvY3IgfD0gRU1BQ19PQ1JfTUlJMTAwTDsKKwkJZWxzZQorCQkJb2NyICY9IH5FTUFDX09DUl9NSUkxMDBMOworCX0gZWxzZSB7CisJCS8qIGZvcmNlIGxpbmsgc3BlZWQgKi8KKwkJaWYgKGVtYWMtPm1paTEwMGwpCisJCQlvY3IgfD0gRU1BQ19PQ1JfTUlJMTAwTDsKKwkJZWxzZQorCQkJb2NyICY9IH5FTUFDX09DUl9NSUkxMDBMOworCX0KKworCXJldHVybiBvY3I7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB1MzIgZ2V0X29jcl9taWlfY2ZnKHN0cnVjdCBlbWFjX2RldiAqZW1hYywgdTMyIG9jcikKK3sKKwlvY3IgJj0gfkVNQUNfT0NSX01JSTEwMEw7CisKKwlpZiAoZW1hYy0+bWlpZmRsIDwgMCkgeworCQlvY3IgJj0gfkVNQUNfT0NSX01JSUZETDsKKwl9IGVsc2UgeworCQkvKiBmb3JjZSBsaW5rIGR1cGxleCAqLworCQlpZiAoZW1hYy0+bWlpZmRsKQorCQkJb2NyIHw9IEVNQUNfT0NSX01JSUZETDsKKwkJZWxzZQorCQkJb2NyICY9IH5FTUFDX09DUl9NSUlGREw7CisJfQorCisJaWYgKGVtYWMtPm1paTEwMGwgPCAwKSB7CisJCW9jciAmPSB+RU1BQ19PQ1JfTUlJMTAwTDsKKwl9IGVsc2UgeworCQkvKiBmb3JjZSBsaW5rIHNwZWVkICovCisJCWlmIChlbWFjLT5taWkxMDBsKQorCQkJb2NyIHw9IEVNQUNfT0NSX01JSTEwMEw7CisJCWVsc2UKKwkJCW9jciAmPSB+RU1BQ19PQ1JfTUlJMTAwTDsKKwl9CisKKwlyZXR1cm4gb2NyOworfQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX01JSSkgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKSAqLworCisKKyNpZmRlZiBDT05GSUdfTkVUX01VTFRJCisKKyNlbHNlCitpbnQgY29tY2VydG9fbWlpcGh5X2luaXRpYWxpemUoYmRfdCAqYmlzKQoreworI2lmIGRlZmluZWQoQ09ORklHX01JSSkgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKQorCXUzMiBvY3I7CisKKyNpZmRlZiBDT05GSUdfRU1BQzAKKwlvY3IgPSAqKHZvbGF0aWxlIHUzMiAqKShlbWFjMC5iYXNlYWRkciArIEVNQUNfT0NSKTsKKwlvY3IgJj0gfigweDMgPDwgMik7CisJKih2b2xhdGlsZSB1MzIgKikoZW1hYzAuYmFzZWFkZHIgKyBFTUFDX09DUikgPSBvY3IgfCAoZ2V0X21kY2Nrc2UoZW1hYzAubWRfY2xrKSA8PCAyKTsKKwltaWlwaHlfcmVnaXN0ZXIoZW1hYzAuZGV2bmFtZSwgY29tY2VydG9fbWlpcGh5X3JlYWQsIGNvbWNlcnRvX21paXBoeV93cml0ZSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19FTUFDMQorCW9jciA9ICoodm9sYXRpbGUgdTMyICopKGVtYWMxLmJhc2VhZGRyICsgRU1BQ19PQ1IpOworCW9jciAmPSB+KDB4MyA8PCAyKTsKKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjMS5iYXNlYWRkciArIEVNQUNfT0NSKSA9IG9jciB8IChnZXRfbWRjY2tzZShlbWFjMS5tZF9jbGspIDw8IDIpOworCW1paXBoeV9yZWdpc3RlcihlbWFjMS5kZXZuYW1lLCBjb21jZXJ0b19taWlwaHlfcmVhZCwgY29tY2VydG9fbWlpcGh5X3dyaXRlKTsKKyNlbmRpZgorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfTUlJKSB8fCAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9NSUkpICovCisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfTkVUX01VTFRJICovCisKK3N0YXRpYyBpbnQgZW1hY19hcmNfYWRkKHN0cnVjdCBlbWFjX2RldiAqZW1hYywgdTggKm1hY19hZGRyKQoreworCXUzMiB0ZW1wOworCXU4IG9mZnNldCA9IDA7CisKKwkvKiB3ZSBhcmUgaW4gYm9vdCBsb2FkZXIsIGV2ZW4gdGhvdWdoIHRoaXMgRU1BQyBoYW5kbGVzIG1vcmUgdGhhbiAyMCBlbnRyaWVzLAorCSAgIHdlIG9ubHkgZ29ubmEgdXNlIG9uZSAoRW50cnkgMCkgKi8KKworCXRlbXAgPSAqbWFjX2FkZHIrKzsKKwl0ZW1wIDw8PSA4OworCXRlbXAgfD0gKm1hY19hZGRyKys7CisJdGVtcCA8PD0gODsKKwl0ZW1wIHw9ICptYWNfYWRkcisrOworCXRlbXAgPDw9IDg7CisJdGVtcCB8PSAqbWFjX2FkZHIrKzsKKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfQVJDX1RBQkxFICsgb2Zmc2V0KSA9IHRlbXA7CisJb2Zmc2V0ICs9IDQ7CisJdGVtcCA9ICptYWNfYWRkcisrOworCXRlbXAgPDw9IDg7CisJdGVtcCB8PSAqbWFjX2FkZHIrKzsKKwl0ZW1wIDw8PSAxNjsKKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfQVJDX1RBQkxFICsgb2Zmc2V0KSA9ICgoKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX0FSQ19UQUJMRSArIG9mZnNldCkpICYgMHgwMDAwRkZGRikgfCB0ZW1wOworCisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX0FSQ0VOQSkgfD0gMTsKKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfQVJDQ1RSTCkgfD0gQVJDX0NPTVBFTkE7CisKKwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgdm9pZCBlbWFjX3J4X3JpbmdfaW5pdCh2b2lkKQoreworCXUzMiBpOworCXU4ICpwVTg7CisKKwlwVTggPSByeF9yaW5nX2RhdGFfYnVmZjsKKwlyeF9yaW5nID0gYnVmZl9hbGlnbmVkOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ERVNDIC0gMTsgaSsrKSB7CisJCXJ4X3JpbmdbaV0ubmV4dCA9ICZyeF9yaW5nW2kgKyAxXTsKKwkJcnhfcmluZ1tpXS5zeXN0ZW0gPSBpOworCQlyeF9yaW5nW2ldLmZzdGF0dXMgPSAwOworCQlyeF9yaW5nW2ldLmZjb250cm9sID0gSURNQV9GQ09OVFJPTF9GUkVBRFk7CisJCXJ4X3JpbmdbaV0uYmRlc2MuYnB0ciA9IHBVODsKKwkJcnhfcmluZ1tpXS5iZGVzYy5iY29udHJvbCA9IDA7CisJCXBVOCArPSBNQVhfUlhfQlVGRl9TSVpFOworCX0KKworCXJ4X3JpbmdbaV0ubmV4dCA9ICZyeF9yaW5nWzBdOworCXJ4X3JpbmdbaV0uc3lzdGVtID0gaTsKKwlyeF9yaW5nW2ldLmZzdGF0dXMgPSAwOworCXJ4X3JpbmdbaV0uZmNvbnRyb2wgPSAwOworCXJ4X3JpbmdbaV0uYmRlc2MuYnB0ciA9IHBVODsKKwlyeF9yaW5nW2ldLmJkZXNjLmJjb250cm9sID0gMDsKKworCXJ4X25leHQgPSAwOworfQorCitzdGF0aWMgdm9pZCBlbWFjX2lwX2luaXQoc3RydWN0IGVtYWNfZGV2ICplbWFjKQoreworCXUzMiBpOworCisJLyogRU1BQ19NQUNDVFJMIHJlZ2lzdGVyIDogc2V0IEZ1bGxEdXAgKGFzIE1JSV9Db25uIGlzIGhpZ2gpLCBDb25uIGFzIEZvcmNlIE1JSSwgYW5kIFNvZnQgcmVzZXQgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfTUFDQ1RSTCkgPSBNQUNfRlVMTERVUCB8IE1BQ19NSUlSQVRFIHwgTUFDX1JFU0VUOworCisJLyogd2FpdCByZXNldCBkb25lICovCisJd2hpbGUgKCoodm9sYXRpbGUgdTMyICopKGVtYWMtPmJhc2VhZGRyICsgRU1BQ19NQUNDVFJMKSAmIE1BQ19SRVNFVCkgOworCisJLyogRU1BQ19BUkNfVEFCTEUgaW5pdCAqLworCWZvciAoaSA9IDA7IGkgPCAoNiAqIE1BWF9BUkNfRU5UUklFUyk7IGkgKz0gNCkKKwkJKih2b2xhdGlsZSB1MzIgKikoKGVtYWMtPmJhc2VhZGRyICsgRU1BQ19BUkNfVEFCTEUpICsgaSkgPSAwOworCisJLyogRU1BQ19BUkNFTkEgOiBzZXQgdG8gMCBhcyBubyBBUkMgZW50cnkgeWV0ICovCisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX0FSQ0VOQSkgPSAwOworCisJLyogRU1BQ19BUkNDVFJMIDogYWNjZXB0IEJyb2FkQ2FzdCBvbmx5IChMb2NhbCBNQUMgYWRkcmVzcyBubyB5ZXQgZGVmaW5lZCkgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfQVJDQ1RSTCkgPSBBUkNfQlJPQURBQ0M7CisKKwkvKiBFTUFDX1RYQ1RSTCAgOiBzZXQgVHhfZW4gKi8KKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfVFhDVFJMKSA9IFRYX0VOOworCisJLyogRU1BQ19SWENUUkwgIDogc2V0IFJ4X2VuLCBTdHJpcCBDUkMsIFNob3J0RW4sICovCisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX1JYQ1RSTCkgPSBSWF9FTiB8IFJYX1NUUklQQ1JDIHwgUlhfU0hPUlRFTjsKK30KKworCitzdGF0aWMgdm9pZCBlbWFjX2lwaWZfaW5pdChzdHJ1Y3QgZW1hY19kZXYgKmVtYWMpCit7CisJdTMyIG9jciwgaWNyOworCisjaWZkZWYgQ09ORklHX0NPTUNFUlRPXzUzMAorCW9jciA9IDB4MDAyMDAyMDAgfCAoZ2V0X21kY2Nrc2UoZW1hYy0+bWRfY2xrKSA8PCAyKTsJLyogZm9yY2UgMTAwTWJpdCwgZnVsbCBkdXBsZXgsIGxpbmsgdXAgKi8KKwlpY3IgPSAweDAwMDAwMDAwOworCisJb2NyID0gZ2V0X29jcl9taWlfY2ZnKGVtYWMsIG9jcik7CisjZWxzZQorCW9jciA9IDB4MDAyMDAyMDAgfCAoZ2V0X21kY2Nrc2UoZW1hYy0+bWRfY2xrKSA8PCAyKTsJLyogZm9yY2UgMTAwTWJpdCwgZnVsbCBkdXBsZXgsIGxpbmsgdXAgKi8KKwlpY3IgPSAweDAwMDA4MDAwOwkJCQkJLyogdXNlIHNvZnR3YXJlIHNldHRpbmdzICovCisKKwlzd2l0Y2ggKGVtYWMtPm1paV9tb2RlKSB7CisJY2FzZSBFTUFDX01JSV9NT0RFOgorCQlvY3IgfD0gRU1BQ19PQ1JfU0VMX01JSV9NT0RFOworCQlicmVhazsKKworCWNhc2UgRU1BQ19GT1JDRV9STUlJX01PREU6CisJCW9jciAmPSB+RU1BQ19PQ1JfU0VMX01JSV9NT0RFOworCQlvY3IgfD0gRU1BQ19PQ1JfU1dfU01JSV9PVlJEOworCQlvY3IgJj0gfkVNQUNfT0NSX1NXX1NNSUlfTU9ERTsKKwkJYnJlYWs7CisKKwljYXNlIEVNQUNfRk9SQ0VfU01JSV9NT0RFOgorCQlvY3IgJj0gfkVNQUNfT0NSX1NFTF9NSUlfTU9ERTsKKwkJb2NyIHw9IEVNQUNfT0NSX1NXX1NNSUlfT1ZSRDsKKwkJb2NyIHw9IEVNQUNfT0NSX1NXX1NNSUlfTU9ERTsKKwkJYnJlYWs7CisKKwljYXNlIEVNQUNfUk1JSV9TTUlJX01PREU6CisJZGVmYXVsdDoKKwkJb2NyICY9IH5FTUFDX09DUl9TRUxfTUlJX01PREU7CisJCW9jciAmPSB+RU1BQ19PQ1JfU1dfU01JSV9PVlJEOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGVtYWMtPm1paV9tb2RlKSB7CisJY2FzZSBFTUFDX01JSV9NT0RFOgorCQlvY3IgPSBnZXRfb2NyX21paV9jZmcoZW1hYywgb2NyKTsKKwkJYnJlYWs7CisKKwljYXNlIEVNQUNfRk9SQ0VfUk1JSV9NT0RFOgorCWNhc2UgRU1BQ19GT1JDRV9TTUlJX01PREU6CisJY2FzZSBFTUFDX1JNSUlfU01JSV9NT0RFOgorCWRlZmF1bHQ6CisJCWlmIChlbWFjLT5waHljdHJsZGlzKSB7CisJCQlpY3IgfD0gRU1BQ19JQ1JfUEhZQ1RSTERJUzsKKworCQkJb2NyID0gZ2V0X29jcl9taWlfY2ZnKGVtYWMsIG9jcik7CisKKwkJfSBlbHNlIHsKKwkJCWljciAmPSB+RU1BQ19JQ1JfUEhZQ1RSTERJUzsKKwkJCWljciAmPSB+KEVNQUNfSUNSX01JSTEwMExfUE9MIHwgRU1BQ19JQ1JfTUlJRkRMX1BPTCB8IEVNQUNfSUNSX01JSUxJTktfUE9MKTsKKwkJCWljciB8PSAoZW1hYy0+bWlpX2xpbmtfcG9sICYgMHg3KSA8PCA4OworCQl9CisKKwkJYnJlYWs7CisJfQorI2VuZGlmCisKKwkvKiBJbml0IEVNQUMgT3BlcmF0aW9uIENvbnRyb2xsaW5nIFJlZ2lzdGVyICovCisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX09DUikgPSBvY3I7CisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX0lDUikgPSBpY3I7CisKKwkvKiBpbml0IERNQSBUWC9SWCBEYXRhIEZJRk8gQ29uZmlnIFJlZ2lzdGVycyAqLworCSoodm9sYXRpbGUgdTMyICopKGVtYWMtPmJhc2VhZGRyICsgRU1BQ19IT1NUX0ZJRk9fQ09OVFJPTCkgPSBFTUFDX0hPU1RfSEJUWFJRX0VOIHwgRU1BQ19IT1NUX1JYRkZfRU4gfCBFTUFDX0hPU1RfSEJUWFJRX0VOIHwgRU1BQ19IT1NUX1RYRkZfRU47CisKKwkvKiBUWCB0aHJlc2hvbGQgIEhvc3QgPUVNQUMgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfSE9TVF9GSUZPX1RYSElHSCkgPSAweDAwMEYzOworCisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX0hPU1RfRklGT19UWExPVykgPSAweDAwRjA7CisKKwkvKiBSWCB0aHJlc2hvbGQgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfSE9TVF9GSUZPX1JYSElHSCkgPSAweDAwMTM7CisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX0hPU1RfRklGT19SWExPVykgPSAweDAwMTI7CisKKwkvKiBhcm0gc2lkZSAqLworCisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX0FSTV9GSUZPX1RYSElHSCkgPSAweDAwQzA7CisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX0FSTV9GSUZPX1RYTE9XKSA9IDB4MDAyMDsKKworCS8qIFJYIHRocmVzaG9sZCAqLworCSoodm9sYXRpbGUgdTMyICopKGVtYWMtPmJhc2VhZGRyICsgRU1BQ19BUk1fRklGT19SWEhJR0gpID0gMHgwMEUwOworCSoodm9sYXRpbGUgdTMyICopKGVtYWMtPmJhc2VhZGRyICsgRU1BQ19BUk1fRklGT19SWExPVykgPSAweDAwNDA7CisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+YmFzZWFkZHIgKyBFTUFDX0FSTV9GSUZPX0NPTlRST0wpID0gRU1BQ19BUk1fUlhEUkVRV0UgfCBFTUFDX0FSTV9UWERSRVFSRTsKKworCSoodm9sYXRpbGUgdTMyICopQVNBX1RFUk1JTkFMX0NPVU5UX0NGRyB8PSBBU0FfVENfUkVRSURNQUVOOworCit9CisKKworc3RhdGljIHZvaWQgZW1hY19kbWFfaW5pdChzdHJ1Y3QgZW1hY19kZXYgKmVtYWMpCit7CisJLyogSW5pdCBJRE1BICovCisJLyogTWVtb3J5IHRvIEVNQUMgKFR4KSAqLworCSoodm9sYXRpbGUgdTMyICopKGVtYWMtPmlkbWFfYmFzZWFkZHIgKyBNTUVNX0JVUlNUKSA9IChJRE1BX0JVUlNUX01BU0sgJiAweEZGKSB8IChJRE1BX1BSVFlfTUFTSyAmIDB4MDIwMCk7CS8qIGJ1cnN0IHNpemUgMjU1LCBwcmlvcml0eSAxICovCisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+aWRtYV9iYXNlYWRkciArIE1NRU1fU1RBUlQpID0gMDsKKworCS8qIEVNQUMgdG8gTWVtb3J5IChSeCkgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5pZG1hX2Jhc2VhZGRyICsgRU1NTV9CVVJTVCkgPSAoSURNQV9CVVJTVF9NQVNLICYgMHhGRikgfCAoSURNQV9QUlRZX01BU0sgJiAweDAxMDApOwkvKiBidXJzdCBzaXplIDI1NSwgcHJpb3JpdHkgMSAqLyAgCisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+aWRtYV9iYXNlYWRkciArIEVNTU1fU1RBUlQpID0gMDsKK30KKworCitzdGF0aWMgaW50IGVtYWNfaW5pdChzdHJ1Y3QgZW1hY19kZXYgKmVtYWMsIHU4ICptYWNfYWRkcikKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5pZG1hX2Jhc2VhZGRyICsgRU1NTV9TT0ZUX1JFU0VUKSA9IDB4MTsKKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5pZG1hX2Jhc2VhZGRyICsgTU1FTV9TT0ZUX1JFU0VUKSA9IDB4MTsKKworCSoodm9sYXRpbGUgdTMyICopKGVtYWMtPmJhc2VhZGRyICsgRU1BQ19PQ1IpIHw9IEVNQUNfT0NSX0lQX0hSRVNFVDsKKwl1ZGVsYXkoMTAwKTsKKwkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5iYXNlYWRkciArIEVNQUNfT0NSKSAmPSB+RU1BQ19PQ1JfSVBfSFJFU0VUOworCisJZW1hY19pcGlmX2luaXQoZW1hYyk7CisJZW1hY19pcF9pbml0KGVtYWMpOworCWVtYWNfZG1hX2luaXQoZW1hYyk7CisKKwkvKiBBZGQgTWFjIEFkZHJlc3MgaW4gdGhlIEFSQyB0YWJsZSAqLworCWVtYWNfYXJjX2FkZChlbWFjLCBtYWNfYWRkcik7CisKKwkvKiBJbml0IEVodGVybmV0IGJ1ZmZlcnMgKi8KKwllbWFjX3J4X3JpbmdfaW5pdCgpOworCisJLyogU3RhcnQgUnggRURNQSAqLworCSoodm9sYXRpbGUgdTMyICopKGVtYWMtPmlkbWFfYmFzZWFkZHIgKyBFTU1NX0hFQUQpID0gKHUzMikgJnJ4X3JpbmdbcnhfbmV4dF07CisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+aWRtYV9iYXNlYWRkciArIEVNTU1fU1RBUlQpIHw9IElETUFfU1RBUlQ7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGVtYWNfc2VuZChzdHJ1Y3QgZW1hY19kZXYgKmVtYWMsIHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKworCW1lbXNldCgmdHhfZmRlc2MsIDAsIHNpemVvZihzdHJ1Y3QgZmRlc2MpKTsKKworCS8qIGJ1aWxkIHRoZSB0eCBmcmFtZSBkZXNjcmlwdG9yIGhlcmUgKi8KKwl0eF9mZGVzYy5mY29udHJvbCA9IElETUFfRkNPTlRST0xfRlJFQURZIHwgSURNQV9GQ09OVFJPTF9GTEFTVDsKKwl0eF9mZGVzYy5mc3RhdHVzID0gMDsKKwl0eF9mZGVzYy5iZGVzYy5icHRyID0gcGFja2V0OworCXR4X2ZkZXNjLmJkZXNjLmJjb250cm9sID0gbGVuZ3RoIHwgSURNQV9CQ09OVFJPTF9CTEFTVDsKKworCS8qIENoZWNrIGlmIERNQSBTdG9wcGVkICovCisJaWYgKCEoKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+aWRtYV9iYXNlYWRkciArIE1NRU1fU1RBUlQpICYgSURNQV9TVEFSVCkpIHsKKwkJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+aWRtYV9iYXNlYWRkciArIE1NRU1fSEVBRCkgPSAodTMyKSAmdHhfZmRlc2M7CisJCSoodm9sYXRpbGUgdTMyICopKGVtYWMtPmlkbWFfYmFzZWFkZHIgKyBNTUVNX1NUQVJUKSB8PSBJRE1BX1NUQVJUOworCX0gZWxzZSB7CisJCXByaW50ZigiRW1hYzogdHggRURNQSBidXN5IVxuIik7CisJCXJldHVybiAoLTEpOworCX0KKworCWkgPSAwOworCXdoaWxlICgodHhfZmRlc2MuZnN0YXR1cyAmIElETUFfRlNUQVRVU19GUkFNRV9ET05FX01BU0spID09IDApIHsKKwkJdWRlbGF5KDEwMCk7CisJCWkrKzsKKwkJaWYgKGkgPT0gNTAwMDApIHsKKwkJCXByaW50ZigiRW1hYzogdHggdGltZWQgb3V0ISAleFxuIiwgdHhfZmRlc2MuZnN0YXR1cyk7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCX0KKworCWlmICgqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5pZG1hX2Jhc2VhZGRyICsgTU1FTV9TVEFSVCkgJiBJRE1BX1NUQVJUKSB7CisJCXByaW50ZigiRW1hYzogdHggZGlkIG5vdCBzdG9wIGFmdGVyIHNlbmRpbmcgYSBwYWNrZXQhXG4iKTsKKwl9CisKKwlyZXR1cm4gKGxlbmd0aCk7Cit9CisKKworc3RhdGljIGludCBlbWFjX3J4KHN0cnVjdCBlbWFjX2RldiAqZW1hYykKK3sKKwlpbnQgcnhfcHJldjsKKwlpbnQgbGVuZ3RoOworCWludCB0b3RhbF9sZW5ndGggPSAwOworCisJLyogbG9vcCB0aHJ1IHJ4IEZEZXNjcyAqLworCXdoaWxlICgxKSB7CisJCWlmICgocnhfcmluZ1tyeF9uZXh0XS5mc3RhdHVzICYgSURNQV9GU1RBVFVTX0ZSQU1FX0RPTkVfTUFTSykgPT0gMCkKKwkJCWJyZWFrOworCisJCS8qIG1hcmsgcnhfbmV4dCBub3QgdXNhYmxlICovCisJCXJ4X3JpbmdbcnhfbmV4dF0uZmNvbnRyb2wgPSAwOworCisJCWlmIChyeF9yaW5nW3J4X25leHRdLmZzdGF0dXMgJiAoMSA8PCAxMCkpIHsKKworCQkJbGVuZ3RoID0gcnhfcmluZ1tyeF9uZXh0XS5iZGVzYy5iY29udHJvbCAmIElETUFfQkNPTlRST0xfQkxFTl9NQVNLOworCQkJaWYgKGxlbmd0aCA+IE1BWF9SWF9CVUZGX1NJWkUpIHsKKwkJCQlwcmludGYoIkVtYWM6IGZyYW1lIHRvbyBiaWcgKCVkIGJ5dGVzKSFcbiIsIGxlbmd0aCk7CisJCQkJbGVuZ3RoID0gTUFYX1JYX0JVRkZfU0laRTsKKwkJCX0KKworCQkJLyogUGFzcyB0aGUgcGFja2V0IHVwIHRvIHRoZSBwcm90b2NvbCBsYXllcnMuICovCisJCQlOZXRSZWNlaXZlKHJ4X3JpbmdbcnhfbmV4dF0uYmRlc2MuYnB0ciwgbGVuZ3RoKTsKKwkJCXRvdGFsX2xlbmd0aCArPSBsZW5ndGg7CisJCX0KKworCQkvKiByeF9wcmV2IGNhbiBiZSB1c2VkIG5vdyAqLworCQlpZiAocnhfbmV4dCA9PSAwKQorCQkJcnhfcHJldiA9IE5VTV9SWF9ERVNDIC0gMTsKKwkJZWxzZQorCQkJcnhfcHJldiA9IHJ4X25leHQgLSAxOworCisJCXJ4X3JpbmdbcnhfcHJldl0uZnN0YXR1cyA9IDA7CisJCXJ4X3JpbmdbcnhfcHJldl0uZmNvbnRyb2wgPSBJRE1BX0ZDT05UUk9MX0ZSRUFEWTsKKworCQlyeF9uZXh0Kys7CisJCWlmIChyeF9uZXh0ID09IE5VTV9SWF9ERVNDKQorCQkJcnhfbmV4dCA9IDA7CisJfQorCisJLyogQ2hlY2sgaWYgRE1BIFN0b3BwZWQsIGlmIFJYIGlzIHN0b3BwZWQsIHJlc3RhcnQgKi8KKwlpZiAoISgqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5pZG1hX2Jhc2VhZGRyICsgRU1NTV9TVEFSVCkgJiBJRE1BX1NUQVJUKSkgeworCQkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5pZG1hX2Jhc2VhZGRyICsgRU1NTV9IRUFEKSA9ICh1MzIpICZyeF9yaW5nW3J4X25leHRdOworCQkqKHZvbGF0aWxlIHUzMiAqKShlbWFjLT5pZG1hX2Jhc2VhZGRyICsgRU1NTV9TVEFSVCkgfD0gSURNQV9TVEFSVDsKKwl9CisKKwlyZXR1cm4gKHRvdGFsX2xlbmd0aCk7Cit9CisKKworc3RhdGljIHZvaWQgZW1hY19oYWx0KHN0cnVjdCBlbWFjX2RldiAqZW1hYykKK3sKKwkvKiBzdG9wIEVNQUMgKi8KKwlFTUFDX2Rpc2FibGVfcngoZW1hYyk7CisJRU1BQ19kaXNhYmxlX3R4KGVtYWMpOworCisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+aWRtYV9iYXNlYWRkciArIEVNTU1fU09GVF9SRVNFVCkgPSAweDE7CisJKih2b2xhdGlsZSB1MzIgKikoZW1hYy0+aWRtYV9iYXNlYWRkciArIE1NRU1fU09GVF9SRVNFVCkgPSAweDE7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX01VTFRJCisKKyNlbHNlCitpbnQgZXRoX3NlbmQodm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKQoreworCWlmIChsZW5ndGggPD0gMCkgeworCQlwcmludGYoIkVtYWM6IGJhZCBwYWNrZXQgc2l6ZTogJWRcbiIsIGxlbmd0aCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiBlbWFjX3NlbmQoZW1hYywgcGFja2V0LCBsZW5ndGgpOworfQorCitpbnQgZXRoX2luaXQoYmRfdCAqIGJkKQoreworCXJldHVybiBlbWFjX2luaXQoZW1hYywgYmQtPmJpX2VuZXRhZGRyKTsKK30KKworCitpbnQgZXRoX3J4KHZvaWQpCit7CisJcmV0dXJuIGVtYWNfcngoZW1hYyk7Cit9CisKK3ZvaWQgZXRoX2hhbHQodm9pZCkKK3sKKwllbWFjX2hhbHQoZW1hYyk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTkVUX01VTFRJICovCisjZW5kaWYgLyogKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkVUKSAmJiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19FTUFDKSAqLwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvY29tY2VydG8vaW50ZXJydXB0cy5jIGIvY3B1L2FybTkyMHQvY29tY2VydG8vaW50ZXJydXB0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2FkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE9fNTMwCisKKyNpbmNsdWRlICJpbnRlcnJ1cHRzNTMwLmMiCisKKyNlbHNlCisKKyNpbmNsdWRlICJpbnRlcnJ1cHRzODAwLmMiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvY29tY2VydG8vaW50ZXJydXB0czUzMC5jIGIvY3B1L2FybTkyMHQvY29tY2VydG8vaW50ZXJydXB0czUzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTEyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by9pbnRlcnJ1cHRzNTMwLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisKKyNkZWZpbmUgVElNRVJfTE9BRF9WQUwJCTB4MDBmZmZmZmYKKyNkZWZpbmUgQ0xPQ0tfQ09VTlRfUEVSX1VTRUMJKENGR19IWl9DTE9DSyAvIDEwMDAgLyAxMDAwKQorI2RlZmluZSBVU0VDX1BFUl9USUNLCQkoMTAwMCAqIDEwMDAgLyBDRkdfSFopCisKKyNkZWZpbmUgUkVBRF9USU1FUiBTb0NfdGltZXIwX2dldCgpCisKKworc3RhdGljIHVsb25nIHRzX2NvdW50LCB0c191c2VjOworc3RhdGljIHVsb25nIGxhc3RkZWM7CisKK2ludCBpbnRlcnJ1cHRfaW5pdCAodm9pZCkKK3sKKwlTb0NfdGltZXIwX3NldChUSU1FUl9MT0FEX1ZBTCk7CisKKwlsYXN0ZGVjID0gVElNRVJfTE9BRF9WQUw7CisJdHNfY291bnQgPSAwOworCXRzX3VzZWMgPSAwOworCisJcmV0dXJuICgwKTsKK30KKwordm9pZCByZXNldF90aW1lcl9tYXNrZWQgKHZvaWQpCit7CisJbGFzdGRlYyA9IFJFQURfVElNRVI7CisJdHNfY291bnQgPSAwOworCXRzX3VzZWMgPSAwOworfQorCit2b2lkIHJlc2V0X3RpbWVyICh2b2lkKQoreworCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKK30KKworLyogUmV0dXJucyB1c2VjcyBzaW5jZSBsYXN0IHRpbWVyIHJlc2V0ICovCit1bG9uZyBnZXRfdGltZXJfcmF3ICh2b2lkKQoreworCXVsb25nIHN0ZXA7CisJdWxvbmcgbm93ID0gUkVBRF9USU1FUjsKKworCWlmIChub3cgPCBsYXN0ZGVjKSB7CisJCS8qIG5vcm1hbCBtb2RlICovCisJCXN0ZXAgPSBsYXN0ZGVjIC0gbm93OworCX0gZWxzZSB7CisJCS8qIHdlIGhhdmUgYW4gb3ZlcmZsb3cgLi4uICovCisJCXN0ZXAgPSAoVElNRVJfTE9BRF9WQUwgLSBub3cpICsgbGFzdGRlYzsKKwl9CisKKwlsYXN0ZGVjID0gbm93OworCisJdHNfY291bnQgKz0gc3RlcCAlIENMT0NLX0NPVU5UX1BFUl9VU0VDOworCXRzX3VzZWMgKz0gc3RlcCAvIENMT0NLX0NPVU5UX1BFUl9VU0VDOworCisJaWYgKHRzX2NvdW50ID49IENMT0NLX0NPVU5UX1BFUl9VU0VDKSB7CisJCXRzX3VzZWMgKz0gdHNfY291bnQgLyBDTE9DS19DT1VOVF9QRVJfVVNFQzsKKwkJdHNfY291bnQgJT0gQ0xPQ0tfQ09VTlRfUEVSX1VTRUM7CisJfQorCisJcmV0dXJuIHRzX3VzZWM7Cit9CisKKy8qIFJldHVybnMgdGljayBjb3VudCBzaW5jZSBsYXN0IHRpbWVyIHJlc2V0ICovCit1bG9uZyBnZXRfdGltZXJfbWFza2VkICh2b2lkKQoreworCXJldHVybiBnZXRfdGltZXJfcmF3KCkgLyBVU0VDX1BFUl9USUNLOworfQorCit1bG9uZyBnZXRfdGltZXIgKHVsb25nIGJhc2UpCit7CisJcmV0dXJuIGdldF90aW1lcl9tYXNrZWQgKCkgLSBiYXNlOworfQorCit2b2lkIHVkZWxheV9tYXNrZWQgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1bG9uZyBlbmR0aW1lID0gZ2V0X3RpbWVyX3JhdyAoKSArIHVzZWM7CisKKwl3aGlsZSAoZ2V0X3RpbWVyX3JhdyAoKSA8IGVuZHRpbWUpCisJCTsKKworfQorCit2b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVkZWxheV9tYXNrZWQodXNlYyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHJlYWQgdGltZWJhc2UgYXMgbG9uZyBsb25nKS4KKyAqIE9uIEFSTSBpdCBqdXN0IHJldHVybnMgdGhlIHRpbWVyIHZhbHVlLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X3RpY2tzKHZvaWQpCit7CisJcmV0dXJuIGdldF90aW1lcigwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAodGltZWJhc2UgY2xvY2sgZnJlcXVlbmN5KS4KKyAqIE9uIEFSTSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIHNlY29uZC4KKyAqLwordWxvbmcgZ2V0X3RiY2xrICh2b2lkKQoreworCXVsb25nIHRiY2xrOworCisJdGJjbGsgPSBDRkdfSFo7CisJcmV0dXJuIHRiY2xrOworfQorCisvKgorICoKKyAqLwordm9pZCByZXNldF9jcHUgKHVsb25nIGlnbm9yZWQpCit7CisJd2hpbGUgKDEpOworCS8qIE5ldmVyIHJlYWNoZWQgKi8KK30KKworLyoKKyAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cworICovCisKKwordm9pZCBzZXRfdGltZXIgKHVsb25nIHQpCit7CisJdHNfY291bnQgPSAwOworCXRzX3VzZWMgPSB0ICogVVNFQ19QRVJfVElDSzsKK30KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2NvbWNlcnRvL2ludGVycnVwdHM4MDAuYyBiL2NwdS9hcm05MjB0L2NvbWNlcnRvL2ludGVycnVwdHM4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2EzNDNmCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyMHQvY29tY2VydG8vaW50ZXJydXB0czgwMC5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworCisjZGVmaW5lIFRJTUVSX0xPQURfVkFMCQkweGZmZmZmZmZmCisjZGVmaW5lIENMT0NLX0NPVU5UX1BFUl9VU0VDCShDRkdfSFpfQ0xPQ0sgLyAxMDAwIC8gMTAwMCkKKyNkZWZpbmUgVVNFQ19QRVJfVElDSwkJKDEwMDAgKiAxMDAwIC8gQ0ZHX0haKQorCisjZGVmaW5lIFJFQURfVElNRVIgU29DX3RpbWVyMF9nZXQoKQorCisKK3N0YXRpYyB1bG9uZyB0c19jb3VudCwgdHNfdXNlYzsKK3N0YXRpYyB1bG9uZyBsYXN0aW5jOworCitpbnQgaW50ZXJydXB0X2luaXQgKHZvaWQpCit7CisJU29DX3RpbWVyMF9zZXQoVElNRVJfTE9BRF9WQUwpOworCisJbGFzdGluYyA9IDA7CisJdHNfY291bnQgPSAwOworCXRzX3VzZWMgPSAwOworCisJcmV0dXJuICgwKTsKK30KKwordm9pZCByZXNldF90aW1lcl9tYXNrZWQgKHZvaWQpCit7CisJbGFzdGluYyA9IFJFQURfVElNRVI7CisJdHNfY291bnQgPSAwOworCXRzX3VzZWMgPSAwOworfQorCit2b2lkIHJlc2V0X3RpbWVyICh2b2lkKQoreworCXJlc2V0X3RpbWVyX21hc2tlZCAoKTsKK30KKworLyogUmV0dXJucyB1c2VjcyBzaW5jZSBsYXN0IHRpbWVyIHJlc2V0ICovCit1bG9uZyBnZXRfdGltZXJfcmF3ICh2b2lkKQoreworCXVsb25nIHN0ZXA7CisJdWxvbmcgbm93ID0gUkVBRF9USU1FUjsKKworCWlmIChub3cgPiBsYXN0aW5jKSB7CisJCS8qIG5vcm1hbCBtb2RlICovCisJCXN0ZXAgPSBub3cgLSBsYXN0aW5jOworCX0gZWxzZSB7CisJCS8qIHdlIGhhdmUgYW4gb3ZlcmZsb3cgLi4uICovCisJCXN0ZXAgPSAoVElNRVJfTE9BRF9WQUwgLSBsYXN0aW5jKSArIG5vdzsKKwl9CisKKwlsYXN0aW5jID0gbm93OworCisJdHNfY291bnQgKz0gc3RlcCAlIENMT0NLX0NPVU5UX1BFUl9VU0VDOworCXRzX3VzZWMgKz0gc3RlcCAvIENMT0NLX0NPVU5UX1BFUl9VU0VDOworCisJaWYgKHRzX2NvdW50ID49IENMT0NLX0NPVU5UX1BFUl9VU0VDKSB7CisJCXRzX3VzZWMgKz0gdHNfY291bnQgLyBDTE9DS19DT1VOVF9QRVJfVVNFQzsKKwkJdHNfY291bnQgJT0gQ0xPQ0tfQ09VTlRfUEVSX1VTRUM7CisJfQorCisJcmV0dXJuIHRzX3VzZWM7Cit9CisKKy8qIFJldHVybnMgdGljayBjb3VudCBzaW5jZSBsYXN0IHRpbWVyIHJlc2V0ICovCit1bG9uZyBnZXRfdGltZXJfbWFza2VkICh2b2lkKQoreworCXJldHVybiBnZXRfdGltZXJfcmF3KCkgLyBVU0VDX1BFUl9USUNLOworfQorCit1bG9uZyBnZXRfdGltZXIgKHVsb25nIGJhc2UpCit7CisJcmV0dXJuIGdldF90aW1lcl9tYXNrZWQgKCkgLSBiYXNlOworfQorCit2b2lkIHVkZWxheV9tYXNrZWQgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1bG9uZyBlbmR0aW1lID0gZ2V0X3RpbWVyX3JhdyAoKSArIHVzZWM7CisKKwl3aGlsZSAoZ2V0X3RpbWVyX3JhdyAoKSA8IGVuZHRpbWUpCisJCTsKKworfQorCit2b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQoreworCXVkZWxheV9tYXNrZWQodXNlYyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHJlYWQgdGltZWJhc2UgYXMgbG9uZyBsb25nKS4KKyAqIE9uIEFSTSBpdCBqdXN0IHJldHVybnMgdGhlIHRpbWVyIHZhbHVlLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X3RpY2tzKHZvaWQpCit7CisJcmV0dXJuIGdldF90aW1lcigwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAodGltZWJhc2UgY2xvY2sgZnJlcXVlbmN5KS4KKyAqIE9uIEFSTSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdGltZXIgdGlja3MgcGVyIHNlY29uZC4KKyAqLwordWxvbmcgZ2V0X3RiY2xrICh2b2lkKQoreworCXVsb25nIHRiY2xrOworCisJdGJjbGsgPSBDRkdfSFo7CisJcmV0dXJuIHRiY2xrOworfQorCisvKgorICoKKyAqLwordm9pZCByZXNldF9jcHUgKHVsb25nIGlnbm9yZWQpCit7CisJd2hpbGUgKDEpOworCS8qIE5ldmVyIHJlYWNoZWQgKi8KK30KKworLyoKKyAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cworICovCisKKwordm9pZCBzZXRfdGltZXIgKHVsb25nIHQpCit7CisJdHNfY291bnQgPSAwOworCXRzX3VzZWMgPSB0ICogVVNFQ19QRVJfVElDSzsKK30KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2NvbWNlcnRvL2xvd2xldmVsX2luaXQuUyBiL2NwdS9hcm05MjB0L2NvbWNlcnRvL2xvd2xldmVsX2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzU1MGI4Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyMHQvY29tY2VydG8vbG93bGV2ZWxfaW5pdC5TCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBTT0Mgc3BlY2lmaWMgc2V0dXAgaW5mbworICoKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKKworLmdsb2JsIGxvd2xldmVsX2luaXQKK2xvd2xldmVsX2luaXQ6CisJbGRyCXNwLCBUTVBfU1RBQ0sgLyogc2V0IHVwIGEgdGVtcG9yYXJ5IHN0YWNrICovCisKKwlzdG1kYglzcCEsIHtpcCwgbHJ9CisJYmwJYnNwX2luaXQJLyogZ28gc2V0dXAgcGxsLCBtZW1vcnkgKi8KKwlsZG1pYQlzcCEsIHtpcCwgcGN9CS8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gdG8gY2FsbGVyICovCisKKwkvKiB0aGUgbGl0ZXJhbCBwb29scyBvcmlnaW4gKi8KKwkubHRvcmcKK1RNUF9TVEFDSzoKKwkud29yZAlDRkdfSU5JVF9SQU1fQUREUiArIENGR19JTklUX1NQX09GRlNFVApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvY29tY2VydG8vc2VyaWFsLTE2NTUwLmMgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by9zZXJpYWwtMTY1NTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmU2MzRkCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyMHQvY29tY2VydG8vc2VyaWFsLTE2NTUwLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmICFkZWZpbmVkKENPTkZJR19VQVJUMCkgJiYgIWRlZmluZWQoQ09ORklHX1VBUlQxKQorI2Vycm9yIG11c3QgZGVmaW5lIG9uZSBvZiBDT05GSUdfVUFSVDAgb3IgQ09ORklHX1VBUlQxCisjZW5kaWYKKworCitzdHJ1Y3QgdWFydF9yZWdzIHsKKwl2b2xhdGlsZSB1MzIgZGF0YTsJLyogUmVjZWl2ZS9UcmFuc21pdCBkYXRhIHJlZ2lzdGVyICovCisJdm9sYXRpbGUgdTMyIGllcjsJLyogSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlciAqLworCXZvbGF0aWxlIHUzMiBpaXJfZmNyOwkvKiBJbnRlcnJ1cHQgSWRlbnRpdHkgcmVnaXN0ZXIgLyBGSUZPIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwl2b2xhdGlsZSB1MzIgbGNyOwkvKiBMaW5lIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwl2b2xhdGlsZSB1MzIgbWNyOwkvKiBNb2RlbSBDb250cm9sIHJlZ2lzdGVyICovCisJdm9sYXRpbGUgdTMyIGxzcjsJLyogTGluZSBTdGF0dXMgcmVnaXN0ZXIgKi8KKwl2b2xhdGlsZSB1MzIgbXNyOwkvKiBNb2RlbSBTdGF0dXMgcmVnaXN0ZXIgKi8KKwl2b2xhdGlsZSB1MzIgc3I7CS8qIFNjcmF0Y2ggcmVnaXN0ZXIgKi8KK307CisKK3N0cnVjdCB1YXJ0X2RsX3JlZ3MgeworCXZvbGF0aWxlIHUzMiBkbGw7CS8qIERpdmlzb3IgTGF0Y2ggKExvdykgKi8KKwl2b2xhdGlsZSB1MzIgZGxoOwkvKiBEaXZpc29yIExhdGNoIChIaWdoKSAqLworfTsKKworCisvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisvKiBVQVJUIDE2NTUwICovCisjZGVmaW5lIElFUl9SREkJCQkoMSA8PCAwKQkvKiBFbmFibGUgUmVjZWl2ZWQgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0ICovCisjZGVmaW5lIElFUl9USFJJCQkoMSA8PCAxKQkvKiBFbmFibGUgVHJhbnNtaXR0ZXIgaG9sZGluZyByZWdpc3RlciBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUVSX1JMU0kJCSgxIDw8IDIpCS8qIEVuYWJsZSByZWNlaXZlciBsaW5lIHN0YXR1cyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUVSX01TSQkJCSgxIDw8IDMpCS8qIEVuYWJsZSBNb2RlbSBzdGF0dXMgSW50ZXJydXB0ICovCisKKyNkZWZpbmUgSUlSX0ZJRk9FUzEJCSgxIDw8IDcpCS8qIEZJRk8gTW9kZSBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lIElJUl9GSUZPRVMwCQkoMSA8PCA2KQkvKiBGSUZPIE1vZGUgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSBJSVJfVE9ECQkJKDEgPDwgMykJLyogVGltZSBPdXQgRGV0ZWN0ZWQgKi8KKyNkZWZpbmUgSUlSX0lJRDIJCQkoMSA8PCAyKQkvKiBJbnRlcnJ1cHQgU291cmNlIEVuY29kZWQgKi8KKyNkZWZpbmUgSUlSX0lJRDEJCQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgU291cmNlIEVuY29kZWQgKi8KKyNkZWZpbmUgSUlSX0lQCQkJCSgxIDw8IDApCS8qIEludGVycnVwdCBQZW5kaW5nIChhY3RpdmUgbG93KSAqLworCisvKiBVQVJUIDE2NTUwIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBGQ1JfRklGT0VOCQkJKDEgPDwgMCkKKyNkZWZpbmUgRkNSX1JDVlJSRVMJCQkoMSA8PCAxKQorI2RlZmluZSBGQ1JfWE1JVFJFUwkJCSgxIDw8IDIpCisKKyNkZWZpbmUgTENSX0NIQVJfTEVOXzUJCTB4MDAJICAvKiBkZWZhdWx0ICovCisjZGVmaW5lIExDUl9DSEFSX0xFTl82CQkweDAxCisjZGVmaW5lIExDUl9DSEFSX0xFTl83CQkweDAyCisjZGVmaW5lIExDUl9DSEFSX0xFTl84CQkweDAzCisjZGVmaW5lIExDUl9UV09fU1RPUAkJKDEgPDwgMikgIC8qIFR3byBzdG9wIGJpdCEgKi8KKyNkZWZpbmUgTENSX1BFTgkJCSgxIDw8IDMpICAvKiBQYXJpdHkgRW5hYmxlICovCisjZGVmaW5lIExDUl9FUFMJCQkoMSA8PCA0KSAgLyogRXZlbiBQYXJpdHkgU2VsZWN0ICovCisjZGVmaW5lIExDUl9QUwkJCSgxIDw8IDUpICAvKiBFbmFibGUgUGFyaXR5ICBTdHVmZiAqLworI2RlZmluZSBMQ1JfU0JSSwkJKDEgPDwgNikgIC8qIFN0YXJ0IEJyZWFrICovCisjZGVmaW5lIExDUl9QU0IJCQkoMSA8PCA3KSAgLyogUGFyaXR5IFN0dWZmIEJpdCAqLworI2RlZmluZSBMQ1JfRExBQgkJKDEgPDwgNykgIC8qIFVBUlQgMTY1NTAgRGl2aXNvciBMYXRjaCBBc3Nlc3MgKi8KKworI2RlZmluZSBMU1JfUlhGSUZPX0VSUk9SCQkoMSA8PCA3KQkvKiBGSUZPIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBMU1JfVEVNVAkJCSgxIDw8IDYpCS8qIFRyYW5zbWl0dGVyIEVtcHR5ICovCisjZGVmaW5lIExTUl9USFJFCQkJKDEgPDwgNSkJLyogVHJhbnNtaXQgRGF0YSBSZXF1ZXN0ICovCisjZGVmaW5lIExTUl9CSQkJCSgxIDw8IDQpCS8qIEJyZWFrIEludGVycnVwdCAqLworI2RlZmluZSBMU1JfRkUJCQkoMSA8PCAzKQkvKiBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lIExTUl9QRQkJCSgxIDw8IDIpCS8qIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBMU1JfT0UJCQkoMSA8PCAxKQkvKiBPdmVycnVuIEVycm9yICovCisjZGVmaW5lIExTUl9EUgkJCSgxIDw8IDApCS8qIERhdGEgUmVhZHkgKi8KKworI2lmZGVmIENPTkZJR19VQVJUMAorc3RydWN0IHVhcnRfcmVncyAqdWFydCA9IChzdHJ1Y3QgdWFydF9yZWdzICopIFVBUlQwX0JBU0VBRERSOworc3RydWN0IHVhcnRfZGxfcmVncyAqdWFydF9kbCA9IChzdHJ1Y3QgdWFydF9kbF9yZWdzICopIFVBUlQwX0JBU0VBRERSOworI2Vsc2UKK3N0cnVjdCB1YXJ0X3JlZ3MgKiB1YXJ0ID0gKHN0cnVjdCB1YXJ0X3JlZ3MgKikgVUFSVDFfQkFTRUFERFI7CitzdHJ1Y3QgdWFydF9kbF9yZWdzICogdWFydF9kbCA9IChzdHJ1Y3QgdWFydF9kbF9yZWdzICopIFVBUlQxX0JBU0VBRERSOworI2VuZGlmCisKK3ZvaWQgc2VyaWFsX3NldGJyZyAodm9pZCkKK3sKKwlpbnQgYmF1ZHJhdGU7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgY2xrID0gU29DX2Nsa19hbWJhX2dldCgpOworCisJaWYgKChiYXVkcmF0ZSA9IGdkLT5iYXVkcmF0ZSkgPD0gMCkKKwkJYmF1ZHJhdGUgPSBDT05GSUdfQkFVRFJBVEU7CisKKwlyZWcgPSBjbGsgLyAoYmF1ZHJhdGUgKiAxNik7CisJdWFydC0+bGNyIHw9IExDUl9ETEFCOwkJCS8qIEVuYWJsZSBEaXZpc29yIExhdGNoIGFjY2VzcyAqLworCXVhcnRfZGwtPmRsbCA9IHJlZyAmIDB4RkY7CQkvKiBTZXQgRGl2aXNvciBMYXRjaCBMb3cgKi8KKwl1YXJ0X2RsLT5kbGggPSAocmVnID4+IDgpICYgMHhGRjsJLyogU2V0IERpdmlzb3IgTGF0Y2ggaGlnaCAqLworCXVhcnQtPmxjciAmPSB+TENSX0RMQUI7CQkJLyogRGlzYWJsZSBEaXZpc29yIExhdGNoIGFjY2VzcyAqLworfQorCitpbnQgc2VyaWFsX2luaXQgKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1VBUlQxCisJU29DX2lvY3RybF9jZmcoSU9DVFJMX1VBUlQxLCAxKTsKKwlTb0NfaW9jdHJsX2NmZyhJT0NUUkxfVUFSVDAsIDApOworI2VuZGlmCisKKwl1YXJ0LT5pZXIgPSAweDAwOworCXVhcnQtPmlpcl9mY3IgPSAweDAwOworCXVhcnQtPmxjciA9IExDUl9DSEFSX0xFTl84OworCisJc2VyaWFsX3NldGJyZyAoKTsKKworCXVhcnQtPmRhdGEgPSAwOworCXVhcnQtPmlpcl9mY3IgPSBGQ1JfUkNWUlJFUyB8IEZDUl9YTUlUUkVTIHwgRkNSX0ZJRk9FTjsKKworCXJldHVybiAoMCk7Cit9CisKK3ZvaWQgc2VyaWFsX3B1dGMgKGNvbnN0IGNoYXIgYykKK3sKKwkvKiB3YWl0IGZvciByb29tIGluIHRoZSB0eCBGSUZPICovCisJd2hpbGUgKCh1YXJ0LT5sc3IgJiBMU1JfVEhSRSkgPT0gMCkgOworCXVhcnQtPmRhdGEgPSBjOworCWlmIChjID09ICdcbicpCisJCXNlcmlhbF9wdXRjICgnXHInKTsKK30KKwordm9pZCBzZXJpYWxfcHV0cyAoY29uc3QgY2hhciAqcykKK3sKKwl3aGlsZSAoKnMpIHsKKwkJc2VyaWFsX3B1dGMgKCpzKyspOworCX0KK30KKworaW50IHNlcmlhbF9nZXRjICh2b2lkKQoreworCXdoaWxlICgodWFydC0+bHNyICYgTFNSX0RSKSA9PSAwKTsKKwkJcmV0dXJuIChjaGFyKXVhcnQtPmRhdGEgJiAweGZmOworfQorCitpbnQgc2VyaWFsX3RzdGMgKHZvaWQpCit7CisJcmV0dXJuIHVhcnQtPmxzciAmIExTUl9EUjsKK30KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2NvbWNlcnRvL3NlcmlhbC5jIGIvY3B1L2FybTkyMHQvY29tY2VydG8vc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRmN2Q4NAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjB0L2NvbWNlcnRvL3NlcmlhbC5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX0NPTUNFUlRPXzUzMAorCisjaW5jbHVkZSAic2VyaWFsNTMwLmMiCisKKyNlbHNlCisKKyNpbmNsdWRlICJzZXJpYWwtMTY1NTAuYyIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9jb21jZXJ0by9zZXJpYWw1MzAuYyBiL2NwdS9hcm05MjB0L2NvbWNlcnRvL3NlcmlhbDUzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NTk2YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by9zZXJpYWw1MzAuYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1VBUlQwKQorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2RlZmluZSBNQ1JfUlhEX0VOQUJMRQkJMHg4MAorI2RlZmluZSBNQ1JfVFhEX0VOQUJMRQkJMHg0MAorI2RlZmluZSBNQ1JfVElNRVJfU09VUkNFCTB4MjAKKworI2RlZmluZSBMQ1JfV0xFTjgJCTB4MDMJLyogV29yZGxlbmd0aDogOCBiaXRzICovCisKKyNkZWZpbmUgU1NSX0RSCQkJMHgwMQkvKiBSZWNlaXZlciBkYXRhIHJlYWR5ICovCisjZGVmaW5lIFNTUl9USFJFCQkweDIwCS8qIFRyYW5zbWl0LWhvbGQtcmVnaXN0ZXIgZW1wdHkgKi8KKworI2RlZmluZSBGQ1JfVElNRVJfRElWX0JZUEFTUwkweDA0CisKK3ZvaWQgc2VyaWFsX3NldGJyZyAodm9pZCkKK3sKKwlpbnQgYmF1ZHJhdGU7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgY2xrID0gU29DX2Nsa19hbWJhX2dldCgpOworCisJaWYgKChiYXVkcmF0ZSA9IGdkLT5iYXVkcmF0ZSkgPD0gMCkKKwkJYmF1ZHJhdGUgPSBDT05GSUdfQkFVRFJBVEU7CisKKwlyZWcgPSBjbGsgLyAoYmF1ZHJhdGUgKiAxNik7CisKKwkoKih2b2xhdGlsZSB1OCAqKVVBUlRfUlhEKSA9IDB4MEY7CisJKCoodm9sYXRpbGUgdTggKilVQVJUX1RYRCkgPSAweDBGOworCisJU29DX3RpbWVyMV9zZXQocmVnKTsKK30KKworaW50IHNlcmlhbF9pbml0ICh2b2lkKQoreworCXNlcmlhbF9zZXRicmcgKCk7CisKKwkoKih2b2xhdGlsZSB1OCAqKVVBUlRfRkNSKSA9IEZDUl9USU1FUl9ESVZfQllQQVNTOworCSgqKHZvbGF0aWxlIHU4ICopVUFSVF9NQ1IpID0gTUNSX1JYRF9FTkFCTEUgfCBNQ1JfVFhEX0VOQUJMRSB8IE1DUl9USU1FUl9TT1VSQ0U7CisJKCoodm9sYXRpbGUgdTggKilVQVJUX0xDUikgPSBMQ1JfV0xFTjg7CisJKCoodm9sYXRpbGUgdTggKilVQVJUX0lFUikgPSAweDAwOworCisJcmV0dXJuICgwKTsKK30KKwordm9pZCBzZXJpYWxfcHV0YyAoY29uc3QgY2hhciBjKQoreworCS8qIHdhaXQgZm9yIHRyYW5zbWl0dGVyIHRvIGVtcHR5ICovCisJd2hpbGUgKCEoKCoodm9sYXRpbGUgdTggKilVQVJUX1NTUikgJiBTU1JfVEhSRSkpIDsKKworCSgqKHZvbGF0aWxlIHU4ICopVUFSVF9USFIpID0gYzsKKworCWlmIChjID09ICdcbicpCisJCXNlcmlhbF9wdXRjICgnXHInKTsKK30KKwordm9pZCBzZXJpYWxfcHV0cyAoY29uc3QgY2hhciAqcykKK3sKKwl3aGlsZSAoKnMpIHsKKwkJc2VyaWFsX3B1dGMgKCpzKyspOworCX0KK30KKworaW50IHNlcmlhbF9nZXRjICh2b2lkKQoreworCXdoaWxlICghKCgqKHZvbGF0aWxlIHU4ICopVUFSVF9TU1IpICYgU1NSX0RSKSkgOworCisJcmV0dXJuICgoKih2b2xhdGlsZSB1OCAqKVVBUlRfUkJSKSAmIDB4ZmYpOworfQorCitpbnQgc2VyaWFsX3RzdGMgKHZvaWQpCit7CisJcmV0dXJuICgoKih2b2xhdGlsZSB1OCAqKVVBUlRfU1NSKSAmIFNTUl9EUik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvY29tY2VydG8vc3BpLmMgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDgzNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyMHQvY29tY2VydG8vc3BpLmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgUmV2aXNpb24gMC4zICAyMDA3LzA0LzI4IAlJdXJpaS5Hb2xvdmFjaAorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TUEkpIHx8IGRlZmluZWQoQ09ORklHX1NQSSkKKworI2luY2x1ZGUgPHNwaS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NwaS5oPgorCitzcGlfY2hpcHNlbF90eXBlIHNwaV9jaGlwc2VsW10gPSB7CisJKHNwaV9jaGlwc2VsX3R5cGUpMSwKKwkoc3BpX2NoaXBzZWxfdHlwZSkyLAorCShzcGlfY2hpcHNlbF90eXBlKTQsCisJKHNwaV9jaGlwc2VsX3R5cGUpOAorfTsKKworaW50IHNwaV9jaGlwc2VsX2NudCA9IHNpemVvZihzcGlfY2hpcHNlbCkgLyBzaXplb2Yoc3BpX2NoaXBzZWxbMF0pOworCit2b2lkIHNwaV9od19pbml0KHZvaWQpCit7CisJdm9sYXRpbGUgdTMyIGRlbGF5X2NvdW50OworCisJLyogZW5hYmxlIG5hdGl2ZSBTUEkgKGRpc2FibGVkIGJ5IGRlZmF1bHQpICovCQorCVNvQ19pb2N0cmxfY2ZnKElPQ1RSTF9TUElfQlVTLCAxKTsKKworCS8qIHdhaXQgMiBtcyBTUEkgdG8gcHJvY2VzcyB0aGUgZGF0YS4gRE9OJ1QgUkVNT1ZFIFRISVMgT1RIRVJXSVNFIFNQSSBXSUxMIE5PVCBCRSBJTklUSUFMSVpFRCAqLworCWRlbGF5X2NvdW50ID0gNDAwMDsKKwl3aGlsZSAoZGVsYXlfY291bnQtLSkKKwkJOworfQorCitpbnQgIHNwaV94ZmVyKHNwaV9jaGlwc2VsX3R5cGUgY2hpcHNlbCwgaW50IGJpdGxlbiwgdWNoYXIgKmRvdXQsIHVjaGFyICpkaW4pCit7CisJdWNoYXIgajsKKwl1MzIgdHNtb2RlOworCisJaWYgKGJpdGxlbiA8IDEpCisJCXJldHVybiAxOworCisJLyogY2hlY2tpbmcgdGhlIGRpbiBhbmQgZG91dCBwYXJhbXMgKi8KKwlpZiAoIWRpbiAmJiAhZG91dCkKKwkJcmV0dXJuIDI7CisKKwlpZiAoIWNoaXBzZWwpCisJCXJldHVybiAzOworCisJaWYgKCFkaW4pIHsKKwkJLyogdHJhbnNtaXQgb25seSAqLworCQl0c21vZGUgPSAweDE7CisJfSBlbHNlIGlmICghZG91dCkgeworCQkvKiByZWNlaXZlIG9ubHkgKi8KKwkJdHNtb2RlID0gMHgyOworCX0gZWxzZSB7CisJCS8qIHRyYW5zbWl0ICYgcmVjZWl2ZSAqLworCQl0c21vZGUgPSAweDA7CisJfQorCisJLyogZGlzYWJsZSBTUEkgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKSBTUElfU1NJRU5SID0gMHgwOworCisJLyogc2VsZWN0IHRoZSB0YXJnZXQgY2hpcCAqLworCSoodm9sYXRpbGUgdTMyICopIFNQSV9TRVIgPSAodm9sYXRpbGUgdTMyKSAqY2hpcHNlbDsKKworCSoodm9sYXRpbGUgdTMyICopIFNQSV9DVFJMUjAgPSAoKCh0c21vZGUgJiAweDMpIDw8IDgpIHwKKwkJCQkJKChDRkdfU1BJX0NMT0NLX1BPTEFSSVRZICYgMHgxKSA8PCA3KSB8CisJCQkJCSgoQ0ZHX1NQSV9DTE9DS19QSEFTRSAmIDB4MSkgPDwgNikgfAorCQkJCQkoKENGR19TUElfRlJBTUVTSVpFIC0gMSkgJiAweGYpKTsKKworCS8qIHNldCB1cCB0aGUgc3NpX2NsayBkaXZpZGVyIHZhbHVlICovCisJKih2b2xhdGlsZSB1MzIgKikgU1BJX0JBVURSID0gKENGR19IWl9DTE9DSyAvIENGR19TUElfQ0xPQ0tfU1BFRUQpICYgMHhGRkZGOworCisJLyogZGlzYWJsZSBTUEkgaW50ZXJydXB0cyAqLworCSoodm9sYXRpbGUgdTMyICopIFNQSV9JTVIgPSAweDA7CisKKwkvKiBlbmFibGUgU1BJICovCisJKih2b2xhdGlsZSB1MzIgKikgU1BJX1NTSUVOUiA9IDB4MTsKKworCXN3aXRjaCAodHNtb2RlKSB7CisJY2FzZSAweDE6CisJCS8qIHRyYW5zbWl0IG9ubHkgKi8KKworCQlmb3IgKGogPSAwOyBqIDwgYml0bGVuIC8gQ0ZHX1NQSV9GUkFNRVNJWkU7IGorKykgeworCQkJLyogdHJhbnNtaXQgZmlmbyBub3QgZnVsbCAqLworCQkJd2hpbGUoISgoKih2b2xhdGlsZSB1MzIgKikgU1BJX1NSKSAmIFRGTkYpKQorCQkJCTsKKworCQkJKih2b2xhdGlsZSB1MzIgKikgU1BJX0RSID0gKmRvdXQrKzsKKwkJfQorCisJCS8qIHdhaXRzIHdoaWxlIHRoZSBkYXRhIHdpbGwgYmUgd3JpdHRlbiAod2hpbGUgVFggRklGTyBpc24ndCBlbXB0eSkgICovCisJCXdoaWxlKCEoKCoodm9sYXRpbGUgdTMyICopIFNQSV9TUikgJiBURkUpKQorCQkJOworCisJCWJyZWFrOworCisJY2FzZSAweDI6CisJCS8qIHJlY2VpdmUgb25seSAqLworCisJCS8qIHdyaXRpbmcgb25lIGR1bW15IGRhdGEgd29yZCBpbnRvIHRoZSB0cmFuc21pdCBGSUZPICovCisJCSoodm9sYXRpbGUgdTMyICopU1BJX0RSID0gMHgwMDsKKworCQlmb3IgKGogPSAwOyBqIDwgYml0bGVuIC8gQ0ZHX1NQSV9GUkFNRVNJWkU7IGorKykKKwkJeworCQkJLyogY2hlY2sgdGhhdCB0aGVyZSBpcyBkYXRhIGluIHRoZSBmaWZvICovCisJCQl3aGlsZSghKCgqKHZvbGF0aWxlIHUzMiAqKSBTUElfU1IpICYgUkZORSkpCisJCQkJOworCisJCQkqZGluKysgPSAqKHZvbGF0aWxlIHUzMiAqKSBTUElfRFI7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIHRyYW5zbWl0ICYgcmVjZWl2ZSAqLworCisJCWZvciAoaiA9IDA7IGogPCBiaXRsZW4gLyBDRkdfU1BJX0ZSQU1FU0laRTsgaisrKSAKKwkJeworCQkJLyogdHJhbnNtaXQgZmlmbyBub3QgZnVsbCAqLworCQkJd2hpbGUoISgoKih2b2xhdGlsZSB1MzIgKikgU1BJX1NSKSAmIFRGTkYpKQorCQkJCTsKKworCQkJKih2b2xhdGlsZSB1MzIgKikgU1BJX0RSID0gKmRvdXQrKzsKKworCQkJLyogY2hlY2sgdGhhdCB0aGVyZSBpcyBkYXRhIGluIHRoZSBmaWZvICovCisJCQl3aGlsZSghKCgqKHZvbGF0aWxlIHUzMiAqKSBTUElfU1IpICYgUkZORSkpCisJCQkJOworCisJCQkqZGluKysgPSAqKHZvbGF0aWxlIHUzMiAqKSBTUElfRFI7CisJCX0KKworCQkvKiB3YWl0cyB3aGlsZSB0aGUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gKHdoaWxlIFRYIEZJRk8gaXNuJ3QgZW1wdHkpICAqLworCQl3aGlsZSghKCgqKHZvbGF0aWxlIHUzMiAqKSBTUElfU1IpICYgVEZFKSkKKwkJCTsKKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TUEkpIHx8IGRlZmluZWQoQ09ORklHX1NQSSkgKi8KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2NvbWNlcnRvL3VzYl9vaGNpLmMgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by91c2Jfb2hjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYjUwYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtOTIwdC9jb21jZXJ0by91c2Jfb2hjaS5jCkBAIC0wLDAgKzEsMTYzNCBAQAorLyoKKyAqIFVSQiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQiBvbiB0aGUgQVQ5MVJNOTIwMC4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIDxnakBkZW54LmRlPgorICoKKyAqIE5vdGU6IE11Y2ggb2YgdGhpcyBjb2RlIGhhcyBiZWVuIGRlcml2ZWQgZnJvbSBMaW51eCAyLjQKKyAqIChDKSBDb3B5cmlnaHQgMTk5OSBSb21hbiBXZWlzc2dhZXJiZXIgPHdlaXNzZ0B2aWVubmEuYXQ+CisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwMiBEYXZpZCBCcm93bmVsbAorICoKKyAqIE1vZGlmaWVkIGZvciB0aGUgTVAyVVNCIGJ5IChDKSBDb3B5cmlnaHQgMjAwNSBFcmljIEJlbmFyZAorICogZWJlbmFyZEBldWtyZWEuY29tIC0gYmFzZWQgb24gczNjMjR4MCdzIGRyaXZlcgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworLyoKKyAqIElNUE9SVEFOVCBOT1RFUworICogMSAtIHlvdSBNVVNUIGRlZmluZSBMSVRUTEVFTkRJQU4gaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlCisgKiAgICAgYm9hcmQgb3IgdGhpcyBkcml2ZXIgd2lsbCBOT1Qgd29yayEKKyAqIDIgLSB0aGlzIGRyaXZlciBpcyBpbnRlbmRlZCBmb3IgdXNlIHdpdGggVVNCIE1hc3MgU3RvcmFnZSBEZXZpY2VzCisgKiAgICAgKEJCQikgT05MWS4gVGhlcmUgaXMgTk8gc3VwcG9ydCBmb3IgSW50ZXJydXB0IG9yIElzb2Nocm9ub3VzIHBpcGVzIQorICogMyAtIHdoZW4gcnVubmluZyBvbiBhIFBRRlAyMDggQVQ5MVJNOTIwMCwgZGVmaW5lIENPTkZJR19BVDkxQ19QUUZQX1VIUEJVRworICogICAgIHRvIGFjdGl2YXRlIHdvcmthcm91bmQgZm9yIGJ1ZyAjNDEgb3IgdGhpcyBkcml2ZXIgd2lsbCBOT1Qgd29yayEKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX09IQ0kKKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDx1c2IuaD4KKyNpbmNsdWRlICJ1c2Jfb2hjaS5oIgorCisjZGVmaW5lIE9IQ0lfVVNFX05QUwkJLyogZm9yY2UgTm9Qb3dlclN3aXRjaGluZyBtb2RlICovCisjdW5kZWYgT0hDSV9WRVJCT1NFX0RFQlVHCS8qIG5vdCBhbHdheXMgaGVscGZ1bCAqLworCisvKiBGb3IgaW5pdGlhbGl6aW5nIGNvbnRyb2xsZXIgKG1hc2sgaW4gYW4gSENGUyBtb2RlIHRvbykgKi8KKyNkZWZpbmUgT0hDSV9DT05UUk9MX0lOSVQgXAorCShPSENJX0NUUkxfQ0JTUiAmIDB4MykgfCBPSENJX0NUUkxfSUUgfCBPSENJX0NUUkxfUExFCisKKyNkZWZpbmUgcmVhZGwoYSkgKCooKHZ1X2xvbmcgKikoYSkpKQorI2RlZmluZSB3cml0ZWwoYSwgYikgKCooKHZ1X2xvbmcgKikoYikpID0gKCh2dV9sb25nKWEpKQorCisjZGVmaW5lIG1pbl90KHR5cGUseCx5KSAoeyB0eXBlIF9feCA9ICh4KTsgdHlwZSBfX3kgPSAoeSk7IF9feCA8IF9feSA/IF9feDogX195OyB9KQorCisjdW5kZWYgREVCVUcKKyNpZmRlZiBERUJVRworI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIHByaW50ZigiREVCVUc6ICIgZm9ybWF0ICJcbiIsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIHByaW50ZigiRVJST1I6ICIgZm9ybWF0ICJcbiIsICMjIGFyZykKKyN1bmRlZiBTSE9XX0lORk8KKyNpZmRlZiBTSE9XX0lORk8KKyNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRmKCJJTkZPOiAiIGZvcm1hdCAiXG4iLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKKyNkZWZpbmUgbTE2X3N3YXAoeCkgc3dhcF8xNih4KQorI2RlZmluZSBtMzJfc3dhcCh4KSBzd2FwXzMyKHgpCisKKy8qIGdsb2JhbCBvaGNpX3QgKi8KK3N0YXRpYyBvaGNpX3QgZ29oY2k7CisvKiB0aGlzIG11c3QgYmUgYWxpZ25lZCB0byBhIDI1NiBieXRlIGJvdW5kYXJ5ICovCitzdHJ1Y3Qgb2hjaV9oY2NhIGdoY2NhWzFdOworLyogYSBwb2ludGVyIHRvIHRoZSBhbGlnbmVkIHN0b3JhZ2UgKi8KK3N0cnVjdCBvaGNpX2hjY2EgKnBoY2NhOworLyogdGhpcyBhbGxvY2F0ZXMgRURzIGZvciBhbGwgcG9zc2libGUgZW5kcG9pbnRzICovCitzdHJ1Y3Qgb2hjaV9kZXZpY2Ugb2hjaV9kZXY7CisvKiB1cmJfcHJpdiAqLwordXJiX3ByaXZfdCB1cmJfcHJpdjsKKy8qIFJIU0MgZmxhZyAqLworaW50IGdvdF9yaHNjOworLyogZGV2aWNlIHdoaWNoIHdhcyBkaXNjb25uZWN0ZWQgKi8KK3N0cnVjdCB1c2JfZGV2aWNlICpkZXZnb25lOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBBTUQtNzU2IChEMiByZXYpIHJlcG9ydHMgY29ycnVwdCByZWdpc3RlciBjb250ZW50cyBpbiBzb21lIGNhc2VzLgorICogVGhlIGVycmF0dW0gKCM0KSBkZXNjcmlwdGlvbiBpcyBpbmNvcnJlY3QuICBBTUQncyB3b3JrYXJvdW5kIHdhaXRzCisgKiB0aWxsIHNvbWUgYml0cyAobW9zdGx5IHJlc2VydmVkKSBhcmUgY2xlYXI7IG9rIGZvciBhbGwgcmV2cy4KKyAqLworI2RlZmluZSBPSENJX1FVSVJLX0FNRDc1NiAweGFiY2QKKyNkZWZpbmUgcmVhZF9yb290aHViKGhjLCByZWdpc3RlciwgbWFzaykgKHsgXAorCXUzMiB0ZW1wID0gcmVhZGwgKCZoYy0+cmVncy0+cm9vdGh1Yi5yZWdpc3Rlcik7IFwKKwlpZiAoaGMtPmZsYWdzICYgT0hDSV9RVUlSS19BTUQ3NTYpIFwKKwkJd2hpbGUgKHRlbXAgJiBtYXNrKSBcCisJCQl0ZW1wID0gcmVhZGwgKCZoYy0+cmVncy0+cm9vdGh1Yi5yZWdpc3Rlcik7IFwKKwl0ZW1wOyB9KQorCitzdGF0aWMgdTMyIHJvb3RodWJfYSAoc3RydWN0IG9oY2kgKmhjKQorCXsgcmV0dXJuIHJlYWRfcm9vdGh1YiAoaGMsIGEsIDB4ZmMwZmUwMDApOyB9CitzdGF0aWMgaW5saW5lIHUzMiByb290aHViX2IgKHN0cnVjdCBvaGNpICpoYykKKwl7IHJldHVybiByZWFkbCAoJmhjLT5yZWdzLT5yb290aHViLmIpOyB9CitzdGF0aWMgaW5saW5lIHUzMiByb290aHViX3N0YXR1cyAoc3RydWN0IG9oY2kgKmhjKQorCXsgcmV0dXJuIHJlYWRsICgmaGMtPnJlZ3MtPnJvb3RodWIuc3RhdHVzKTsgfQorc3RhdGljIHUzMiByb290aHViX3BvcnRzdGF0dXMgKHN0cnVjdCBvaGNpICpoYywgaW50IGkpCisJeyByZXR1cm4gcmVhZF9yb290aHViIChoYywgcG9ydHN0YXR1cyBbaV0sIDB4ZmZlMGZjZTApOyB9CisKKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIGludCBoY19pbnRlcnJ1cHQgKHZvaWQpOworc3RhdGljIHZvaWQKK3RkX3N1Ym1pdF9qb2IgKHN0cnVjdCB1c2JfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBsb25nIHBpcGUsIHZvaWQgKiBidWZmZXIsCisJaW50IHRyYW5zZmVyX2xlbiwgc3RydWN0IGRldnJlcXVlc3QgKiBzZXR1cCwgdXJiX3ByaXZfdCAqIHVyYiwgaW50IGludGVydmFsKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogVVJCIHN1cHBvcnQgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBmcmVlIEhDRC1wcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgVVJCICovCisKK3N0YXRpYyB2b2lkIHVyYl9mcmVlX3ByaXYgKHVyYl9wcml2X3QgKiB1cmIpCit7CisJaW50CQlpOworCWludAkJbGFzdDsKKwlzdHJ1Y3QgdGQJKiB0ZDsKKworCWxhc3QgPSB1cmItPmxlbmd0aCAtIDE7CisJaWYgKGxhc3QgPj0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDw9IGxhc3Q7IGkrKykgeworCQkJdGQgPSB1cmItPnRkW2ldOworCQkJaWYgKHRkKSB7CisJCQkJdGQtPnVzYl9kZXYgPSBOVUxMOworCQkJCXVyYi0+dGRbaV0gPSBOVUxMOworCQkJfQorCQl9CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpbnQgc29oY2lfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyIChzdHJ1Y3QgdXNiX2RldmljZSAqIGRldik7CisKKy8qIGRlYnVnfCBwcmludCB0aGUgbWFpbiBjb21wb25lbnRzIG9mIGFuIFVSQgorICogc21hbGw6IDApIGhlYWRlciArIGRhdGEgcGFja2V0cyAxKSBqdXN0IGhlYWRlciAqLworCitzdGF0aWMgdm9pZCBwa3RfcHJpbnQgKHN0cnVjdCB1c2JfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBsb25nIHBpcGUsIHZvaWQgKiBidWZmZXIsCisJaW50IHRyYW5zZmVyX2xlbiwgc3RydWN0IGRldnJlcXVlc3QgKiBzZXR1cCwgY2hhciAqIHN0ciwgaW50IHNtYWxsKQoreworCXVyYl9wcml2X3QgKiBwdXJiID0gJnVyYl9wcml2OworCisJZGJnKCIlcyBVUkI6WyU0eF0gZGV2OiUyZCxlcDolMmQtJWMsdHlwZTolcyxsZW46JWQvJWQgc3RhdDolI2x4IiwKKwkJCXN0ciwKKwkJCXNvaGNpX2dldF9jdXJyZW50X2ZyYW1lX251bWJlciAoZGV2KSwKKwkJCXVzYl9waXBlZGV2aWNlIChwaXBlKSwKKwkJCXVzYl9waXBlZW5kcG9pbnQgKHBpcGUpLAorCQkJdXNiX3BpcGVvdXQgKHBpcGUpPyAnTyc6ICdJJywKKwkJCXVzYl9waXBldHlwZSAocGlwZSkgPCAyPyAodXNiX3BpcGVpbnQgKHBpcGUpPyAiSU5UUiI6ICJJU09DIik6CisJCQkJKHVzYl9waXBlY29udHJvbCAocGlwZSk/ICJDVFJMIjogIkJVTEsiKSwKKwkJCXB1cmItPmFjdHVhbF9sZW5ndGgsCisJCQl0cmFuc2Zlcl9sZW4sIGRldi0+c3RhdHVzKTsKKyNpZmRlZglPSENJX1ZFUkJPU0VfREVCVUcKKwlpZiAoIXNtYWxsKSB7CisJCWludCBpLCBsZW47CisKKwkJaWYgKHVzYl9waXBlY29udHJvbCAocGlwZSkpIHsKKwkJCXByaW50ZiAoX19GSUxFX18gIjogY21kKDgpOiIpOworCQkJZm9yIChpID0gMDsgaSA8IDggOyBpKyspCisJCQkJcHJpbnRmICgiICUwMngiLCAoKF9fdTggKikgc2V0dXApIFtpXSk7CisJCQlwcmludGYgKCJcbiIpOworCQl9CisJCWlmICh0cmFuc2Zlcl9sZW4gPiAwICYmIGJ1ZmZlcikgeworCQkJcHJpbnRmIChfX0ZJTEVfXyAiOiBkYXRhKCVkLyVkKToiLAorCQkJCXB1cmItPmFjdHVhbF9sZW5ndGgsCisJCQkJdHJhbnNmZXJfbGVuKTsKKwkJCWxlbiA9IHVzYl9waXBlb3V0IChwaXBlKT8KKwkJCQkJdHJhbnNmZXJfbGVuOiBwdXJiLT5hY3R1YWxfbGVuZ3RoOworCQkJZm9yIChpID0gMDsgaSA8IDE2ICYmIGkgPCBsZW47IGkrKykKKwkJCQlwcmludGYgKCIgJTAyeCIsICgoX191OCAqKSBidWZmZXIpIFtpXSk7CisJCQlwcmludGYgKCIlc1xuIiwgaSA8IGxlbj8gIi4uLiI6ICIiKTsKKwkJfQorCX0KKyNlbmRpZgorfQorCisvKiBqdXN0IGZvciBkZWJ1Z2dpbmc7IHByaW50cyBub24tZW1wdHkgYnJhbmNoZXMgb2YgdGhlIGludCBlZCB0cmVlIGluY2x1c2l2ZSBpc28gZWRzKi8KK3ZvaWQgZXBfcHJpbnRfaW50X2VkcyAob2hjaV90ICpvaGNpLCBjaGFyICogc3RyKSB7CisJaW50IGksIGo7CisJIF9fdTMyICogZWRfcDsKKwlmb3IgKGk9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWogPSA1OworCQllZF9wID0gJihvaGNpLT5oY2NhLT5pbnRfdGFibGUgW2ldKTsKKwkJaWYgKCplZF9wID09IDApCisJCSAgICBjb250aW51ZTsKKwkJcHJpbnRmIChfX0ZJTEVfXyAiOiAlcyBicmFuY2ggaW50ICUyZCglMngpOiIsIHN0ciwgaSwgaSk7CisJCXdoaWxlICgqZWRfcCAhPSAwICYmIGotLSkgeworCQkJZWRfdCAqZWQgPSAoZWRfdCAqKW0zMl9zd2FwKGVkX3ApOworCQkJcHJpbnRmICgiIGVkOiAlNHg7IiwgZWQtPmh3SU5GTyk7CisJCQllZF9wID0gJmVkLT5od05leHRFRDsKKwkJfQorCQlwcmludGYgKCJcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgb2hjaV9kdW1wX2ludHJfbWFzayAoY2hhciAqbGFiZWwsIF9fdTMyIG1hc2spCit7CisJZGJnICgiJXM6IDB4JTA4eCVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCWxhYmVsLAorCQltYXNrLAorCQkobWFzayAmIE9IQ0lfSU5UUl9NSUUpID8gIiBNSUUiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX09DKSA/ICIgT0MiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1JIU0MpID8gIiBSSFNDIiA6ICIiLAorCQkobWFzayAmIE9IQ0lfSU5UUl9GTk8pID8gIiBGTk8iIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1VFKSA/ICIgVUUiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1JEKSA/ICIgUkQiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1NGKSA/ICIgU0YiIDogIiIsCisJCShtYXNrICYgT0hDSV9JTlRSX1dESCkgPyAiIFdESCIgOiAiIiwKKwkJKG1hc2sgJiBPSENJX0lOVFJfU08pID8gIiBTTyIgOiAiIgorCQkpOworfQorCitzdGF0aWMgdm9pZCBtYXliZV9wcmludF9lZHMgKGNoYXIgKmxhYmVsLCBfX3UzMiB2YWx1ZSkKK3sKKwllZF90ICplZHAgPSAoZWRfdCAqKXZhbHVlOworCisJaWYgKHZhbHVlKSB7CisJCWRiZyAoIiVzICUwOHgiLCBsYWJlbCwgdmFsdWUpOworCQlkYmcgKCIlMDh4IiwgZWRwLT5od0lORk8pOworCQlkYmcgKCIlMDh4IiwgZWRwLT5od1RhaWxQKTsKKwkJZGJnICgiJTA4eCIsIGVkcC0+aHdIZWFkUCk7CisJCWRiZyAoIiUwOHgiLCBlZHAtPmh3TmV4dEVEKTsKKwl9Cit9CisKK3N0YXRpYyBjaGFyICogaGNmczJzdHJpbmcgKGludCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgT0hDSV9VU0JfUkVTRVQ6CXJldHVybiAicmVzZXQiOworCQljYXNlIE9IQ0lfVVNCX1JFU1VNRToJcmV0dXJuICJyZXN1bWUiOworCQljYXNlIE9IQ0lfVVNCX09QRVI6CXJldHVybiAib3BlcmF0aW9uYWwiOworCQljYXNlIE9IQ0lfVVNCX1NVU1BFTkQ6CXJldHVybiAic3VzcGVuZCI7CisJfQorCXJldHVybiAiPyI7Cit9CisKKy8qIGR1bXAgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RhdGljIHZvaWQgb2hjaV9kdW1wX3N0YXR1cyAob2hjaV90ICpjb250cm9sbGVyKQoreworCXN0cnVjdCBvaGNpX3JlZ3MJKnJlZ3MgPSBjb250cm9sbGVyLT5yZWdzOworCV9fdTMyCQkJdGVtcDsKKworCXRlbXAgPSByZWFkbCAoJnJlZ3MtPnJldmlzaW9uKSAmIDB4ZmY7CisJaWYgKHRlbXAgIT0gMHgxMCkKKwkJZGJnICgic3BlYyAlZC4lZCIsICh0ZW1wID4+IDQpLCAodGVtcCAmIDB4MGYpKTsKKworCXRlbXAgPSByZWFkbCAoJnJlZ3MtPmNvbnRyb2wpOworCWRiZyAoImNvbnRyb2w6IDB4JTA4eCVzJXMlcyBIQ0ZTPSVzJXMlcyVzJXMgQ0JTUj0lZCIsIHRlbXAsCisJCSh0ZW1wICYgT0hDSV9DVFJMX1JXRSkgPyAiIFJXRSIgOiAiIiwKKwkJKHRlbXAgJiBPSENJX0NUUkxfUldDKSA/ICIgUldDIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQ1RSTF9JUikgPyAiIElSIiA6ICIiLAorCQloY2ZzMnN0cmluZyAodGVtcCAmIE9IQ0lfQ1RSTF9IQ0ZTKSwKKwkJKHRlbXAgJiBPSENJX0NUUkxfQkxFKSA/ICIgQkxFIiA6ICIiLAorCQkodGVtcCAmIE9IQ0lfQ1RSTF9DTEUpID8gIiBDTEUiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9DVFJMX0lFKSA/ICIgSUUiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9DVFJMX1BMRSkgPyAiIFBMRSIgOiAiIiwKKwkJdGVtcCAmIE9IQ0lfQ1RSTF9DQlNSCisJCSk7CisKKwl0ZW1wID0gcmVhZGwgKCZyZWdzLT5jbWRzdGF0dXMpOworCWRiZyAoImNtZHN0YXR1czogMHglMDh4IFNPQz0lZCVzJXMlcyVzIiwgdGVtcCwKKwkJKHRlbXAgJiBPSENJX1NPQykgPj4gMTYsCisJCSh0ZW1wICYgT0hDSV9PQ1IpID8gIiBPQ1IiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9CTEYpID8gIiBCTEYiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9DTEYpID8gIiBDTEYiIDogIiIsCisJCSh0ZW1wICYgT0hDSV9IQ1IpID8gIiBIQ1IiIDogIiIKKwkJKTsKKworCW9oY2lfZHVtcF9pbnRyX21hc2sgKCJpbnRyc3RhdHVzIiwgcmVhZGwgKCZyZWdzLT5pbnRyc3RhdHVzKSk7CisJb2hjaV9kdW1wX2ludHJfbWFzayAoImludHJlbmFibGUiLCByZWFkbCAoJnJlZ3MtPmludHJlbmFibGUpKTsKKworCW1heWJlX3ByaW50X2VkcyAoImVkX3BlcmlvZGN1cnJlbnQiLCByZWFkbCAoJnJlZ3MtPmVkX3BlcmlvZGN1cnJlbnQpKTsKKworCW1heWJlX3ByaW50X2VkcyAoImVkX2NvbnRyb2xoZWFkIiwgcmVhZGwgKCZyZWdzLT5lZF9jb250cm9saGVhZCkpOworCW1heWJlX3ByaW50X2VkcyAoImVkX2NvbnRyb2xjdXJyZW50IiwgcmVhZGwgKCZyZWdzLT5lZF9jb250cm9sY3VycmVudCkpOworCisJbWF5YmVfcHJpbnRfZWRzICgiZWRfYnVsa2hlYWQiLCByZWFkbCAoJnJlZ3MtPmVkX2J1bGtoZWFkKSk7CisJbWF5YmVfcHJpbnRfZWRzICgiZWRfYnVsa2N1cnJlbnQiLCByZWFkbCAoJnJlZ3MtPmVkX2J1bGtjdXJyZW50KSk7CisKKwltYXliZV9wcmludF9lZHMgKCJkb25laGVhZCIsIHJlYWRsICgmcmVncy0+ZG9uZWhlYWQpKTsKK30KKworc3RhdGljIHZvaWQgb2hjaV9kdW1wX3Jvb3RodWIgKG9oY2lfdCAqY29udHJvbGxlciwgaW50IHZlcmJvc2UpCit7CisJX191MzIJCQl0ZW1wLCBuZHAsIGk7CisKKwl0ZW1wID0gcm9vdGh1Yl9hIChjb250cm9sbGVyKTsKKwluZHAgPSAodGVtcCAmIFJIX0FfTkRQKTsKKyNpZmRlZiBDT05GSUdfQVQ5MUNfUFFGUF9VSFBCVUcKKwluZHAgPSAobmRwID09IDIpID8gMTowOworI2VuZGlmCisJaWYgKHZlcmJvc2UpIHsKKwkJZGJnICgicm9vdGh1Yi5hOiAlMDh4IFBPVFBHVD0lZCVzJXMlcyVzJXMgTkRQPSVkIiwgdGVtcCwKKwkJCSgodGVtcCAmIFJIX0FfUE9UUEdUKSA+PiAyNCkgJiAweGZmLAorCQkJKHRlbXAgJiBSSF9BX05PQ1ApID8gIiBOT0NQIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9BX09DUE0pID8gIiBPQ1BNIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9BX0RUKSA/ICIgRFQiIDogIiIsCisJCQkodGVtcCAmIFJIX0FfTlBTKSA/ICIgTlBTIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9BX1BTTSkgPyAiIFBTTSIgOiAiIiwKKwkJCW5kcAorCQkJKTsKKwkJdGVtcCA9IHJvb3RodWJfYiAoY29udHJvbGxlcik7CisJCWRiZyAoInJvb3RodWIuYjogJTA4eCBQUENNPSUwNHggRFI9JTA0eCIsCisJCQl0ZW1wLAorCQkJKHRlbXAgJiBSSF9CX1BQQ00pID4+IDE2LAorCQkJKHRlbXAgJiBSSF9CX0RSKQorCQkJKTsKKwkJdGVtcCA9IHJvb3RodWJfc3RhdHVzIChjb250cm9sbGVyKTsKKwkJZGJnICgicm9vdGh1Yi5zdGF0dXM6ICUwOHglcyVzJXMlcyVzJXMiLAorCQkJdGVtcCwKKwkJCSh0ZW1wICYgUkhfSFNfQ1JXRSkgPyAiIENSV0UiIDogIiIsCisJCQkodGVtcCAmIFJIX0hTX09DSUMpID8gIiBPQ0lDIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9IU19MUFNDKSA/ICIgTFBTQyIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfSFNfRFJXRSkgPyAiIERSV0UiIDogIiIsCisJCQkodGVtcCAmIFJIX0hTX09DSSkgPyAiIE9DSSIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfSFNfTFBTKSA/ICIgTFBTIiA6ICIiCisJCQkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuZHA7IGkrKykgeworCQl0ZW1wID0gcm9vdGh1Yl9wb3J0c3RhdHVzIChjb250cm9sbGVyLCBpKTsKKwkJZGJnICgicm9vdGh1Yi5wb3J0c3RhdHVzIFslZF0gPSAweCUwOHglcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMiLAorCQkJaSwKKwkJCXRlbXAsCisJCQkodGVtcCAmIFJIX1BTX1BSU0MpID8gIiBQUlNDIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9QU19PQ0lDKSA/ICIgT0NJQyIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfUFNfUFNTQykgPyAiIFBTU0MiIDogIiIsCisJCQkodGVtcCAmIFJIX1BTX1BFU0MpID8gIiBQRVNDIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9QU19DU0MpID8gIiBDU0MiIDogIiIsCisKKwkJCSh0ZW1wICYgUkhfUFNfTFNEQSkgPyAiIExTREEiIDogIiIsCisJCQkodGVtcCAmIFJIX1BTX1BQUykgPyAiIFBQUyIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfUFNfUFJTKSA/ICIgUFJTIiA6ICIiLAorCQkJKHRlbXAgJiBSSF9QU19QT0NJKSA/ICIgUE9DSSIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfUFNfUFNTKSA/ICIgUFNTIiA6ICIiLAorCisJCQkodGVtcCAmIFJIX1BTX1BFUykgPyAiIFBFUyIgOiAiIiwKKwkJCSh0ZW1wICYgUkhfUFNfQ0NTKSA/ICIgQ0NTIiA6ICIiCisJCQkpOworCX0KK30KKworc3RhdGljIHZvaWQgb2hjaV9kdW1wIChvaGNpX3QgKmNvbnRyb2xsZXIsIGludCB2ZXJib3NlKQoreworCWRiZyAoIk9IQ0kgY29udHJvbGxlciB1c2ItJXMgc3RhdGUiLCBjb250cm9sbGVyLT5zbG90X25hbWUpOworCisJLyogZHVtcHMgc29tZSBvZiB0aGUgc3RhdGUgd2Uga25vdyBhYm91dCAqLworCW9oY2lfZHVtcF9zdGF0dXMgKGNvbnRyb2xsZXIpOworCWlmICh2ZXJib3NlKQorCQllcF9wcmludF9pbnRfZWRzIChjb250cm9sbGVyLCAiaGNjYSIpOworCWRiZyAoImhjY2EgZnJhbWUgIyUwNHgiLCBjb250cm9sbGVyLT5oY2NhLT5mcmFtZV9ubyk7CisJb2hjaV9kdW1wX3Jvb3RodWIgKGNvbnRyb2xsZXIsIDEpOworfQorCisKKyNlbmRpZiAvKiBERUJVRyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBJbnRlcmZhY2UgZnVuY3Rpb25zIChVUkIpCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBnZXQgYSB0cmFuc2ZlciByZXF1ZXN0ICovCisKK2ludCBzb2hjaV9zdWJtaXRfam9iKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgcGlwZSwgdm9pZCAqYnVmZmVyLAorCQlpbnQgdHJhbnNmZXJfbGVuLCBzdHJ1Y3QgZGV2cmVxdWVzdCAqc2V0dXAsIGludCBpbnRlcnZhbCkKK3sKKwlvaGNpX3QgKm9oY2k7CisJZWRfdCAqIGVkOworCXVyYl9wcml2X3QgKnB1cmJfcHJpdjsKKwlpbnQgaSwgc2l6ZSA9IDA7CisKKwlvaGNpID0gJmdvaGNpOworCisJLyogd2hlbiBjb250cm9sbGVyJ3MgaHVuZywgcGVybWl0IG9ubHkgcm9vdGh1YiBjbGVhbnVwIGF0dGVtcHRzCisJICogc3VjaCBhcyBwb3dlcmluZyBkb3duIHBvcnRzICovCisJaWYgKG9oY2ktPmRpc2FibGVkKSB7CisJCWVycigic29oY2lfc3VibWl0X2pvYjogRVBJUEUiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGV2ZXJ5IGVuZHBvaW50IGhhcyBhIGVkLCBsb2NhdGUgYW5kIGZpbGwgaXQgKi8KKwlpZiAoIShlZCA9IGVwX2FkZF9lZCAoZGV2LCBwaXBlKSkpIHsKKwkJZXJyKCJzb2hjaV9zdWJtaXRfam9iOiBFTk9NRU0iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGZvciB0aGUgcHJpdmF0ZSBwYXJ0IG9mIHRoZSBVUkIgd2UgbmVlZCB0aGUgbnVtYmVyIG9mIFREcyAoc2l6ZSkgKi8KKwlzd2l0Y2ggKHVzYl9waXBldHlwZSAocGlwZSkpIHsKKwkJY2FzZSBQSVBFX0JVTEs6IC8qIG9uZSBURCBmb3IgZXZlcnkgNDA5NiBCeXRlICovCisJCQlzaXplID0gKHRyYW5zZmVyX2xlbiAtIDEpIC8gNDA5NiArIDE7CisJCQlicmVhazsKKwkJY2FzZSBQSVBFX0NPTlRST0w6IC8qIDEgVEQgZm9yIHNldHVwLCAxIGZvciBBQ0sgYW5kIDEgZm9yIGV2ZXJ5IDQwOTYgQiAqLworCQkJc2l6ZSA9ICh0cmFuc2Zlcl9sZW4gPT0gMCk/IDI6CisJCQkJCQkodHJhbnNmZXJfbGVuIC0gMSkgLyA0MDk2ICsgMzsKKwkJCWJyZWFrOworCX0KKworCWlmIChzaXplID49IChOX1VSQl9URCAtIDEpKSB7CisJCWVycigibmVlZCAlZCBURHMsIG9ubHkgaGF2ZSAlZCIsIHNpemUsIE5fVVJCX1REKTsKKwkJcmV0dXJuIC0xOworCX0KKwlwdXJiX3ByaXYgPSAmdXJiX3ByaXY7CisJcHVyYl9wcml2LT5waXBlID0gcGlwZTsKKworCS8qIGZpbGwgdGhlIHByaXZhdGUgcGFydCBvZiB0aGUgVVJCICovCisJcHVyYl9wcml2LT5sZW5ndGggPSBzaXplOworCXB1cmJfcHJpdi0+ZWQgPSBlZDsKKwlwdXJiX3ByaXYtPmFjdHVhbF9sZW5ndGggPSAwOworCisJLyogYWxsb2NhdGUgdGhlIFREcyAqLworCS8qIG5vdGUgdGhhdCB0ZFswXSB3YXMgYWxsb2NhdGVkIGluIGVwX2FkZF9lZCAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJcHVyYl9wcml2LT50ZFtpXSA9IHRkX2FsbG9jIChkZXYpOworCQlpZiAoIXB1cmJfcHJpdi0+dGRbaV0pIHsKKwkJCXB1cmJfcHJpdi0+bGVuZ3RoID0gaTsKKwkJCXVyYl9mcmVlX3ByaXYgKHB1cmJfcHJpdik7CisJCQllcnIoInNvaGNpX3N1Ym1pdF9qb2I6IEVOT01FTSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGVkLT5zdGF0ZSA9PSBFRF9ORVcgfHwgKGVkLT5zdGF0ZSAmIEVEX0RFTCkpIHsKKwkJdXJiX2ZyZWVfcHJpdiAocHVyYl9wcml2KTsKKwkJZXJyKCJzb2hjaV9zdWJtaXRfam9iOiBFSU5WQUwiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGxpbmsgdGhlIGVkIGludG8gYSBjaGFpbiBpZiBpcyBub3QgYWxyZWFkeSAqLworCWlmIChlZC0+c3RhdGUgIT0gRURfT1BFUikKKwkJZXBfbGluayAob2hjaSwgZWQpOworCisJLyogZmlsbCB0aGUgVERzIGFuZCBsaW5rIGl0IHRvIHRoZSBlZCAqLworCXRkX3N1Ym1pdF9qb2IoZGV2LCBwaXBlLCBidWZmZXIsIHRyYW5zZmVyX2xlbiwgc2V0dXAsIHB1cmJfcHJpdiwgaW50ZXJ2YWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBERUJVRworLyogdGVsbCB1cyB0aGUgY3VycmVudCBVU0IgZnJhbWUgbnVtYmVyICovCisKK3N0YXRpYyBpbnQgc29oY2lfZ2V0X2N1cnJlbnRfZnJhbWVfbnVtYmVyIChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldikKK3sKKwlvaGNpX3QgKm9oY2kgPSAmZ29oY2k7CisKKwlyZXR1cm4gbTE2X3N3YXAgKG9oY2ktPmhjY2EtPmZyYW1lX25vKTsKK30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBFRCBoYW5kbGluZyBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGxpbmsgYW4gZWQgaW50byBvbmUgb2YgdGhlIEhDIGNoYWlucyAqLworCitzdGF0aWMgaW50IGVwX2xpbmsgKG9oY2lfdCAqb2hjaSwgZWRfdCAqZWRpKQoreworCXZvbGF0aWxlIGVkX3QgKmVkID0gZWRpOworCisJZWQtPnN0YXRlID0gRURfT1BFUjsKKworCXN3aXRjaCAoZWQtPnR5cGUpIHsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJZWQtPmh3TmV4dEVEID0gMDsKKwkJaWYgKG9oY2ktPmVkX2NvbnRyb2x0YWlsID09IE5VTEwpIHsKKwkJCXdyaXRlbCAoZWQsICZvaGNpLT5yZWdzLT5lZF9jb250cm9saGVhZCk7CisJCX0gZWxzZSB7CisJCQlvaGNpLT5lZF9jb250cm9sdGFpbC0+aHdOZXh0RUQgPSBtMzJfc3dhcCAoZWQpOworCQl9CisJCWVkLT5lZF9wcmV2ID0gb2hjaS0+ZWRfY29udHJvbHRhaWw7CisJCWlmICghb2hjaS0+ZWRfY29udHJvbHRhaWwgJiYgIW9oY2ktPmVkX3JtX2xpc3RbMF0gJiYKKwkJCSFvaGNpLT5lZF9ybV9saXN0WzFdICYmICFvaGNpLT5zbGVlcGluZykgeworCQkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX0NUUkxfQ0xFOworCQkJd3JpdGVsIChvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCX0KKwkJb2hjaS0+ZWRfY29udHJvbHRhaWwgPSBlZGk7CisJCWJyZWFrOworCisJY2FzZSBQSVBFX0JVTEs6CisJCWVkLT5od05leHRFRCA9IDA7CisJCWlmIChvaGNpLT5lZF9idWxrdGFpbCA9PSBOVUxMKSB7CisJCQl3cml0ZWwgKGVkLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2hlYWQpOworCQl9IGVsc2UgeworCQkJb2hjaS0+ZWRfYnVsa3RhaWwtPmh3TmV4dEVEID0gbTMyX3N3YXAgKGVkKTsKKwkJfQorCQllZC0+ZWRfcHJldiA9IG9oY2ktPmVkX2J1bGt0YWlsOworCQlpZiAoIW9oY2ktPmVkX2J1bGt0YWlsICYmICFvaGNpLT5lZF9ybV9saXN0WzBdICYmCisJCQkhb2hjaS0+ZWRfcm1fbGlzdFsxXSAmJiAhb2hjaS0+c2xlZXBpbmcpIHsKKwkJCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9DVFJMX0JMRTsKKwkJCXdyaXRlbCAob2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQl9CisJCW9oY2ktPmVkX2J1bGt0YWlsID0gZWRpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHVubGluayBhbiBlZCBmcm9tIG9uZSBvZiB0aGUgSEMgY2hhaW5zLgorICoganVzdCB0aGUgbGluayB0byB0aGUgZWQgaXMgdW5saW5rZWQuCisgKiB0aGUgbGluayBmcm9tIHRoZSBlZCBzdGlsbCBwb2ludHMgdG8gYW5vdGhlciBvcGVyYXRpb25hbCBlZCBvciAwCisgKiBzbyB0aGUgSEMgY2FuIGV2ZW50dWFsbHkgZmluaXNoIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSB1bmxpbmtlZCBlZCAqLworCitzdGF0aWMgaW50IGVwX3VubGluayAob2hjaV90ICpvaGNpLCBlZF90ICplZCkKK3sKKwllZC0+aHdJTkZPIHw9IG0zMl9zd2FwIChPSENJX0VEX1NLSVApOworCisJc3dpdGNoIChlZC0+dHlwZSkgeworCWNhc2UgUElQRV9DT05UUk9MOgorCQlpZiAoZWQtPmVkX3ByZXYgPT0gTlVMTCkgeworCQkJaWYgKCFlZC0+aHdOZXh0RUQpIHsKKwkJCQlvaGNpLT5oY19jb250cm9sICY9IH5PSENJX0NUUkxfQ0xFOworCQkJCXdyaXRlbCAob2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCQkJfQorCQkJd3JpdGVsIChtMzJfc3dhcCAoKigoX191MzIgKikmZWQtPmh3TmV4dEVEKSksICZvaGNpLT5yZWdzLT5lZF9jb250cm9saGVhZCk7CisJCX0gZWxzZSB7CisJCQllZC0+ZWRfcHJldi0+aHdOZXh0RUQgPSBlZC0+aHdOZXh0RUQ7CisJCX0KKwkJaWYgKG9oY2ktPmVkX2NvbnRyb2x0YWlsID09IGVkKSB7CisJCQlvaGNpLT5lZF9jb250cm9sdGFpbCA9IGVkLT5lZF9wcmV2OworCQl9IGVsc2UgeworCQkJKChlZF90ICopbTMyX3N3YXAgKCooKF9fdTMyICopJmVkLT5od05leHRFRCkpKS0+ZWRfcHJldiA9IGVkLT5lZF9wcmV2OworCQl9CisJCWJyZWFrOworCisJY2FzZSBQSVBFX0JVTEs6CisJCWlmIChlZC0+ZWRfcHJldiA9PSBOVUxMKSB7CisJCQlpZiAoIWVkLT5od05leHRFRCkgeworCQkJCW9oY2ktPmhjX2NvbnRyb2wgJj0gfk9IQ0lfQ1RSTF9CTEU7CisJCQkJd3JpdGVsIChvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJCQl9CisJCQl3cml0ZWwgKG0zMl9zd2FwICgqKChfX3UzMiAqKSZlZC0+aHdOZXh0RUQpKSwgJm9oY2ktPnJlZ3MtPmVkX2J1bGtoZWFkKTsKKwkJfSBlbHNlIHsKKwkJCWVkLT5lZF9wcmV2LT5od05leHRFRCA9IGVkLT5od05leHRFRDsKKwkJfQorCQlpZiAob2hjaS0+ZWRfYnVsa3RhaWwgPT0gZWQpIHsKKwkJCW9oY2ktPmVkX2J1bGt0YWlsID0gZWQtPmVkX3ByZXY7CisJCX0gZWxzZSB7CisJCQkoKGVkX3QgKiltMzJfc3dhcCAoKigoX191MzIgKikmZWQtPmh3TmV4dEVEKSkpLT5lZF9wcmV2ID0gZWQtPmVkX3ByZXY7CisJCX0KKwkJYnJlYWs7CisJfQorCWVkLT5zdGF0ZSA9IEVEX1VOTElOSzsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBhZGQvcmVpbml0IGFuIGVuZHBvaW50OyB0aGlzIHNob3VsZCBiZSBkb25lIG9uY2UgYXQgdGhlIHVzYl9zZXRfY29uZmlndXJhdGlvbiBjb21tYW5kLAorICogYnV0IHRoZSBVU0Igc3RhY2sgaXMgYSBsaXR0bGUgYml0IHN0YXRlbGVzcwlzbyB3ZSBkbyBpdCBhdCBldmVyeSB0cmFuc2FjdGlvbgorICogaWYgdGhlIHN0YXRlIG9mIHRoZSBlZCBpcyBFRF9ORVcgdGhlbiBhIGR1bW15IHRkIGlzIGFkZGVkIGFuZCB0aGUgc3RhdGUgaXMgY2hhbmdlZCB0byBFRF9VTkxJTksKKyAqIGluIGFsbCBvdGhlciBjYXNlcyB0aGUgc3RhdGUgaXMgbGVmdCB1bmNoYW5nZWQKKyAqIHRoZSBlZCBpbmZvIGZpZWxkcyBhcmUgc2V0dGVkIGFueXdheSBldmVuIHRob3VnaCBtb3N0IG9mIHRoZW0gc2hvdWxkIG5vdCBjaGFuZ2UgKi8KKworc3RhdGljIGVkX3QgKiBlcF9hZGRfZWQgKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1bnNpZ25lZCBsb25nIHBpcGUpCit7CisJdGRfdCAqdGQ7CisJZWRfdCAqZWRfcmV0OworCXZvbGF0aWxlIGVkX3QgKmVkOworCisJZWQgPSBlZF9yZXQgPSAmb2hjaV9kZXYuZWRbKHVzYl9waXBlZW5kcG9pbnQgKHBpcGUpIDw8IDEpIHwKKwkJCSh1c2JfcGlwZWNvbnRyb2wgKHBpcGUpPyAwOiB1c2JfcGlwZW91dCAocGlwZSkpXTsKKworCWlmICgoZWQtPnN0YXRlICYgRURfREVMKSB8fCAoZWQtPnN0YXRlICYgRURfVVJCX0RFTCkpIHsKKwkJZXJyKCJlcF9hZGRfZWQ6IHBlbmRpbmcgZGVsZXRlIik7CisJCS8qIHBlbmRpbmcgZGVsZXRlIHJlcXVlc3QgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGVkLT5zdGF0ZSA9PSBFRF9ORVcpIHsKKwkJZWQtPmh3SU5GTyA9IG0zMl9zd2FwIChPSENJX0VEX1NLSVApOyAvKiBza2lwIGVkICovCisJCS8qIGR1bW15IHRkOyBlbmQgb2YgdGQgbGlzdCBmb3IgZWQgKi8KKwkJdGQgPSB0ZF9hbGxvYyAodXNiX2Rldik7CisJCWVkLT5od1RhaWxQID0gbTMyX3N3YXAgKHRkKTsKKwkJZWQtPmh3SGVhZFAgPSBlZC0+aHdUYWlsUDsKKwkJZWQtPnN0YXRlID0gRURfVU5MSU5LOworCQllZC0+dHlwZSA9IHVzYl9waXBldHlwZSAocGlwZSk7CisJCW9oY2lfZGV2LmVkX2NudCsrOworCX0KKworCWVkLT5od0lORk8gPSBtMzJfc3dhcCAodXNiX3BpcGVkZXZpY2UgKHBpcGUpCisJCQl8IHVzYl9waXBlZW5kcG9pbnQgKHBpcGUpIDw8IDcKKwkJCXwgKHVzYl9waXBlaXNvYyAocGlwZSk/IDB4ODAwMDogMCkKKwkJCXwgKHVzYl9waXBlY29udHJvbCAocGlwZSk/IDA6ICh1c2JfcGlwZW91dCAocGlwZSk/IDB4ODAwOiAweDEwMDApKQorCQkJfCB1c2JfcGlwZXNsb3cgKHBpcGUpIDw8IDEzCisJCQl8IHVzYl9tYXhwYWNrZXQgKHVzYl9kZXYsIHBpcGUpIDw8IDE2KTsKKworCXJldHVybiBlZF9yZXQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIFREIGhhbmRsaW5nIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogZW5xdWV1ZSBuZXh0IFREIGZvciB0aGlzIFVSQiAoT0hDSSBzcGVjIDUuMi44LjIpICovCisKK3N0YXRpYyB2b2lkIHRkX2ZpbGwgKG9oY2lfdCAqb2hjaSwgdW5zaWduZWQgaW50IGluZm8sCisJdm9pZCAqZGF0YSwgaW50IGxlbiwKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBpbnQgaW5kZXgsIHVyYl9wcml2X3QgKnVyYl9wcml2KQoreworCXZvbGF0aWxlIHRkX3QgICp0ZCwgKnRkX3B0OworI2lmZGVmIE9IQ0lfRklMTF9UUkFDRQorCWludCBpOworI2VuZGlmCisKKwlpZiAoaW5kZXggPiB1cmJfcHJpdi0+bGVuZ3RoKSB7CisJCWVycigiaW5kZXggPiBsZW5ndGgiKTsKKwkJcmV0dXJuOworCX0KKwkvKiB1c2UgdGhpcyB0ZCBhcyB0aGUgbmV4dCBkdW1teSAqLworCXRkX3B0ID0gdXJiX3ByaXYtPnRkIFtpbmRleF07CisJdGRfcHQtPmh3TmV4dFREID0gMDsKKworCS8qIGZpbGwgdGhlIG9sZCBkdW1teSBURCAqLworCXRkID0gdXJiX3ByaXYtPnRkIFtpbmRleF0gPSAodGRfdCAqKShtMzJfc3dhcCAodXJiX3ByaXYtPmVkLT5od1RhaWxQKSAmIH4weGYpOworCisJdGQtPmVkID0gdXJiX3ByaXYtPmVkOworCXRkLT5uZXh0X2RsX3RkID0gTlVMTDsKKwl0ZC0+aW5kZXggPSBpbmRleDsKKwl0ZC0+ZGF0YSA9IChfX3UzMilkYXRhOworI2lmZGVmIE9IQ0lfRklMTF9UUkFDRQorCWlmICgodXNiX3BpcGV0eXBlKHVyYl9wcml2LT5waXBlKSA9PSBQSVBFX0JVTEspICYmIHVzYl9waXBlb3V0KHVyYl9wcml2LT5waXBlKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXByaW50ZigidGQtPmRhdGFbJWRdICUjMnggIixpLCAoKHVuc2lnbmVkIGNoYXIgKil0ZC0+ZGF0YSlbaV0pOworCQlwcmludGYoIlxuIik7CisJfQorI2VuZGlmCisJaWYgKCFsZW4pCisJCWRhdGEgPSAwOworCisJdGQtPmh3SU5GTyA9IG0zMl9zd2FwIChpbmZvKTsKKwl0ZC0+aHdDQlAgPSBtMzJfc3dhcCAoZGF0YSk7CisJaWYgKGRhdGEpCisJCXRkLT5od0JFID0gbTMyX3N3YXAgKGRhdGEgKyBsZW4gLSAxKTsKKwllbHNlCisJCXRkLT5od0JFID0gMDsKKwl0ZC0+aHdOZXh0VEQgPSBtMzJfc3dhcCAodGRfcHQpOworCXRkLT5od1BTVyBbMF0gPSBtMTZfc3dhcCAoKChfX3UzMilkYXRhICYgMHgwRkZGKSB8IDB4RTAwMCk7CisKKwkvKiBhcHBlbmQgdG8gcXVldWUgKi8KKwl0ZC0+ZWQtPmh3VGFpbFAgPSB0ZC0+aHdOZXh0VEQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHByZXBhcmUgYWxsIFREcyBvZiBhIHRyYW5zZmVyICovCisKK3N0YXRpYyB2b2lkIHRkX3N1Ym1pdF9qb2IgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgcGlwZSwgdm9pZCAqYnVmZmVyLAorCWludCB0cmFuc2Zlcl9sZW4sIHN0cnVjdCBkZXZyZXF1ZXN0ICpzZXR1cCwgdXJiX3ByaXZfdCAqdXJiLCBpbnQgaW50ZXJ2YWwpCit7CisJb2hjaV90ICpvaGNpID0gJmdvaGNpOworCWludCBkYXRhX2xlbiA9IHRyYW5zZmVyX2xlbjsKKwl2b2lkICpkYXRhOworCWludCBjbnQgPSAwOworCV9fdTMyIGluZm8gPSAwOworCXVuc2lnbmVkIGludCB0b2dnbGUgPSAwOworCisJLyogT0hDSSBoYW5kbGVzIHRoZSBEQVRBLXRvZ2dsZXMgaXRzZWxmLCB3ZSBqdXN0IHVzZSB0aGUgVVNCLXRvZ2dsZSBiaXRzIGZvciByZXNldGluZyAqLworCWlmKHVzYl9nZXR0b2dnbGUoZGV2LCB1c2JfcGlwZWVuZHBvaW50KHBpcGUpLCB1c2JfcGlwZW91dChwaXBlKSkpIHsKKwkJdG9nZ2xlID0gVERfVF9UT0dHTEU7CisJfSBlbHNlIHsKKwkJdG9nZ2xlID0gVERfVF9EQVRBMDsKKwkJdXNiX3NldHRvZ2dsZShkZXYsIHVzYl9waXBlZW5kcG9pbnQocGlwZSksIHVzYl9waXBlb3V0KHBpcGUpLCAxKTsKKwl9CisJdXJiLT50ZF9jbnQgPSAwOworCWlmIChkYXRhX2xlbikKKwkJZGF0YSA9IGJ1ZmZlcjsKKwllbHNlCisJCWRhdGEgPSAwOworCisJc3dpdGNoICh1c2JfcGlwZXR5cGUgKHBpcGUpKSB7CisJY2FzZSBQSVBFX0JVTEs6CisJCWluZm8gPSB1c2JfcGlwZW91dCAocGlwZSk/CisJCQlURF9DQyB8IFREX0RQX09VVCA6IFREX0NDIHwgVERfRFBfSU4gOworCQl3aGlsZShkYXRhX2xlbiA+IDQwOTYpIHsKKwkJCXRkX2ZpbGwgKG9oY2ksIGluZm8gfCAoY250PyBURF9UX1RPR0dMRTp0b2dnbGUpLCBkYXRhLCA0MDk2LCBkZXYsIGNudCwgdXJiKTsKKwkJCWRhdGEgKz0gNDA5NjsgZGF0YV9sZW4gLT0gNDA5NjsgY250Kys7CisJCX0KKwkJaW5mbyA9IHVzYl9waXBlb3V0IChwaXBlKT8KKwkJCVREX0NDIHwgVERfRFBfT1VUIDogVERfQ0MgfCBURF9SIHwgVERfRFBfSU4gOworCQl0ZF9maWxsIChvaGNpLCBpbmZvIHwgKGNudD8gVERfVF9UT0dHTEU6dG9nZ2xlKSwgZGF0YSwgZGF0YV9sZW4sIGRldiwgY250LCB1cmIpOworCQljbnQrKzsKKworCQlpZiAoIW9oY2ktPnNsZWVwaW5nKQorCQkJd3JpdGVsIChPSENJX0JMRiwgJm9oY2ktPnJlZ3MtPmNtZHN0YXR1cyk7IC8qIHN0YXJ0IGJ1bGsgbGlzdCAqLworCQlicmVhazsKKworCWNhc2UgUElQRV9DT05UUk9MOgorCQlpbmZvID0gVERfQ0MgfCBURF9EUF9TRVRVUCB8IFREX1RfREFUQTA7CisJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIHNldHVwLCA4LCBkZXYsIGNudCsrLCB1cmIpOworCQlpZiAoZGF0YV9sZW4gPiAwKSB7CisJCQlpbmZvID0gdXNiX3BpcGVvdXQgKHBpcGUpPworCQkJCVREX0NDIHwgVERfUiB8IFREX0RQX09VVCB8IFREX1RfREFUQTEgOiBURF9DQyB8IFREX1IgfCBURF9EUF9JTiB8IFREX1RfREFUQTE7CisJCQkvKiBOT1RFOiAgbWlzaGFuZGxlcyB0cmFuc2ZlcnMgPjhLLCBzb21lID40SyAqLworCQkJdGRfZmlsbCAob2hjaSwgaW5mbywgZGF0YSwgZGF0YV9sZW4sIGRldiwgY250KyssIHVyYik7CisJCX0KKwkJaW5mbyA9IHVzYl9waXBlb3V0IChwaXBlKT8KKwkJCVREX0NDIHwgVERfRFBfSU4gfCBURF9UX0RBVEExOiBURF9DQyB8IFREX0RQX09VVCB8IFREX1RfREFUQTE7CisJCXRkX2ZpbGwgKG9oY2ksIGluZm8sIGRhdGEsIDAsIGRldiwgY250KyssIHVyYik7CisJCWlmICghb2hjaS0+c2xlZXBpbmcpCisJCQl3cml0ZWwgKE9IQ0lfQ0xGLCAmb2hjaS0+cmVncy0+Y21kc3RhdHVzKTsgLyogc3RhcnQgQ29udHJvbCBsaXN0ICovCisJCWJyZWFrOworCX0KKwlpZiAodXJiLT5sZW5ndGggIT0gY250KQorCQlkYmcoIlREIExFTkdUSCAlZCAhPSBDTlQgJWQiLCB1cmItPmxlbmd0aCwgY250KTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogRG9uZSBMaXN0IGhhbmRsaW5nIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisvKiBjYWxjdWxhdGUgdGhlIHRyYW5zZmVyIGxlbmd0aCBhbmQgdXBkYXRlIHRoZSB1cmIgKi8KKworc3RhdGljIHZvaWQgZGxfdHJhbnNmZXJfbGVuZ3RoKHRkX3QgKiB0ZCkKK3sKKwlfX3UzMiB0ZElORk8sIHRkQkUsIHRkQ0JQOworCXVyYl9wcml2X3QgKmx1cmJfcHJpdiA9ICZ1cmJfcHJpdjsKKworCXRkSU5GTyA9IG0zMl9zd2FwICh0ZC0+aHdJTkZPKTsKKwl0ZEJFICAgPSBtMzJfc3dhcCAodGQtPmh3QkUpOworCXRkQ0JQICA9IG0zMl9zd2FwICh0ZC0+aHdDQlApOworCisKKwlpZiAoISh1c2JfcGlwZXR5cGUgKGx1cmJfcHJpdi0+cGlwZSkgPT0gUElQRV9DT05UUk9MICYmCisJICAgICgodGQtPmluZGV4ID09IDApIHx8ICh0ZC0+aW5kZXggPT0gbHVyYl9wcml2LT5sZW5ndGggLSAxKSkpKSB7CisJCWlmICh0ZEJFICE9IDApIHsKKwkJCWlmICh0ZC0+aHdDQlAgPT0gMCkKKwkJCQlsdXJiX3ByaXYtPmFjdHVhbF9sZW5ndGggKz0gdGRCRSAtIHRkLT5kYXRhICsgMTsKKwkJCWVsc2UKKwkJCQlsdXJiX3ByaXYtPmFjdHVhbF9sZW5ndGggKz0gdGRDQlAgLSB0ZC0+ZGF0YTsKKwkJfQorCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogcmVwbGllcyB0byB0aGUgcmVxdWVzdCBoYXZlIHRvIGJlIG9uIGEgRklGTyBiYXNpcyBzbworICogd2UgcmV2ZXJzZSB0aGUgcmV2ZXJzZWQgZG9uZS1saXN0ICovCisKK3N0YXRpYyB0ZF90ICogZGxfcmV2ZXJzZV9kb25lX2xpc3QgKG9oY2lfdCAqb2hjaSkKK3sKKwlfX3UzMiB0ZF9saXN0X2hjOworCXRkX3QgKnRkX3JldiA9IE5VTEw7CisJdGRfdCAqdGRfbGlzdCA9IE5VTEw7CisJdXJiX3ByaXZfdCAqbHVyYl9wcml2ID0gTlVMTDsKKworCXRkX2xpc3RfaGMgPSBtMzJfc3dhcCAob2hjaS0+aGNjYS0+ZG9uZV9oZWFkKSAmIDB4ZmZmZmZmZjA7CisJb2hjaS0+aGNjYS0+ZG9uZV9oZWFkID0gMDsKKworCXdoaWxlICh0ZF9saXN0X2hjKSB7CisJCXRkX2xpc3QgPSAodGRfdCAqKXRkX2xpc3RfaGM7CisKKwkJaWYgKFREX0NDX0dFVCAobTMyX3N3YXAgKHRkX2xpc3QtPmh3SU5GTykpKSB7CisJCQlsdXJiX3ByaXYgPSAmdXJiX3ByaXY7CisJCQlkYmcoIiBVU0ItZXJyb3Ivc3RhdHVzOiAleCA6ICVwIiwKKwkJCQkJVERfQ0NfR0VUIChtMzJfc3dhcCAodGRfbGlzdC0+aHdJTkZPKSksIHRkX2xpc3QpOworCQkJaWYgKHRkX2xpc3QtPmVkLT5od0hlYWRQICYgbTMyX3N3YXAgKDB4MSkpIHsKKwkJCQlpZiAobHVyYl9wcml2ICYmICgodGRfbGlzdC0+aW5kZXggKyAxKSA8IGx1cmJfcHJpdi0+bGVuZ3RoKSkgeworCQkJCQl0ZF9saXN0LT5lZC0+aHdIZWFkUCA9CisJCQkJCQkobHVyYl9wcml2LT50ZFtsdXJiX3ByaXYtPmxlbmd0aCAtIDFdLT5od05leHRURCAmIG0zMl9zd2FwICgweGZmZmZmZmYwKSkgfAorCQkJCQkJCQkJKHRkX2xpc3QtPmVkLT5od0hlYWRQICYgbTMyX3N3YXAgKDB4MikpOworCQkJCQlsdXJiX3ByaXYtPnRkX2NudCArPSBsdXJiX3ByaXYtPmxlbmd0aCAtIHRkX2xpc3QtPmluZGV4IC0gMTsKKwkJCQl9IGVsc2UKKwkJCQkJdGRfbGlzdC0+ZWQtPmh3SGVhZFAgJj0gbTMyX3N3YXAgKDB4ZmZmZmZmZjIpOworCQkJfQorCQl9CisKKwkJdGRfbGlzdC0+bmV4dF9kbF90ZCA9IHRkX3JldjsKKwkJdGRfcmV2ID0gdGRfbGlzdDsKKwkJdGRfbGlzdF9oYyA9IG0zMl9zd2FwICh0ZF9saXN0LT5od05leHRURCkgJiAweGZmZmZmZmYwOworCX0KKwlyZXR1cm4gdGRfbGlzdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogdGQgZG9uZSBsaXN0ICovCitzdGF0aWMgaW50IGRsX2RvbmVfbGlzdCAob2hjaV90ICpvaGNpLCB0ZF90ICp0ZF9saXN0KQoreworCXRkX3QgKnRkX2xpc3RfbmV4dCA9IE5VTEw7CisJZWRfdCAqZWQ7CisJaW50IGNjID0gMDsKKwlpbnQgc3RhdCA9IDA7CisJLyogdXJiX3QgKnVyYjsgKi8KKwl1cmJfcHJpdl90ICpsdXJiX3ByaXY7CisJX191MzIgdGRJTkZPLCBlZEhlYWRQLCBlZFRhaWxQOworCisJd2hpbGUgKHRkX2xpc3QpIHsKKwkJdGRfbGlzdF9uZXh0ID0gdGRfbGlzdC0+bmV4dF9kbF90ZDsKKworCQlsdXJiX3ByaXYgPSAmdXJiX3ByaXY7CisJCXRkSU5GTyA9IG0zMl9zd2FwICh0ZF9saXN0LT5od0lORk8pOworCisJCWVkID0gdGRfbGlzdC0+ZWQ7CisKKwkJZGxfdHJhbnNmZXJfbGVuZ3RoKHRkX2xpc3QpOworCisJCS8qIGVycm9yIGNvZGUgb2YgdHJhbnNmZXIgKi8KKwkJY2MgPSBURF9DQ19HRVQgKHRkSU5GTyk7CisJCWlmIChjYyAhPSAwKSB7CisJCQlkYmcoIkNvbmRpdGlvbkNvZGUgJSN4IiwgY2MpOworCQkJc3RhdCA9IGNjX3RvX2Vycm9yW2NjXTsKKwkJfQorCisJCWlmIChlZC0+c3RhdGUgIT0gRURfTkVXKSB7CisJCQllZEhlYWRQID0gbTMyX3N3YXAgKGVkLT5od0hlYWRQKSAmIDB4ZmZmZmZmZjA7CisJCQllZFRhaWxQID0gbTMyX3N3YXAgKGVkLT5od1RhaWxQKTsKKworCQkJLyogdW5saW5rIGVkcyBpZiB0aGV5IGFyZSBub3QgYnVzeSAqLworCQkJaWYgKChlZEhlYWRQID09IGVkVGFpbFApICYmIChlZC0+c3RhdGUgPT0gRURfT1BFUikpCisJCQkJZXBfdW5saW5rIChvaGNpLCBlZCk7CisJCX0KKworCQl0ZF9saXN0ID0gdGRfbGlzdF9uZXh0OworCX0KKwlyZXR1cm4gc3RhdDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogVmlydHVhbCBSb290IEh1YgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRGV2aWNlIGRlc2NyaXB0b3IgKi8KK3N0YXRpYyBfX3U4IHJvb3RfaHViX2Rldl9kZXNbXSA9Cit7CisJMHgxMiwJICAgIC8qCV9fdTggIGJMZW5ndGg7ICovCisJMHgwMSwJICAgIC8qCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsgRGV2aWNlICovCisJMHgxMCwJICAgIC8qCV9fdTE2IGJjZFVTQjsgdjEuMSAqLworCTB4MDEsCisJMHgwOSwJICAgIC8qCV9fdTggIGJEZXZpY2VDbGFzczsgSFVCX0NMQVNTQ09ERSAqLworCTB4MDAsCSAgICAvKglfX3U4ICBiRGV2aWNlU3ViQ2xhc3M7ICovCisJMHgwMCwJICAgIC8qCV9fdTggIGJEZXZpY2VQcm90b2NvbDsgKi8KKwkweDA4LAkgICAgLyoJX191OCAgYk1heFBhY2tldFNpemUwOyA4IEJ5dGVzICovCisJMHgwMCwJICAgIC8qCV9fdTE2IGlkVmVuZG9yOyAqLworCTB4MDAsCisJMHgwMCwJICAgIC8qCV9fdTE2IGlkUHJvZHVjdDsgKi8KKwkweDAwLAorCTB4MDAsCSAgICAvKglfX3UxNiBiY2REZXZpY2U7ICovCisJMHgwMCwKKwkweDAwLAkgICAgLyoJX191OCAgaU1hbnVmYWN0dXJlcjsgKi8KKwkweDAxLAkgICAgLyoJX191OCAgaVByb2R1Y3Q7ICovCisJMHgwMCwJICAgIC8qCV9fdTggIGlTZXJpYWxOdW1iZXI7ICovCisJMHgwMQkgICAgLyoJX191OCAgYk51bUNvbmZpZ3VyYXRpb25zOyAqLworfTsKKworCisvKiBDb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgKi8KK3N0YXRpYyBfX3U4IHJvb3RfaHViX2NvbmZpZ19kZXNbXSA9Cit7CisJMHgwOSwJICAgIC8qCV9fdTggIGJMZW5ndGg7ICovCisJMHgwMiwJICAgIC8qCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsgQ29uZmlndXJhdGlvbiAqLworCTB4MTksCSAgICAvKglfX3UxNiB3VG90YWxMZW5ndGg7ICovCisJMHgwMCwKKwkweDAxLAkgICAgLyoJX191OCAgYk51bUludGVyZmFjZXM7ICovCisJMHgwMSwJICAgIC8qCV9fdTggIGJDb25maWd1cmF0aW9uVmFsdWU7ICovCisJMHgwMCwJICAgIC8qCV9fdTggIGlDb25maWd1cmF0aW9uOyAqLworCTB4NDAsCSAgICAvKglfX3U4ICBibUF0dHJpYnV0ZXM7CisJCSBCaXQgNzogQnVzLXBvd2VyZWQsIDY6IFNlbGYtcG93ZXJlZCwgNSBSZW1vdGUtd2Frd3VwLCA0Li4wOiByZXN2ZCAqLworCTB4MDAsCSAgICAvKglfX3U4ICBNYXhQb3dlcjsgKi8KKworCS8qIGludGVyZmFjZSAqLworCTB4MDksCSAgICAvKglfX3U4ICBpZl9iTGVuZ3RoOyAqLworCTB4MDQsCSAgICAvKglfX3U4ICBpZl9iRGVzY3JpcHRvclR5cGU7IEludGVyZmFjZSAqLworCTB4MDAsCSAgICAvKglfX3U4ICBpZl9iSW50ZXJmYWNlTnVtYmVyOyAqLworCTB4MDAsCSAgICAvKglfX3U4ICBpZl9iQWx0ZXJuYXRlU2V0dGluZzsgKi8KKwkweDAxLAkgICAgLyoJX191OCAgaWZfYk51bUVuZHBvaW50czsgKi8KKwkweDA5LAkgICAgLyoJX191OCAgaWZfYkludGVyZmFjZUNsYXNzOyBIVUJfQ0xBU1NDT0RFICovCisJMHgwMCwJICAgIC8qCV9fdTggIGlmX2JJbnRlcmZhY2VTdWJDbGFzczsgKi8KKwkweDAwLAkgICAgLyoJX191OCAgaWZfYkludGVyZmFjZVByb3RvY29sOyAqLworCTB4MDAsCSAgICAvKglfX3U4ICBpZl9pSW50ZXJmYWNlOyAqLworCisJLyogZW5kcG9pbnQgKi8KKwkweDA3LAkgICAgLyoJX191OCAgZXBfYkxlbmd0aDsgKi8KKwkweDA1LAkgICAgLyoJX191OCAgZXBfYkRlc2NyaXB0b3JUeXBlOyBFbmRwb2ludCAqLworCTB4ODEsCSAgICAvKglfX3U4ICBlcF9iRW5kcG9pbnRBZGRyZXNzOyBJTiBFbmRwb2ludCAxICovCisJMHgwMywJICAgIC8qCV9fdTggIGVwX2JtQXR0cmlidXRlczsgSW50ZXJydXB0ICovCisJMHgwMiwJICAgIC8qCV9fdTE2IGVwX3dNYXhQYWNrZXRTaXplOyAoKE1BWF9ST09UX1BPUlRTICsgMSkgLyA4ICovCisJMHgwMCwKKwkweGZmCSAgICAvKglfX3U4ICBlcF9iSW50ZXJ2YWw7IDI1NSBtcyAqLworfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcm9vdF9odWJfc3RyX2luZGV4MFtdID0KK3sKKwkweDA0LAkJCS8qICBfX3U4ICBiTGVuZ3RoOyAqLworCTB4MDMsCQkJLyogIF9fdTggIGJEZXNjcmlwdG9yVHlwZTsgU3RyaW5nLWRlc2NyaXB0b3IgKi8KKwkweDA5LAkJCS8qICBfX3U4ICBsYW5nIElEICovCisJMHgwNCwJCQkvKiAgX191OCAgbGFuZyBJRCAqLworfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcm9vdF9odWJfc3RyX2luZGV4MVtdID0KK3sKKwkyOCwJCQkvKiAgX191OCAgYkxlbmd0aDsgKi8KKwkweDAzLAkJCS8qICBfX3U4ICBiRGVzY3JpcHRvclR5cGU7IFN0cmluZy1kZXNjcmlwdG9yICovCisJJ08nLAkJCS8qICBfX3U4ICBVbmljb2RlICovCisJMCwJCQkJLyogIF9fdTggIFVuaWNvZGUgKi8KKwknSCcsCQkJLyogIF9fdTggIFVuaWNvZGUgKi8KKwkwLAkJCQkvKiAgX191OCAgVW5pY29kZSAqLworCSdDJywJCQkvKiAgX191OCAgVW5pY29kZSAqLworCTAsCQkJCS8qICBfX3U4ICBVbmljb2RlICovCisJJ0knLAkJCS8qICBfX3U4ICBVbmljb2RlICovCisJMCwJCQkJLyogIF9fdTggIFVuaWNvZGUgKi8KKwknICcsCQkJLyogIF9fdTggIFVuaWNvZGUgKi8KKwkwLAkJCQkvKiAgX191OCAgVW5pY29kZSAqLworCSdSJywJCQkvKiAgX191OCAgVW5pY29kZSAqLworCTAsCQkJCS8qICBfX3U4ICBVbmljb2RlICovCisJJ28nLAkJCS8qICBfX3U4ICBVbmljb2RlICovCisJMCwJCQkJLyogIF9fdTggIFVuaWNvZGUgKi8KKwknbycsCQkJLyogIF9fdTggIFVuaWNvZGUgKi8KKwkwLAkJCQkvKiAgX191OCAgVW5pY29kZSAqLworCSd0JywJCQkvKiAgX191OCAgVW5pY29kZSAqLworCTAsCQkJCS8qICBfX3U4ICBVbmljb2RlICovCisJJyAnLAkJCS8qICBfX3U4ICBVbmljb2RlICovCisJMCwJCQkJLyogIF9fdTggIFVuaWNvZGUgKi8KKwknSCcsCQkJLyogIF9fdTggIFVuaWNvZGUgKi8KKwkwLAkJCQkvKiAgX191OCAgVW5pY29kZSAqLworCSd1JywJCQkvKiAgX191OCAgVW5pY29kZSAqLworCTAsCQkJCS8qICBfX3U4ICBVbmljb2RlICovCisJJ2InLAkJCS8qICBfX3U4ICBVbmljb2RlICovCisJMCwJCQkJLyogIF9fdTggIFVuaWNvZGUgKi8KK307CisKKy8qIEh1YiBjbGFzcy1zcGVjaWZpYyBkZXNjcmlwdG9yIGlzIGNvbnN0cnVjdGVkIGR5bmFtaWNhbGx5ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBPSyh4KQkJCWxlbiA9ICh4KTsgYnJlYWsKKyNpZmRlZiBERUJVRworI2RlZmluZSBXUl9SSF9TVEFUKHgpCQl7aW5mbygiV1I6c3RhdHVzICUjOHgiLCAoeCkpO3dyaXRlbCgoeCksICZnb2hjaS5yZWdzLT5yb290aHViLnN0YXR1cyk7fQorI2RlZmluZSBXUl9SSF9QT1JUU1RBVCh4KQl7aW5mbygiV1I6cG9ydHN0YXR1c1slZF0gJSM4eCIsIHdJbmRleC0xLCAoeCkpO3dyaXRlbCgoeCksICZnb2hjaS5yZWdzLT5yb290aHViLnBvcnRzdGF0dXNbd0luZGV4LTFdKTt9CisjZWxzZQorI2RlZmluZSBXUl9SSF9TVEFUKHgpCQl3cml0ZWwoKHgpLCAmZ29oY2kucmVncy0+cm9vdGh1Yi5zdGF0dXMpCisjZGVmaW5lIFdSX1JIX1BPUlRTVEFUKHgpCXdyaXRlbCgoeCksICZnb2hjaS5yZWdzLT5yb290aHViLnBvcnRzdGF0dXNbd0luZGV4LTFdKQorI2VuZGlmCisjZGVmaW5lIFJEX1JIX1NUQVQJCXJvb3RodWJfc3RhdHVzKCZnb2hjaSkKKyNkZWZpbmUgUkRfUkhfUE9SVFNUQVQJCXJvb3RodWJfcG9ydHN0YXR1cygmZ29oY2ksd0luZGV4LTEpCisKKy8qIHJlcXVlc3QgdG8gdmlydHVhbCByb290IGh1YiAqLworCitpbnQgcmhfY2hlY2tfcG9ydF9zdGF0dXMob2hjaV90ICpjb250cm9sbGVyKQoreworCV9fdTMyIHRlbXAsIG5kcCwgaTsKKwlpbnQgcmVzOworCisJcmVzID0gLTE7CisJdGVtcCA9IHJvb3RodWJfYSAoY29udHJvbGxlcik7CisJbmRwID0gKHRlbXAgJiBSSF9BX05EUCk7CisjaWZkZWYgQ09ORklHX0FUOTFDX1BRRlBfVUhQQlVHCisJbmRwID0gKG5kcCA9PSAyKSA/IDE6MDsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IG5kcDsgaSsrKSB7CisJCXRlbXAgPSByb290aHViX3BvcnRzdGF0dXMgKGNvbnRyb2xsZXIsIGkpOworCQkvKiBjaGVjayBmb3IgYSBkZXZpY2UgZGlzY29ubmVjdCAqLworCQlpZiAoKCh0ZW1wICYgKFJIX1BTX1BFU0MgfCBSSF9QU19DU0MpKSA9PQorCQkJKFJIX1BTX1BFU0MgfCBSSF9QU19DU0MpKSAmJgorCQkJKCh0ZW1wICYgUkhfUFNfQ0NTKSA9PSAwKSkgeworCQkJcmVzID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9zdWJtaXRfcmhfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgcGlwZSwKKwkJdm9pZCAqYnVmZmVyLCBpbnQgdHJhbnNmZXJfbGVuLCBzdHJ1Y3QgZGV2cmVxdWVzdCAqY21kKQoreworCXZvaWQgKiBkYXRhID0gYnVmZmVyOworCWludCBsZW5pID0gdHJhbnNmZXJfbGVuOworCWludCBsZW4gPSAwOworCWludCBzdGF0ID0gMDsKKwlfX3UzMiBkYXRhYls0XTsKKwlfX3U4ICpkYXRhX2J1ZiA9IChfX3U4ICopZGF0YWI7CisJX191MTYgYm1SVHlwZV9iUmVxOworCV9fdTE2IHdWYWx1ZTsKKwlfX3UxNiB3SW5kZXg7CisJX191MTYgd0xlbmd0aDsKKworI2lmZGVmIERFQlVHCit1cmJfcHJpdi5hY3R1YWxfbGVuZ3RoID0gMDsKK3BrdF9wcmludChkZXYsIHBpcGUsIGJ1ZmZlciwgdHJhbnNmZXJfbGVuLCBjbWQsICJTVUIocmgpIiwgdXNiX3BpcGVpbihwaXBlKSk7CisjZWxzZQorCXdhaXRfbXMoMSk7CisjZW5kaWYKKwlpZiAoKHBpcGUgJiBQSVBFX0lOVEVSUlVQVCkgPT0gUElQRV9JTlRFUlJVUFQpIHsKKwkJaW5mbygiUm9vdC1IdWIgc3VibWl0IElSUTogTk9UIGltcGxlbWVudGVkIik7CisJCXJldHVybiAwOworCX0KKworCWJtUlR5cGVfYlJlcSAgPSBjbWQtPnJlcXVlc3R0eXBlIHwgKGNtZC0+cmVxdWVzdCA8PCA4KTsKKwl3VmFsdWUJICAgICAgPSBtMTZfc3dhcCAoY21kLT52YWx1ZSk7CisJd0luZGV4CSAgICAgID0gbTE2X3N3YXAgKGNtZC0+aW5kZXgpOworCXdMZW5ndGgJICAgICAgPSBtMTZfc3dhcCAoY21kLT5sZW5ndGgpOworCisJaW5mbygiUm9vdC1IdWI6IGFkcjogJTJ4IGNtZCglMXgpOiAlMDh4ICUwNHggJTA0eCAlMDR4IiwKKwkJZGV2LT5kZXZudW0sIDgsIGJtUlR5cGVfYlJlcSwgd1ZhbHVlLCB3SW5kZXgsIHdMZW5ndGgpOworCisJc3dpdGNoIChibVJUeXBlX2JSZXEpIHsKKwkvKiBSZXF1ZXN0IERlc3RpbmF0aW9uOgorCSAgIHdpdGhvdXQgZmxhZ3M6IERldmljZSwKKwkgICBSSF9JTlRFUkZBQ0U6IGludGVyZmFjZSwKKwkgICBSSF9FTkRQT0lOVDogZW5kcG9pbnQsCisJICAgUkhfQ0xBU1MgbWVhbnMgSFVCIGhlcmUsCisJICAgUkhfT1RIRVIgfCBSSF9DTEFTUwlhbG1vc3QgZXZlciBtZWFucyBIVUJfUE9SVCBoZXJlCisJKi8KKworCWNhc2UgUkhfR0VUX1NUQVRVUzoKKwkJCSooX191MTYgKikgZGF0YV9idWYgPSBtMTZfc3dhcCAoMSk7IE9LICgyKTsKKwljYXNlIFJIX0dFVF9TVEFUVVMgfCBSSF9JTlRFUkZBQ0U6CisJCQkqKF9fdTE2ICopIGRhdGFfYnVmID0gbTE2X3N3YXAgKDApOyBPSyAoMik7CisJY2FzZSBSSF9HRVRfU1RBVFVTIHwgUkhfRU5EUE9JTlQ6CisJCQkqKF9fdTE2ICopIGRhdGFfYnVmID0gbTE2X3N3YXAgKDApOyBPSyAoMik7CisJY2FzZSBSSF9HRVRfU1RBVFVTIHwgUkhfQ0xBU1M6CisJCQkqKF9fdTMyICopIGRhdGFfYnVmID0gbTMyX3N3YXAgKAorCQkJCVJEX1JIX1NUQVQgJiB+KFJIX0hTX0NSV0UgfCBSSF9IU19EUldFKSk7CisJCQlPSyAoNCk7CisJY2FzZSBSSF9HRVRfU1RBVFVTIHwgUkhfT1RIRVIgfCBSSF9DTEFTUzoKKwkJCSooX191MzIgKikgZGF0YV9idWYgPSBtMzJfc3dhcCAoUkRfUkhfUE9SVFNUQVQpOyBPSyAoNCk7CisKKwljYXNlIFJIX0NMRUFSX0ZFQVRVUkUgfCBSSF9FTkRQT0lOVDoKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJCWNhc2UgKFJIX0VORFBPSU5UX1NUQUxMKTogT0sgKDApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSSF9DTEVBUl9GRUFUVVJFIHwgUkhfQ0xBU1M6CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCQljYXNlIFJIX0NfSFVCX0xPQ0FMX1BPV0VSOgorCQkJCU9LKDApOworCQkJY2FzZSAoUkhfQ19IVUJfT1ZFUl9DVVJSRU5UKToKKwkJCQkJV1JfUkhfU1RBVChSSF9IU19PQ0lDKTsgT0sgKDApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSSF9DTEVBUl9GRUFUVVJFIHwgUkhfT1RIRVIgfCBSSF9DTEFTUzoKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJCWNhc2UgKFJIX1BPUlRfRU5BQkxFKToKKwkJCQkJV1JfUkhfUE9SVFNUQVQgKFJIX1BTX0NDUyApOyBPSyAoMCk7CisJCQljYXNlIChSSF9QT1JUX1NVU1BFTkQpOgorCQkJCQlXUl9SSF9QT1JUU1RBVCAoUkhfUFNfUE9DSSk7IE9LICgwKTsKKwkJCWNhc2UgKFJIX1BPUlRfUE9XRVIpOgorCQkJCQlXUl9SSF9QT1JUU1RBVCAoUkhfUFNfTFNEQSk7IE9LICgwKTsKKwkJCWNhc2UgKFJIX0NfUE9SVF9DT05ORUNUSU9OKToKKwkJCQkJV1JfUkhfUE9SVFNUQVQgKFJIX1BTX0NTQyApOyBPSyAoMCk7CisJCQljYXNlIChSSF9DX1BPUlRfRU5BQkxFKToKKwkJCQkJV1JfUkhfUE9SVFNUQVQgKFJIX1BTX1BFU0MpOyBPSyAoMCk7CisJCQljYXNlIChSSF9DX1BPUlRfU1VTUEVORCk6CisJCQkJCVdSX1JIX1BPUlRTVEFUIChSSF9QU19QU1NDKTsgT0sgKDApOworCQkJY2FzZSAoUkhfQ19QT1JUX09WRVJfQ1VSUkVOVCk6CisJCQkJCVdSX1JIX1BPUlRTVEFUIChSSF9QU19PQ0lDKTsgT0sgKDApOworCQkJY2FzZSAoUkhfQ19QT1JUX1JFU0VUKToKKwkJCQkJV1JfUkhfUE9SVFNUQVQgKFJIX1BTX1BSU0MpOyBPSyAoMCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJIX1NFVF9GRUFUVVJFIHwgUkhfT1RIRVIgfCBSSF9DTEFTUzoKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJCWNhc2UgKFJIX1BPUlRfU1VTUEVORCk6CisJCQkJCVdSX1JIX1BPUlRTVEFUIChSSF9QU19QU1MgKTsgT0sgKDApOworCQkJY2FzZSAoUkhfUE9SVF9SRVNFVCk6IC8qIEJVRyBJTiBIVVAgQ09ERSAqKioqKioqKiovCisJCQkJCWlmIChSRF9SSF9QT1JUU1RBVCAmIFJIX1BTX0NDUykKKwkJCQkJICAgIFdSX1JIX1BPUlRTVEFUIChSSF9QU19QUlMpOworCQkJCQlPSyAoMCk7CisJCQljYXNlIChSSF9QT1JUX1BPV0VSKToKKwkJCQkJV1JfUkhfUE9SVFNUQVQgKFJIX1BTX1BQUyApOyBPSyAoMCk7CisJCQljYXNlIChSSF9QT1JUX0VOQUJMRSk6IC8qIEJVRyBJTiBIVVAgQ09ERSAqKioqKioqKiovCisJCQkJCWlmIChSRF9SSF9QT1JUU1RBVCAmIFJIX1BTX0NDUykKKwkJCQkJICAgIFdSX1JIX1BPUlRTVEFUIChSSF9QU19QRVMgKTsKKwkJCQkJT0sgKDApOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSSF9TRVRfQUREUkVTUzogZ29oY2kucmguZGV2bnVtID0gd1ZhbHVlOyBPSygwKTsKKworCWNhc2UgUkhfR0VUX0RFU0NSSVBUT1I6CisJCXN3aXRjaCAoKHdWYWx1ZSAmIDB4ZmYwMCkgPj4gOCkgeworCQkJY2FzZSAoMHgwMSk6IC8qIGRldmljZSBkZXNjcmlwdG9yICovCisJCQkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LAorCQkJCQkgIGxlbmksCisJCQkJCSAgbWluX3QodW5zaWduZWQgaW50LAorCQkJCQkgICAgICBzaXplb2YgKHJvb3RfaHViX2Rldl9kZXMpLAorCQkJCQkgICAgICB3TGVuZ3RoKSk7CisJCQkJZGF0YV9idWYgPSByb290X2h1Yl9kZXZfZGVzOyBPSyhsZW4pOworCQkJY2FzZSAoMHgwMik6IC8qIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRvciAqLworCQkJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwKKwkJCQkJICBsZW5pLAorCQkJCQkgIG1pbl90KHVuc2lnbmVkIGludCwKKwkJCQkJICAgICAgc2l6ZW9mIChyb290X2h1Yl9jb25maWdfZGVzKSwKKwkJCQkJICAgICAgd0xlbmd0aCkpOworCQkJCWRhdGFfYnVmID0gcm9vdF9odWJfY29uZmlnX2RlczsgT0sobGVuKTsKKwkJCWNhc2UgKDB4MDMpOiAvKiBzdHJpbmcgZGVzY3JpcHRvcnMgKi8KKwkJCQlpZih3VmFsdWU9PTB4MDMwMCkgeworCQkJCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsCisJCQkJCQkgIGxlbmksCisJCQkJCQkgIG1pbl90KHVuc2lnbmVkIGludCwKKwkJCQkJCSAgICAgIHNpemVvZiAocm9vdF9odWJfc3RyX2luZGV4MCksCisJCQkJCQkgICAgICB3TGVuZ3RoKSk7CisJCQkJCWRhdGFfYnVmID0gcm9vdF9odWJfc3RyX2luZGV4MDsKKwkJCQkJT0sobGVuKTsKKwkJCQl9CisJCQkJaWYod1ZhbHVlPT0weDAzMDEpIHsKKwkJCQkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LAorCQkJCQkJICBsZW5pLAorCQkJCQkJICBtaW5fdCh1bnNpZ25lZCBpbnQsCisJCQkJCQkgICAgICBzaXplb2YgKHJvb3RfaHViX3N0cl9pbmRleDEpLAorCQkJCQkJICAgICAgd0xlbmd0aCkpOworCQkJCQlkYXRhX2J1ZiA9IHJvb3RfaHViX3N0cl9pbmRleDE7CisJCQkJCU9LKGxlbik7CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCXN0YXQgPSBVU0JfU1RfU1RBTExFRDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUkhfR0VUX0RFU0NSSVBUT1IgfCBSSF9DTEFTUzoKKwl7CisJCV9fdTMyIHRlbXAgPSByb290aHViX2EgKCZnb2hjaSk7CisKKwkJZGF0YV9idWYgWzBdID0gOTsJCS8qIG1pbiBsZW5ndGg7ICovCisJCWRhdGFfYnVmIFsxXSA9IDB4Mjk7CisJCWRhdGFfYnVmIFsyXSA9IHRlbXAgJiBSSF9BX05EUDsKKyNpZmRlZiBDT05GSUdfQVQ5MUNfUFFGUF9VSFBCVUcKKwkJZGF0YV9idWYgWzJdID0gKGRhdGFfYnVmIFsyXSA9PSAyKSA/IDE6MDsKKyNlbmRpZgorCQlkYXRhX2J1ZiBbM10gPSAwOworCQlpZiAodGVtcCAmIFJIX0FfUFNNKQkvKiBwZXItcG9ydCBwb3dlciBzd2l0Y2hpbmc/ICovCisJCQlkYXRhX2J1ZiBbM10gfD0gMHgxOworCQlpZiAodGVtcCAmIFJIX0FfTk9DUCkJLyogbm8gb3ZlcmN1cnJlbnQgcmVwb3J0aW5nPyAqLworCQkJZGF0YV9idWYgWzNdIHw9IDB4MTA7CisJCWVsc2UgaWYgKHRlbXAgJiBSSF9BX09DUE0pCS8qIHBlci1wb3J0IG92ZXJjdXJyZW50IHJlcG9ydGluZz8gKi8KKwkJCWRhdGFfYnVmIFszXSB8PSAweDg7CisKKwkJLyogY29ycmVzcG9uZHMgdG8gZGF0YV9idWZbNC03XSAqLworCQlkYXRhYiBbMV0gPSAwOworCQlkYXRhX2J1ZiBbNV0gPSAodGVtcCAmIFJIX0FfUE9UUEdUKSA+PiAyNDsKKwkJdGVtcCA9IHJvb3RodWJfYiAoJmdvaGNpKTsKKwkJZGF0YV9idWYgWzddID0gdGVtcCAmIFJIX0JfRFI7CisJCWlmIChkYXRhX2J1ZiBbMl0gPCA3KSB7CisJCQlkYXRhX2J1ZiBbOF0gPSAweGZmOworCQl9IGVsc2UgeworCQkJZGF0YV9idWYgWzBdICs9IDI7CisJCQlkYXRhX2J1ZiBbOF0gPSAodGVtcCAmIFJIX0JfRFIpID4+IDg7CisJCQlkYXRhX2J1ZiBbMTBdID0gZGF0YV9idWYgWzldID0gMHhmZjsKKwkJfQorCisJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuaSwKKwkJbWluX3QodW5zaWduZWQgaW50LCBkYXRhX2J1ZiBbMF0sIHdMZW5ndGgpKTsKKwkJT0sgKGxlbik7CisJfQorCisJY2FzZSBSSF9HRVRfQ09ORklHVVJBVElPTjoJKihfX3U4ICopIGRhdGFfYnVmID0gMHgwMTsgT0sgKDEpOworCisJY2FzZSBSSF9TRVRfQ09ORklHVVJBVElPTjoJV1JfUkhfU1RBVCAoMHgxMDAwMCk7IE9LICgwKTsKKworCWRlZmF1bHQ6CisJCWRiZyAoInVuc3VwcG9ydGVkIHJvb3QgaHViIGNvbW1hbmQiKTsKKwkJc3RhdCA9IFVTQl9TVF9TVEFMTEVEOworCX0KKworI2lmZGVmCURFQlVHCisJb2hjaV9kdW1wX3Jvb3RodWIgKCZnb2hjaSwgMSk7CisjZWxzZQorCXdhaXRfbXMoMSk7CisjZW5kaWYKKworCWxlbiA9IG1pbl90KGludCwgbGVuLCBsZW5pKTsKKwlpZiAoZGF0YSAhPSBkYXRhX2J1ZikKKwkgICAgbWVtY3B5IChkYXRhLCBkYXRhX2J1ZiwgbGVuKTsKKwlkZXYtPmFjdF9sZW4gPSBsZW47CisJZGV2LT5zdGF0dXMgPSBzdGF0OworCisjaWZkZWYgREVCVUcKKwlpZiAodHJhbnNmZXJfbGVuKQorCQl1cmJfcHJpdi5hY3R1YWxfbGVuZ3RoID0gdHJhbnNmZXJfbGVuOworCXBrdF9wcmludChkZXYsIHBpcGUsIGJ1ZmZlciwgdHJhbnNmZXJfbGVuLCBjbWQsICJSRVQocmgpIiwgMC8qdXNiX3BpcGVpbihwaXBlKSovKTsKKyNlbHNlCisJd2FpdF9tcygxKTsKKyNlbmRpZgorCisJcmV0dXJuIHN0YXQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGNvbW1vbiBjb2RlIGZvciBoYW5kbGluZyBzdWJtaXQgbWVzc2FnZXMgLSB1c2VkIGZvciBhbGwgYnV0IHJvb3QgaHViICovCisvKiBhY2Nlc3Nlcy4gKi8KK2ludCBzdWJtaXRfY29tbW9uX21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHBpcGUsIHZvaWQgKmJ1ZmZlciwKKwkJaW50IHRyYW5zZmVyX2xlbiwgc3RydWN0IGRldnJlcXVlc3QgKnNldHVwLCBpbnQgaW50ZXJ2YWwpCit7CisJaW50IHN0YXQgPSAwOworCWludCBtYXhzaXplID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUpOworCWludCB0aW1lb3V0OworCisJLyogZGV2aWNlIHB1bGxlZD8gU2hvcnRjdXQgdGhlIGFjdGlvbi4gKi8KKwlpZiAoZGV2Z29uZSA9PSBkZXYpIHsKKwkJZGV2LT5zdGF0dXMgPSBVU0JfU1RfQ1JDX0VSUjsKKwkJcmV0dXJuIDA7CisJfQorCisjaWZkZWYgREVCVUcKKwl1cmJfcHJpdi5hY3R1YWxfbGVuZ3RoID0gMDsKKwlwa3RfcHJpbnQoZGV2LCBwaXBlLCBidWZmZXIsIHRyYW5zZmVyX2xlbiwgc2V0dXAsICJTVUIiLCB1c2JfcGlwZWluKHBpcGUpKTsKKyNlbHNlCisJd2FpdF9tcygxKTsKKyNlbmRpZgorCWlmICghbWF4c2l6ZSkgeworCQllcnIoInN1Ym1pdF9jb21tb25fbWVzc2FnZTogcGlwZXNpemUgZm9yIHBpcGUgJWx4IGlzIHplcm8iLAorCQkJcGlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc29oY2lfc3VibWl0X2pvYihkZXYsIHBpcGUsIGJ1ZmZlciwgdHJhbnNmZXJfbGVuLCBzZXR1cCwgaW50ZXJ2YWwpIDwgMCkgeworCQllcnIoInNvaGNpX3N1Ym1pdF9qb2IgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwl3YWl0X21zKDEwKTsKKwkvKiBvaGNpX2R1bXBfc3RhdHVzKCZnb2hjaSk7ICovCisKKwkvKiBhbGxvdyBtb3JlIHRpbWUgZm9yIGEgQlVMSyBkZXZpY2UgdG8gcmVhY3QgLSBzb21lIGFyZSBzbG93ICovCisjZGVmaW5lIEJVTEtfVE8JIDUwMDAJLyogdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KKwlpZiAodXNiX3BpcGV0eXBlIChwaXBlKSA9PSBQSVBFX0JVTEspCisJCXRpbWVvdXQgPSBCVUxLX1RPOworCWVsc2UKKwkJdGltZW91dCA9IDEwMDsKKworCS8qIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlICovCisJZm9yICg7OykgeworCQkvKiBjaGVjayB3aGV0aGVyIHRoZSBjb250cm9sbGVyIGlzIGRvbmUgKi8KKwkJc3RhdCA9IGhjX2ludGVycnVwdCgpOworCQlpZiAoc3RhdCA8IDApIHsKKwkJCXN0YXQgPSBVU0JfU1RfQ1JDX0VSUjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGF0ID49IDAgJiYgc3RhdCAhPSAweGZmKSB7CisJCQkvKiAweGZmIGlzIHJldHVybmVkIGZvciBhbiBTRi1pbnRlcnJ1cHQgKi8KKwkJCWJyZWFrOworCQl9CisJCWlmICgtLXRpbWVvdXQpIHsKKwkJCXdhaXRfbXMoMSk7CisJCX0gZWxzZSB7CisJCQllcnIoIkNUTDpUSU1FT1VUICIpOworCQkJc3RhdCA9IFVTQl9TVF9DUkNfRVJSOworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogd2UgZ290IGFuIFJvb3QgSHViIFN0YXR1cyBDaGFuZ2UgaW50ZXJydXB0ICovCisJaWYgKGdvdF9yaHNjKSB7CisjaWZkZWYgREVCVUcKKwkJb2hjaV9kdW1wX3Jvb3RodWIgKCZnb2hjaSwgMSk7CisjZW5kaWYKKwkJZ290X3Joc2MgPSAwOworCQkvKiBhYnVzZSB0aW1lb3V0ICovCisJCXRpbWVvdXQgPSByaF9jaGVja19wb3J0X3N0YXR1cygmZ29oY2kpOworCQlpZiAodGltZW91dCA+PSAwKSB7CisjaWYgMCAvKiB0aGlzIGRvZXMgbm90aGluZyB1c2VmdWwsIGJ1dCBsZWF2ZSBpdCBoZXJlIGluIGNhc2UgdGhhdCBjaGFuZ2VzICovCisJCQkvKiB0aGUgY2FsbGVkIHJvdXRpbmUgYWRkcyAxIHRvIHRoZSBwYXNzZWQgdmFsdWUgKi8KKwkJCXVzYl9odWJfcG9ydF9jb25uZWN0X2NoYW5nZShnb2hjaS5yaC5kZXYsIHRpbWVvdXQgLSAxKTsKKyNlbmRpZgorCQkJLyoKKwkJCSAqIFhYWAorCQkJICogVGhpcyBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYmVjYXVzZSBpdCBhc3N1bWVzCisJCQkgKiB0aGF0IG9ubHkgb25lIGRldmljZSBpcyBldmVyIHBsdWdnZWQgaW4hCisJCQkgKi8KKwkJCWRldmdvbmUgPSBkZXY7CisJCX0KKwl9CisKKwlkZXYtPnN0YXR1cyA9IHN0YXQ7CisJZGV2LT5hY3RfbGVuID0gdHJhbnNmZXJfbGVuOworCisjaWZkZWYgREVCVUcKKwlwa3RfcHJpbnQoZGV2LCBwaXBlLCBidWZmZXIsIHRyYW5zZmVyX2xlbiwgc2V0dXAsICJSRVQoY3RscikiLCB1c2JfcGlwZWluKHBpcGUpKTsKKyNlbHNlCisJd2FpdF9tcygxKTsKKyNlbmRpZgorCisJLyogZnJlZSBURHMgaW4gdXJiX3ByaXYgKi8KKwl1cmJfZnJlZV9wcml2ICgmdXJiX3ByaXYpOworCXJldHVybiAwOworfQorCisvKiBzdWJtaXQgcm91dGluZXMgY2FsbGVkIGZyb20gdXNiLmMgKi8KK2ludCBzdWJtaXRfYnVsa19tc2coc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBwaXBlLCB2b2lkICpidWZmZXIsCisJCWludCB0cmFuc2Zlcl9sZW4pCit7CisJaW5mbygic3VibWl0X2J1bGtfbXNnIik7CisJcmV0dXJuIHN1Ym1pdF9jb21tb25fbXNnKGRldiwgcGlwZSwgYnVmZmVyLCB0cmFuc2Zlcl9sZW4sIE5VTEwsIDApOworfQorCitpbnQgc3VibWl0X2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgcGlwZSwgdm9pZCAqYnVmZmVyLAorCQlpbnQgdHJhbnNmZXJfbGVuLCBzdHJ1Y3QgZGV2cmVxdWVzdCAqc2V0dXApCit7CisJaW50IG1heHNpemUgPSB1c2JfbWF4cGFja2V0KGRldiwgcGlwZSk7CisKKwlpbmZvKCJzdWJtaXRfY29udHJvbF9tc2ciKTsKKyNpZmRlZiBERUJVRworCXVyYl9wcml2LmFjdHVhbF9sZW5ndGggPSAwOworCXBrdF9wcmludChkZXYsIHBpcGUsIGJ1ZmZlciwgdHJhbnNmZXJfbGVuLCBzZXR1cCwgIlNVQiIsIHVzYl9waXBlaW4ocGlwZSkpOworI2Vsc2UKKwl3YWl0X21zKDEpOworI2VuZGlmCisJaWYgKCFtYXhzaXplKSB7CisJCWVycigic3VibWl0X2NvbnRyb2xfbWVzc2FnZTogcGlwZXNpemUgZm9yIHBpcGUgJWx4IGlzIHplcm8iLAorCQkJcGlwZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCgocGlwZSA+PiA4KSAmIDB4N2YpID09IGdvaGNpLnJoLmRldm51bSkgeworCQlnb2hjaS5yaC5kZXYgPSBkZXY7CisJCS8qIHJvb3QgaHViIC0gcmVkaXJlY3QgKi8KKwkJcmV0dXJuIG9oY2lfc3VibWl0X3JoX21zZyhkZXYsIHBpcGUsIGJ1ZmZlciwgdHJhbnNmZXJfbGVuLAorCQkJc2V0dXApOworCX0KKworCXJldHVybiBzdWJtaXRfY29tbW9uX21zZyhkZXYsIHBpcGUsIGJ1ZmZlciwgdHJhbnNmZXJfbGVuLCBzZXR1cCwgMCk7Cit9CisKK2ludCBzdWJtaXRfaW50X21zZyhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHBpcGUsIHZvaWQgKmJ1ZmZlciwKKwkJaW50IHRyYW5zZmVyX2xlbiwgaW50IGludGVydmFsKQoreworCWluZm8oInN1Ym1pdF9pbnRfbXNnIik7CisJcmV0dXJuIC0xOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBIQyBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHJlc2V0IHRoZSBIQyBhbmQgQlVTICovCisKK3N0YXRpYyBpbnQgaGNfcmVzZXQgKG9oY2lfdCAqb2hjaSkKK3sKKwlpbnQgdGltZW91dCA9IDMwOworCWludCBzbW1fdGltZW91dCA9IDUwOyAvKiAwLDUgc2VjICovCisKKwlkYmcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHJlYWRsICgmb2hjaS0+cmVncy0+Y29udHJvbCkgJiBPSENJX0NUUkxfSVIpIHsgLyogU01NIG93bnMgdGhlIEhDICovCisJCXdyaXRlbCAoT0hDSV9PQ1IsICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOyAvKiByZXF1ZXN0IG93bmVyc2hpcCAqLworCQlpbmZvKCJVU0IgSEMgVGFrZU92ZXIgZnJvbSBTTU0iKTsKKwkJd2hpbGUgKHJlYWRsICgmb2hjaS0+cmVncy0+Y29udHJvbCkgJiBPSENJX0NUUkxfSVIpIHsKKwkJCXdhaXRfbXMgKDEwKTsKKwkJCWlmICgtLXNtbV90aW1lb3V0ID09IDApIHsKKwkJCQllcnIoIlVTQiBIQyBUYWtlT3ZlciBmYWlsZWQhIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJfQorCisJLyogRGlzYWJsZSBIQyBpbnRlcnJ1cHRzICovCisJd3JpdGVsIChPSENJX0lOVFJfTUlFLCAmb2hjaS0+cmVncy0+aW50cmRpc2FibGUpOworCisJZGJnKCJVU0IgSEMgcmVzZXRfaGMgdXNiLSVzOiBjdHJsID0gMHglWCA7XG4iLAorCQlvaGNpLT5zbG90X25hbWUsCisJCXJlYWRsKCZvaGNpLT5yZWdzLT5jb250cm9sKSk7CisKKwkvKiBSZXNldCBVU0IgKG5lZWRlZCBieSBzb21lIGNvbnRyb2xsZXJzKSAqLworCXdyaXRlbCAoMCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOworCisJLyogSEMgUmVzZXQgcmVxdWlyZXMgbWF4IDEwIHVzIGRlbGF5ICovCisJd3JpdGVsIChPSENJX0hDUiwgICZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpOworCXdoaWxlICgocmVhZGwgKCZvaGNpLT5yZWdzLT5jbWRzdGF0dXMpICYgT0hDSV9IQ1IpICE9IDApIHsKKwkJaWYgKC0tdGltZW91dCA9PSAwKSB7CisJCQllcnIoIlVTQiBIQyByZXNldCB0aW1lZCBvdXQhIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJdWRlbGF5ICgxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFN0YXJ0IGFuIE9IQ0kgY29udHJvbGxlciwgc2V0IHRoZSBCVVMgb3BlcmF0aW9uYWwKKyAqIGVuYWJsZSBpbnRlcnJ1cHRzCisgKiBjb25uZWN0IHRoZSB2aXJ0dWFsIHJvb3QgaHViICovCisKK3N0YXRpYyBpbnQgaGNfc3RhcnQgKG9oY2lfdCAqIG9oY2kpCit7CisJX191MzIgbWFzazsKKwl1bnNpZ25lZCBpbnQgZm1pbnRlcnZhbDsKKworCW9oY2ktPmRpc2FibGVkID0gMTsKKworCS8qIFRlbGwgdGhlIGNvbnRyb2xsZXIgd2hlcmUgdGhlIGNvbnRyb2wgYW5kIGJ1bGsgbGlzdHMgYXJlCisJICogVGhlIGxpc3RzIGFyZSBlbXB0eSBub3cuICovCisKKwl3cml0ZWwgKDAsICZvaGNpLT5yZWdzLT5lZF9jb250cm9saGVhZCk7CisJd3JpdGVsICgwLCAmb2hjaS0+cmVncy0+ZWRfYnVsa2hlYWQpOworCisJd3JpdGVsICgoX191MzIpb2hjaS0+aGNjYSwgJm9oY2ktPnJlZ3MtPmhjY2EpOyAvKiBhIHJlc2V0IGNsZWFycyB0aGlzICovCisKKwlmbWludGVydmFsID0gMHgyZWRmOworCXdyaXRlbCAoKGZtaW50ZXJ2YWwgKiA5KSAvIDEwLCAmb2hjaS0+cmVncy0+cGVyaW9kaWNzdGFydCk7CisJZm1pbnRlcnZhbCB8PSAoKCgoZm1pbnRlcnZhbCAtIDIxMCkgKiA2KSAvIDcpIDw8IDE2KTsKKwl3cml0ZWwgKGZtaW50ZXJ2YWwsICZvaGNpLT5yZWdzLT5mbWludGVydmFsKTsKKwl3cml0ZWwgKDB4NjI4LCAmb2hjaS0+cmVncy0+bHN0aHJlc2gpOworCisJLyogc3RhcnQgY29udHJvbGxlciBvcGVyYXRpb25zICovCisJb2hjaS0+aGNfY29udHJvbCA9IE9IQ0lfQ09OVFJPTF9JTklUIHwgT0hDSV9VU0JfT1BFUjsKKwlvaGNpLT5kaXNhYmxlZCA9IDA7CisJd3JpdGVsIChvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisKKwkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJbWFzayA9IChPSENJX0lOVFJfU08gfCBPSENJX0lOVFJfV0RIIHwgT0hDSV9JTlRSX1NGIHwgT0hDSV9JTlRSX1JEIHwKKwkJCU9IQ0lfSU5UUl9VRSB8IE9IQ0lfSU5UUl9GTk8gfCBPSENJX0lOVFJfUkhTQyB8CisJCQlPSENJX0lOVFJfT0MgfCBPSENJX0lOVFJfTUlFKTsKKwl3cml0ZWwgKG1hc2ssICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7CisJLyogY2xlYXIgYWxsIGludGVycnVwdHMgKi8KKwltYXNrICY9IH5PSENJX0lOVFJfTUlFOworCXdyaXRlbCAobWFzaywgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpOworCS8qIENob29zZSB0aGUgaW50ZXJydXB0cyB3ZSBjYXJlIGFib3V0IG5vdyAgLSBidXQgdy9vIE1JRSAqLworCW1hc2sgPSBPSENJX0lOVFJfUkhTQyB8IE9IQ0lfSU5UUl9VRSB8IE9IQ0lfSU5UUl9XREggfCBPSENJX0lOVFJfU087CisJd3JpdGVsIChtYXNrLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7CisKKyNpZmRlZglPSENJX1VTRV9OUFMKKwkvKiByZXF1aXJlZCBmb3IgQU1ELTc1NiBhbmQgc29tZSBNYWMgcGxhdGZvcm1zICovCisJd3JpdGVsICgocm9vdGh1Yl9hIChvaGNpKSB8IFJIX0FfTlBTKSAmIH5SSF9BX1BTTSwKKwkJJm9oY2ktPnJlZ3MtPnJvb3RodWIuYSk7CisJd3JpdGVsIChSSF9IU19MUFNDLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5zdGF0dXMpOworI2VuZGlmCS8qIE9IQ0lfVVNFX05QUyAqLworCisjZGVmaW5lIG1kZWxheShuKSAoe3Vuc2lnbmVkIGxvbmcgbXNlYz0obik7IHdoaWxlIChtc2VjLS0pIHVkZWxheSgxMDAwKTt9KQorCS8qIFBPVFBHVCBkZWxheSBpcyBiaXRzIDI0LTMxLCBpbiAyIG1zIHVuaXRzLiAqLworCW1kZWxheSAoKHJvb3RodWJfYSAob2hjaSkgPj4gMjMpICYgMHgxZmUpOworCisJLyogY29ubmVjdCB0aGUgdmlydHVhbCByb290IGh1YiAqLworCW9oY2ktPnJoLmRldm51bSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogYW4gaW50ZXJydXB0IGhhcHBlbnMgKi8KKworc3RhdGljIGludAoraGNfaW50ZXJydXB0ICh2b2lkKQoreworCW9oY2lfdCAqb2hjaSA9ICZnb2hjaTsKKwlzdHJ1Y3Qgb2hjaV9yZWdzICpyZWdzID0gb2hjaS0+cmVnczsKKwlpbnQgaW50czsKKwlpbnQgc3RhdCA9IC0xOworCisJaWYgKChvaGNpLT5oY2NhLT5kb25lX2hlYWQgIT0gMCkgJiYgIShtMzJfc3dhcCAob2hjaS0+aGNjYS0+ZG9uZV9oZWFkKSAmIDB4MDEpKSB7CisJCWludHMgPQlPSENJX0lOVFJfV0RIOworCX0gZWxzZSB7CisJCWludHMgPSByZWFkbCAoJnJlZ3MtPmludHJzdGF0dXMpOworCX0KKworCS8qIGRiZygiSW50ZXJydXB0OiAleCBmcmFtZTogJXgiLCBpbnRzLCBsZTE2X3RvX2NwdSAob2hjaS0+aGNjYS0+ZnJhbWVfbm8pKTsgKi8KKworCWlmIChpbnRzICYgT0hDSV9JTlRSX1JIU0MpIHsKKwkJZ290X3Joc2MgPSAxOworCX0KKworCWlmIChpbnRzICYgT0hDSV9JTlRSX1VFKSB7CisJCW9oY2ktPmRpc2FibGVkKys7CisJCWVyciAoIk9IQ0kgVW5yZWNvdmVyYWJsZSBFcnJvciwgY29udHJvbGxlciB1c2ItJXMgZGlzYWJsZWQiLAorCQkJb2hjaS0+c2xvdF9uYW1lKTsKKwkJLyogZS5nLiBkdWUgdG8gUENJIE1hc3Rlci9UYXJnZXQgQWJvcnQgKi8KKworI2lmZGVmCURFQlVHCisJCW9oY2lfZHVtcCAob2hjaSwgMSk7CisjZWxzZQorCXdhaXRfbXMoMSk7CisjZW5kaWYKKwkJLyogRklYTUU6IGJlIG9wdGltaXN0aWMsIGhvcGUgdGhhdCBidWcgd29uJ3QgcmVwZWF0IG9mdGVuLiAqLworCQkvKiBNYWtlIHNvbWUgbm9uLWludGVycnVwdCBjb250ZXh0IHJlc3RhcnQgdGhlIGNvbnRyb2xsZXIuICovCisJCS8qIENvdW50IGFuZCBsaW1pdCB0aGUgcmV0cmllcyB0aG91Z2g7IGVpdGhlciBoYXJkd2FyZSBvciAqLworCQkvKiBzb2Z0d2FyZSBlcnJvcnMgY2FuIGdvIGZvcmV2ZXIuLi4gKi8KKwkJaGNfcmVzZXQgKG9oY2kpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGludHMgJiBPSENJX0lOVFJfV0RIKSB7CisJCXdhaXRfbXMoMSk7CisJCXdyaXRlbCAoT0hDSV9JTlRSX1dESCwgJnJlZ3MtPmludHJkaXNhYmxlKTsKKwkJc3RhdCA9IGRsX2RvbmVfbGlzdCAoJmdvaGNpLCBkbF9yZXZlcnNlX2RvbmVfbGlzdCAoJmdvaGNpKSk7CisJCXdyaXRlbCAoT0hDSV9JTlRSX1dESCwgJnJlZ3MtPmludHJlbmFibGUpOworCX0KKworCWlmIChpbnRzICYgT0hDSV9JTlRSX1NPKSB7CisJCWRiZygiVVNCIFNjaGVkdWxlIG92ZXJydW5cbiIpOworCQl3cml0ZWwgKE9IQ0lfSU5UUl9TTywgJnJlZ3MtPmludHJlbmFibGUpOworCQlzdGF0ID0gLTE7CisJfQorCisJLyogRklYTUU6ICB0aGlzIGFzc3VtZXMgU09GICgxL21zKSBpbnRlcnJ1cHRzIGRvbid0IGdldCBsb3N0Li4uICovCisJaWYgKGludHMgJiBPSENJX0lOVFJfU0YpIHsKKwkJdW5zaWduZWQgaW50IGZyYW1lID0gbTE2X3N3YXAgKG9oY2ktPmhjY2EtPmZyYW1lX25vKSAmIDE7CisJCXdhaXRfbXMoMSk7CisJCXdyaXRlbCAoT0hDSV9JTlRSX1NGLCAmcmVncy0+aW50cmRpc2FibGUpOworCQlpZiAob2hjaS0+ZWRfcm1fbGlzdFtmcmFtZV0gIT0gTlVMTCkKKwkJCXdyaXRlbCAoT0hDSV9JTlRSX1NGLCAmcmVncy0+aW50cmVuYWJsZSk7CisJCXN0YXQgPSAweGZmOworCX0KKworCXdyaXRlbCAoaW50cywgJnJlZ3MtPmludHJzdGF0dXMpOworCXJldHVybiBzdGF0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBEZS1hbGxvY2F0ZSBhbGwgcmVzb3VyY2VzLi4gKi8KKworc3RhdGljIHZvaWQgaGNfcmVsZWFzZV9vaGNpIChvaGNpX3QgKm9oY2kpCit7CisJZGJnICgiVVNCIEhDIHJlbGVhc2Ugb2hjaSB1c2ItJXMiLCBvaGNpLT5zbG90X25hbWUpOworCisJaWYgKCFvaGNpLT5kaXNhYmxlZCkKKwkJaGNfcmVzZXQgKG9oY2kpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogbG93IGxldmVsIGluaXRhbGlzYXRpb24gcm91dGluZSwgY2FsbGVkIGZyb20gdXNiLmMKKyAqLworc3RhdGljIGNoYXIgb2hjaV9pbml0ZWQgPSAwOworCitpbnQgdXNiX2xvd2xldmVsX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEVuYWJsZSBVU0IgaG9zdCBjbG9jay4KKwkgKi8KKwkqQVQ5MUNfUE1DX1NDRVIgPSBBVDkxQ19QTUNfVUhQOwkvKiA0OE1IeiBjbG9jayBlbmFibGVkIGZvciBVSFAgKi8KKwkqQVQ5MUNfUE1DX1BDRVIgPSAxIDw8IEFUOTFDX0lEX1VIUDsJLyogUGVyaXBoZXJhbCBDbG9jayBFbmFibGUgUmVnaXN0ZXIgKi8KKworCW1lbXNldCAoJmdvaGNpLCAwLCBzaXplb2YgKG9oY2lfdCkpOworCW1lbXNldCAoJnVyYl9wcml2LCAwLCBzaXplb2YgKHVyYl9wcml2X3QpKTsKKworCS8qIGFsaWduIHRoZSBzdG9yYWdlICovCisJaWYgKChfX3UzMikmZ2hjY2FbMF0gJiAweGZmKSB7CisJCWVycigiSENDQSBub3QgYWxpZ25lZCEhIik7CisJCXJldHVybiAtMTsKKwl9CisJcGhjY2EgPSAmZ2hjY2FbMF07CisJaW5mbygiYWxpZ25lZCBnaGNjYSAlcCIsIHBoY2NhKTsKKwltZW1zZXQoJm9oY2lfZGV2LCAwLCBzaXplb2Yoc3RydWN0IG9oY2lfZGV2aWNlKSk7CisJaWYgKChfX3UzMikmb2hjaV9kZXYuZWRbMF0gJiAweDcpIHsKKwkJZXJyKCJFRHMgbm90IGFsaWduZWQhISIpOworCQlyZXR1cm4gLTE7CisJfQorCW1lbXNldChndGQsIDAsIHNpemVvZih0ZF90KSAqIChOVU1fVEQgKyAxKSk7CisJaWYgKChfX3UzMilndGQgJiAweDcpIHsKKwkJZXJyKCJURHMgbm90IGFsaWduZWQhISIpOworCQlyZXR1cm4gLTE7CisJfQorCXB0ZCA9IGd0ZDsKKwlnb2hjaS5oY2NhID0gcGhjY2E7CisJbWVtc2V0IChwaGNjYSwgMCwgc2l6ZW9mIChzdHJ1Y3Qgb2hjaV9oY2NhKSk7CisKKwlnb2hjaS5kaXNhYmxlZCA9IDE7CisJZ29oY2kuc2xlZXBpbmcgPSAwOworCWdvaGNpLmlycSA9IC0xOworCWdvaGNpLnJlZ3MgPSAoc3RydWN0IG9oY2lfcmVncyAqKUFUOTFfVVNCX0hPU1RfQkFTRTsKKworCWdvaGNpLmZsYWdzID0gMDsKKwlnb2hjaS5zbG90X25hbWUgPSAiYXQ5MXJtOTIwMCI7CisKKwlpZiAoaGNfcmVzZXQgKCZnb2hjaSkgPCAwKSB7CisJCWhjX3JlbGVhc2Vfb2hjaSAoJmdvaGNpKTsKKwkJLyogSW5pdGlhbGl6YXRpb24gZmFpbGVkICovCisJCSpBVDkxQ19QTUNfUENFUiA9IEFUOTFDX0lEX1VIUDsKKwkJKkFUOTFDX1BNQ19TQ0RSID0gMSA8PCBBVDkxQ19QTUNfVUhQOwkvKiA0OE1IeiBjbG9jayBkaXNhYmxlZCBmb3IgVUhQICovCisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBGSVhNRSB0aGlzIGlzIGEgc2Vjb25kIEhDIHJlc2V0OyB3aHk/PyAqLworLyoJd3JpdGVsIChnb2hjaS5oY19jb250cm9sID0gT0hDSV9VU0JfUkVTRVQsICZnb2hjaS5yZWdzLT5jb250cm9sKTsKKwl3YWl0X21zICgxMCk7Ki8KKworCWlmIChoY19zdGFydCAoJmdvaGNpKSA8IDApIHsKKwkJZXJyICgiY2FuJ3Qgc3RhcnQgdXNiLSVzIiwgZ29oY2kuc2xvdF9uYW1lKTsKKwkJaGNfcmVsZWFzZV9vaGNpICgmZ29oY2kpOworCQkvKiBJbml0aWFsaXphdGlvbiBmYWlsZWQgKi8KKwkJKkFUOTFDX1BNQ19QQ0VSID0gQVQ5MUNfSURfVUhQOworCQkqQVQ5MUNfUE1DX1NDRFIgPSAxIDw8IEFUOTFDX1BNQ19VSFA7CS8qIDQ4TUh6IGNsb2NrIGRpc2FibGVkIGZvciBVSFAgKi8KKwkJcmV0dXJuIC0xOworCX0KKworI2lmZGVmCURFQlVHCisJb2hjaV9kdW1wICgmZ29oY2ksIDEpOworI2Vsc2UKKwl3YWl0X21zKDEpOworI2VuZGlmCisJb2hjaV9pbml0ZWQgPSAxOworCXJldHVybiAwOworfQorCitpbnQgdXNiX2xvd2xldmVsX3N0b3Aodm9pZCkKK3sKKwkvKiB0aGlzIGdldHMgY2FsbGVkIHJlYWxseSBlYXJseSAtIGJlZm9yZSB0aGUgY29udHJvbGxlciBoYXMgKi8KKwkvKiBldmVuIGJlZW4gaW5pdGlhbGl6ZWQhICovCisJaWYgKCFvaGNpX2luaXRlZCkKKwkJcmV0dXJuIDA7CisJLyogVE9ETyByZWxlYXNlIGFueSBpbnRlcnJ1cHRzLCBldGMuICovCisJLyogY2FsbCBoY19yZWxlYXNlX29oY2koKSBoZXJlID8gKi8KKwloY19yZXNldCAoJmdvaGNpKTsKKwkvKiBtYXkgbm90IHdhbnQgdG8gZG8gdGhpcyAqLworCSpBVDkxQ19QTUNfUENFUiA9IDEgPDwgQVQ5MUNfSURfVUhQOworCSpBVDkxQ19QTUNfU0NEUiA9IDEgPDwgQVQ5MUNfUE1DX1VIUDsJLyogNDhNSHogY2xvY2sgZGlzYWJsZWQgZm9yIFVIUCAqLworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1VTQl9PSENJICovCmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9jb21jZXJ0by91c2Jfb2hjaS5oIGIvY3B1L2FybTkyMHQvY29tY2VydG8vdXNiX29oY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2I0ZTkzCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyMHQvY29tY2VydG8vdXNiX29oY2kuaApAQCAtMCwwICsxLDQxOSBAQAorLyoKKyAqIFVSQiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDEgRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogdXNiLW9oY2kuaAorICovCisKKworc3RhdGljIGludCBjY190b19lcnJvclsxNl0gPSB7CisKKy8qIG1hcHBpbmcgb2YgdGhlIE9IQ0kgQ0Mgc3RhdHVzIHRvIGVycm9yIGNvZGVzICovCisJLyogTm8gIEVycm9yICAqLwkgICAgICAgMCwKKwkvKiBDUkMgRXJyb3IgICovCSAgICAgICBVU0JfU1RfQ1JDX0VSUiwKKwkvKiBCaXQgU3R1ZmYgICovCSAgICAgICBVU0JfU1RfQklUX0VSUiwKKwkvKiBEYXRhIFRvZ2cgICovCSAgICAgICBVU0JfU1RfQ1JDX0VSUiwKKwkvKiBTdGFsbCAgICAgICovCSAgICAgICBVU0JfU1RfU1RBTExFRCwKKwkvKiBEZXZOb3RSZXNwICovCSAgICAgICAtMSwKKwkvKiBQSURDaGVjayAgICovCSAgICAgICBVU0JfU1RfQklUX0VSUiwKKwkvKiBVbkV4cFBJRCAgICovCSAgICAgICBVU0JfU1RfQklUX0VSUiwKKwkvKiBEYXRhT3ZlciAgICovCSAgICAgICBVU0JfU1RfQlVGX0VSUiwKKwkvKiBEYXRhVW5kZXIgICovCSAgICAgICBVU0JfU1RfQlVGX0VSUiwKKwkvKiByZXNlcnZkICAgICovCSAgICAgICAtMSwKKwkvKiByZXNlcnZkICAgICovCSAgICAgICAtMSwKKwkvKiBCdWZmZXJPdmVyICovCSAgICAgICBVU0JfU1RfQlVGX0VSUiwKKwkvKiBCdWZmVW5kZXIgICovCSAgICAgICBVU0JfU1RfQlVGX0VSUiwKKwkvKiBOb3QgQWNjZXNzICovCSAgICAgICAtMSwKKwkvKiBOb3QgQWNjZXNzICovCSAgICAgICAtMQorfTsKKworLyogRUQgU3RhdGVzICovCisKKyNkZWZpbmUgRURfTkVXCQkweDAwCisjZGVmaW5lIEVEX1VOTElOSwkweDAxCisjZGVmaW5lIEVEX09QRVIJCTB4MDIKKyNkZWZpbmUgRURfREVMCQkweDA0CisjZGVmaW5lIEVEX1VSQl9ERUwJMHgwOAorCisvKiB1c2Jfb2hjaV9lZCAqLworc3RydWN0IGVkIHsKKwlfX3UzMiBod0lORk87CisJX191MzIgaHdUYWlsUDsKKwlfX3UzMiBod0hlYWRQOworCV9fdTMyIGh3TmV4dEVEOworCisJc3RydWN0IGVkICplZF9wcmV2OworCV9fdTggaW50X3BlcmlvZDsKKwlfX3U4IGludF9icmFuY2g7CisJX191OCBpbnRfbG9hZDsKKwlfX3U4IGludF9pbnRlcnZhbDsKKwlfX3U4IHN0YXRlOworCV9fdTggdHlwZTsKKwlfX3UxNiBsYXN0X2lzbzsKKwlzdHJ1Y3QgZWQgKmVkX3JtX2xpc3Q7CisKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlfX3UzMiB1bnVzZWRbM107Cit9IF9fYXR0cmlidXRlKChhbGlnbmVkKDE2KSkpOwordHlwZWRlZiBzdHJ1Y3QgZWQgZWRfdDsKKworCisvKiBURCBpbmZvIGZpZWxkICovCisjZGVmaW5lIFREX0NDCSAgICAweGYwMDAwMDAwCisjZGVmaW5lIFREX0NDX0dFVCh0ZF9wKSAoKHRkX3AgPj4yOCkgJiAweDBmKQorI2RlZmluZSBURF9DQ19TRVQodGRfcCwgY2MpICh0ZF9wKSA9ICgodGRfcCkgJiAweDBmZmZmZmZmKSB8ICgoKGNjKSAmIDB4MGYpIDw8IDI4KQorI2RlZmluZSBURF9FQwkgICAgMHgwQzAwMDAwMAorI2RlZmluZSBURF9UCSAgICAweDAzMDAwMDAwCisjZGVmaW5lIFREX1RfREFUQTAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgVERfVF9EQVRBMSAgMHgwMzAwMDAwMAorI2RlZmluZSBURF9UX1RPR0dMRSAweDAwMDAwMDAwCisjZGVmaW5lIFREX1IJICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgVERfREkJICAgIDB4MDBFMDAwMDAKKyNkZWZpbmUgVERfRElfU0VUKFgpICgoKFgpICYgMHgwNyk8PCAyMSkKKyNkZWZpbmUgVERfRFAJICAgIDB4MDAxODAwMDAKKyNkZWZpbmUgVERfRFBfU0VUVVAgMHgwMDAwMDAwMAorI2RlZmluZSBURF9EUF9JTiAgICAweDAwMTAwMDAwCisjZGVmaW5lIFREX0RQX09VVCAgIDB4MDAwODAwMDAKKworI2RlZmluZSBURF9JU08JICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgVERfREVMCSAgICAweDAwMDIwMDAwCisKKy8qIENDIENvZGVzICovCisjZGVmaW5lIFREX0NDX05PRVJST1IJICAgMHgwMAorI2RlZmluZSBURF9DQ19DUkMJICAgMHgwMQorI2RlZmluZSBURF9DQ19CSVRTVFVGRklORyAgMHgwMgorI2RlZmluZSBURF9DQ19EQVRBVE9HR0xFTSAgMHgwMworI2RlZmluZSBURF9DQ19TVEFMTAkgICAweDA0CisjZGVmaW5lIFREX0RFVk5PVFJFU1AJICAgMHgwNQorI2RlZmluZSBURF9QSURDSEVDS0ZBSUwJICAgMHgwNgorI2RlZmluZSBURF9VTkVYUEVDVEVEUElEICAgMHgwNworI2RlZmluZSBURF9EQVRBT1ZFUlJVTgkgICAweDA4CisjZGVmaW5lIFREX0RBVEFVTkRFUlJVTgkgICAweDA5CisjZGVmaW5lIFREX0JVRkZFUk9WRVJSVU4gICAweDBDCisjZGVmaW5lIFREX0JVRkZFUlVOREVSUlVOICAweDBECisjZGVmaW5lIFREX05PVEFDQ0VTU0VECSAgIDB4MEYKKworCisjZGVmaW5lIE1BWFBTVyAxCisKK3N0cnVjdCB0ZCB7CisJX191MzIgaHdJTkZPOworCV9fdTMyIGh3Q0JQOwkJLyogQ3VycmVudCBCdWZmZXIgUG9pbnRlciAqLworCV9fdTMyIGh3TmV4dFREOwkJLyogTmV4dCBURCBQb2ludGVyICovCisJX191MzIgaHdCRTsJCS8qIE1lbW9yeSBCdWZmZXIgRW5kIFBvaW50ZXIgKi8KKworCV9fdTE2IGh3UFNXW01BWFBTV107CisJX191OCB1bnVzZWQ7CisJX191OCBpbmRleDsKKwlzdHJ1Y3QgZWQgKmVkOworCXN0cnVjdCB0ZCAqbmV4dF9kbF90ZDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKKwlpbnQgdHJhbnNmZXJfbGVuOworCV9fdTMyIGRhdGE7CisKKwlfX3UzMiB1bnVzZWQyWzJdOworfSBfX2F0dHJpYnV0ZSgoYWxpZ25lZCgzMikpKTsKK3R5cGVkZWYgc3RydWN0IHRkIHRkX3Q7CisKKyNkZWZpbmUgT0hDSV9FRF9TS0lQCSgxIDw8IDE0KQorCisvKgorICogVGhlIEhDQ0EgKEhvc3QgQ29udHJvbGxlciBDb21tdW5pY2F0aW9ucyBBcmVhKSBpcyBhIDI1NiBieXRlCisgKiBzdHJ1Y3R1cmUgZGVmaW5lZCBpbiB0aGUgT0hDSSBzcGVjLiB0aGF0IHRoZSBob3N0IGNvbnRyb2xsZXIgaXMKKyAqIHRvbGQgdGhlIGJhc2UgYWRkcmVzcyBvZi4gIEl0IG11c3QgYmUgMjU2LWJ5dGUgYWxpZ25lZC4KKyAqLworCisjZGVmaW5lIE5VTV9JTlRTIDMyCS8qIHBhcnQgb2YgdGhlIE9IQ0kgc3RhbmRhcmQgKi8KK3N0cnVjdCBvaGNpX2hjY2EgeworCV9fdTMyCWludF90YWJsZVtOVU1fSU5UU107CS8qIEludGVycnVwdCBFRCB0YWJsZSAqLworCV9fdTE2CWZyYW1lX25vOwkJLyogY3VycmVudCBmcmFtZSBudW1iZXIgKi8KKwlfX3UxNglwYWQxOwkJCS8qIHNldCB0byAwIG9uIGVhY2ggZnJhbWVfbm8gY2hhbmdlICovCisJX191MzIJZG9uZV9oZWFkOwkJLyogaW5mbyByZXR1cm5lZCBmb3IgYW4gaW50ZXJydXB0ICovCisJdTgJCXJlc2VydmVkX2Zvcl9oY1sxMTZdOworfSBfX2F0dHJpYnV0ZSgoYWxpZ25lZCgyNTYpKSk7CisKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIHJvb3QgaHViIHBvcnRzLgorICovCisjZGVmaW5lIE1BWF9ST09UX1BPUlRTCTE1CS8qIG1heGltdW0gT0hDSSByb290IGh1YiBwb3J0cyAqLworCisvKgorICogVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBPSENJIGNvbnRyb2xsZXIncyBtZW1vcnkgbWFwcGVkIEkvTworICogcmVnaW9uLiAgVGhpcyBpcyBNZW1vcnkgTWFwcGVkIEkvTy4JWW91IG11c3QgdXNlIHRoZSByZWFkbCgpIGFuZAorICogd3JpdGVsKCkgbWFjcm9zIGRlZmluZWQgaW4gYXNtL2lvLmggdG8gYWNjZXNzIHRoZXNlISEKKyAqLworc3RydWN0IG9oY2lfcmVncyB7CisJLyogY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVycyAqLworCV9fdTMyCXJldmlzaW9uOworCV9fdTMyCWNvbnRyb2w7CisJX191MzIJY21kc3RhdHVzOworCV9fdTMyCWludHJzdGF0dXM7CisJX191MzIJaW50cmVuYWJsZTsKKwlfX3UzMglpbnRyZGlzYWJsZTsKKwkvKiBtZW1vcnkgcG9pbnRlcnMgKi8KKwlfX3UzMgloY2NhOworCV9fdTMyCWVkX3BlcmlvZGN1cnJlbnQ7CisJX191MzIJZWRfY29udHJvbGhlYWQ7CisJX191MzIJZWRfY29udHJvbGN1cnJlbnQ7CisJX191MzIJZWRfYnVsa2hlYWQ7CisJX191MzIJZWRfYnVsa2N1cnJlbnQ7CisJX191MzIJZG9uZWhlYWQ7CisJLyogZnJhbWUgY291bnRlcnMgKi8KKwlfX3UzMglmbWludGVydmFsOworCV9fdTMyCWZtcmVtYWluaW5nOworCV9fdTMyCWZtbnVtYmVyOworCV9fdTMyCXBlcmlvZGljc3RhcnQ7CisJX191MzIJbHN0aHJlc2g7CisJLyogUm9vdCBodWIgcG9ydHMgKi8KKwlzdHJ1Y3QJb2hjaV9yb290aHViX3JlZ3MgeworCQlfX3UzMglhOworCQlfX3UzMgliOworCQlfX3UzMglzdGF0dXM7CisJCV9fdTMyCXBvcnRzdGF0dXNbTUFYX1JPT1RfUE9SVFNdOworCX0gcm9vdGh1YjsKK30gX19hdHRyaWJ1dGUoKGFsaWduZWQoMzIpKSk7CisKKworLyogT0hDSSBDT05UUk9MIEFORCBTVEFUVVMgUkVHSVNURVIgTUFTS1MgKi8KKworLyoKKyAqIEhjQ29udHJvbCAoY29udHJvbCkgcmVnaXN0ZXIgbWFza3MKKyAqLworI2RlZmluZSBPSENJX0NUUkxfQ0JTUgkoMyA8PCAwKQkvKiBjb250cm9sL2J1bGsgc2VydmljZSByYXRpbyAqLworI2RlZmluZSBPSENJX0NUUkxfUExFCSgxIDw8IDIpCS8qIHBlcmlvZGljIGxpc3QgZW5hYmxlICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9JRQkoMSA8PCAzKQkvKiBpc29jaHJvbm91cyBlbmFibGUgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX0NMRQkoMSA8PCA0KQkvKiBjb250cm9sIGxpc3QgZW5hYmxlICovCisjZGVmaW5lIE9IQ0lfQ1RSTF9CTEUJKDEgPDwgNSkJLyogYnVsayBsaXN0IGVuYWJsZSAqLworI2RlZmluZSBPSENJX0NUUkxfSENGUwkoMyA8PCA2KQkvKiBob3N0IGNvbnRyb2xsZXIgZnVuY3Rpb25hbCBzdGF0ZSAqLworI2RlZmluZSBPSENJX0NUUkxfSVIJKDEgPDwgOCkJLyogaW50ZXJydXB0IHJvdXRpbmcgKi8KKyNkZWZpbmUgT0hDSV9DVFJMX1JXQwkoMSA8PCA5KQkvKiByZW1vdGUgd2FrZXVwIGNvbm5lY3RlZCAqLworI2RlZmluZSBPSENJX0NUUkxfUldFCSgxIDw8IDEwKQkvKiByZW1vdGUgd2FrZXVwIGVuYWJsZSAqLworCisvKiBwcmUtc2hpZnRlZCB2YWx1ZXMgZm9yIEhDRlMgKi8KKyMJZGVmaW5lIE9IQ0lfVVNCX1JFU0VUCSgwIDw8IDYpCisjCWRlZmluZSBPSENJX1VTQl9SRVNVTUUJKDEgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX09QRVIJKDIgPDwgNikKKyMJZGVmaW5lIE9IQ0lfVVNCX1NVU1BFTkQgKDMgPDwgNikKKworLyoKKyAqIEhjQ29tbWFuZFN0YXR1cyAoY21kc3RhdHVzKSByZWdpc3RlciBtYXNrcworICovCisjZGVmaW5lIE9IQ0lfSENSCSgxIDw8IDApCS8qIGhvc3QgY29udHJvbGxlciByZXNldCAqLworI2RlZmluZSBPSENJX0NMRgkoMSA8PCAxKQkvKiBjb250cm9sIGxpc3QgZmlsbGVkICovCisjZGVmaW5lIE9IQ0lfQkxGCSgxIDw8IDIpCS8qIGJ1bGsgbGlzdCBmaWxsZWQgKi8KKyNkZWZpbmUgT0hDSV9PQ1IJKDEgPDwgMykJLyogb3duZXJzaGlwIGNoYW5nZSByZXF1ZXN0ICovCisjZGVmaW5lIE9IQ0lfU09DCSgzIDw8IDE2KQkvKiBzY2hlZHVsaW5nIG92ZXJydW4gY291bnQgKi8KKworLyoKKyAqIG1hc2tzIHVzZWQgd2l0aCBpbnRlcnJ1cHQgcmVnaXN0ZXJzOgorICogSGNJbnRlcnJ1cHRTdGF0dXMgKGludHJzdGF0dXMpCisgKiBIY0ludGVycnVwdEVuYWJsZSAoaW50cmVuYWJsZSkKKyAqIEhjSW50ZXJydXB0RGlzYWJsZSAoaW50cmRpc2FibGUpCisgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1NPCSgxIDw8IDApCS8qIHNjaGVkdWxpbmcgb3ZlcnJ1biAqLworI2RlZmluZSBPSENJX0lOVFJfV0RICSgxIDw8IDEpCS8qIHdyaXRlYmFjayBvZiBkb25lX2hlYWQgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX1NGCSgxIDw8IDIpCS8qIHN0YXJ0IGZyYW1lICovCisjZGVmaW5lIE9IQ0lfSU5UUl9SRAkoMSA8PCAzKQkvKiByZXN1bWUgZGV0ZWN0ICovCisjZGVmaW5lIE9IQ0lfSU5UUl9VRQkoMSA8PCA0KQkvKiB1bnJlY292ZXJhYmxlIGVycm9yICovCisjZGVmaW5lIE9IQ0lfSU5UUl9GTk8JKDEgPDwgNSkJLyogZnJhbWUgbnVtYmVyIG92ZXJmbG93ICovCisjZGVmaW5lIE9IQ0lfSU5UUl9SSFNDCSgxIDw8IDYpCS8qIHJvb3QgaHViIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgT0hDSV9JTlRSX09DCSgxIDw8IDMwKQkvKiBvd25lcnNoaXAgY2hhbmdlICovCisjZGVmaW5lIE9IQ0lfSU5UUl9NSUUJKDEgPDwgMzEpCS8qIG1hc3RlciBpbnRlcnJ1cHQgZW5hYmxlICovCisKKworLyogVmlydHVhbCBSb290IEhVQiAqLworc3RydWN0IHZpcnRfcm9vdF9odWIgeworCWludCBkZXZudW07IC8qIEFkZHJlc3Mgb2YgUm9vdCBIdWIgZW5kcG9pbnQgKi8KKwl2b2lkICpkZXY7ICAvKiB3YXMgdXJiICovCisJdm9pZCAqaW50X2FkZHI7CisJaW50IHNlbmQ7CisJaW50IGludGVydmFsOworfTsKKworLyogVVNCIEhVQiBDT05TVEFOVFMgKG5vdCBPSENJLXNwZWNpZmljOyBzZWUgaHViLmgpICovCisKKy8qIGRlc3RpbmF0aW9uIG9mIHJlcXVlc3QgKi8KKyNkZWZpbmUgUkhfSU5URVJGQUNFCQkgICAweDAxCisjZGVmaW5lIFJIX0VORFBPSU5UCQkgICAweDAyCisjZGVmaW5lIFJIX09USEVSCQkgICAweDAzCisKKyNkZWZpbmUgUkhfQ0xBU1MJCSAgIDB4MjAKKyNkZWZpbmUgUkhfVkVORE9SCQkgICAweDQwCisKKy8qIFJlcXVlc3RzOiBiUmVxdWVzdCA8PCA4IHwgYm1SZXF1ZXN0VHlwZSAqLworI2RlZmluZSBSSF9HRVRfU1RBVFVTCQkweDAwODAKKyNkZWZpbmUgUkhfQ0xFQVJfRkVBVFVSRQkweDAxMDAKKyNkZWZpbmUgUkhfU0VUX0ZFQVRVUkUJCTB4MDMwMAorI2RlZmluZSBSSF9TRVRfQUREUkVTUwkJMHgwNTAwCisjZGVmaW5lIFJIX0dFVF9ERVNDUklQVE9SCTB4MDY4MAorI2RlZmluZSBSSF9TRVRfREVTQ1JJUFRPUgkweDA3MDAKKyNkZWZpbmUgUkhfR0VUX0NPTkZJR1VSQVRJT04JMHgwODgwCisjZGVmaW5lIFJIX1NFVF9DT05GSUdVUkFUSU9OCTB4MDkwMAorI2RlZmluZSBSSF9HRVRfU1RBVEUJCTB4MDI4MAorI2RlZmluZSBSSF9HRVRfSU5URVJGQUNFCTB4MEE4MAorI2RlZmluZSBSSF9TRVRfSU5URVJGQUNFCTB4MEIwMAorI2RlZmluZSBSSF9TWU5DX0ZSQU1FCQkweDBDODAKKy8qIE91ciBWZW5kb3IgU3BlY2lmaWMgUmVxdWVzdCAqLworI2RlZmluZSBSSF9TRVRfRVAJCTB4MjAwMAorCisKKy8qIEh1YiBwb3J0IGZlYXR1cmVzICovCisjZGVmaW5lIFJIX1BPUlRfQ09OTkVDVElPTgkgICAweDAwCisjZGVmaW5lIFJIX1BPUlRfRU5BQkxFCQkgICAweDAxCisjZGVmaW5lIFJIX1BPUlRfU1VTUEVORAkJICAgMHgwMgorI2RlZmluZSBSSF9QT1JUX09WRVJfQ1VSUkVOVAkgICAweDAzCisjZGVmaW5lIFJIX1BPUlRfUkVTRVQJCSAgIDB4MDQKKyNkZWZpbmUgUkhfUE9SVF9QT1dFUgkJICAgMHgwOAorI2RlZmluZSBSSF9QT1JUX0xPV19TUEVFRAkgICAweDA5CisKKyNkZWZpbmUgUkhfQ19QT1JUX0NPTk5FQ1RJT04JICAgMHgxMAorI2RlZmluZSBSSF9DX1BPUlRfRU5BQkxFCSAgIDB4MTEKKyNkZWZpbmUgUkhfQ19QT1JUX1NVU1BFTkQJICAgMHgxMgorI2RlZmluZSBSSF9DX1BPUlRfT1ZFUl9DVVJSRU5UCSAgIDB4MTMKKyNkZWZpbmUgUkhfQ19QT1JUX1JFU0VUCQkgICAweDE0CisKKy8qIEh1YiBmZWF0dXJlcyAqLworI2RlZmluZSBSSF9DX0hVQl9MT0NBTF9QT1dFUgkgICAweDAwCisjZGVmaW5lIFJIX0NfSFVCX09WRVJfQ1VSUkVOVAkgICAweDAxCisKKyNkZWZpbmUgUkhfREVWSUNFX1JFTU9URV9XQUtFVVAJICAgMHgwMAorI2RlZmluZSBSSF9FTkRQT0lOVF9TVEFMTAkgICAweDAxCisKKyNkZWZpbmUgUkhfQUNLCQkJICAgMHgwMQorI2RlZmluZSBSSF9SRVFfRVJSCQkgICAtMQorI2RlZmluZSBSSF9OQUNLCQkJICAgMHgwMAorCisKKy8qIE9IQ0kgUk9PVCBIVUIgUkVHSVNURVIgTUFTS1MgKi8KKworLyogcm9vdGh1Yi5wb3J0c3RhdHVzIFtpXSBiaXRzICovCisjZGVmaW5lIFJIX1BTX0NDUwkgICAgIDB4MDAwMDAwMDEJCS8qIGN1cnJlbnQgY29ubmVjdCBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfUFNfUEVTCSAgICAgMHgwMDAwMDAwMgkJLyogcG9ydCBlbmFibGUgc3RhdHVzKi8KKyNkZWZpbmUgUkhfUFNfUFNTCSAgICAgMHgwMDAwMDAwNAkJLyogcG9ydCBzdXNwZW5kIHN0YXR1cyAqLworI2RlZmluZSBSSF9QU19QT0NJCSAgICAgMHgwMDAwMDAwOAkJLyogcG9ydCBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yICovCisjZGVmaW5lIFJIX1BTX1BSUwkgICAgIDB4MDAwMDAwMTAJCS8qIHBvcnQgcmVzZXQgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX1BQUwkgICAgIDB4MDAwMDAxMDAJCS8qIHBvcnQgcG93ZXIgc3RhdHVzICovCisjZGVmaW5lIFJIX1BTX0xTREEJICAgICAweDAwMDAwMjAwCQkvKiBsb3cgc3BlZWQgZGV2aWNlIGF0dGFjaGVkICovCisjZGVmaW5lIFJIX1BTX0NTQwkgICAgIDB4MDAwMTAwMDAJCS8qIGNvbm5lY3Qgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19QRVNDCSAgICAgMHgwMDAyMDAwMAkJLyogcG9ydCBlbmFibGUgc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBSSF9QU19QU1NDCSAgICAgMHgwMDA0MDAwMAkJLyogcG9ydCBzdXNwZW5kIHN0YXR1cyBjaGFuZ2UgKi8KKyNkZWZpbmUgUkhfUFNfT0NJQwkgICAgIDB4MDAwODAwMDAJCS8qIG92ZXIgY3VycmVudCBpbmRpY2F0b3IgY2hhbmdlICovCisjZGVmaW5lIFJIX1BTX1BSU0MJICAgICAweDAwMTAwMDAwCQkvKiBwb3J0IHJlc2V0IHN0YXR1cyBjaGFuZ2UgKi8KKworLyogcm9vdGh1Yi5zdGF0dXMgYml0cyAqLworI2RlZmluZSBSSF9IU19MUFMJICAgICAweDAwMDAwMDAxCQkvKiBsb2NhbCBwb3dlciBzdGF0dXMgKi8KKyNkZWZpbmUgUkhfSFNfT0NJCSAgICAgMHgwMDAwMDAwMgkJLyogb3ZlciBjdXJyZW50IGluZGljYXRvciAqLworI2RlZmluZSBSSF9IU19EUldFCSAgICAgMHgwMDAwODAwMAkJLyogZGV2aWNlIHJlbW90ZSB3YWtldXAgZW5hYmxlICovCisjZGVmaW5lIFJIX0hTX0xQU0MJICAgICAweDAwMDEwMDAwCQkvKiBsb2NhbCBwb3dlciBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lIFJIX0hTX09DSUMJICAgICAweDAwMDIwMDAwCQkvKiBvdmVyIGN1cnJlbnQgaW5kaWNhdG9yIGNoYW5nZSAqLworI2RlZmluZSBSSF9IU19DUldFCSAgICAgMHg4MDAwMDAwMAkJLyogY2xlYXIgcmVtb3RlIHdha2V1cCBlbmFibGUgKi8KKworLyogcm9vdGh1Yi5iIG1hc2tzICovCisjZGVmaW5lIFJIX0JfRFIJCTB4MDAwMGZmZmYJCS8qIGRldmljZSByZW1vdmFibGUgZmxhZ3MgKi8KKyNkZWZpbmUgUkhfQl9QUENNCTB4ZmZmZjAwMDAJCS8qIHBvcnQgcG93ZXIgY29udHJvbCBtYXNrICovCisKKy8qIHJvb3RodWIuYSBtYXNrcyAqLworI2RlZmluZSBSSF9BX05EUAkoMHhmZiA8PCAwKQkJLyogbnVtYmVyIG9mIGRvd25zdHJlYW0gcG9ydHMgKi8KKyNkZWZpbmUgUkhfQV9QU00JKDEgPDwgOCkJCS8qIHBvd2VyIHN3aXRjaGluZyBtb2RlICovCisjZGVmaW5lIFJIX0FfTlBTCSgxIDw8IDkpCQkvKiBubyBwb3dlciBzd2l0Y2hpbmcgKi8KKyNkZWZpbmUgUkhfQV9EVAkJKDEgPDwgMTApCQkvKiBkZXZpY2UgdHlwZSAobWJ6KSAqLworI2RlZmluZSBSSF9BX09DUE0JKDEgPDwgMTEpCQkvKiBvdmVyIGN1cnJlbnQgcHJvdGVjdGlvbiBtb2RlICovCisjZGVmaW5lIFJIX0FfTk9DUAkoMSA8PCAxMikJCS8qIG5vIG92ZXIgY3VycmVudCBwcm90ZWN0aW9uICovCisjZGVmaW5lIFJIX0FfUE9UUEdUCSgweGZmIDw8IDI0KQkJLyogcG93ZXIgb24gdG8gcG93ZXIgZ29vZCB0aW1lICovCisKKy8qIHVyYiAqLworI2RlZmluZSBOX1VSQl9URCA0OAordHlwZWRlZiBzdHJ1Y3QKK3sKKwllZF90ICplZDsKKwlfX3UxNiBsZW5ndGg7CS8qIG51bWJlciBvZiB0ZHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdCAqLworCV9fdTE2IHRkX2NudDsJLyogbnVtYmVyIG9mIHRkcyBhbHJlYWR5IHNlcnZpY2VkICovCisJaW50ICAgc3RhdGU7CisJdW5zaWduZWQgbG9uZyBwaXBlOworCWludCBhY3R1YWxfbGVuZ3RoOworCXRkX3QgKnRkW05fVVJCX1REXTsJLyogbGlzdCBwb2ludGVyIHRvIGFsbCBjb3JyZXNwb25kaW5nIFREcyBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXF1ZXN0ICovCit9IHVyYl9wcml2X3Q7CisjZGVmaW5lIFVSQl9ERUwgMQorCisvKgorICogVGhpcyBpcyB0aGUgZnVsbCBvaGNpIGNvbnRyb2xsZXIgZGVzY3JpcHRpb24KKyAqCisgKiBOb3RlIGhvdyB0aGUgInByb3BlciIgVVNCIGluZm9ybWF0aW9uIGlzIGp1c3QKKyAqIGEgc3Vic2V0IG9mIHdoYXQgdGhlIGZ1bGwgaW1wbGVtZW50YXRpb24gbmVlZHMuIChMaW51cykKKyAqLworCisKK3R5cGVkZWYgc3RydWN0IG9oY2kgeworCXN0cnVjdCBvaGNpX2hjY2EgKmhjY2E7CQkvKiBoY2NhICovCisJLypkbWFfYWRkcl90IGhjY2FfZG1hOyovCisKKwlpbnQgaXJxOworCWludCBkaXNhYmxlZDsJCQkvKiBlLmcuIGdvdCBhIFVFLCB3ZSdyZSBodW5nICovCisJaW50IHNsZWVwaW5nOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkvKiBmb3IgSEMgYnVncyAqLworCisJc3RydWN0IG9oY2lfcmVncyAqcmVnczsgLyogT0hDSSBjb250cm9sbGVyJ3MgbWVtb3J5ICovCisKKwllZF90ICplZF9ybV9saXN0WzJdOwkgLyogbGlzdHMgb2YgYWxsIGVuZHBvaW50cyB0byBiZSByZW1vdmVkICovCisJZWRfdCAqZWRfYnVsa3RhaWw7CSAvKiBsYXN0IGVuZHBvaW50IG9mIGJ1bGsgbGlzdCAqLworCWVkX3QgKmVkX2NvbnRyb2x0YWlsOwkgLyogbGFzdCBlbmRwb2ludCBvZiBjb250cm9sIGxpc3QgKi8KKwlpbnQgaW50cnN0YXR1czsKKwlfX3UzMiBoY19jb250cm9sOwkJLyogY29weSBvZiB0aGUgaGMgY29udHJvbCByZWcgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2WzMyXTsKKwlzdHJ1Y3QgdmlydF9yb290X2h1YiByaDsKKworCWNvbnN0IGNoYXIJKnNsb3RfbmFtZTsKK30gb2hjaV90OworCisjZGVmaW5lIE5VTV9FRFMgOAkJLyogbnVtIG9mIHByZWFsbG9jYXRlZCBlbmRwb2ludCBkZXNjcmlwdG9ycyAqLworCitzdHJ1Y3Qgb2hjaV9kZXZpY2UgeworCWVkX3QJZWRbTlVNX0VEU107CisJaW50IGVkX2NudDsKK307CisKKy8qIGhjZCAqLworLyogZW5kcG9pbnQgKi8KK3N0YXRpYyBpbnQgZXBfbGluayhvaGNpX3QgKiBvaGNpLCBlZF90ICogZWQpOworc3RhdGljIGludCBlcF91bmxpbmsob2hjaV90ICogb2hjaSwgZWRfdCAqIGVkKTsKK3N0YXRpYyBlZF90ICogZXBfYWRkX2VkKHN0cnVjdCB1c2JfZGV2aWNlICogdXNiX2RldiwgdW5zaWduZWQgbG9uZyBwaXBlKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogd2UgbmVlZCBtb3JlIFREcyB0aGFuIEVEcyAqLworI2RlZmluZSBOVU1fVEQgNjQKKworLyogKzEgc28gd2UgY2FuIGFsaWduIHRoZSBzdG9yYWdlICovCit0ZF90IGd0ZFtOVU1fVEQrMV07CisvKiBwb2ludGVycyB0byBhbGlnbmVkIHN0b3JhZ2UgKi8KK3RkX3QgKnB0ZDsKKworLyogVERzIC4uLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGQgKgordGRfYWxsb2MgKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KQoreworCWludCBpOworCXN0cnVjdCB0ZAkqdGQ7CisKKwl0ZCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IE5VTV9URDsgaSsrKQorCXsKKwkJaWYgKHB0ZFtpXS51c2JfZGV2ID09IE5VTEwpCisJCXsKKwkJCXRkID0gJnB0ZFtpXTsKKwkJCXRkLT51c2JfZGV2ID0gdXNiX2RldjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHRkOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2VkX2ZyZWUgKHN0cnVjdCBlZCAqZWQpCit7CisJZWQtPnVzYl9kZXYgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvc3RhcnQuUyBiL2NwdS9hcm05MjB0L3N0YXJ0LlMKaW5kZXggMzQ2ZjBkMC4uOTY4MjJlMiAxMDA2NDQKLS0tIGEvY3B1L2FybTkyMHQvc3RhcnQuUworKysgYi9jcHUvYXJtOTIwdC9zdGFydC5TCkBAIC0yOCw2ICsyOCw5IEBACiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE8pCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjZW5kaWYKIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03Myw3ICs3NiwxMSBAQAogICovCiAKIF9URVhUX0JBU0U6CisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE8pCisJLndvcmQJX3N0YXJ0CQorI2Vsc2UKIAkud29yZAlURVhUX0JBU0UKKyNlbmRpZgogCiAuZ2xvYmwgX2FybWJvb3Rfc3RhcnQKIF9hcm1ib290X3N0YXJ0OgpAQCAtMTA4LDYgKzExNSwyNSBAQAogICovCiAKIHJlc2V0OgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE8pCisKKwkvKiB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTSwgZG9uJ3QgcmVsb2MgZHVyaW5nIGRlYnVnICovCisJYWRyCXIwLCBfc3RhcnQgICAgICAgICAgICAgIC8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCisJbGRyCXIxLCBfVEVYVF9CQVNFCisJY21wCXIwLCByMSAKKwliZXEJY3B1X2luaXQKKworCS8qIFdlIHdlcmUgcnVubmluZyBmcm9tIG9mZnNldCAweDAsIG5vdyBqdW1wIHRvIEJvb3QgRkxBU0ggYWRkcmVzcywKKyAgICAgICAgICAgc28gdGhhdCB3ZSBjYW4gY29uZmlndXJlIFNEUkFNICovCisJbGRyCXBjLCA9IEVYUF9DU0JPT1RfQkFTRUFERFIgKyByb21fc2Vjb25kX2xvYyAtIFRFWFRfQkFTRQorcm9tX3NlY29uZF9sb2M6CisJLyogRGlzYWJsZSBsb3cgU0RSQU0gcmVtYXBwaW5nICovCisJbGRyCXIyLCA9IEFTRF9DU0UKKwltb3YJcjMsICNDU0VfQk9PVAorCXN0cmgJcjMsIFtyMl0KK2NwdV9pbml0OgorI2VuZGlmCiAJLyoKIAkgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCiAJICovCmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE5L01ha2VmaWxlIGIvY3B1L2FybV9jb3J0ZXhhOS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGVmYzRlCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybV9jb3J0ZXhhOS9NYWtlZmlsZQpAQCAtMCwwICsxLDQ3IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKENQVSkuYQorCitTVEFSVAk6PSBzdGFydC5vCitDT0JKUwk6PSBjcHUubworCitTUkNTCTo9ICQoU1RBUlQ6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NUQVJUCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNUQVJUKSkKKworYWxsOgkkKG9iaikuZGVwZW5kICQoU1RBUlQpICQoTElCKQorCiskKExJQik6CSQoT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NwdS9hcm1fY29ydGV4YTkvY29tY2VydG8vTWFrZWZpbGUgYi9jcHUvYXJtX2NvcnRleGE5L2NvbWNlcnRvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWFlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtX2NvcnRleGE5L2NvbWNlcnRvL01ha2VmaWxlCkBAIC0wLDAgKzEsNDggQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDUKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9ICQob2JqKWxpYiQoU09DKS5hCisKK0NPQkpTCT0gaW50ZXJydXB0cy5vIHNlcmlhbC5vIHNwaS5vIGJzcDIwMDAubworU09CSlMJPSBsb3dsZXZlbF9pbml0Lm8KKworYWxsOgkkKG9iaikuZGVwZW5kICQoTElCKQorCitTUkNTICAgIDo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTICAgIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTICAgOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE5L2NvbWNlcnRvL2JzcDIwMDAuYyBiL2NwdS9hcm1fY29ydGV4YTkvY29tY2VydG8vYnNwMjAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NTJhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtX2NvcnRleGE5L2NvbWNlcnRvL2JzcDIwMDAuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWluZHNwZWVkIFRlY2hub2xvZ2llcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtLWFybS9hcmNoLWNvbWNlcnRvL2V4cC1idXNfYzIwMDAuaD4KKyNpbmNsdWRlIDxhc20tYXJtL2FyY2gtY29tY2VydG8vYnNwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQordm9pZCBTb0NfbmFuZF9pbml0KHZvaWQpCit7CisJLyogSUJSLCB3aGVuIGJvb3RpbmcgZnJvbSBOT1IsIGlzIGNoYW5naW5nIGV4cGFuc2lvbiBidXMgQ1MwIE1lbSBTZWdtZW50IHNpemUgdG8gMU1pQgorCWluc3RlYWQgb2YgdGhlIGRlZmF1bHQgcmVzZXQgdmFsdWUgb2YgMTI4TWlCLiBQdXQgYmFjayB0aGUgcmVzZXQgZGVmYXVsdCB2YWx1ZSAqLworCXdyaXRlbChFWFBfQ1MwX1NFR19FTkRfVkFMLCBFWFBfQ1MwX1NFR19SRUcpOworCisJd3JpdGVsKEVYUF9DUzFfQkFTRV9WQUwsIEVYUF9DUzFfQkFTRV9SRUcpOworCXdyaXRlbChFWFBfQ1MxX1NFR19FTkRfVkFMLCBFWFBfQ1MxX1NFR19SRUcpOworCisJd3JpdGVsKEVYUF9DUzJfQkFTRV9WQUwsIEVYUF9DUzJfQkFTRV9SRUcpOworCXdyaXRlbChFWFBfQ1MyX1NFR19FTkRfVkFMLCBFWFBfQ1MyX1NFR19SRUcpOworCisJd3JpdGVsKEVYUF9DUzNfQkFTRV9WQUwsIEVYUF9DUzNfQkFTRV9SRUcpOworCXdyaXRlbChFWFBfQ1MzX1NFR19FTkRfVkFMLCBFWFBfQ1MzX1NFR19SRUcpOworCisJd3JpdGVsKEVYUF9DUzRfQkFTRV9WQUwsIEVYUF9DUzRfQkFTRV9SRUcpOworCXdyaXRlbChFWFBfQ1M0X1NFR19FTkRfVkFMLCBFWFBfQ1M0X1NFR19SRUcpOworCisjaWZkZWYgQ09ORklHX05BTkRfVFlQRV9TTEMKKyAgICAgICAgLy9TTEMgTkFORCBvbiBBU0lDIGlzIDE2LWJpdC4gRW5hYmxlIDE2LWJpdCBidXMKKyAgICAgICAgd3JpdGVsKHJlYWRsKEVYUF9DUzRfQ0ZHX1JFRykgfCAweDIsIEVYUF9DUzRfQ0ZHX1JFRyk7CisjZWxzZQorICAgICAgICAvL01MQyBOQU5EIG9uIEFTSUMgaXMgOC1iaXQuIEVuYWJsZSA4LWJpdCBidXMKKyAgICAgICAgd3JpdGVsKChyZWFkbChFWFBfQ1M0X0NGR19SRUcpICYgKH4weDYpKSwgRVhQX0NTNF9DRkdfUkVHKTsKKyNlbmRpZgorCit9CisKKy8qCisqIFNvQ19ncGlvX2NmZyAtIGNvbmZpZ3VyZSBHUElPIHBpbnMgYXMgaW5wdXQgb3Igb3V0cHV0IHBpbnMKKyoKKyogZ3BpbyAtIGdwaW8gcGluCisqCisqIG1vZGUgLSBncGlvIHBpbiBtb2RlCisqCUdQSU9fVFlQRV9PVVRQVVQgPSBvdXRwdXQKKyoJR1BJT19UWVBFX0lOUFVUID0gaW5wdXQKKyoKKyovCitpbnQgU29DX2dwaW9fY2ZnKGludCBncGlvLCBpbnQgbW9kZSkKK3sKKwlpZiAoKGdwaW8gPCAwKSB8fCAoZ3BpbyA+IDMxKSkKKwkJZ290byBlcnI7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIEdQSU9fVFlQRV9JTlBVVDoKKwlkZWZhdWx0OgorCQkqKHZvbGF0aWxlIHUzMiAqKSBDT01DRVJUT19HUElPX09FX1JFRyAmPSBfX2NwdV90b19sZTMyKH4oMSA8PCBncGlvKSk7CisJCWJyZWFrOworCisJY2FzZSBHUElPX1RZUEVfT1VUUFVUOgorCQkqKHZvbGF0aWxlIHUzMiAqKSBDT01DRVJUT19HUElPX09FX1JFRyB8PSBfX2NwdV90b19sZTMyKDEgPDwgZ3Bpbyk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIC0xOworfQorCisjZW5kaWYgLyogQ0ZHX0NNRF9OQU5EICovCmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE5L2NvbWNlcnRvL2ludGVycnVwdHMuYyBiL2NwdS9hcm1fY29ydGV4YTkvY29tY2VydG8vaW50ZXJydXB0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNGRlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtX2NvcnRleGE5L2NvbWNlcnRvL2ludGVycnVwdHMuYwpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ic3AuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgVElNRVJfTE9BRF9WQUwJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgQ0xPQ0tfQ09VTlRfUEVSX1VTRUMJKENGR19IWl9DTE9DSyAvIDEwMDAgLyAxMDAwKQorI2RlZmluZSBVU0VDX1BFUl9USUNLCQkoMTAwMCAqIDEwMDAgLyBDRkdfSFopCisKKyNkZWZpbmUgQTlfVElNRVJfTE9BRCAgICAgICAgICAgMHgwCisjZGVmaW5lIEE5X1RJTUVSX0NPVU5URVIgICAgICAgIDB4NAorI2RlZmluZSBBOV9USU1FUl9DTlRSTCAgICAgICAgICAweDgKKyNkZWZpbmUgQTlfVElNRVJfSU5UX1NUQVQgICAgICAgMHhDCisKKyNkZWZpbmUgQTlfVElNRVJfRU5BQkxFICAgICAgICAgKDE8PDApCisjZGVmaW5lIEE5X1RJTUVSX1JFTE9BRCAgICAgICAgICgxPDwxKQorI2RlZmluZSBBOV9USU1FUl9JUlFfRU4gICAgICAgICAoMTw8MikKKworI2RlZmluZSBDT01DRVJUT19BOV9QRVJJUEhfQkFTRSAgICAgMHhGRkYwMDAwMAorI2RlZmluZSBDT01DRVJUT19BOV9USU1FUl9CQVNFICAgICAgICAgIChDT01DRVJUT19BOV9QRVJJUEhfQkFTRSArIDB4NjAwKQorI2RlZmluZSBSRUFEX1RJTUVSICAgICAgKFRJTUVSX0xPQURfVkFMIC0gcmVhZGwoQ09NQ0VSVE9fQTlfVElNRVJfQkFTRSArIEE5X1RJTUVSX0NPVU5URVIpKQorCisKK3N0YXRpYyB1bG9uZyB0c19jb3VudCwgdHNfdXNlYzsKK3N0YXRpYyB1bG9uZyBsYXN0aW5jOworCitpbnQgaW50ZXJydXB0X2luaXQgKHZvaWQpCit7CisJaW50IGk7CisgICAgICAgIHdyaXRlbChUSU1FUl9MT0FEX1ZBTCwgQ09NQ0VSVE9fQTlfVElNRVJfQkFTRSArIEE5X1RJTUVSX0xPQUQpOworICAgICAgICB3cml0ZWwoVElNRVJfTE9BRF9WQUwsIENPTUNFUlRPX0E5X1RJTUVSX0JBU0UgKyBBOV9USU1FUl9DT1VOVEVSKTsKKyAgICAgICAgd3JpdGVsKEE5X1RJTUVSX0VOQUJMRSB8IEE5X1RJTUVSX1JFTE9BRCwgQ09NQ0VSVE9fQTlfVElNRVJfQkFTRSArIEE5X1RJTUVSX0NOVFJMKTsKKworCWxhc3RpbmMgPSAwOworCXRzX2NvdW50ID0gMDsKKwl0c191c2VjID0gMDsKKworCXJldHVybiAoMCk7Cit9CisKK3ZvaWQgcmVzZXRfdGltZXJfbWFza2VkICh2b2lkKQoreworCWxhc3RpbmMgPSBSRUFEX1RJTUVSOworCXRzX2NvdW50ID0gMDsKKwl0c191c2VjID0gMDsKK30KKwordm9pZCByZXNldF90aW1lciAodm9pZCkKK3sKKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7Cit9CisKKy8qIFJldHVybnMgdXNlY3Mgc2luY2UgbGFzdCB0aW1lciByZXNldCAqLwordWxvbmcgZ2V0X3RpbWVyX3JhdyAodm9pZCkKK3sKKwl1bG9uZyBzdGVwOworCXVsb25nIG5vdyA9IFJFQURfVElNRVI7CisKKwlpZiAobm93ID4gbGFzdGluYykgeworCQkvKiBub3JtYWwgbW9kZSAqLworCQlzdGVwID0gbm93IC0gbGFzdGluYzsKKwl9IGVsc2UgeworCQkvKiB3ZSBoYXZlIGFuIG92ZXJmbG93IC4uLiAqLworCQlzdGVwID0gKFRJTUVSX0xPQURfVkFMIC0gbGFzdGluYykgKyBub3c7CisJfQorCisJbGFzdGluYyA9IG5vdzsKKworCXRzX2NvdW50ICs9IHN0ZXAgJSBDTE9DS19DT1VOVF9QRVJfVVNFQzsKKwl0c191c2VjICs9IHN0ZXAgLyBDTE9DS19DT1VOVF9QRVJfVVNFQzsKKworCWlmICh0c19jb3VudCA+PSBDTE9DS19DT1VOVF9QRVJfVVNFQykgeworCQl0c191c2VjICs9IHRzX2NvdW50IC8gQ0xPQ0tfQ09VTlRfUEVSX1VTRUM7CisJCXRzX2NvdW50ICU9IENMT0NLX0NPVU5UX1BFUl9VU0VDOworCX0KKworCXJldHVybiB0c191c2VjOworfQorCisvKiBSZXR1cm5zIHRpY2sgY291bnQgc2luY2UgbGFzdCB0aW1lciByZXNldCAqLwordWxvbmcgZ2V0X3RpbWVyX21hc2tlZCAodm9pZCkKK3sKKwlyZXR1cm4gZ2V0X3RpbWVyX3JhdygpIC8gVVNFQ19QRVJfVElDSzsKK30KKwordWxvbmcgZ2V0X3RpbWVyICh1bG9uZyBiYXNlKQoreworCXJldHVybiBnZXRfdGltZXJfbWFza2VkICgpIC0gYmFzZTsKK30KKwordm9pZCB1ZGVsYXlfbWFza2VkICh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisJdWxvbmcgZW5kdGltZSA9IGdldF90aW1lcl9yYXcgKCkgKyB1c2VjOworCisJd2hpbGUgKGdldF90aW1lcl9yYXcgKCkgPCBlbmR0aW1lKQorCQk7CisKK30KKwordm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1ZGVsYXlfbWFza2VkKHVzZWMpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlIChyZWFkIHRpbWViYXNlIGFzIGxvbmcgbG9uZykuCisgKiBPbiBBUk0gaXQganVzdCByZXR1cm5zIHRoZSB0aW1lciB2YWx1ZS4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIGdldF90aWNrcyh2b2lkKQoreworCXJldHVybiBnZXRfdGltZXIoMCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHRpbWViYXNlIGNsb2NrIGZyZXF1ZW5jeSkuCisgKiBPbiBBUk0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVyIHRpY2tzIHBlciBzZWNvbmQuCisgKi8KK3Vsb25nIGdldF90YmNsayAodm9pZCkKK3sKKwl1bG9uZyB0YmNsazsKKworCXRiY2xrID0gQ0ZHX0haOworCXJldHVybiB0YmNsazsKK30KKworLyoKKyAqCisgKi8KK3ZvaWQgcmVzZXRfY3B1ICh1bG9uZyBpZ25vcmVkKQoreworCS8qIHNldCB0aGUgdGltZW91dCB2YWx1ZSAqLworLy8JKih2b2xhdGlsZSB1MzIgKilUSU1FUl9XRFRfSElHSF9CT1VORCA9IF9fY3B1X3RvX2xlMzIoMHgxKTsKKwkvKiBlbmFibGUgd2F0Y2hkb2cgdGltZXIgKi8KKy8vCSoodm9sYXRpbGUgdTMyICopVElNRVJfV0RUX0NPTlRST0wgPSBfX2NwdV90b19sZTMyKDB4MSk7CisKKwl3aGlsZSAoMSkgOworfQorCisvKgorICogdGltZXIgd2l0aG91dCBpbnRlcnJ1cHRzCisgKi8KKworCit2b2lkIHNldF90aW1lciAodWxvbmcgdCkKK3sKKwl0c19jb3VudCA9IDA7CisJdHNfdXNlYyA9IHQgKiBVU0VDX1BFUl9USUNLOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOS9jb21jZXJ0by9sb3dsZXZlbF9pbml0LlMgYi9jcHUvYXJtX2NvcnRleGE5L2NvbWNlcnRvL2xvd2xldmVsX2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzg5NjkwCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybV9jb3J0ZXhhOS9jb21jZXJ0by9sb3dsZXZlbF9pbml0LlMKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIFNPQyBzcGVjaWZpYyBzZXR1cCBpbmZvCisgKgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworCisuZ2xvYmwgbG93bGV2ZWxfaW5pdAorbG93bGV2ZWxfaW5pdDoKKwlsZHIJc3AsIFRNUF9TVEFDSyAvKiBzZXQgdXAgYSB0ZW1wb3Jhcnkgc3RhY2sgKi8KKworCXN0bWRiCXNwISwge2lwLCBscn0KKwlibAlic3BfaW5pdAkvKiBnbyBzZXR1cCBwbGwsIG1lbW9yeSAqLworCWxkbWlhCXNwISwge2lwLCBwY30JLyogcmVzdG9yZSByZWdpc3RlcnMgYW5kIHJldHVybiB0byBjYWxsZXIgKi8KKworCS8qIHRoZSBsaXRlcmFsIHBvb2xzIG9yaWdpbiAqLworCS5sdG9yZworVE1QX1NUQUNLOgorCS53b3JkCUNGR19JTklUX1JBTV9BRERSICArIENGR19JTklUX1NQX09GRlNFVApkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOS9jb21jZXJ0by9zZXJpYWwuYyBiL2NwdS9hcm1fY29ydGV4YTkvY29tY2VydG8vc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA2OTU0NwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm1fY29ydGV4YTkvY29tY2VydG8vc2VyaWFsLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JzcC5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2RlZmluZSBDT01DRVJUT19VQVJUMF9CQVNFICAgICAgICAgICAgIDB4OTY0MDAwMDAKKworI2lmICFkZWZpbmVkKENPTkZJR19VQVJUMCkgJiYgIWRlZmluZWQoQ09ORklHX1VBUlQxKQorI2Vycm9yIG11c3QgZGVmaW5lIG9uZSBvZiBDT05GSUdfVUFSVDAgb3IgQ09ORklHX1VBUlQxCisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCB0YWdVQVJUMTY1NTBSRUdTIHsKKwl2b2xhdGlsZSB1MzIgZGF0YTsJLy8gUmVjZWl2ZS9UcmFuc21pdCBkYXRhIHJlZ2lzdGVyCisJdm9sYXRpbGUgdTMyIGllcjsJLy8gSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlcgorCXZvbGF0aWxlIHUzMiBpaXJfZmNyOy8vIEludGVycnVwdCBJZGVudGl0eSByZWdpc3RlciAvIEZJRk8gQ29udHJvbCByZWdpc3RlcgorCXZvbGF0aWxlIHUzMiBsY3I7CS8vIExpbmUgQ29udHJvbCByZWdpc3RlcgorCXZvbGF0aWxlIHUzMiBtY3I7CS8vIE1vZGVtIENvbnRyb2wgcmVnaXN0ZXIKKwl2b2xhdGlsZSB1MzIgbHNyOwkvLyBMaW5lIFN0YXR1cyByZWdpc3RlcgorCXZvbGF0aWxlIHUzMiBtc3I7CS8vIE1vZGVtIFN0YXR1cyByZWdpc3RlcgorCXZvbGF0aWxlIHUzMiBzcjsJCS8vIFNjcmF0Y2ggcmVnaXN0ZXIKK30gVUFSVDE2NTUwUkVHUywgKlBVQVJUMTY1NTBSRUdTOworCit0eXBlZGVmIHN0cnVjdCB0YWdVQVJUMTY1NTBETFJFR1MgeworCXZvbGF0aWxlIHUzMiBkbGw7CS8vIERpdmlzb3IgTGF0Y2ggKExvdykKKwl2b2xhdGlsZSB1MzIgZGxoOwkvLyBEaXZpc29yIExhdGNoIChIaWdoKQorfSBVQVJUMTY1NTBETFJFR1MsICpQVUFSVDE2NTUwRExSRUdTOworCisjZGVmaW5lIExDUl9DSEFSX0xFTl81CQkweDAwCSAgLyogZGVmYXVsdCAqLworI2RlZmluZSBMQ1JfQ0hBUl9MRU5fNgkJMHgwMQorI2RlZmluZSBMQ1JfQ0hBUl9MRU5fNwkJMHgwMgorI2RlZmluZSBMQ1JfQ0hBUl9MRU5fOAkJMHgwMworI2RlZmluZSBMQ1JfT05FX1NUT1AJCTB4MDAJICAvKiBPbmUgc3RvcCBiaXQhIC0gZGVmYXVsdCAqLworI2RlZmluZSBMQ1JfVFdPX1NUT1AJCTB4MDQJICAvKiBUd28gc3RvcCBiaXQhICovCisjZGVmaW5lIExDUl9QRU4JCQkJMHgwOAkgIC8qIFBhcml0eSBFbmFibGUgKi8KKyNkZWZpbmUgTENSX1BBUklUWV9OT05FCQkweDAwCisjZGVmaW5lIExDUl9FUFMJCQkJMHgxMAkgIC8qIEV2ZW4gUGFyaXR5IFNlbGVjdCAqLworI2RlZmluZSBMQ1JfUFMJCQkJMHgyMAkgIC8qIEVuYWJsZSBQYXJpdHkgIFN0dWZmICovCisjZGVmaW5lIExDUl9TQlJLCQkJCTB4NDAgIC8qIFN0YXJ0IEJyZWFrICovCisjZGVmaW5lIExDUl9QU0IJCQkJMHg4MAkgIC8qIFBhcml0eSBTdHVmZiBCaXQgKi8KKyNkZWZpbmUgTENSX0RMQUIJCQkJMHg4MCAgLyogVUFSVCAxNjU1MCBEaXZpc29yIExhdGNoIEFzc2VzcyAqLworCisjZGVmaW5lIExTUl9GSUZPRQkJKDEgPDwgNykJLyogRklGTyBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgTFNSX1RFTVQJCQkoMSA8PCA2KQkvKiBUcmFuc21pdHRlciBFbXB0eSAqLworI2RlZmluZSBMU1JfVERSUQkJCSgxIDw8IDUpCS8qIFRyYW5zbWl0IERhdGEgUmVxdWVzdCAqLworI2RlZmluZSBMU1JfQkkJCQkoMSA8PCA0KQkvKiBCcmVhayBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTFNSX0ZFCQkJKDEgPDwgMykJLyogRnJhbWluZyBFcnJvciAqLworI2RlZmluZSBMU1JfUEUJCQkoMSA8PCAyKQkvKiBQYXJpdHkgRXJyb3IgKi8KKyNkZWZpbmUgTFNSX09FCQkJKDEgPDwgMSkJLyogT3ZlcnJ1biBFcnJvciAqLworI2RlZmluZSBMU1JfRFIJCQkoMSA8PCAwKQkvKiBEYXRhIFJlYWR5ICovCisKKworI2RlZmluZSBJRVJfRE1BRQkJCSgxIDw8IDcpCS8qIERNQSBSZXF1ZXN0cyBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX1VVRQkJCSgxIDw8IDYpCS8qIFVBUlQgVW5pdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX05SWkUJCQkoMSA8PCA1KQkvKiBOUlogY29kaW5nIEVuYWJsZSAqLworI2RlZmluZSBJRVJfUlRJT0UJCQkoMSA8PCA0KQkvKiBSZWNlaXZlciBUaW1lIE91dCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIElFUl9NSUUJCQkoMSA8PCAzKQkvKiBNb2RlbSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIElFUl9STFNFCQkJKDEgPDwgMikJLyogUmVjZWl2ZXIgTGluZSBTdGF0dXMgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBJRVJfVElFCQkJKDEgPDwgMSkJLyogVHJhbnNtaXQgRGF0YSByZXF1ZXN0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgSUVSX1JBVklFCQkJKDEgPDwgMCkJLyogUmVjZWl2ZXIgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0IEVuYWJsZSAqLworCisjZGVmaW5lIElJUl9GSUZPRVMxCQkoMSA8PCA3KQkvKiBGSUZPIE1vZGUgRW5hYmxlIFN0YXR1cyAqLworI2RlZmluZSBJSVJfRklGT0VTMAkJKDEgPDwgNikJLyogRklGTyBNb2RlIEVuYWJsZSBTdGF0dXMgKi8KKyNkZWZpbmUgSUlSX1RPRAkJCSgxIDw8IDMpCS8qIFRpbWUgT3V0IERldGVjdGVkICovCisjZGVmaW5lIElJUl9JSUQyCQkJKDEgPDwgMikJLyogSW50ZXJydXB0IFNvdXJjZSBFbmNvZGVkICovCisjZGVmaW5lIElJUl9JSUQxCQkJKDEgPDwgMSkJLyogSW50ZXJydXB0IFNvdXJjZSBFbmNvZGVkICovCisjZGVmaW5lIElJUl9JUAkJCQkoMSA8PCAwKQkvKiBJbnRlcnJ1cHQgUGVuZGluZyAoYWN0aXZlIGxvdykgKi8KKworLyogVUFSVCAxNjU1MCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkNSX0ZJRk9FTgkJCTB4MDEKKyNkZWZpbmUgRkNSX1JDVlJSRVMJCQkweDAyCisjZGVmaW5lIEZDUl9YTUlUUkVTCQkJMHgwNAorCisvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisvLyBVQVJUIDE2NTUwCisjZGVmaW5lIElFUl9SWFRICQkJMHgwMQkvLyBFbmFibGUgUmVjZWl2ZWQgRGF0YSBBdmFpbGFibGUgSW50ZXJydXB0CisjZGVmaW5lIElFUl9UWFRICQkJMHgwMgkvLyBFbmFibGUgVHJhbnNtaXR0ZXIgRW1wdHkgSW50ZXJydXB0CisKK3ZvaWQgc2VyaWFsX3NldGJyZyAodm9pZCkKK3sKKwlpbnQgYmF1ZHJhdGUgPSAxMTUyMDA7CisJdW5zaWduZWQgaW50IGRpdjsKKwl1bnNpZ25lZCBpbnQgY2xrID0gMjAwMDAwMDAwOworI2lmZGVmIENPTkZJR19VQVJUMAorCVBVQVJUMTY1NTBSRUdTIHVhcnQgPSAoUFVBUlQxNjU1MFJFR1MpIENPTUNFUlRPX1VBUlQwX0JBU0U7CisJUFVBUlQxNjU1MERMUkVHUyB1YXJ0X2RsID0gKFBVQVJUMTY1NTBETFJFR1MpIENPTUNFUlRPX1VBUlQwX0JBU0U7CisjZWxzZQorCVBVQVJUMTY1NTBSRUdTIHVhcnQgPSAoUFVBUlQxNjU1MFJFR1MpIFVBUlQxX0JBU0VBRERSOworCVBVQVJUMTY1NTBETFJFR1MgdWFydF9kbCA9IChQVUFSVDE2NTUwRExSRUdTKSBVQVJUMV9CQVNFQUREUjsKKyNlbmRpZgorCisJZGl2ID0gKGNsayArIDggKiBiYXVkcmF0ZSkgLyAoMTYgKiBiYXVkcmF0ZSk7CisJdWFydC0+bGNyIHw9IF9fY3B1X3RvX2xlMzIoTENSX0RMQUIpOyAvLyBFbmFibGUgRGl2aXNvciBMYXRjaCBhY2Nlc3MKKwl1YXJ0X2RsLT5kbGwgPSBfX2NwdV90b19sZTMyKGRpdiAmIDB4RkYpOyAvLyBTZXQgRGl2aXNvciBMYXRjaCBMb3cKKwl1YXJ0X2RsLT5kbGggPSBfX2NwdV90b19sZTMyKChkaXYgPj4gOCkgJiAweEZGKTsgLy8gU2V0IERpdmlzb3IgTGF0Y2ggaGlnaAorCXVhcnQtPmxjciAmPSBfX2NwdV90b19sZTMyKH5MQ1JfRExBQik7IC8vIERpc2FibGUgRGl2aXNvciBMYXRjaCBhY2Nlc3MKKworfQorCitpbnQgc2VyaWFsX2luaXQgKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1VBUlQwCisJUFVBUlQxNjU1MFJFR1MgdWFydCA9IChQVUFSVDE2NTUwUkVHUykgQ09NQ0VSVE9fVUFSVDBfQkFTRTsKKyNlbHNlCisJUFVBUlQxNjU1MFJFR1MgdWFydCA9IChQVUFSVDE2NTUwUkVHUykgVUFSVDFfQkFTRUFERFI7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VQVJUMQorCUVuYWJsZVVBUlQxKCk7CisjZW5kaWYKKworCXNlcmlhbF9zZXRicmcgKCk7CisKKwl1YXJ0LT5sY3IgPSBfX2NwdV90b19sZTMyKExDUl9PTkVfU1RPUCB8IExDUl9DSEFSX0xFTl84KTsKKwl1YXJ0LT5paXJfZmNyID0gX19jcHVfdG9fbGUzMihGQ1JfWE1JVFJFUyB8IEZDUl9SQ1ZSUkVTIHwgRkNSX0ZJRk9FTik7IC8vIFJlc2V0LCBGSUZPCisJdWFydC0+aWVyID0gX19jcHVfdG9fbGUzMihJRVJfVVVFKTsJCS8qIEVuYWJsZSBGRlVBUlQgKi8KKwlyZXR1cm4gKDApOworfQorCit2b2lkIHNlcmlhbF9wdXRjIChjb25zdCBjaGFyIGMpCit7CisjaWZkZWYgQ09ORklHX1VBUlQwCisJUFVBUlQxNjU1MFJFR1MgdWFydCA9IChQVUFSVDE2NTUwUkVHUykgQ09NQ0VSVE9fVUFSVDBfQkFTRTsKKyNlbHNlCisJUFVBUlQxNjU1MFJFR1MgdWFydCA9IChQVUFSVDE2NTUwUkVHUykgVUFSVDFfQkFTRUFERFI7CisjZW5kaWYKKworCS8qIHdhaXQgZm9yIHJvb20gaW4gdGhlIHR4IEZJRk8gb24gRkZVQVJUICovCisJd2hpbGUgKCh1YXJ0LT5sc3IgJiBfX2NwdV90b19sZTMyKExTUl9URFJRKSk9PTApIDsKKwl1YXJ0LT5kYXRhID0gX19jcHVfdG9fbGUzMihjKTsKKwlpZiAoYyA9PSAnXG4nKQorCQlzZXJpYWxfcHV0YyAoJ1xyJyk7Cit9CisKK3ZvaWQgc2VyaWFsX3B1dHMgKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXNlcmlhbF9wdXRjICgqcysrKTsKKwl9Cit9CisKK2ludCBzZXJpYWxfZ2V0YyAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfVUFSVDAKKwlQVUFSVDE2NTUwUkVHUyB1YXJ0ID0gKFBVQVJUMTY1NTBSRUdTKSBDT01DRVJUT19VQVJUMF9CQVNFOworI2Vsc2UKKwlQVUFSVDE2NTUwUkVHUyB1YXJ0ID0gKFBVQVJUMTY1NTBSRUdTKSBVQVJUMV9CQVNFQUREUjsKKyNlbmRpZgorCisJd2hpbGUgKCh1YXJ0LT5sc3IgJiBfX2NwdV90b19sZTMyKExTUl9EUikpID09IDApOworCXJldHVybiAoY2hhcilfX2xlMzJfdG9fY3B1KHVhcnQtPmRhdGEgJiBfX2NwdV90b19sZTMyKDB4ZmYpKTsKK30KKworaW50IHNlcmlhbF90c3RjICh2b2lkKQoreworI2lmZGVmIENPTkZJR19VQVJUMAorCVBVQVJUMTY1NTBSRUdTIHVhcnQgPSAoUFVBUlQxNjU1MFJFR1MpIENPTUNFUlRPX1VBUlQwX0JBU0U7CisjZWxzZQorCVBVQVJUMTY1NTBSRUdTIHVhcnQgPSAoUFVBUlQxNjU1MFJFR1MpIFVBUlQxX0JBU0VBRERSOworI2VuZGlmCisKKwlyZXR1cm4gX19sZTMyX3RvX2NwdSh1YXJ0LT5sc3IgJiBfX2NwdV90b19sZTMyKExTUl9EUikpOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOS9jb21jZXJ0by9zcGkuYyBiL2NwdS9hcm1fY29ydGV4YTkvY29tY2VydG8vc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjN2ExYwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm1fY29ydGV4YTkvY29tY2VydG8vc3BpLmMKQEAgLTAsMCArMSw0NDkgQEAKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgorCisjZGVmaW5lIENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgICAgICAgMHg5MDQwMDAwMAorI2RlZmluZSBTUElfQkFTRUFERFIgICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgwOTgwMDApCisKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0NUUkxSMCAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0NUUkxSMSAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1NTSUVOUiAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX01XQ1IgICAgICAgICAgICAgICAgIDB4MEMKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1NFUiAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0JBVURSICAgICAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1RYRlRMUiAgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1JYRlRMUiAgICAgICAgICAgICAgIDB4MUMKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1RYRkxSICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1JYRkxSICAgICAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1NSICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0lNUiAgICAgICAgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0lTUiAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1JJU1IgICAgICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1RYT0lDUiAgICAgICAgICAgICAgIDB4MzgKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1JYT0lDUiAgICAgICAgICAgICAgIDB4M0MKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX1JYVUlDUiAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX01TVElDUiAgICAgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0lDUiAgICAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0RNQUNSICAgICAgICAgICAgICAgIDB4NEMKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0RNQVRETFIgICAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0RNQVJETFIgICAgICAgICAgICAgIDB4NTQKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0lEUiAgICAgICAgICAgICAgICAgIDB4NTgKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0RSICAgICAgICAgICAgICAgICAgIDB4NjAKKworLyogU1IgLSBzdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBCVVNZICAgICAgICAgICAgKDE8PDApICAvKiBTU0kgYnVzeSBmbGFnLCBzZXJpYWwgdHJhbnNmZXIgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgVEZORiAgICAgICAgICAgICgxPDwxKSAgLyogVHJhbnNtaXQgRklGTyBub3QgZnVsbCAqLworI2RlZmluZSBURkUgICAgICAgICAgICAgKDE8PDIpICAvKiBUcmFuc21pdCBGSUZPIGVtcHR5ICovCisjZGVmaW5lIFJGTkUgICAgICAgICAgICAoMTw8MykgIC8qIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgUkZGICAgICAgICAgICAgICgxPDw0KSAgLyogUmVjZWl2ZSBGSUZPIGZ1bGwgKi8KKyNkZWZpbmUgVFhFICAgICAgICAgICAgICgxPDw1KSAgLyogVHJhbnNtaXNzaW9uIGVycm9yICovCisjZGVmaW5lIERDT0wgICAgICAgICAgICAoMTw8NikgIC8qIERhdGEgY29sbGlzaW9uIGVycm9yICovCisKKy8qIEludGVycnVwdCBzdGF0dXMgYWZ0ZXIgYmVpbmcgbWFza2VkICovCisjZGVmaW5lIFRYRUlTICAgICAgICAgICAoMTw8MCkgIC8qIFRyYW5zbWl0IEZJRk8gZW1wdHkgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBUWE9JUyAgICAgICAgICAgKDE8PDEpICAvKiBUcmFuc21pdCBGSUZPIG92ZXJmbG93IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgUlhVSVMgICAgICAgICAgICgxPDwyKSAgLyogUmVjZWl2ZSBGSUZPIHVuZGVyZmxvdyBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIFJYT0lTICAgICAgICAgICAoMTw8MykgIC8qIFJlY2VpdmUgRklGTyBvdmVyZmxvdyBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIFJYRklTICAgICAgICAgICAoMTw8NCkgIC8qIFJlY2VpdmUgRklGTyBmdWxsIGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgTVNUSVMgICAgICAgICAgICgxPDw1KSAgLyogTXVsdGktTWFzdGVyIGNvbnRlbnRpb24gaW50ZXJydXB0IHN0YXR1cyAqLworCisvKiBJbnRlcnJ1cHQgc3RhdHVzIGJlZm9yZSBiZWluZyBtYXNrZWQgKi8KKyNkZWZpbmUgVFhFSVIgICAgICAgICAgICgxPDwwKSAgLyogVHJhbnNtaXQgRklGTyBlbXB0eSBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIFRYT0lSICAgICAgICAgICAoMTw8MSkgIC8qIFRyYW5zbWl0IEZJRk8gb3ZlcmZsb3cgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBSWFVJUiAgICAgICAgICAgKDE8PDIpICAvKiBSZWNlaXZlIEZJRk8gdW5kZXJmbG93IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgUlhPSVIgICAgICAgICAgICgxPDwzKSAgLyogUmVjZWl2ZSBGSUZPIG92ZXJmbG93IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgUlhGSVIgICAgICAgICAgICgxPDw0KSAgLyogUmVjZWl2ZSBGSUZPIGZ1bGwgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBNU1RJUiAgICAgICAgICAgKDE8PDUpICAvKiBNdWx0aS1NYXN0ZXIgY29udGVudGlvbiBpbnRlcnJ1cHQgc3RhdHVzICovCisKKworLyogSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFhFSU0gICAgICAgICAgICgxPDwwKSAgLyogVHJhbnNtaXQgRklGTyBlbXB0eSBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIFRYT0lNICAgICAgICAgICAoMTw8MSkgIC8qIFRyYW5zbWl0IEZJRk8gb3ZlcmZsb3cgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBSWFVJTSAgICAgICAgICAgKDE8PDIpICAvKiBSZWNlaXZlIEZJRk8gdW5kZXJmbG93IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgUlhPSU0gICAgICAgICAgICgxPDwzKSAgLyogUmVjZWl2ZSBGSUZPIG92ZXJmbG93IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgUlhGSU0gICAgICAgICAgICgxPDw0KSAgLyogUmVjZWl2ZSBGSUZPIGZ1bGwgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBNU1RJTSAgICAgICAgICAgKDE8PDUpICAvKiBNdWx0aS1NYXN0ZXIgY29udGVudGlvbiBpbnRlcnJ1cHQgc3RhdHVzICovCisKKworI2RlZmluZSBTUElfVFJBTlNGRVJfTU9ERV9XUklURV9PTkxZICAgIDB4MDEKKyNkZWZpbmUgU1BJX1RSQU5TRkVSX01PREVfUkVBRF9PTkxZICAgICAweDAyCisjZGVmaW5lIFNQSV9UUkFOU0ZFUl9NT0RFX1dSSVRFX1JFQUQgICAgMHgwMworI2RlZmluZSBTUElfVFJBTlNGRVJfTU9ERV9FRVBST01fUkVBRCAgIDB4MDQKKworI2RlZmluZSBTUElfQ1RSTFIwX1NDUE9MICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBTUElfQ1RSTFIwX1NDUEggICAgICAgICAoMSA8PCA2KQorCisjZGVmaW5lIENPTUNFUlRPX0RFRkFVTFRBWElDTEsgICAgICAgICAgMjUwMDAwMDAwIC8qIEh6ICovCisKK3Vuc2lnbmVkIGludCBzcGlfYmFzZSA9IFNQSV9CQVNFQUREUjsKKworc3RydWN0IHNwaV90cmFuc2ZlciB7CisgICAgICAgIGNvbnN0IHZvaWQgICAgICAqdHhfYnVmOworICAgICAgICB2b2lkICAgICAgICAgICAgKnJ4X2J1ZjsKKyAgICAgICAgdW5zaWduZWQgICAgICAgIGxlbjsKKyAgICAgICAgaW50ICAgICAgICAgICAgIG1vZGU7Cit9OworCisKK2ludCBkb19lZXByb21fcmVhZCh1OCBmcywgdTggKndidWYsIHUzMiAqd2xlbiwgdTggKnJidWYsIHUzMiAqbmRmKQoreworICAgICAgICB1MzIgc3IsIGRyOworICAgICAgICB1MzIgd2xlbl9ub3cgPSAwLCBybGVuX25vdyA9IDA7CisgICAgICAgIGludCByYyA9IDA7CisKKyAgICAgICAgd2hpbGUgKHdsZW5fbm93IDwgKndsZW4pIHsKKyAgICAgICAgICAgICAgICBzciA9IHJlYWRsKHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX1NSKTsKKworICAgICAgICAgICAgICAgIGlmIChzciAmIFRGTkYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3bGVuX25vdyA8ICp3bGVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRldyhjcHVfdG9fbGUxNigodTE2KSAqd2J1ZiksIHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX0RSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2J1ZisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bGVuX25vdysrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChybGVuX25vdyA8ICpuZGYpIHsKKyAgICAgICAgICAgICAgICBzciA9IHJlYWRsKHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX1NSKTsKKworICAgICAgICAgICAgICAgIGlmIChzciAmIChSRkYgfCBEQ09MKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVhZCBvdmVycnVuLCBkYXRhIGNvbGxpc2lvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzciAmIFJGTkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRyID0gcmVhZHcoc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfRFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJsZW5fbm93IDwgKm5kZikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmJ1ZiA9ICh1OCkgKGxlMTZfdG9fY3B1KGRyKSAmIDB4ZmYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYnVmKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJsZW5fbm93Kys7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCitvdXQ6CisgICAgICAgICpuZGYgPSBybGVuX25vdzsKKyAgICAgICAgKndsZW4gPSB3bGVuX25vdzsKKworICAgICAgICByZXR1cm4gcmM7Cit9CisKKworLyoqCisgKiBkb193cml0ZV9yZWFkX3RyYW5zZmVyIC0KKyAqCisgKgorICovCitpbnQgZG9fd3JpdGVfcmVhZF90cmFuc2Zlcih1OCBmcywgdTggKndidWYsIHUzMiAqd2xlbiwgdTggKnJidWYsIHUzMiAqcmxlbikKK3sKKyAgICAgICAgdTMyIHNyLCBkcjsKKyAgICAgICAgdTMyIHdsZW5fbm93ID0gMCwgcmxlbl9ub3cgPSAwOworICAgICAgICBpbnQgcmMgPSAwOworCisgICAgICAgIHdoaWxlICh3bGVuX25vdyA8ICp3bGVuKSB7CisgICAgICAgICAgICAgICAgc3IgPSByZWFkbChzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9TUik7CisKKyAgICAgICAgICAgICAgICBpZiAoc3IgJiBURk5GKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2xlbl9ub3cgPCAqd2xlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXcoY3B1X3RvX2xlMTYoKHUxNikgKndidWYpLCBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9EUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdidWYrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2xlbl9ub3crKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAocmxlbl9ub3cgPCAqcmxlbikgeworICAgICAgICAgICAgICAgIHNyID0gcmVhZGwoc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfU1IpOworCisgICAgICAgICAgICAgICAgaWYgKHNyICYgKFJGRiB8IERDT0wpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkIG92ZXJydW4sIGRhdGEgY29sbGlzaW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIlczogc3I9MHgleDogUmVhZCBPdmVycnVuLlxuIiwgX19mdW5jX18sIHNyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc3IgJiBSRk5FKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkciA9IHJlYWR3KHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX0RSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChybGVuX25vdyA8ICpybGVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyYnVmID0gKHU4KSAobGUxNl90b19jcHUoZHIpICYgMHhmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJidWYrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmxlbl9ub3crKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiVzOiBSZWFkIE92ZXJmbG93LlxuIiwgX19mdW5jX18pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWFkIG92ZXJmbG93ICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIG91dDoKKyAgICAgICAgKnJsZW4gPSBybGVuX25vdzsKKyAgICAgICAgKndsZW4gPSB3bGVuX25vdzsKKworICAgICAgICByZXR1cm4gcmM7Cit9CisKKworLyoqCisgKiBkb193cml0ZV9vbmx5X3RyYW5zZmVyOCAtCisgKgorICoKKyAqLworaW50IGRvX3dyaXRlX29ubHlfdHJhbnNmZXI4KHU4ICpidWYsIHUzMiAqbGVuKQoreworICAgICAgICB1MzIgbGVuX25vdzsKKyAgICAgICAgaW50IHJjID0gMDsKKyAgICAgICAgdTMyIHRtcCA9ICpsZW47CisgICAgICAgIHUzMiBkciA9IHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX0RSOworICAgICAgICB1MzIgdHhmbHIgPSBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9UWEZMUjsKKworICAgICAgICB3aGlsZSAodG1wKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuX25vdyA9IDggLSByZWFkbCh0eGZscik7CisgICAgICAgICAgICAgICAgaWYgKGxlbl9ub3cgPiB0bXApCisgICAgICAgICAgICAgICAgICAgICAgICBsZW5fbm93ID0gdG1wOworCisgICAgICAgICAgICAgICAgdG1wIC09IGxlbl9ub3c7CisKKyAgICAgICAgICAgICAgICAvKiB3YXJtLXVwIHdyaXRlIGZpZm8gdG8gYXZvaWQgdW5kZXJydW5zICovCisgICAgICAgICAgICAgICAgd2hpbGUgKGxlbl9ub3ctLSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXcoY3B1X3RvX2xlMTYoKHUxNikgKmJ1ZisrKSwgZHIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICpsZW4gLT0gdG1wOworCisgICAgICAgIHJldHVybiByYzsKK30KKworLyoqCisgKiBkb193cml0ZV9vbmx5X3RyYW5zZmVyIC0KKyAqCisgKgorICovCitpbnQgZG9fd3JpdGVfb25seV90cmFuc2ZlcjE2KHUxNiAqYnVmLCB1MzIgKmxlbikKK3sKKyAgICAgICAgdTMyIGxlbl9ub3c7CisgICAgICAgIGludCByYyA9IDA7CisgICAgICAgIHUzMiB0bXAgPSAqbGVuOworICAgICAgICB1MzIgZHIgPSBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9EUjsKKyAgICAgICAgdTMyIHR4ZmxyID0gc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfVFhGTFI7CisKKyAgICAgICAgd2hpbGUgKHRtcCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGxlbl9ub3cgPSA4IC0gcmVhZGwodHhmbHIpOworICAgICAgICAgICAgICAgIGlmIChsZW5fbm93ID4gdG1wKQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuX25vdyA9IHRtcDsKKworICAgICAgICAgICAgICAgIHRtcCAtPSBsZW5fbm93OworCisgICAgICAgICAgICAgICAgLyogd2FybS11cCB3cml0ZSBmaWZvIHRvIGF2b2lkIHVuZGVycnVucyAqLworICAgICAgICAgICAgICAgIHdoaWxlIChsZW5fbm93LS0pCisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXcoY3B1X3RvX2xlMTYoKmJ1ZisrKSwgZHIpOworICAgICAgICB9CisKKyAgICAgICAgKmxlbiAtPSB0bXA7CisKKyAgICAgICAgcmV0dXJuIHJjOworfQorCisKKy8qKgorICogZG9fcmVhZF9vbmx5X3RyYW5zZmVyIC0KKyAqCisgKgorICovCitpbnQgZG9fcmVhZF9vbmx5X3RyYW5zZmVyOCh1OCAqYnVmLCB1MzIgKmxlbikKK3sKKyAgICAgICAgdTMyIGxlbl9ub3c7CisgICAgICAgIGludCByYyA9IDA7CisgICAgICAgIHUzMiB0bXAgPSAqbGVuOworICAgICAgICB1MzIgZHIgPSBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9EUjsKKyAgICAgICAgdTMyIHJ4ZmxyID0gc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfUlhGTFI7CisKKyAgICAgICAgLyogc3RhcnQgdGhlIHNlcmlhbCBjbG9jayAqLworICAgICAgICB3cml0ZXcoMCwgZHIpOworCisgICAgICAgIHdoaWxlICh0bXApCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsZW5fbm93ID0gcmVhZGwocnhmbHIpOworICAgICAgICAgICAgICAgIGlmIChsZW5fbm93ID4gdG1wKQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuX25vdyA9IHRtcDsKKworICAgICAgICAgICAgICAgIHRtcCAtPSBsZW5fbm93OworCisgICAgICAgICAgICAgICAgd2hpbGUgKGxlbl9ub3ctLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZiA9ICh1OCkgKGxlMTZfdG9fY3B1KHJlYWR3KGRyKSkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICpsZW4gLT0gdG1wOworCisgICAgICAgIHJldHVybiByYzsKK30KKworLyoqCisgKiBkb19yZWFkX29ubHlfdHJhbnNmZXIgLQorICoKKyAqCisgKi8KK2ludCBkb19yZWFkX29ubHlfdHJhbnNmZXIxNih1MTYgKmJ1ZiwgdTMyICpsZW4pCit7CisgICAgICAgIHUzMiBsZW5fbm93OworICAgICAgICBpbnQgcmMgPSAwOworICAgICAgICB1MzIgdG1wID0gKmxlbjsKKyAgICAgICAgdTMyIGRyID0gc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfRFI7CisgICAgICAgIHUzMiByeGZsciA9IHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX1JYRkxSOworCisgICAgICAgIC8qIHN0YXJ0IHRoZSBzZXJpYWwgY2xvY2sgKi8KKyAgICAgICAgd3JpdGV3KDAsIGRyKTsKKworICAgICAgICB3aGlsZSAodG1wKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuX25vdyA9IHJlYWRsKHJ4ZmxyKTsKKyAgICAgICAgICAgICAgICBpZiAobGVuX25vdyA+IHRtcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbl9ub3cgPSB0bXA7CisKKyAgICAgICAgICAgICAgICB0bXAgLT0gbGVuX25vdzsKKworICAgICAgICAgICAgICAgIHdoaWxlIChsZW5fbm93LS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpidWYgPSBsZTE2X3RvX2NwdShyZWFkdyhkcikpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVmKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKmxlbiAtPSB0bXA7CisKKyAgICAgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGMya19zcGlfdHJhbnNmZXIodTggY2hpcF9zZWxlY3Qsc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKK3sKKwl1bnNpZ25lZCBpbnQgIG9wID0gdC0+bW9kZSAmIDB4ZmY7IAorICAgICAgICB1MzIgY3RybHIwID0gMDsKKyAgICAgICAgdTMyIGJhdWRyICA9IDA7CisgICAgICAgIHUzMiBzZXIgICAgPSAwOworCXU4IGJpdHNfcGVyX3dvcmQgPSA4OworCXUzMiBtYXhfc3BlZWRfaHogPSA0MDAwMDAwOworICAgICAgICB1MzIgaHo7CisJdTggKnR4YnVmOworCXU4ICpyeGJ1ZjsKKwlpbnQgc3BpX3VkZWxheTsKKworCWN0cmxyMCB8PSBTUElfQ1RSTFIwX1NDUE9MOworCWN0cmxyMCB8PSBTUElfQ1RSTFIwX1NDUEg7CisJY3RybHIwIHw9IChiaXRzX3Blcl93b3JkIC0gMSkgJiAweGY7CisKKwloeiA9IENPTUNFUlRPX0RFRkFVTFRBWElDTEs7CisJYmF1ZHIgPSBoeiAvIG1heF9zcGVlZF9oejsKKwlzZXIgPSAoMSA8PCBjaGlwX3NlbGVjdCkgOworCisJc3BpX3VkZWxheSA9IDEgKyAoKDEwMDAwMDAgKiBiaXRzX3Blcl93b3JkKSAvIG1heF9zcGVlZF9oeik7CisKKyAgICAgICAgd2hpbGUocmVhZGwoc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfU1IpICYgQlVTWSk7CisKKwl3cml0ZWwoMCwgc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfU1NJRU5SKTsKKworCXR4YnVmID0gdC0+dHhfYnVmOworCXJ4YnVmID0gdC0+cnhfYnVmOworCisJc3dpdGNoKG9wKSB7CisJCWNhc2UgU1BJX1RSQU5TRkVSX01PREVfV1JJVEVfT05MWToKKworCQkJY3RybHIwIHw9ICgweDAwMDEgPDwgOCk7CisJCQl3cml0ZWwoY3RybHIwLCBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9DVFJMUjApOworCQkJd3JpdGVsKGJhdWRyLCBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9CQVVEUik7CisJCQl3cml0ZWwoc2VyLCBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9TRVIpOworCQkJd3JpdGVsKDgsIHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX1JYRlRMUik7CisJCQl3cml0ZWwoMCwgc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfVFhGVExSKTsKKwkJCXdyaXRlbCgwLCBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9JTVIpOworCQkJd3JpdGVsKDEsIHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX1NTSUVOUik7CisKKwkJCWlmIChiaXRzX3Blcl93b3JkIDw9IDgpCisJCQkJZG9fd3JpdGVfb25seV90cmFuc2ZlcjgodHhidWYsICZ0LT5sZW4pOworCQkJZWxzZQorCQkJCWRvX3dyaXRlX29ubHlfdHJhbnNmZXIxNigodTE2Kil0eGJ1ZiwgJnQtPmxlbik7CisKKwkJCWJyZWFrOworCisJCWNhc2UgU1BJX1RSQU5TRkVSX01PREVfUkVBRF9PTkxZOgorCisJCQljdHJscjAgfD0gKDB4MDAwMiA8PCA4KTsKKwkJCXdyaXRlbChjdHJscjAsIHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX0NUUkxSMCk7CisJCQl3cml0ZWwoYmF1ZHIsIHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX0JBVURSKTsKKwkJCXdyaXRlbChzZXIsIHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX1NFUik7CisJCQl3cml0ZWwoOCwgc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfUlhGVExSKTsKKwkJCXdyaXRlbCgwLCBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9UWEZUTFIpOworCQkJd3JpdGVsKDAsIHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX0lNUik7CisJCQl3cml0ZWwoMSwgc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfU1NJRU5SKTsKKworCQkJaWYgKGJpdHNfcGVyX3dvcmQgPD0gOCkKKwkJCQlkb19yZWFkX29ubHlfdHJhbnNmZXI4KHJ4YnVmLCAmdC0+bGVuKTsKKwkJCWVsc2UKKwkJCQlkb19yZWFkX29ubHlfdHJhbnNmZXIxNigodTE2ICopcnhidWYsICZ0LT5sZW4pOworCisJCQlicmVhazsKKworCQljYXNlIFNQSV9UUkFOU0ZFUl9NT0RFX1dSSVRFX1JFQUQ6CisKKwkJCWN0cmxyMCB8PSAoMHgwMDAwIDw8IDgpOworCQkJd3JpdGVsKGN0cmxyMCwgc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfQ1RSTFIwKTsKKwkJCXdyaXRlbChiYXVkciwgc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfQkFVRFIpOworCQkJd3JpdGVsKHNlciwgc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfU0VSKTsKKwkJCXdyaXRlbCg4LCBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9SWEZUTFIpOworCQkJd3JpdGVsKDAsIHNwaV9iYXNlICsgQ09NQ0VSVE9fU1BJX1RYRlRMUik7CisJCQl3cml0ZWwoMCwgc3BpX2Jhc2UgKyBDT01DRVJUT19TUElfSU1SKTsKKwkJCXdyaXRlbCgxLCBzcGlfYmFzZSArIENPTUNFUlRPX1NQSV9TU0lFTlIpOworCisJCQlkb193cml0ZV9yZWFkX3RyYW5zZmVyKGJpdHNfcGVyX3dvcmQsIHR4YnVmLCAmdC0+bGVuLCByeGJ1ZiwgJnQtPmxlbik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIlRyYW5zZmVyIG1vZGUgbm90IHN1cHBvcnRlZC5cbiIpOworCQkJCXJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgLyogZGVhc3NlcnQgdGhlIGNoaXAgc2VsZWN0IGF0IGxlYXN0IGZvciB0aGlzIGxvbmcgKi8KKyAgICAgICAgICAgICAgICB1ZGVsYXkgKHNwaV91ZGVsYXkpOworCisgICAgICAgIHJldHVybiAwOworCisKK30KKworCitpbnQgYzJrX3NwaV93cml0ZSh1OCBjcywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworICAgICAgICBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICAgICB0ID0geworICAgICAgICAgICAgICAgICAgICAgICAgLnR4X2J1ZiAgICAgICAgID0gYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgLmxlbiAgICAgICAgICAgID0gbGVuLAorCQkJLm1vZGUJCT0gU1BJX1RSQU5TRkVSX01PREVfV1JJVEVfT05MWSwKKyAgICAgICAgICAgICAgICB9OworCisJYzJrX3NwaV90cmFuc2ZlcihjcywgJnQpOworfQorCitpbnQgYzJrX3NwaV9yZWFkKHU4IGNzLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisgICAgICAgIHN0cnVjdCBzcGlfdHJhbnNmZXIgICAgIHQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAucnhfYnVmICAgICAgICAgPSBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAubGVuICAgICAgICAgICAgPSBsZW4sCisJCQkubW9kZQkJPSBTUElfVFJBTlNGRVJfTU9ERV9SRUFEX09OTFksCisgICAgICAgICAgICAgICAgfTsKKworCWMya19zcGlfdHJhbnNmZXIoY3MsICZ0KTsKK30KKwpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOS9jb21jZXJ0by96ZHMuYyBiL2NwdS9hcm1fY29ydGV4YTkvY29tY2VydG8vemRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwMTg0OQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm1fY29ydGV4YTkvY29tY2VydG8vemRzLmMKQEAgLTAsMCArMSwxODIgQEAKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvX2MyMDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbGtjb3JlX2MyMDAwLmg+CisKKyNkZWZpbmUgVERNTlRHX1JFR19SU1QgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgRlNZTkNfRkFMTF9FREdFICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTlRHX0RJVl9SU1RfTiAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgTlRHX0VOICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBURE1OVEdfQUREUl9TUEFDRV9CQVNFQUREUiAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgyODApCisjZGVmaW5lIFRETV9OVEdfQ0xLX0NUUkwgICAgICAgIChURE1OVEdfQUREUl9TUEFDRV9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIFRETV9OVEdfSU5DUiAgICAgICAgICAgIChURE1OVEdfQUREUl9TUEFDRV9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIFRETV9GU1lOQ19HRU5fQ1RSTCAgICAgIChURE1OVEdfQUREUl9TUEFDRV9CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIFRETV9GU1lOQ19MT1cgICAgICAgICAgIChURE1OVEdfQUREUl9TUEFDRV9CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIFRETV9GU1lOQ19ISUdIICAgICAgICAgIChURE1OVEdfQUREUl9TUEFDRV9CQVNFQUREUiArIDB4MTApCisKKyNkZWZpbmUgVERNTlRHX0RFRkFVTFRfUkVGX0NMSyA1MDAwMDAwMDAKKworLyogVERNIERpdmlkZXIgdmFsdWUgdG8gMjQgKi8KKyNkZWZpbmUgTlRHX1RETV9DTEtfRElWIDI0CisKKworc3RydWN0IGNvbWNlcnRvX3RkbV9kYXRhIHsKKyAgICAgICAgdTggZnNvdXRwdXQ7IC8qIEdlbmVyaWMgUGFkIENvbnRyb2wgYW5kIFZlcnNpb24gSUQgUmVnaXN0ZXJbMl0gKi8KKyAgICAgICAgdTggZnNwb2xhcml0eTsgLyogIDI4IEZTWU5DX0ZBTEwoUklTRSlfRURHRSAqLworICAgICAgICB1MTYgZnNod2lkdGg7IC8qIEhpZ2hfUGhhc2VfV2lkdGhbMTA6MF0gKi8KKyAgICAgICAgdTE2IGZzbHdpZHRoOyAvKiBMb3dfUGhhc2VfV2lkdGhbMjY6MTZdXSAqLworICAgICAgICB1MzIgY2xvY2toejsgLyogSU5DX1ZBTFVFWzI5OjBdIEFjY29yZGluZyB0byB0aGUgZGVzaXJlZCBURE0gY2xvY2sgb3V0cHV0IGZyZXF1ZW5jeSwgdGhpcyBmaWVsZCBzaG91bGQgYmUgY29uZmlndXJlZCAqLworICAgICAgICB1OCBjbG9ja291dDsgLyogSU8gQ29udHJvbCBSZWdpc3RlclsyMV0gIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGNvbnRyb2wgc2VsZWN0aW9uICBJTyBDb250cm9sIFJlZ2lzdGVyWzIwXSBwYWRzIGFyZSBpbnB1dCAob3V0cHV0KSAqLworICAgICAgICB1OCB0ZG1tdXg7CisgICAgICAgIHUzMiB0ZG1jazsKKyAgICAgICAgdTMyIHRkbWZzOworICAgICAgICB1MzIgdGRtZHg7CisgICAgICAgIHUzMiB0ZG1kcjsKK307CisKKy8vTGVnZXJpdHkKK3N0YXRpYyBzdHJ1Y3QgY29tY2VydG9fdGRtX2RhdGEgY29tY2VydG9fdGRtX3BkYXRhID0geworICAgICAgICAuZnNvdXRwdXQgPSAxLCAvKiBHZW5lcmljIFBhZCBDb250cm9sIGFuZCBWZXJzaW9uIElEIFJlZ2lzdGVyWzJdICovCisgICAgICAgIC5mc3BvbGFyaXR5ID0gMCwgLyogMjggRlNZTkNfRkFMTChSSVNFKV9FREdFICovCisgICAgICAgIC5mc2h3aWR0aCA9IDEsIC8qIEhpZ2hfUGhhc2VfV2lkdGhbMTA6MF0gKi8KKyAgICAgICAgLmZzbHdpZHRoID0gMHhGRiwgLyogTG93X1BoYXNlX1dpZHRoWzEwOjBdICovCisgICAgICAgIC5jbG9ja2h6ID0gMjA0ODAwMCwgLyogSU5DX1ZBTFVFWzI5OjBdIEFjY29yZGluZyB0byB0aGUgZGVzaXJlZCBURE0gY2xvY2sgb3V0cHV0IGZyZXF1ZW5jeSwgdGhpcyBmaWVsZCBzaG91bGQgYmUgY29uZmlndXJlZCAqLworICAgICAgICAuY2xvY2tvdXQgPSAxLCAvKiAwIC0+IHNldCBiaXQgMjEsIGNsZWFyIGJpdCAyMCBpbiBDT01DRVJUT19HUElPX0lPQ1RSTF9SRUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvZnR3YXJlIGNvbnRyb2wsIGNsb2NrIGlucHV0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+IHNldCBiaXQgMjEgYW5kIDIwIGluIENPTUNFUlRPX0dQSU9fSU9DVFJMX1JFRworICAgICAgICAgICAgICAgICAgICAgICAgICAoc29mdHdhcmUgY29udHJvbCwgY2xvY2sgb3V0cHV0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0+IGNsZWFyIGJpdCAyMSBpbiBDT01DRVJUT19HUElPX0lPQ1RSTF9SRUcgKGhhcmR3YXJlIGNvbnRyb2wpICovCisgICAgICAgICAgICAgICAgLyogVERNIGludGVyZmFjZSBNdXhpbmc6MHgwIC0gVERNIGJsb2NrLCAweDEgLSBaRFMgYmxvY2ssCisgICAgICAgICAgICAgICAgMHgyIC0gR1BJT1s2Mzo2MF0gc2lnbmFscyBhbmQgMHgzIC0gTVNJRiBibG9jayBpcyBzZWxlY3RlZCAqLworICAgICAgICAudGRtbXV4ID0gMHgxLAorfTsKKworc3RhdGljIHZvaWQgZnN5bmNfb3V0cHV0X3NldCh1bnNpZ25lZCBpbnQgZnNvdXRwdXQpCit7CisgICAgICAgIGlmIChmc291dHB1dCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdTMyKilDT01DRVJUT19HUElPX1RETV9NVVggPSAoKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1RETV9NVVgpIHwgKDEgPDwgMCkpOworICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdTMyKilURE1fRlNZTkNfR0VOX0NUUkwgPSAoKih2b2xhdGlsZSB1MzIqKShURE1fRlNZTkNfR0VOX0NUUkwpIHwgKDEgPDwgMCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdTMyKilDT01DRVJUT19HUElPX1RETV9NVVggPSAoKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX1RETV9NVVgpICYgfigxIDw8IDApKTsKKyAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHUzMiopVERNX0ZTWU5DX0dFTl9DVFJMID0gKCoodm9sYXRpbGUgdTMyKikoVERNX0ZTWU5DX0dFTl9DVFJMKSAmIH4oMSA8PCAwKSk7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgZnN5bmNfcG9sYXJpdHlfc2V0KHVuc2lnbmVkIGludCBmc3BvbGFyaXR5KQoreworICAgICAgICAvKiAyOCBGU1lOQ19GQUxMKFJJU0UpX0VER0UgKi8KKyAgICAgICAgaWYgKGZzcG9sYXJpdHkpCisgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1MzIqKVRETV9GU1lOQ19HRU5fQ1RSTCA9ICgqKHZvbGF0aWxlIHUzMiopKFRETV9GU1lOQ19HRU5fQ1RSTCkgfCBGU1lOQ19GQUxMX0VER0UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1MzIqKVRETV9GU1lOQ19HRU5fQ1RSTCA9ICgqKHZvbGF0aWxlIHUzMiopKFRETV9GU1lOQ19HRU5fQ1RSTCkgJiB+RlNZTkNfRkFMTF9FREdFKTsKK30KKworc3RhdGljIHZvaWQgZnN5bmNfbHBoYXNlX3NldCh1MzIgZnNsd2lkdGgpCit7CisgICAgICAgIC8qIExvd19QaGFzZV9XaWR0aCA3ZmYtIG1heGltdW0gKi8KKyAgICAgICAgaWYgKGZzbHdpZHRoID4gMHg3RkYpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzOiBMb3cgUGhhc2Ugd2lkdGggdmFsdWUgaXMgb3V0IG9mIHJhbmdlICUjeCA+IDB4N0ZGIiwgX19mdW5jX18sIGZzbHdpZHRoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAqKHZvbGF0aWxlIHUzMiopVERNX0ZTWU5DX0xPVyA9IGZzbHdpZHRoOworfQorCitzdGF0aWMgdm9pZCBmc3luY19ocGhhc2Vfc2V0KHUzMiBmc2h3aWR0aCkKK3sKKyAgICAgICAgLyogSGlnaF9QaGFzZV9XaWR0aCA3ZmYtIG1heGltdW0gKi8KKyAgICAgICAgaWYgKGZzaHdpZHRoID4gMHg3RkYpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzOiBIaWdoIFBoYXNlIHdpZHRoIHZhbHVlIGlzIG91dCBvZiByYW5nZSAlI3ggPiAweDdGRiIsIF9fZnVuY19fLCBmc2h3aWR0aCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgKih2b2xhdGlsZSB1MzIqKVRETV9GU1lOQ19ISUdIID0gZnNod2lkdGg7Cit9CisKK3N0YXRpYyB2b2lkIGNsb2NrX2ZyZXF1ZW5jeV9zZXQodW5zaWduZWQgbG9uZyBjbG9ja2h6KQoreworICAgICAgICAvKiBudGdfaW5jciA9IDB4MTkyQTczNzEgZm9yIDQ5LjE1MiBNSHogKi8KKyAgICAgICAgKih2b2xhdGlsZSB1MzIqKVRETV9OVEdfSU5DUiA9IDB4MTkyQTczNzE7Cit9CisKK3N0YXRpYyB2b2lkIGNsb2NrX291dHB1dF9zZXQodW5zaWduZWQgbG9uZyBjbG9ja291dCkKK3sKKyAgICAgICAgc3dpdGNoIChjbG9ja291dCkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1MzIqKUNPTUNFUlRPX0dQSU9fQk9PVFNUUkFQX09WRVJSSURFID0gKCgweDIgPDwgMTIpIHwgKCoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19CT09UU1RSQVBfT1ZFUlJJREUpICYgfigweDMgPDwgMTIpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHUzMiopQ09NQ0VSVE9fR1BJT19CT09UU1RSQVBfT1ZFUlJJREUgPSAoKDB4MyA8PCAxMikgfCAoKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX0JPT1RTVFJBUF9PVkVSUklERSkgJiB+KDB4MyA8PCAxMikpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdTMyKilDT01DRVJUT19HUElPX0JPT1RTVFJBUF9PVkVSUklERSA9ICgoMHgwIDw8IDEyKSB8ICgqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fQk9PVFNUUkFQX09WRVJSSURFKSAmIH4oMHgzIDw8IDEyKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHByaW50ZigiJXM6IFVua25vd24gY2xvY2sgb3V0cHV0IHZhbHVlXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdGRtX211eF9zZXQodTMyIHRkbW11eCkKK3sKKyAgICAgICAgc3dpdGNoICh0ZG1tdXgpeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgLy8gVERNIGJsb2NrIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1MzIqKUNPTUNFUlRPX0dQSU9fTUlTQ19QSU5fU0VMRUNUX1JFRyA9ICgoMHgwIDw8IDQpIHwgKCoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19NSVNDX1BJTl9TRUxFQ1RfUkVHKSAmIH4oMHgzIDw8IDQpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIC8vIFpEUyAoWmFybGluaykgYmxvY2sgc2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHUzMiopQ09NQ0VSVE9fR1BJT19NSVNDX1BJTl9TRUxFQ1RfUkVHID0gKCgweDEgPDwgNCkgfCAoKih2b2xhdGlsZSB1MzIqKShDT01DRVJUT19HUElPX01JU0NfUElOX1NFTEVDVF9SRUcpICYgfigweDMgPDwgNCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgLy8gR1BJT1s2Mzo2MF0gc2lnbmFscyBzZWxlY3RlZAorICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdTMyKilDT01DRVJUT19HUElPX01JU0NfUElOX1NFTEVDVF9SRUcgPSAoKDB4MiA8PCA0KSB8ICgqKHZvbGF0aWxlIHUzMiopKENPTUNFUlRPX0dQSU9fTUlTQ19QSU5fU0VMRUNUX1JFRykgJiB+KDB4MyA8PCA0KSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAvLyBNU0lGIChTaUxhYnMpIHNlbGVjdGVkCisgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1MzIqKUNPTUNFUlRPX0dQSU9fTUlTQ19QSU5fU0VMRUNUX1JFRyA9ICgoMHgzIDw8IDQpIHwgKCoodm9sYXRpbGUgdTMyKikoQ09NQ0VSVE9fR1BJT19NSVNDX1BJTl9TRUxFQ1RfUkVHKSAmIH4oMHgzIDw8IDQpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzOiBVbmtub3duIFRETSBNVVggdmFsdWVcbiIsIF9fZnVuY19fKTsKKyAgICAgICAgfQorfQorCit2b2lkIGMya196ZHNfaW5pdCh2b2lkKQoreworICAgICAgICBwcmludGYoIkluaXRpYWxpemluZyBaRFMvTlRHLi5cbiIpOworCisgICAgICAgIC8vIFRha2UgVERNIE5URyBvdXQgb2YgcmVzZXQKKyAgICAgICAgKih2b2xhdGlsZSB1MzIqKVRETU5UR19SRVNFVCA9ICgqKHZvbGF0aWxlIHUzMiopKFRETU5UR19SRVNFVCkgJiB+VERNTlRHX1JFR19SU1QpOworCisJLy9QTEwyCisJKih2b2xhdGlsZSB1MzIqKVRETU5UR19SRUZfQ0xLX0NOVFJMID0gKCoodm9sYXRpbGUgdTMyKikoVERNTlRHX1JFRl9DTEtfQ05UUkwpIHwgKCgxIDw8IDIpIHwgKDEgPDwgMCkpKTsKKworICAgICAgICAvLyBOVEcgUkVGIENMSyBpcyBkZXJpdmVkIGZyb20gUExMMgorICAgICAgICAqKHZvbGF0aWxlIHUzMiopVERNTlRHX1JFRl9DTEtfRElWX0NOVFJMID0gMHgzOworICAgICAgICAqKHZvbGF0aWxlIHUzMiopVERNX05UR19DTEtfQ1RSTCA9IChOVEdfRElWX1JTVF9OIHwgTlRHX0VOKTsKKyAgICAgICAgKih2b2xhdGlsZSB1MzIqKVRETV9DTEtfQ05UUkwgPSAweDgwOyAvKiBOVEcgPSAyNCB4IFRETSAqLworCisgICAgICAgIC8qIEluaXRhbCBjb25maWd1cmF0aW9uIG9mIHRkbSBidXMgKi8KKyAgICAgICAgZnN5bmNfcG9sYXJpdHlfc2V0KGNvbWNlcnRvX3RkbV9wZGF0YS5mc3BvbGFyaXR5KTsKKyAgICAgICAgZnN5bmNfbHBoYXNlX3NldChjb21jZXJ0b190ZG1fcGRhdGEuZnNsd2lkdGgpOworICAgICAgICBmc3luY19ocGhhc2Vfc2V0KGNvbWNlcnRvX3RkbV9wZGF0YS5mc2h3aWR0aCk7CisgICAgICAgIGNsb2NrX2ZyZXF1ZW5jeV9zZXQoY29tY2VydG9fdGRtX3BkYXRhLmNsb2NraHopOworICAgICAgICBjbG9ja19vdXRwdXRfc2V0KGNvbWNlcnRvX3RkbV9wZGF0YS5jbG9ja291dCk7CisgICAgICAgIGZzeW5jX291dHB1dF9zZXQoY29tY2VydG9fdGRtX3BkYXRhLmZzb3V0cHV0KTsKKyAgICAgICAgdGRtX211eF9zZXQoY29tY2VydG9fdGRtX3BkYXRhLnRkbW11eCk7CisKKyAgICAgICAgKih2b2xhdGlsZSB1MzIqKVRETV9DTEtfQ05UUkwgPSAweDE4OyAvL3JlbW92ZSBvdXQgb2YgcmVzZXQKKworI2RlZmluZSBDT01DRVJUT19HUElPMV9PVVRQVVRfUkVHICAgICAgICAgICAgICAgICAgICAgICAoKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweGQwKSkKKyAgICAgICAgKih2b2xhdGlsZSB1MzIqKUNPTUNFUlRPX0dQSU8xX09VVFBVVF9SRUcgPSAoMHgxIDw8IDMwKTsKKworfQorCmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE5L2NvbmZpZy5tayBiL2NwdS9hcm1fY29ydGV4YTkvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ODNjZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtX2NvcnRleGE5L2NvbmZpZy5tawpAQCAtMCwwICsxLDM0IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMgorIyBHYXJ5IEplbm5lam9obiwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGdhcnlqQGRlbnguZGU+CisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCitQTEFURk9STV9SRUxGTEFHUyArPSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAtZmZpeGVkLXI4IFwKKwkJICAgICAtbXNvZnQtZmxvYXQKKworIyBNYWtlIEFSTXY1IHRvIGFsbG93IG1vcmUgY29tcGlsZXJzIHRvIHdvcmssIGV2ZW4gdGhvdWdoIGl0cyB2N2EuCisjUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcmNoPWFybXY3CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU3VwcGx5IG9wdGlvbnMgYWNjb3JkaW5nIHRvIGNvbXBpbGVyIHZlcnNpb24KKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUExBVEZPUk1fUkVMRkxBR1MgKz0kKGNhbGwgY2Mtb3B0aW9uLC1tc2hvcnQtbG9hZC1ieXRlcyxcCisJCSAgICAkKGNhbGwgY2Mtb3B0aW9uLC1tYWxpZ25tZW50LXRyYXBzLCkpCmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE5L2NwdS5jIGIvY3B1L2FybV9jb3J0ZXhhOS9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjlmN2UyCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybV9jb3J0ZXhhOS9jcHUuYwpAQCAtMCwwICsxLDkyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA4IFRleGFzIEluc3R1cm1lbnRzCisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2FyeWpAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogQ1BVIHNwZWNpZmljIGNvZGUKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3N5c3RlbV9jMjAwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NhY2hlX2MyMDAwLmg+CisjaWZuZGVmIENPTkZJR19MMl9PRkYKKyNpbmNsdWRlIDxhc20vYXJjaC9zeXNfcHJvdG8uaD4KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBjYWNoZV9mbHVzaCh2b2lkKTsKKworaW50IGNsZWFudXBfYmVmb3JlX2xpbnV4KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKyNpZiAwCisJLyoKKwkgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBqdXN0IGJlZm9yZSB3ZSBjYWxsIGxpbnV4CisJICogaXQgcHJlcGFyZXMgdGhlIHByb2Nlc3NvciBmb3IgbGludXgKKwkgKgorCSAqIHdlIHR1cm4gb2ZmIGNhY2hlcyBldGMgLi4uCisJICovCisJZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkvKiB0dXJuIG9mZiBJL0QtY2FjaGUgKi8KKwlpY2FjaGVfZGlzYWJsZSgpOworCWRjYWNoZV9kaXNhYmxlKCk7CisKKwkvKiBpbnZhbGlkYXRlIEktY2FjaGUgKi8KKwljYWNoZV9mbHVzaCgpOworCisjaWZuZGVmIENPTkZJR19MMl9PRkYKKwkvKiB0dXJuIG9mZiBMMiBjYWNoZSAqLworCWwyX2NhY2hlX2Rpc2FibGUoKTsKKwkvKiBpbnZhbGlkYXRlIEwyIGNhY2hlIGFsc28gKi8KKwl2N19mbHVzaF9kY2FjaGVfYWxsKGdldF9kZXZpY2VfdHlwZSgpKTsKKyNlbmRpZgorCWkgPSAwOworCS8qIG1lbSBiYXJyaWVyIHRvIHN5bmMgdXAgdGhpbmdzICovCisJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCI6IDoiciIoaSkpOworCisjaWZuZGVmIENPTkZJR19MMl9PRkYKKwlsMl9jYWNoZV9lbmFibGUoKTsKKyNlbmRpZgorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNhY2hlX2ZsdXNoKHZvaWQpCit7CisJYXNtICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNSwgMCI6IDoiciIgKDApKTsKK30KKworaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlkaXNhYmxlX2ludGVycnVwdHMoKTsKKwlyZXNldF9jcHUgKDApOworCXJldHVybigwKTsKK30KKwpkaWZmIC0tZ2l0IGEvY3B1L2FybV9jb3J0ZXhhOS9zdGFydC5TIGIvY3B1L2FybV9jb3J0ZXhhOS9zdGFydC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTAzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtX2NvcnRleGE5L3N0YXJ0LlMKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisgKiBhcm1ib290IC0gU3RhcnR1cCBDb2RlIGZvciBPTUFQMzUzMC9BUk0gQ29ydGV4IENQVS1jb3JlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0CVRleGFzIEluc3RydW1lbnRzIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcsO2Z2VyIDxtYWdAc3lzZ28uZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDIJQWxleCBaw7xwa2UgPGF6dUBzeXNnby5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwMglHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueC5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwMwlSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDMJS3NoaXRpaiA8a3NoaXRpakB0aS5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBTeWVkIE1vaGFtbWVkIEtoYXNpbSA8eDBraGFzaW1AdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKy5nbG9ibCBfc3RhcnQKK19zdGFydDogYglyZXNldAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0YXJ0dXAgQ29kZSAocmVzZXQgdmVjdG9yKQorICoKKyAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBtZW1vcnkhCisgKiBzZXR1cCBNZW1vcnkgYW5kIGJvYXJkIHNwZWNpZmljIGJpdHMgcHJpb3IgdG8gcmVsb2NhdGlvbi4KKyAqIHJlbG9jYXRlIGFybWJvb3QgdG8gcmFtCisgKiBzZXR1cCBzdGFjaworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitfVEVYVF9CQVNFOgorCS53b3JkCVRFWFRfQkFTRQorCisuZ2xvYmwgX2FybWJvb3Rfc3RhcnQKK19hcm1ib290X3N0YXJ0OgorCS53b3JkIF9zdGFydAorCisvKgorICogVGhlc2UgYXJlIGRlZmluZWQgaW4gdGhlIGJvYXJkLXNwZWNpZmljIGxpbmtlciBzY3JpcHQuCisgKi8KKy5nbG9ibCBfYnNzX3N0YXJ0CitfYnNzX3N0YXJ0OgorCS53b3JkIF9fYnNzX3N0YXJ0CisKKy5nbG9ibCBfYnNzX2VuZAorX2Jzc19lbmQ6CisJLndvcmQgX2VuZAorCisvKgorICogdGhlIGFjdHVhbCByZXNldCBjb2RlCisgKi8KK3Jlc2V0OgorCS8qCisJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQorCSAqLworCW1ycwlyMCwgY3BzcgorCWJpYwlyMCwgcjAsICMweDFmCisJb3JyCXIwLCByMCwgIzB4ZDMKKwltc3IJY3BzcixyMAorCisjaWZuZGVmIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKwlibAljcHVfaW5pdF9jcml0CisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorcmVsb2NhdGU6CQkJCUAgcmVsb2NhdGUgVS1Cb290IHRvIFJBTQorCWFkcglyMCwgX3N0YXJ0CQlAIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZQorCWxkcglyMSwgX1RFWFRfQkFTRQkJQCB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTQorCWNtcAlyMCwgcjEJCQlAIGRvbid0IHJlbG9jIGR1cmluZyBkZWJ1ZworCWJlcQlzdGFja19zZXR1cAorCisJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAorCWxkcglyMywgX2Jzc19zdGFydAorCXN1YglyMiwgcjMsIHIyCQlAIHIyIDwtIHNpemUgb2YgYXJtYm9vdAorCWFkZAlyMiwgcjAsIHIyCQlAIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcworCitjb3B5X2xvb3A6CQkJCUAgY29weSAzMiBieXRlcyBhdCBhIHRpbWUKKwlsZG1pYQlyMCEsIHtyMyAtIHIxMH0JCUAgY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0KKwlzdG1pYQlyMSEsIHtyMyAtIHIxMH0JCUAgY29weSB0byAgIHRhcmdldCBhZGRyZXNzIFtyMV0KKwljbXAJcjAsIHIyCQkJQCB1bnRpbCBzb3VyY2UgZW5kIGFkZHJlZWUgW3IyXQorCWJsZQljb3B5X2xvb3AKKyNlbmRpZgkvKiBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVCAqLworCisJLyogU2V0IHVwIHRoZSBzdGFjayAqLworc3RhY2tfc2V0dXA6CisJbGRyCXIwLCBfVEVYVF9CQVNFCQlAIHVwcGVyIDEyOCBLaUI6IHJlbG9jYXRlZCB1Ym9vdAorCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX01BTExPQ19MRU4gQCBtYWxsb2MgYXJlYQorCXN1YglyMCwgcjAsICNDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUgQCBiZGluZm8KKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlEgKyBDT05GSUdfU1RBQ0tTSVpFX0ZJUSkKKyNlbmRpZgorCXN1YglzcCwgcjAsICMxMgkJQCBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjaworCWFuZAlzcCwgc3AsICN+NwkJQCA4IGJ5dGUgYWxpbmdlZCBmb3IgKGxkci9zdHIpZAorCisJLyogQ2xlYXIgQlNTIChpZiBhbnkpLiBJcyBiZWxvdyB0eCAod2F0Y2ggbG9hZCBhZGRyIC0gbmVlZCBzcGFjZSkgKi8KK2NsZWFyX2JzczoKKwlsZHIJcjAsIF9ic3Nfc3RhcnQJCUAgZmluZCBzdGFydCBvZiBic3Mgc2VnbWVudAorCWxkcglyMSwgX2Jzc19lbmQJCUAgc3RvcCBoZXJlCisJbW92CXIyLCAjMHgwMDAwMDAwMAkJQCBjbGVhciB2YWx1ZQorY2xic3NfbDoKKwlzdHIJcjIsIFtyMF0JCUAgY2xlYXIgQlNTIGxvY2F0aW9uCisJY21wCXIwLCByMQkJCUAgYXJlIHdlIGF0IHRoZSBlbmQgeWV0CisJYWRkCXIwLCByMCwgIzQJCUAgaW5jcmVtZW50IGNsZWFyIGluZGV4IHBvaW50ZXIKKwlibmUJY2xic3NfbAkJCUAga2VlcCBjbGVhcmluZyB0aWxsIGF0IGVuZAorCisJbGRyCXBjLCBfc3RhcnRfYXJtYm9vdAlAIGp1bXAgdG8gQyBjb2RlCisKK19zdGFydF9hcm1ib290OiAud29yZCBzdGFydF9hcm1ib290CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ1BVX2luaXRfY3JpdGljYWwgcmVnaXN0ZXJzCisgKgorICogc2V0dXAgaW1wb3J0YW50IHJlZ2lzdGVycworICogc2V0dXAgbWVtb3J5IHRpbWluZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY3B1X2luaXRfY3JpdDoKKwkvKgorCSAqIEludmFsaWRhdGUgTDEgSS9ECisJICovCisJbW92CXIwLCAjMAkJCUAgc2V0IHVwIGZvciBNQ1IKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBUTEJzCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgaWNhY2hlCisKKwkvKgorCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKKwkgKi8KKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisJYmljCXIwLCByMCwgIzB4MDAwMDIwMDAJQCBjbGVhciBiaXRzIDEzICgtLVYtKQorCWJpYwlyMCwgcjAsICMweDAwMDAwMDA3CUAgY2xlYXIgYml0cyAyOjAgKC1DQU0pCisJb3JyCXIwLCByMCwgIzB4MDAwMDAwMDIJQCBzZXQgYml0IDEgKC0tQS0pIEFsaWduCisJb3JyCXIwLCByMCwgIzB4MDAwMDA4MDAJQCBzZXQgYml0IDEyIChaLS0tKSBCVEIKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCisKKwkvKgorCSAqIEp1bXAgdG8gYm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uLi4KKwkgKiBUaGUgTWFzayBST00gd2lsbCBoYXZlIGFscmVhZHkgaW5pdGlhbGl6ZWQKKwkgKiBiYXNpYyBtZW1vcnkuIEdvIGhlcmUgdG8gYnVtcCB1cCBjbG9jayByYXRlIGFuZCBoYW5kbGUKKwkgKiB3YWtlIHVwIGNvbmRpdGlvbnMuCisJICovCisJbW92CWlwLCBscgkJCUAgcGVyc2V2ZXJlIGxpbmsgcmVnIGFjcm9zcyBjYWxsCisJYmwJbG93bGV2ZWxfaW5pdAkJQCBnbyBzZXR1cCBwbGwsbXV4LG1lbW9yeQorCW1vdglsciwgaXAJCQlAIHJlc3RvcmUgbGluaworCW1vdglwYywgbHIJCQlAIGJhY2sgdG8gbXkgY2FsbGVyCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEludGVycnVwdCBoYW5kbGluZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK0AKK0AgSVJRIHN0YWNrIGZyYW1lLgorQAorI2RlZmluZSBTX0ZSQU1FX1NJWkUJNzIKKworI2RlZmluZSBTX09MRF9SMAk2OAorI2RlZmluZSBTX1BTUgkJNjQKKyNkZWZpbmUgU19QQwkJNjAKKyNkZWZpbmUgU19MUgkJNTYKKyNkZWZpbmUgU19TUAkJNTIKKworI2RlZmluZSBTX0lQCQk0OAorI2RlZmluZSBTX0ZQCQk0NAorI2RlZmluZSBTX1IxMAkJNDAKKyNkZWZpbmUgU19SOQkJMzYKKyNkZWZpbmUgU19SOAkJMzIKKyNkZWZpbmUgU19SNwkJMjgKKyNkZWZpbmUgU19SNgkJMjQKKyNkZWZpbmUgU19SNQkJMjAKKyNkZWZpbmUgU19SNAkJMTYKKyNkZWZpbmUgU19SMwkJMTIKKyNkZWZpbmUgU19SMgkJOAorI2RlZmluZSBTX1IxCQk0CisjZGVmaW5lIFNfUjAJCTAKKworI2RlZmluZSBNT0RFX1NWQyAweDEzCisjZGVmaW5lIElfQklUCSAweDgwCisKKy8qCisgKiB1c2UgYmFkX3NhdmVfdXNlcl9yZWdzIGZvciBhYm9ydC9wcmVmZXRjaC91bmRlZi9zd2kgLi4uCisgKiB1c2UgaXJxX3NhdmVfdXNlcl9yZWdzIC8gaXJxX3Jlc3RvcmVfdXNlcl9yZWdzIGZvciBJUlEvRklRIGhhbmRsaW5nCisgKi8KKworCS5tYWNybwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCQlAIGNhcnZlIG91dCBhIGZyYW1lIG9uIGN1cnJlbnQKKwkJCQkJCUAgdXNlciBzdGFjaworCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBTYXZlIHVzZXIgcmVnaXN0ZXJzIChub3cgaW4KKwkJCQkJCUAgc3ZjIG1vZGUpIHIwLXIxMgorCisJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAorCXN1YglyMiwgcjIsICMoQ09ORklHX1NZU19NQUxMT0NfTEVOKQorCXN1YglyMiwgcjIsICMoQ09ORklHX1NZU19HQkxfREFUQV9TSVpFICsgOCkJQCBzZXQgYmFzZSAyIHdvcmRzIGludG8gYWJvcnQKKwkJCQkJCUAgc3RhY2sKKwlsZG1pYQlyMiwge3IyIC0gcjN9CQkJQCBnZXQgdmFsdWVzIGZvciAiYWJvcnRlZCIgcGMKKwkJCQkJCUAgYW5kIGNwc3IgKGludG8gcGFybSByZWdzKQorCWFkZAlyMCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgZ3JhYiBwb2ludGVyIHRvIG9sZCBzdGFjaworCisJYWRkCXI1LCBzcCwgI1NfU1AKKwltb3YJcjEsIGxyCisJc3RtaWEJcjUsIHtyMCAtIHIzfQkJCUAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IKKwltb3YJcjAsIHNwCQkJCUAgc2F2ZSBjdXJyZW50IHN0YWNrIGludG8gcjAKKwkJCQkJCUAgKHBhcmFtIHJlZ2lzdGVyKQorCS5lbmRtCisKKwkubWFjcm8JaXJxX3NhdmVfdXNlcl9yZWdzCisJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQorCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgorCWFkZAlyOCwgc3AsICNTX1BDCQkJQCAhISBSOCBORUVEUyB0byBiZSBzYXZlZCAhIQorCQkJCQkJQCBhIHJlc2VydmVkIHN0YWNrIHNwb3Qgd291bGQKKwkJCQkJCUAgYmUgZ29vZC4KKwlzdG1kYglyOCwge3NwLCBscn1eCQkJQCBDYWxsaW5nIFNQLCBMUgorCXN0cglsciwgW3I4LCAjMF0JCQlAIFNhdmUgY2FsbGluZyBQQworCW1ycwlyNiwgc3BzcgorCXN0cglyNiwgW3I4LCAjNF0JCQlAIFNhdmUgQ1BTUgorCXN0cglyMCwgW3I4LCAjOF0JCQlAIFNhdmUgT0xEX1IwCisJbW92CXIwLCBzcAorCS5lbmRtCisKKwkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCisJbGRtaWEJc3AsIHtyMCAtIGxyfV4JCQlAIENhbGxpbmcgcjAgLSBscgorCW1vdglyMCwgcjAKKwlsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKKwlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCisJc3VicwlwYywgbHIsICM0CQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8KKwkJCQkJCUAgY3BzcgorCS5lbmRtCisKKwkubWFjcm8gZ2V0X2JhZF9zdGFjaworCWxkcglyMTMsIF9hcm1ib290X3N0YXJ0CQlAIHNldHVwIG91ciBtb2RlIHN0YWNrIChlbnRlcgorCQkJCQkJQCBpbiBiYW5rZWQgbW9kZSkKKwlzdWIJcjEzLCByMTMsICMoQ09ORklHX1NZU19NQUxMT0NfTEVOKQlAIG1vdmUgcGFzdCBtYWxsb2MgcG9vbAorCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUgKyA4KSBAIG1vdmUgdG8gcmVzZXJ2ZWQgYSBjb3VwbGUKKwkJCQkJCUAgc3BvdHMgZm9yIGFib3J0IHN0YWNrCisKKwlzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwCisJCQkJCQlAIG9mIHNhdmVkIHN0YWNrCisJbXJzCWxyLCBzcHNyCQkJQCBnZXQgdGhlIHNwc3IKKwlzdHIJbHIsIFtyMTMsICM0XQkJCUAgc2F2ZSBzcHNyIGluIHBvc2l0aW9uIDEgb2YKKwkJCQkJCUAgc2F2ZWQgc3RhY2sKKworCW1vdglyMTMsICNNT0RFX1NWQwkJCUAgcHJlcGFyZSBTVkMtTW9kZQorCUAgbXNyCXNwc3JfYywgcjEzCisJbXNyCXNwc3IsIHIxMwkJCUAgc3dpdGNoIG1vZGVzLCBtYWtlIHN1cmUKKwkJCQkJCUAgbW92ZXMgd2lsbCBleGVjdXRlCisJbW92CWxyLCBwYwkJCQlAIGNhcHR1cmUgcmV0dXJuIHBjCisJbW92cwlwYywgbHIJCQkJQCBqdW1wIHRvIG5leHQgaW5zdHJ1Y3Rpb24gJgorCQkJCQkJQCBzd2l0Y2ggbW9kZXMuCisJLmVuZG0KKworCS5tYWNybyBnZXRfYmFkX3N0YWNrX3N3aQorCXN1YglyMTMsIHIxMywgIzQJCQlAIHNwYWNlIG9uIGN1cnJlbnQgc3RhY2sgZm9yCisJCQkJCQlAIHNjcmF0Y2ggcmVnLgorCXN0cglyMCwgW3IxM10JCQlAIHNhdmUgUjAncyB2YWx1ZS4KKwlsZHIJcjAsIF9hcm1ib290X3N0YXJ0CQlAIGdldCBkYXRhIHJlZ2lvbnMgc3RhcnQKKwlzdWIJcjAsIHIwLCAjKENPTkZJR19TWVNfTUFMTE9DX0xFTikJQCBtb3ZlIHBhc3QgbWFsbG9jIHBvb2wKKwlzdWIJcjAsIHIwLCAjKENPTkZJR19TWVNfR0JMX0RBVEFfU0laRSArIDgpCUAgbW92ZSBwYXN0IGdibCBhbmQgYSBjb3VwbGUKKwkJCQkJCUAgc3BvdHMgZm9yIGFib3J0IHN0YWNrCisJc3RyCWxyLCBbcjBdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwCisJCQkJCQlAIG9mIHNhdmVkIHN0YWNrCisJbXJzCXIwLCBzcHNyCQkJQCBnZXQgdGhlIHNwc3IKKwlzdHIJbHIsIFtyMCwgIzRdCQkJQCBzYXZlIHNwc3IgaW4gcG9zaXRpb24gMSBvZgorCQkJCQkJQCBzYXZlZCBzdGFjaworCWxkcglyMCwgW3IxM10JCQlAIHJlc3RvcmUgcjAKKwlhZGQJcjEzLCByMTMsICM0CQkJQCBwb3Agc3RhY2sgZW50cnkKKwkuZW5kbQorCisJLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjaworCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCisJLmVuZG0KKworCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKKwlsZHIJc3AsIEZJUV9TVEFDS19TVEFSVAorCS5lbmRtCisKKy8qCisgKiBleGNlcHRpb24gaGFuZGxlcnMKKyAqLworCS5hbGlnbgk1Cit1bmRlZmluZWRfaW5zdHJ1Y3Rpb246CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX3VuZGVmaW5lZF9pbnN0cnVjdGlvbgorCisJLmFsaWduCTUKK3NvZnR3YXJlX2ludGVycnVwdDoKKwlnZXRfYmFkX3N0YWNrX3N3aQorCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX3NvZnR3YXJlX2ludGVycnVwdAorCisJLmFsaWduCTUKK3ByZWZldGNoX2Fib3J0OgorCWdldF9iYWRfc3RhY2sKKwliYWRfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19wcmVmZXRjaF9hYm9ydAorCisJLmFsaWduCTUKK2RhdGFfYWJvcnQ6CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX2RhdGFfYWJvcnQKKworCS5hbGlnbgk1Citub3RfdXNlZDoKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9fbm90X3VzZWQKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisKKwkuYWxpZ24JNQoraXJxOgorCWdldF9pcnFfc3RhY2sKKwlpcnFfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19pcnEKKwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKKworCS5hbGlnbgk1CitmaXE6CisJZ2V0X2ZpcV9zdGFjaworCS8qIHNvbWVvbmUgb3VnaHQgdG8gd3JpdGUgYSBtb3JlIGVmZmVjdGl2ZSBmaXFfc2F2ZV91c2VyX3JlZ3MgKi8KKwlpcnFfc2F2ZV91c2VyX3JlZ3MKKwlibAlkb19maXEKKwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKKworI2Vsc2UKKworCS5hbGlnbgk1CitpcnE6CisJZ2V0X2JhZF9zdGFjaworCWJhZF9zYXZlX3VzZXJfcmVncworCWJsCWRvX2lycQorCisJLmFsaWduCTUKK2ZpcToKKwlnZXRfYmFkX3N0YWNrCisJYmFkX3NhdmVfdXNlcl9yZWdzCisJYmwJZG9fZmlxCisKKyNlbmRpZgorCisvKgorICoJdjdfZmx1c2hfZGNhY2hlX2FsbCgpCisgKgorICoJRmx1c2ggdGhlIHdob2xlIEQtY2FjaGUuCisgKgorICoJQ29ycnVwdGVkIHJlZ2lzdGVyczogcjAtcjUsIHI3LCByOS1yMTEKKyAqCisgKgktIG1tCS0gbW1fc3RydWN0IGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQorICovCisJLmFsaWduIDUKKy5nbG9iYWwgdjdfZmx1c2hfZGNhY2hlX2FsbAordjdfZmx1c2hfZGNhY2hlX2FsbDoKKwlzdG1mZAlyMTMhLCB7cjAgLSByNSwgcjcsIHI5IC0gcjEyLCByMTR9CisKKwltb3YJcjcsIHIwCQkJCUAgdGFrZSBhIGJhY2t1cCBvZiBkZXZpY2UgdHlwZQorCWNtcAlyMCwgIzB4MwkJCUAgY2hlY2sgaWYgdGhlIGRldmljZSB0eXBlIGlzCisJCQkJCQlAIEdQCisJbW92ZXEgcjEyLCAjMHgxCQkJCUAgc2V0IHVwIHRvIGludmFsaWRlIEwyCitzbWk6CS53b3JkIDB4MDE2MDAwNzAJCQlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQorCWNtcAlyNywgIzB4MwkJCUAgY29tcGFyZSBhZ2FpbiBpbiBjYXNlIGl0cworCQkJCQkJQCBsb3N0CisJYmVxCWZpbmlzaGVkX2ludmFsCQkJQCBpZiBHUCBkZXZpY2UsIGludmFsIGRvbmUKKwkJCQkJCUAgYWJvdmUKKworCW1yYwlwMTUsIDEsIHIwLCBjMCwgYzAsIDEJCUAgcmVhZCBjbGlkcgorCWFuZHMJcjMsIHIwLCAjMHg3MDAwMDAwCQlAIGV4dHJhY3QgbG9jIGZyb20gY2xpZHIKKwltb3YJcjMsIHIzLCBsc3IgIzIzCQkJQCBsZWZ0IGFsaWduIGxvYyBiaXQgZmllbGQKKwliZXEJZmluaXNoZWRfaW52YWwJCQlAIGlmIGxvYyBpcyAwLCB0aGVuIG5vIG5lZWQgdG8KKwkJCQkJCUAgY2xlYW4KKwltb3YJcjEwLCAjMAkJCQlAIHN0YXJ0IGNsZWFuIGF0IGNhY2hlIGxldmVsIDAKK2ludmFsX2xvb3AxOgorCWFkZAlyMiwgcjEwLCByMTAsIGxzciAjMQkJQCB3b3JrIG91dCAzeCBjdXJyZW50IGNhY2hlCisJCQkJCQlAIGxldmVsCisJbW92CXIxLCByMCwgbHNyIHIyCQkJQCBleHRyYWN0IGNhY2hlIHR5cGUgYml0cyBmcm9tCisJCQkJCQlAIGNsaWRyCisJYW5kCXIxLCByMSwgIzcJCQlAIG1hc2sgb2YgdGhlIGJpdHMgZm9yIGN1cnJlbnQKKwkJCQkJCUAgY2FjaGUgb25seQorCWNtcAlyMSwgIzIJCQkJQCBzZWUgd2hhdCBjYWNoZSB3ZSBoYXZlIGF0CisJCQkJCQlAIHRoaXMgbGV2ZWwKKwlibHQJc2tpcF9pbnZhbAkJCUAgc2tpcCBpZiBubyBjYWNoZSwgb3IganVzdAorCQkJCQkJQCBpLWNhY2hlCisJbWNyCXAxNSwgMiwgcjEwLCBjMCwgYzAsIDAJCUAgc2VsZWN0IGN1cnJlbnQgY2FjaGUgbGV2ZWwKKwkJCQkJCUAgaW4gY3NzcgorCW1vdglyMiwgIzAJCQkJQCBvcGVyYW5kIGZvciBtY3IgU0JaCisJbWNyCXAxNSwgMCwgcjIsIGM3LCBjNSwgNAkJQCBmbHVzaCBwcmVmZXRjaCBidWZmZXIgdG8KKwkJCQkJCUAgc3ljaCB0aGUgbmV3IGNzc3ImY3NpZHIsCisJCQkJCQlAIHdpdGggYXJtdjcgdGhpcyBpcyAnaXNiJywKKwkJCQkJCUAgYnV0IHdlIGNvbXBpbGUgd2l0aCBhcm12NQorCW1yYwlwMTUsIDEsIHIxLCBjMCwgYzAsIDAJCUAgcmVhZCB0aGUgbmV3IGNzaWRyCisJYW5kCXIyLCByMSwgIzcJCQlAIGV4dHJhY3QgdGhlIGxlbmd0aCBvZiB0aGUKKwkJCQkJCUAgY2FjaGUgbGluZXMKKwlhZGQJcjIsIHIyLCAjNAkJCUAgYWRkIDQgKGxpbmUgbGVuZ3RoIG9mZnNldCkKKwlsZHIJcjQsID0weDNmZgorCWFuZHMJcjQsIHI0LCByMSwgbHNyICMzCQlAIGZpbmQgbWF4aW11bSBudW1iZXIgb24gdGhlCisJCQkJCQlAIHdheSBzaXplCisJY2x6CXI1LCByNAkJCQlAIGZpbmQgYml0IHBvc2l0aW9uIG9mIHdheQorCQkJCQkJQCBzaXplIGluY3JlbWVudAorCWxkcglyNywgPTB4N2ZmZgorCWFuZHMJcjcsIHI3LCByMSwgbHNyICMxMwkJQCBleHRyYWN0IG1heCBudW1iZXIgb2YgdGhlCisJCQkJCQlAIGluZGV4IHNpemUKK2ludmFsX2xvb3AyOgorCW1vdglyOSwgcjQJCQkJQCBjcmVhdGUgd29ya2luZyBjb3B5IG9mIG1heAorCQkJCQkJQCB3YXkgc2l6ZQoraW52YWxfbG9vcDM6CisJb3JyCXIxMSwgcjEwLCByOSwgbHNsIHI1CQlAIGZhY3RvciB3YXkgYW5kIGNhY2hlIG51bWJlcgorCQkJCQkJQCBpbnRvIHIxMQorCW9ycglyMTEsIHIxMSwgcjcsIGxzbCByMgkJQCBmYWN0b3IgaW5kZXggbnVtYmVyIGludG8gcjExCisJbWNyCXAxNSwgMCwgcjExLCBjNywgYzYsIDIJCUAgaW52YWxpZGF0ZSBieSBzZXQvd2F5CisJc3VicwlyOSwgcjksICMxCQkJQCBkZWNyZW1lbnQgdGhlIHdheQorCWJnZQlpbnZhbF9sb29wMworCXN1YnMJcjcsIHI3LCAjMQkJCUAgZGVjcmVtZW50IHRoZSBpbmRleAorCWJnZQlpbnZhbF9sb29wMgorc2tpcF9pbnZhbDoKKwlhZGQJcjEwLCByMTAsICMyCQkJQCBpbmNyZW1lbnQgY2FjaGUgbnVtYmVyCisJY21wCXIzLCByMTAKKwliZ3QJaW52YWxfbG9vcDEKK2ZpbmlzaGVkX2ludmFsOgorCW1vdglyMTAsICMwCQkJCUAgc3dpdGggYmFjayB0byBjYWNoZSBsZXZlbCAwCisJbWNyCXAxNSwgMiwgcjEwLCBjMCwgYzAsIDAJCUAgc2VsZWN0IGN1cnJlbnQgY2FjaGUgbGV2ZWwKKwkJCQkJCUAgaW4gY3NzcgorCW1jcglwMTUsIDAsIHIxMCwgYzcsIGM1LCA0CQlAIGZsdXNoIHByZWZldGNoIGJ1ZmZlciwKKwkJCQkJCUAgd2l0aCBhcm12NyB0aGlzIGlzICdpc2InLAorCQkJCQkJQCBidXQgd2UgY29tcGlsZSB3aXRoIGFybXY1CisKKwlsZG1mZAlyMTMhLCB7cjAgLSByNSwgcjcsIHI5IC0gcjEyLCBwY30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJzL01ha2VmaWxlCmluZGV4IDVhMzY5ZGYuLmMwMTY3MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9NYWtlZmlsZQpAQCAtNDksNiArNDksNyBAQAogCSAgdXNiZGNvcmUubyB1c2JkY29yZV9lcDAubyB1c2JkY29yZV9vbWFwMTUxMC5vIHVzYnR0eS5vIFwKIAkgIHZpZGVvbW9kZXMubyB3ODNjNTUzZi5vIFwKIAkgIGtzODY5NWV0aC5vIFwKKwkgIGNvbWNlcnRvX2dlbS5vIGNvbWNlcnRvX2dlbV9BTC5vIFwKIAkgIHB4YV9wY21jaWEubyBtcGM4eHhfcGNtY2lhLm8gdHFtOHh4X3BjbWNpYS5vCVwKIAkgIHJweF9wY21jaWEubyBcCiAJICBmc2xfaTJjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL01ha2VmaWxlIGIvZHJpdmVycy9jMjAwMF9ldGgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlMzQzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL01ha2VmaWxlCkBAIC0wLDAgKzEsNDUgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCVNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQiAJOj0gJChvYmopbGliY29tY2VydG9fcGZlLmEKKworQ09CSlMgCTo9IGMyMDAwX2V0aGVybmV0Lm8gcGZlX2Zpcm13YXJlLm8gcGZlLm8gcGZlX2RyaXZlci5vIGFyODMyOC5vCisKK1NSQ1MgCTo9ICQoQ09CSlM6Lm89LmMpCitPQkpTIAk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCisKK2FsbDoJJChMSUIpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9hcjgzMjguYyBiL2RyaXZlcnMvYzIwMDBfZXRoL2FyODMyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDI0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9hcjgzMjguYwpAQCAtMCwwICsxLDQ1OSBAQAorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1paXBoeS5oPgorI2luY2x1ZGUgImFyODMyOC5oIgorCisjZGVmaW5lIFMxN19MQU5fUE9SVF9WTEFOICAgICAgICAgIDEKKyNkZWZpbmUgUzE3X1dBTl9QT1JUX1ZMQU4gICAgICAgICAgMgorCisjZGVmaW5lIEVORVRfVU5JVF9HRTEgMSAgCisjZGVmaW5lIEVORVRfVU5JVF9HRTAgMCAvKiBDb25uZWN0ZWQgdG8gdGhlIHN3aXRjaCAqLworCisjZGVmaW5lIFRSVUUgICAgMQorI2RlZmluZSBGQUxTRSAgIDAKKworI2RlZmluZSBTMTdfUEhZMF9BRERSICAgMHgwCisjZGVmaW5lIFMxN19QSFkxX0FERFIgICAweDEKKyNkZWZpbmUgUzE3X1BIWTJfQUREUiAgIDB4MgorI2RlZmluZSBTMTdfUEhZM19BRERSICAgMHgzCisjZGVmaW5lIFMxN19QSFk0X0FERFIgICAweDQKKyNkZWZpbmUgUzE3X0lORF9QSFkgNAorCisvKgorICogVHJhY2sgcGVyLVBIWSBwb3J0IGluZm9ybWF0aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgQk9PTCAgIGlzRW5ldFBvcnQ7ICAgICAgIC8qIG5vcm1hbCBlbmV0IHBvcnQgKi8KKyAgICBCT09MICAgaXNQaHlBbGl2ZTsgICAgICAgLyogbGFzdCBrbm93biBzdGF0ZSBvZiBsaW5rICovCisgICAgaW50ICAgIGV0aFVuaXQ7ICAgICAgICAgIC8qIE1BQyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwaHkgcG9ydCAqLworICAgIHVpbnQzMl90IHBoeUJhc2U7CisgICAgdWludDMyX3QgcGh5QWRkcjsgICAgICAgICAgLyogUEhZIHJlZ2lzdGVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwaHkgcG9ydCAqLworICAgIHVpbnQzMl90IFZMQU5UYWJsZVNldHRpbmc7IC8qIFZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gVkxBTiB0YWJsZSAqLworfSBhdGhyUGh5SW5mb190OworCisvKgorICogUGVyLVBIWSBpbmZvcm1hdGlvbiwgaW5kZXhlZCBieSBQSFkgdW5pdCBudW1iZXIKKyAqIE1BQyBwb3J0IDAgLSBDUFUgcG9ydCAweDEwMAorICogQWxsIHBvcnRzIGFyZSBjb25uZWN0ZWQgdG8gR0UwIG9mIHRoZSBTb0MgTUFDCisgKiBMQU4vV0FOIHNlcGVyYXRpb24gYnkgVkxBTiB0YWdzIChwb3J0IDAtMyB3aXRoIFZMQU5JRCAxOyBwb3J0IDQgd2l0aCBWTEFOSUQgMgorICovCitzdGF0aWMgYXRoclBoeUluZm9fdCBhdGhyUGh5SW5mb1tdID0geworICAgIHtUUlVFLCAgIC8qIHBoeSBwb3J0IDAgLS0gTUFDIHBvcnQgMSAweDIwMCAqLworICAgICBGQUxTRSwKKyAgICAgRU5FVF9VTklUX0dFMCwKKyAgICAgMCwKKyAgICAgUzE3X1BIWTBfQUREUiwKKyAgICAgUzE3X0xBTl9QT1JUX1ZMQU4KKyAgICB9LAorCisgICAge1RSVUUsICAgLyogcGh5IHBvcnQgMSAtLSBNQUMgcG9ydCAyIDB4MzAwICovCisgICAgIEZBTFNFLAorICAgICBFTkVUX1VOSVRfR0UwLAorICAgICAwLAorICAgICBTMTdfUEhZMV9BRERSLAorICAgICBTMTdfTEFOX1BPUlRfVkxBTgorICAgIH0sCisKKyAgICB7VFJVRSwgICAvKiBwaHkgcG9ydCAyIC0tIE1BQyBwb3J0IDMgMHg0MDAgKi8KKyAgICAgRkFMU0UsCisgICAgIEVORVRfVU5JVF9HRTAsCisgICAgIDAsCisgICAgIFMxN19QSFkyX0FERFIsIAorICAgICBTMTdfTEFOX1BPUlRfVkxBTgorICAgIH0sCisKKyAgICB7VFJVRSwgICAvKiBwaHkgcG9ydCAzIC0tIE1BQyBwb3J0IDQgMHg1MDAgKi8KKyAgICAgRkFMU0UsCisgICAgIEVORVRfVU5JVF9HRTAsCisgICAgIDAsCisgICAgIFMxN19QSFkzX0FERFIsIAorICAgICBTMTdfTEFOX1BPUlRfVkxBTgorICAgIH0sCisKKyAgICB7VFJVRSwgICAvKiBwaHkgcG9ydCA0IC0tIFdBTiBwb3J0IG9yIE1BQyBwb3J0IDUgMHg2MDAgKi8KKyAgICAgRkFMU0UsCisgICAgIEVORVRfVU5JVF9HRTEsCisgICAgIDAsCisgICAgIFMxN19QSFk0X0FERFIsIAorICAgICBTMTdfV0FOX1BPUlRfVkxBTiAgIC8qIHNldCBhcyBXQU4gcG9ydCAqLworICAgIH0sCisgICAgCisgICAge0ZBTFNFLCAgLyogcGh5IHBvcnQgNSAtLSBDUFUgcG9ydCAobm8gUko0NSBjb25uZWN0b3IpICovCisgICAgIFRSVUUsCisgICAgIEVORVRfVU5JVF9HRTAsCisgICAgIDAsCisgICAgIDB4MDAsIAorICAgICBTMTdfTEFOX1BPUlRfVkxBTiAgICAvKiBTZW5kIHRvIGFsbCBwb3J0cyAqLworICAgIH0sCit9OworCisjZGVmaW5lIFMxN19QSFlfTUFYIDUKKworLyogUmFuZ2Ugb2YgdmFsaWQgUEhZIElEcyBpcyBbTUlOLi5NQVhdICovCisjZGVmaW5lIFMxN19JRF9NSU4gMAorI2RlZmluZSBTMTdfSURfTUFYIChTMTdfUEhZX01BWC0xKQorCisvKiBDb252ZW5pZW5jZSBtYWNyb3MgdG8gYWNjZXNzIG15UGh5SW5mbyAqLworI2RlZmluZSBTMTdfSVNfRU5FVF9QT1JUKHBoeVVuaXQpIChhdGhyUGh5SW5mb1twaHlVbml0XS5pc0VuZXRQb3J0KQorI2RlZmluZSBTMTdfSVNfUEhZX0FMSVZFKHBoeVVuaXQpIChhdGhyUGh5SW5mb1twaHlVbml0XS5pc1BoeUFsaXZlKQorI2RlZmluZSBTMTdfRVRIVU5JVChwaHlVbml0KSAoYXRoclBoeUluZm9bcGh5VW5pdF0uZXRoVW5pdCkKKyNkZWZpbmUgUzE3X1BIWUJBU0UocGh5VW5pdCkgKGF0aHJQaHlJbmZvW3BoeVVuaXRdLnBoeUJhc2UpCisjZGVmaW5lIFMxN19QSFlBRERSKHBoeVVuaXQpIChhdGhyUGh5SW5mb1twaHlVbml0XS5waHlBZGRyKQorI2RlZmluZSBTMTdfVkxBTl9UQUJMRV9TRVRUSU5HKHBoeVVuaXQpIChhdGhyUGh5SW5mb1twaHlVbml0XS5WTEFOVGFibGVTZXR0aW5nKQorCitpbnQgYXRocnMxN19pbml0KGNoYXIgKmRldm5hbWUpCit7CisJaW50IHBoeV9hZGRyOyAKKwl1bnNpZ25lZCBpbnQgZHVtbXk7CisJCisJLy9jb25maWd1cmUgdGhlIFJHTUlJCisJLyogRklYTUUgQ29uZmlndXJlIGJyb2FkY2FzdCBwb3J0czogdGhlIGNvbmZpZ3VyYXRpb24gYmVsb3cKKwkgKiB3aWxsIGJyb2FkY2FzdCBvbiBwb3J0cyAwLTUgb2YgdGhlIHN3aXRjaC4KKwkgKi8KKwlhdGhyczE3X3JlZ193cml0ZShkZXZuYW1lLCBTMTdfR0xPRldfQ1RSTDFfUkVHLCBcCisJCQlTMTdfQlJPQURfRFBBTEwgfCBTMTdfTVVMVElfRkxPT0RfRFBBTEwgfCBTMTdfVU5JX0ZMT09EX0RQQUxMKTsKKwkvKiBGSVhNRSBiaXQgMzAgb2YgdGhlIFBXU19SRUcgaXMgbWFya2VkIGFzIHJlc2VydmVkIGluIHRoZSBkYXRhc2hlZXQuICovCisJYXRocnMxN19yZWdfd3JpdGUoZGV2bmFtZSwgUzE3X1BXU19SRUcsIFMxN19QV1NfQ0hJUF9BUjgzMjcpOworCisJLyogU2V0IGRlbGF5cyBmb3IgTUFDMCAqLworCWF0aHJzMTdfcmVnX3dyaXRlKGRldm5hbWUsIFMxN19QMFBBRF9NT0RFX1JFRywgUzE3X01BQzBfUkdNSUlfRU4gfCBTMTdfTUFDMF9SR01JSV9UWENMS19ERUxBWSB8IFwKKwkJCVMxN19NQUMwX1JHTUlJX1JYQ0xLX0RFTEFZIHwgKDEgPDwgUzE3X01BQzBfUkdNSUlfVFhDTEtfU0hJRlQpIHwgXAorCQkJKDEgPDwgUzE3X01BQzBfUkdNSUlfUlhDTEtfU0hJRlQpKTsKKwkvKiBTZXQgYml0IDI0IHRvIGVuYWJsZSBNQUMwIFJHTUlJIGRlbGF5OyBzZXQgTUFDNiBhcyBQSFkgbW9kZSAoUEhZNCksIFFDQSAqLworCWF0aHJzMTdfcmVnX3dyaXRlKGRldm5hbWUsIFMxN19QNlBBRF9NT0RFX1JFRywgUzE3X1BIWTRfUkdNSUlfRU4gfCBTMTdfTUFDNl9SR01JSV9SWENMS19ERUxBWSB8IFwKKwkJCSgwIDw8IFMxN19NQUM2X1JHTUlJX1JYQ0xLX1NISUZUKSk7CisJLyogRGlzYWJsZSBNQUM1IGFuZCBNQUM2IChkdWUgdG8gUEhZNCksIFFDQSAqLworCWF0aHJzMTdfcmVnX3dyaXRlKGRldm5hbWUsIFMxN19QNVNUQVRVU19SRUcsIDApOworCWF0aHJzMTdfcmVnX3dyaXRlKGRldm5hbWUsIFMxN19QNlNUQVRVU19SRUcsIDApOworCQorCWF0aHJzMTdfcmVnX3dyaXRlKGRldm5hbWUsIFMxN19QMFNUQVRVU19SRUcsIFMxN19QT1JUX1NUQVRVU19ERUZBVUxUKTsKKworCS8qIEFSODMyNy9BUjgzMjggdjEuMCBmaXh1cCAqLworCWlmICgoYXRocnMxN19yZWdfcmVhZChkZXZuYW1lLCBTMTdfTUFTS19DVFJMX1JFRykgJiAweGZmZmYpID09IFMxN19DSElQSURfVjFfMCkKKwl7CisJCWZvciAocGh5X2FkZHIgPSAweDA7IHBoeV9hZGRyIDw9IFMxN19QSFlfTUFYOyBwaHlfYWRkcisrKQorCQl7CisJCQkvKiBGb3IgMTAwTSB3YXZlZm9ybSAqLworCQkJbWlpcGh5X2RlYnVnX3dyaXRlKGRldm5hbWUsIHBoeV9hZGRyLCAweDAsIDB4MDJlYSk7CisJCQkvKiBUdXJuIE9uIEdpZ2FiaXQgQ2xvY2sgKi8KKwkJCW1paXBoeV9kZWJ1Z193cml0ZShkZXZuYW1lLCBwaHlfYWRkciwgMHgzZCwgMHg2OGEwKTsKKwkJfQorCX0KKwkvKiBTZXQgZGVsYXlzIGZvciBQSFk0IChjb25uZWN0ZWQgdG8gTUFDNSkKKwkqLworCWR1bW15ID0gbWlpcGh5X2RlYnVnX3JlYWQoZGV2bmFtZSwgUzE3X1BIWTRfQUREUiwgMHgwKTsKKwlkdW1teSB8PSAoMSA8PCAxNSk7IC8vIEVuYWJsZSBSR01JSSBSeCBjbG9jayBkZWxheQorCW1paXBoeV9kZWJ1Z193cml0ZShkZXZuYW1lLCBTMTdfUEhZNF9BRERSLCAweDAsIGR1bW15KTsKKwlkdW1teSA9IG1paXBoeV9kZWJ1Z19yZWFkKGRldm5hbWUsIFMxN19QSFk0X0FERFIsIDB4NSk7CisJZHVtbXkgfD0gKDEgPDwgOCk7IC8vIEVuYWJsZSBSR01JSSBUeCBjbG9jayBkZWxheQorCW1paXBoeV9kZWJ1Z193cml0ZShkZXZuYW1lLCBTMTdfUEhZNF9BRERSLCAweDUsIGR1bW15KTsKKworCisJLyogZW5hYmxlIEhPTCBieSBkZWZhdWx0ICovCisJZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUzE3X01BQ19NQVg7IHBoeV9hZGRyKyspCisJeworCQlzd2l0Y2ggKHBoeV9hZGRyKSB7CisJCQljYXNlIDA6CisJCQljYXNlIDU6CisJCQljYXNlIDY6CisJCQkJYXRocnMxN19yZWdfd3JpdGUoZGV2bmFtZSwgUzE3X1BPUlQwX0hPTF9DVFJMMCArIHBoeV9hZGRyICogOCwgXAorCQkJCQkJUzE3X0hPTF9DVFJMMF9XQU4pOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWF0aHJzMTdfcmVnX3dyaXRlKGRldm5hbWUsIFMxN19QT1JUMF9IT0xfQ1RSTDAgKyBwaHlfYWRkciAqIDgsIFwKKwkJCQkJCVMxN19IT0xfQ1RSTDBfTEFOKTsKKwkJCQlicmVhazsKKwkJfQorCisJCWF0aHJzMTdfcmVnX3dyaXRlKGRldm5hbWUsIFMxN19QT1JUMF9IT0xfQ1RSTDEgKyBwaHlfYWRkciAqIDgsIFwKKwkJCQlTMTdfSE9MX0NUUkwxX0RFRkFVTFQpOworCX0KKworCS8qIExFRCBjb250cm9sICovCisJYXRocnMxN19yZWdfd3JpdGUoZGV2bmFtZSwgUzE3X0xFRF9DVFJMMF9SRUcsIDB4ZmZiN2ZmYjcpOworCWF0aHJzMTdfcmVnX3dyaXRlKGRldm5hbWUsIFMxN19MRURfQ1RSTDFfUkVHLCAweGZmYjdmZmI3KTsKKwlhdGhyczE3X3JlZ193cml0ZShkZXZuYW1lLCBTMTdfTEVEX0NUUkwyX1JFRywgMHhmZmI3ZmZiNyk7CisKKwlwcmludGYgKCIlczpkb25lXG4iLF9fZnVuY19fKTsKKworCXJldHVybiAwOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogYXRocnMxN19waHlfaXNfbGlua19hbGl2ZSAtIHRlc3QgdG8gc2VlIGlmIHRoZSBzcGVjaWZpZWQgbGluayBpcyBhbGl2ZQorKgorKiBSRVRVUk5TOgorKiAgICBUUlVFICAtLT4gbGluayBpcyBhbGl2ZQorKiAgICBGQUxTRSAtLT4gbGluayBpcyBkb3duCisqLworQk9PTAorYXRocnMxN19waHlfaXNfbGlua19hbGl2ZShjaGFyICpkZXZuYW1lLGludCBwaHlVbml0KQoreworICAgIHVpbnQxNl90IHBoeUh3U3RhdHVzOworICAgIHVpbnQzMl90IHBoeUFkZHI7CisKKyAgICBwaHlBZGRyID0gUzE3X1BIWUFERFIocGh5VW5pdCk7CisgCisgICAgbWlpcGh5X3JlYWQgKGRldm5hbWUsIHBoeUFkZHIsIFMxN19QSFlfU1BFQ19TVEFUVVMsICZwaHlId1N0YXR1cyk7CQorCisgICAgaWYgKHBoeUh3U3RhdHVzICYgUzE3X1NUQVRVU19MSU5LX1BBU1MpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgcHJpbnRmKCJwaHklZCBsaW5rIGRvd25cbiIscGh5VW5pdCk7CQorICAgIHJldHVybiBGQUxTRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBhdGhyczE3X3BoeV9zdGF0IAorKgorKi8KKworaW50CithdGhyczE3X3BoeV9zdGF0KGNoYXIgKmRldm5hbWUpCit7CisgICAgdWludDE2X3QgIHBoeUh3U3RhdHVzOworICAgIHVpbnQzMl90ICBwaHlBZGRyOworICAgIGludCAgICAgICBwaHlVbml0OwkKKyAgICBpbnQgICAgICAgaWkgPSAyMDA7CisKKyAgICBmb3IgKHBoeVVuaXQ9MDsgcGh5VW5pdCA8IFMxN19QSFlfTUFYOyBwaHlVbml0KyspIHsKKworICAgICAgICBwaHlBZGRyID0gUzE3X1BIWUFERFIocGh5VW5pdCk7CisKKyAgICAgICAgaWYgKGF0aHJzMTdfcGh5X2lzX2xpbmtfYWxpdmUoZGV2bmFtZSwgcGh5VW5pdCkpIHsKKworICAgICAgICAgICAgZG8geworCQltaWlwaHlfcmVhZCAoZGV2bmFtZSwgcGh5QWRkciwgUzE3X1BIWV9TUEVDX1NUQVRVUywgJnBoeUh3U3RhdHVzKTsKKwkJICAgICAgICBpZihwaHlId1N0YXR1cyAmIFMxN19TVEFUVVNfUkVTT0xWRUQpCisJCQkgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHVkZWxheSgxMCoxMDAwKTsKKyAgICAgICAgICAgIH13aGlsZSgtLWlpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcGh5SHdTdGF0dXMgPSAoKHBoeUh3U3RhdHVzICYgUzE3X1NUQVRVU19MSU5LX01BU0spID4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTMTdfU1RBVFVTX0xJTktfU0hJRlQpOworCisJICAgIHByaW50ZigicGh5JWQgcGh5aHdzdGF0OiV4XG4iLHBoeVVuaXQscGh5SHdTdGF0dXMpOworICAgICAgICB9IAorCisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIGF0aHJzMTdfcGh5X2luaXQgLSByZXNldCBhbmQgc2V0dXAgdGhlIFBIWSBhc3NvY2lhdGVkIAorKgorKiBSZXNldHMgdGhlIGFzc29jaWF0ZWQgUEhZIHBvcnQuCisqCisqIFJFVFVSTlM6CisqICAgIFRSVUUgIC0tPiBhc3NvY2lhdGVkIFBIWSBpcyBhbGl2ZQorKiAgICBGQUxTRSAtLT4gbm8gTElOS3Mgb24gdGhpcyBldGhlcm5ldCB1bml0CisqLworCitpbnQKK2F0aHJzMTdfcGh5X2luaXQoY2hhciAqZGV2bmFtZSwgaW50IHBoeVVuaXQpCit7CisJdWludDE2X3QgIHBoeUh3U3RhdHVzOworCXVpbnQxNl90ICB0aW1lb3V0OworCWludCAgICAgICBsaXZlTGlua3MgPSAwOworCXVpbnQzMl90ICBwaHlCYXNlID0gMDsKKwl1aW50MzJfdCAgcGh5QWRkciA9IDA7CisKKwlwcmludGYoImF0aHJzMTdfcGh5X2luaXQgJWRcbiIsIHBoeVVuaXQpOworCisJcGh5QmFzZSA9IFMxN19QSFlCQVNFKHBoeVVuaXQpOworCXBoeUFkZHIgPSBTMTdfUEhZQUREUihwaHlVbml0KTsKKworCW1paXBoeV93cml0ZShkZXZuYW1lLCBwaHlBZGRyLCBTMTdfQVVUT05FR19BRFZFUlQsCisJCQlTMTdfQURWRVJUSVNFX0FMTCk7CisKKwltaWlwaHlfd3JpdGUoZGV2bmFtZSwgcGh5QWRkciwgUzE3XzEwMDBCQVNFVF9DT05UUk9MLAorCQkJUzE3X0FEVkVSVElTRV8xMDAwRlVMTCk7CisKKwkvKiBSZXNldCBQSFlzKi8KKwltaWlwaHlfd3JpdGUoZGV2bmFtZSwgcGh5QWRkciwgUzE3X1BIWV9DT05UUk9MLAorCQkJUzE3X0NUUkxfQVVUT05FR09USUFUSU9OX0VOQUJMRSAKKwkJCXwgUzE3X0NUUkxfU09GVFdBUkVfUkVTRVQpOworCisJLyoKKwkgKiBBZnRlciB0aGUgcGh5IGlzIHJlc2V0LCBpdCB0YWtlcyBhIGxpdHRsZSB3aGlsZSBiZWZvcmUKKwkgKiBpdCBjYW4gcmVzcG9uZCBwcm9wZXJseS4KKwkgKi8KKwkvL0ZJWE1FOiBOb3cgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZSBmb3IgZWFjaCBMQU4gUEhZIHRoZSBvdmVycmFsbCBkZWxheQorCS8vd2lsbCBhbHNvIGluY3JlYXNlLiBNYXliZSB0aGlzIGlzIG5vdCByZXF1aXJlZCBhcyB0aGUgcGh5IHN0YXR1cyBpcyBiZWluZyBjaGVjayAKKwkvL1NvIHRoaXMgaXMgc3ViamVjdGVkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGJyaW5ndXAKKwl1ZGVsYXkoMTAwMCoxMDAwKTsKKworCisJLyoKKwkgKiBXYWl0IHVwIHRvIDMgc2Vjb25kcyBmb3IgQUxMIGFzc29jaWF0ZWQgUEhZcyB0byBmaW5pc2gKKwkgKiBhdXRvbmVnb3RpYXRpb24uICBUaGUgb25seSB3YXkgd2UgZ2V0IG91dCBvZiBoZXJlIHNvb25lciBpcworCSAqIGlmIEFMTCBQSFlzIGFyZSBjb25uZWN0ZWQgQU5EIGZpbmlzaCBhdXRvbmVnb3RpYXRpb24uCisJICovCisKKwl0aW1lb3V0PTIwOworCWZvciAoOzspIHsKKwkJbWlpcGh5X3JlYWQgKGRldm5hbWUsIHBoeUFkZHIsIFMxN19QSFlfQ09OVFJPTCwgJnBoeUh3U3RhdHVzKTsKKworCQlpZiAoUzE3X1JFU0VUX0RPTkUocGh5SHdTdGF0dXMpKSB7CisJCQlwcmludGYoCisJCQkJCSgiUG9ydCAlZCwgTmVnIFN1Y2Nlc3NcbiIsIHBoeVVuaXQpKTsKKworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJcHJpbnRmKCJQb3J0ICVkLCBOZWdvZ2lhdGlvbiB0aW1lb3V0XG4iLCBwaHlVbml0KTsKKwkJCWJyZWFrOworCQl9CisJCWlmICgtLXRpbWVvdXQgPT0gMCkgeworCQkJcHJpbnRmKCJQb3J0ICVkLCBOZWdvZ2lhdGlvbiB0aW1lb3V0XG4iLCBwaHlVbml0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJdWRlbGF5KDE1MCoxMDAwKTsKKwl9CisKKwkvKgorCSAqIFRoZSBQSFkgaGF2ZSBoYWQgYWRlcXVhdGUgdGltZSB0byBhdXRvbmVnb3RpYXRlLgorCSAqIE5vdyBpbml0aWFsaXplIHNvZnR3YXJlIHN0YXR1cy4KKwkgKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIHBvcnRzIG1heSB0YWtlIGEgYml0IGxvbmdlcgorCSAqIHRvIGF1dG9uZWdvdGlhdGU7IGJ1dCB3ZSBjYW4ndCB3YWl0IGZvcmV2ZXIuICBUaGV5J2xsCisJICogZ2V0IG5vdGljZWQgYnkgbXZfcGh5Q2hlY2tTdGF0dXNDaGFuZ2UgZHVyaW5nIHJlZ3VsYXIKKwkgKiBwb2xsaW5nIGFjdGl2aXRpZXMuCisJICovCisKKwkvKiBmaW5lLXR1bmUgUEhZIDAgYW5kIFBIWSAxKi8KKwlpZiAoKHBoeVVuaXQgPT0gMCkgfHwgKHBoeVVuaXQgPT0gMSkpCisJeworCQltaWlwaHlfd3JpdGUoZGV2bmFtZSwgUzE3X1BIWUFERFIocGh5VW5pdCksIFMxN19NTURfQ1RSTF9SRUcsIDB4Myk7CisJCW1paXBoeV93cml0ZShkZXZuYW1lLCBTMTdfUEhZQUREUihwaHlVbml0KSwgUzE3X01NRF9EQVRBX1JFRywgMHg4MDA3KTsKKwkJbWlpcGh5X3dyaXRlKGRldm5hbWUsIFMxN19QSFlBRERSKHBoeVVuaXQpLCBTMTdfTU1EX0NUUkxfUkVHLCAweDQwMDMpOworCQltaWlwaHlfd3JpdGUoZGV2bmFtZSwgUzE3X1BIWUFERFIocGh5VW5pdCksIFMxN19NTURfREFUQV9SRUcsIDB4ODMxNSk7CisJfQorCisJLyogZmluZS10dW5lIFBIWXMgKi8KKwltaWlwaHlfd3JpdGUoZGV2bmFtZSwgUzE3X1BIWUFERFIocGh5VW5pdCksIFMxN19NTURfQ1RSTF9SRUcsIDB4Myk7CisJbWlpcGh5X3dyaXRlKGRldm5hbWUsIFMxN19QSFlBRERSKHBoeVVuaXQpLCBTMTdfTU1EX0RBVEFfUkVHLCAweDgwMGQpOworCW1paXBoeV93cml0ZShkZXZuYW1lLCBTMTdfUEhZQUREUihwaHlVbml0KSwgUzE3X01NRF9DVFJMX1JFRywgMHg0MDAzKTsKKwltaWlwaHlfd3JpdGUoZGV2bmFtZSwgUzE3X1BIWUFERFIocGh5VW5pdCksIFMxN19NTURfREFUQV9SRUcsIDB4MTAzZik7CisKKwltaWlwaHlfZGVidWdfd3JpdGUoZGV2bmFtZSwgUzE3X1BIWUFERFIocGh5VW5pdCksIDB4M2QsIDB4Njg2MCk7CisJCisJLyogZm9yIFBIWTQsIFFDQSAqLworCWlmIChwaHlVbml0ID09IFMxN19QSFk0X0FERFIpCisJeworCQltaWlwaHlfZGVidWdfd3JpdGUoZGV2bmFtZSwgUzE3X1BIWUFERFIocGh5VW5pdCksIDB4MTIsIDB4NGMwYyk7CisJCW1paXBoeV9kZWJ1Z193cml0ZShkZXZuYW1lLCBTMTdfUEhZQUREUihwaHlVbml0KSwgMHgwLCAweDgyZWUpOworCQltaWlwaHlfZGVidWdfd3JpdGUoZGV2bmFtZSwgUzE3X1BIWUFERFIocGh5VW5pdCksIDB4NSwgMHgzZDQ2KTsKKwkJbWlpcGh5X2RlYnVnX3dyaXRlKGRldm5hbWUsIFMxN19QSFlBRERSKHBoeVVuaXQpLCAweGIsIDB4YmMyMCk7CisJfQorCisJaWYgKGF0aHJzMTdfcGh5X2lzX2xpbmtfYWxpdmUoZGV2bmFtZSwgcGh5VW5pdCkpIHsKKwkJbGl2ZUxpbmtzKys7CisJCVMxN19JU19QSFlfQUxJVkUocGh5VW5pdCkgPSBUUlVFOworCX0gZWxzZSB7CisJCVMxN19JU19QSFlfQUxJVkUocGh5VW5pdCkgPSBGQUxTRTsKKwl9CisKKy8vCXByaW50ZigiZXRoJWQ6IFBoeSBTcGVjaWZpYyBTdGF0dXM9JTQuNHhcbiIsIG1kZXYtPnJlYWQobWRldiwgUzE3X1BIWUFERFIocGh5VW5pdCksUzE3X1BIWV9TUEVDX1NUQVRVUykpOworLy8JcHJpbnRrKCJQaHkgc2V0dXAgQ29tcGxldGVcbiIpOyAKKworCit9CisKK2ludAorYXRocnMxN19waHlfc2V0dXAoY2hhciAqZGV2bmFtZSwgaW50IHBoeVVuaXQpCit7CisJaW50IGk7CisKKyAgICAgICAgaWYocGh5VW5pdCA9PSBTMTdfUEhZNF9BRERSKQorICAgICAgICB7Ly9XQU4gUEhZCisgICAgICAgICAgICAgICAgYXRocnMxN19waHlfaW5pdChkZXZuYW1lLCBwaHlVbml0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHBoeVVuaXQgPCBTMTdfUEhZNF9BRERSKQorICAgICAgICB7Ly9MQU4gUEhZcworICAgICAgICAgICAgICAgIGZvcihpID0gMCA7IGkgPFMxN19QSFk0X0FERFI7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdGhyczE3X3BoeV9pbml0KGRldm5hbWUsIGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCisKK3Vuc2lnbmVkIGludCBhdGhyczE3X3JlZ19yZWFkKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGludCByZWdfYWRkcikKK3sKKwl1aW50MzJfdCByZWdfd29yZF9hZGRyOworCXVpbnQzMl90IHBoeV9hZGRyLCB0bXBfdmFsLCByZWdfdmFsOworCXVpbnQxNl90IHBoeV92YWw7CisJdWludDhfdCBwaHlfcmVnOworCisJLyogY2hhbmdlIHJlZ19hZGRyIHRvIDE2LWJpdCB3b3JkIGFkZHJlc3MsIDMyLWJpdCBhbGlnbmVkICovCisJcmVnX3dvcmRfYWRkciA9IChyZWdfYWRkciAmIDB4ZmZmZmZmZmMpID4+IDE7CisKKwkvKiBjb25maWd1cmUgcmVnaXN0ZXIgaGlnaCBhZGRyZXNzICovCisJcGh5X2FkZHIgPSAweDE4OworCXBoeV9yZWcgPSAweDA7CisJcGh5X3ZhbCA9ICh1aW50MTZfdCkgKChyZWdfd29yZF9hZGRyID4+IDgpICYgMHgzZmYpOyAgLyogYml0MTYtOCBvZiByZWcgYWRkcmVzcyAqLworCW1paXBoeV93cml0ZSAoZGV2bmFtZSwgcGh5X2FkZHIsIHBoeV9yZWcsIHBoeV92YWwpOwkKKworCS8qIEZvciBzb21lIHJlZ2lzdGVycyBzdWNoIGFzIE1JQnMsIHNpbmNlIGl0IGlzIHJlYWQvY2xlYXIsIHdlIHNob3VsZCAqLworCS8qIHJlYWQgdGhlIGxvd2VyIDE2LWJpdCByZWdpc3RlciB0aGVuIHRoZSBoaWdoZXIgb25lICovCisKKwkvKiByZWFkIHJlZ2lzdGVyIGluIGxvd2VyIGFkZHJlc3MgKi8KKwlwaHlfYWRkciA9IDB4MTAgfCAoKHJlZ193b3JkX2FkZHIgPj4gNSkgJiAweDcpOyAvKiBiaXQ3LTUgb2YgcmVnIGFkZHJlc3MgKi8KKwlwaHlfcmVnID0gKHVpbnQ4X3QpIChyZWdfd29yZF9hZGRyICYgMHgxZik7ICAgLyogYml0NC0wIG9mIHJlZyBhZGRyZXNzICovCisJbWlpcGh5X3JlYWQgKGRldm5hbWUsIHBoeV9hZGRyLCBwaHlfcmVnLCAmcmVnX3ZhbCk7CisKKwkvKiByZWFkIHJlZ2lzdGVyIGluIGhpZ2hlciBhZGRyZXNzICovCisJcmVnX3dvcmRfYWRkcisrOworCXBoeV9hZGRyID0gMHgxMCB8ICgocmVnX3dvcmRfYWRkciA+PiA1KSAmIDB4Nyk7IC8qIGJpdDctNSBvZiByZWcgYWRkcmVzcyAqLworCXBoeV9yZWcgPSAodWludDhfdCkgKHJlZ193b3JkX2FkZHIgJiAweDFmKTsgICAvKiBiaXQ0LTAgb2YgcmVnIGFkZHJlc3MgKi8KKwltaWlwaHlfcmVhZCAoZGV2bmFtZSwgcGh5X2FkZHIsIHBoeV9yZWcsICZ0bXBfdmFsKTsKKwlyZWdfdmFsIHw9ICh0bXBfdmFsIDw8IDE2KTsKKworLy8JcHJpbnRmKCIlczogcmVnIDB4JXggdmFsIDB4JXhcbiIsX19mdW5jX18sIHJlZ19hZGRyLCByZWdfdmFsKTsKKworCXJldHVybiByZWdfdmFsOyAgIAorfQorCit2b2lkIGF0aHJzMTdfcmVnX3dyaXRlKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGludCByZWdfYWRkciwgdW5zaWduZWQgaW50IHJlZ192YWwpCit7CisJdWludDMyX3QgcmVnX3dvcmRfYWRkcjsKKwl1aW50MzJfdCBwaHlfYWRkcjsKKwl1aW50MTZfdCBwaHlfdmFsOworCXVpbnQ4X3QgcGh5X3JlZzsKKworLy8JcHJpbnRmKCIlczogcmVnIDB4JXggdmFsIDB4JXhcbiIsX19mdW5jX18sIHJlZ19hZGRyLCByZWdfdmFsKTsKKworCS8qIGNoYW5nZSByZWdfYWRkciB0byAxNi1iaXQgd29yZCBhZGRyZXNzLCAzMi1iaXQgYWxpZ25lZCAqLworCXJlZ193b3JkX2FkZHIgPSAocmVnX2FkZHIgJiAweGZmZmZmZmZjKSA+PiAxOworCisJLyogY29uZmlndXJlIHJlZ2lzdGVyIGhpZ2ggYWRkcmVzcyAqLworICAgIHBoeV9hZGRyID0gMHgxODsKKyAgICBwaHlfcmVnID0gMHgwOworICAgIHBoeV92YWwgPSAodWludDE2X3QpICgocmVnX3dvcmRfYWRkciA+PiA4KSAmIDB4M2ZmKTsgIC8qIGJpdDE2LTggb2YgcmVnIGFkZHJlc3MgKi8KKyAgICBtaWlwaHlfd3JpdGUgKGRldm5hbWUsIHBoeV9hZGRyLCBwaHlfcmVnLCBwaHlfdmFsKTsJCisKKyAgICAvKiBGb3IgUzE3IHJlZ2lzdGVycyBzdWNoIGFzIEFSTCBhbmQgVkxBTiwgc2luY2UgdGhleSBpbmNsdWRlIEJVU1kgYml0ICovCisgICAgLyogaW4gaGlnaGVyIGFkZHJlc3MsIHdlIHNob3VsZCB3cml0ZSB0aGUgbG93ZXIgMTYtYml0IHJlZ2lzdGVyIHRoZW4gdGhlICovCisgICAgLyogaGlnaGVyIG9uZSAqLworCisgICAgLyogd3JpdGUgcmVnaXN0ZXIgaW4gbG93ZXIgYWRkcmVzcyAqLworICAgIHBoeV9hZGRyID0gMHgxMCB8ICgocmVnX3dvcmRfYWRkciA+PiA1KSAmIDB4Nyk7IC8qIGJpdDctNSBvZiByZWcgYWRkcmVzcyAqLworICAgIHBoeV9yZWcgPSAodWludDhfdCkgKHJlZ193b3JkX2FkZHIgJiAweDFmKTsgICAvKiBiaXQ0LTAgb2YgcmVnIGFkZHJlc3MgKi8KKyAgICBwaHlfdmFsID0gKHVpbnQxNl90KSAocmVnX3ZhbCAmIDB4ZmZmZik7CisgICAgbWlpcGh5X3dyaXRlIChkZXZuYW1lLCBwaHlfYWRkciwgcGh5X3JlZywgcGh5X3ZhbCk7CQorICAgIAorICAgIC8qIHJlYWQgcmVnaXN0ZXIgaW4gaGlnaGVyIGFkZHJlc3MgKi8KKyAgICByZWdfd29yZF9hZGRyKys7CisgICAgcGh5X2FkZHIgPSAweDEwIHwgKChyZWdfd29yZF9hZGRyID4+IDUpICYgMHg3KTsgLyogYml0Ny01IG9mIHJlZyBhZGRyZXNzICovCisgICAgcGh5X3JlZyA9ICh1aW50OF90KSAocmVnX3dvcmRfYWRkciAmIDB4MWYpOyAgIC8qIGJpdDQtMCBvZiByZWcgYWRkcmVzcyAqLworICAgIHBoeV92YWwgPSAodWludDE2X3QpICgocmVnX3ZhbCA+PiAxNikgJiAweGZmZmYpOworICAgIG1paXBoeV93cml0ZSAoZGV2bmFtZSwgcGh5X2FkZHIsIHBoeV9yZWcsIHBoeV92YWwpOwkKKworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9hcjgzMjguaCBiL2RyaXZlcnMvYzIwMDBfZXRoL2FyODMyOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZTkxYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9hcjgzMjguaApAQCAtMCwwICsxLDQ5OSBAQAorI2lmbmRlZiBfQVRIUlMxN19QSFlfSAorI2RlZmluZSBfQVRIUlMxN19QSFlfSAorCisvKioqKioqKioqKioqKioqKiovCisvKiBQSFkgUmVnaXN0ZXJzICovCisvKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFMxN19QSFlfQ09OVFJPTCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTMTdfUEhZX1NUQVRVUyAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUzE3X1BIWV9JRDEgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFMxN19QSFlfSUQyICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBTMTdfQVVUT05FR19BRFZFUlQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUzE3X0xJTktfUEFSVE5FUl9BQklMSVRZICAgICAgICA1CisjZGVmaW5lIFMxN19BVVRPTkVHX0VYUEFOU0lPTiAgICAgICAgICAgNgorI2RlZmluZSBTMTdfTkVYVF9QQUdFX1RSQU5TTUlUICAgICAgICAgIDcKKyNkZWZpbmUgUzE3X0xJTktfUEFSVE5FUl9ORVhUX1BBR0UgICAgICA4CisjZGVmaW5lIFMxN18xMDAwQkFTRVRfQ09OVFJPTCAgICAgICAgICAgOQorI2RlZmluZSBTMTdfMTAwMEJBU0VUX1NUQVRVUyAgICAgICAgICAgIDEwCisjZGVmaW5lIFMxN19NTURfQ1RSTF9SRUcJCTEzCisjZGVmaW5lIFMxN19NTURfREFUQV9SRUcgICAgCSAgICAgICAgMTQKKyNkZWZpbmUgUzE3X1BIWV9TUEVDX0NPTlRST0wgICAgICAgICAgICAxNgorI2RlZmluZSBTMTdfUEhZX1NQRUNfU1RBVFVTICAgICAgICAgICAgIDE3CisjZGVmaW5lIFMxN19QSFlfSU5UUl9FTkFCTEUgICAgICAgICAgICAgMTgKKyNkZWZpbmUgUzE3X1BIWV9JTlRSX1NUQVRVUyAgICAgICAgICAgICAxOQorI2RlZmluZSBTMTdfREVCVUdfUE9SVF9BRERSRVNTICAgICAgICAgIDI5CisjZGVmaW5lIFMxN19ERUJVR19QT1JUX0RBVEEgICAgICAgICAgICAgMzAKKworLyogUzE3IENTUiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzE3X01BU0tfQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgUzE3X1AwUEFEX01PREVfUkVHICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgUzE3X1A1UEFEX01PREVfUkVHICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgUzE3X1A2UEFEX01PREVfUkVHICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgUzE3X1BXU19SRUcgICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgUzE3X0dMT0JBTF9JTlQwX1JFRyAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgUzE3X0dMT0JBTF9JTlQxX1JFRyAgICAgICAgICAgICAweDAwMjQKKyNkZWZpbmUgUzE3X0dMT0JBTF9JTlRNQVNLMCAgICAgICAgICAgICAweDAwMjgKKyNkZWZpbmUgUzE3X0dMT0JBTF9JTlRNQVNLMSAgICAgICAgICAgICAweDAwMmMKKyNkZWZpbmUgUzE3X01PRFVMRV9FTl9SRUcgICAgICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgUzE3X01JQl9SRUcgICAgICAgICAgICAgICAgICAgICAweDAwMzQKKyNkZWZpbmUgUzE3X0lOVEZfSElBRERSX1JFRyAgICAgICAgICAgICAweDAwMzgKKyNkZWZpbmUgUzE3X01ESU9fQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwM2MKKyNkZWZpbmUgUzE3X0JJU1RfQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgUzE3X0JJU1RfUkVDX1JFRyAgICAgICAgICAgICAgICAweDAwNDQKKyNkZWZpbmUgUzE3X1NFUlZJQ0VfUkVHICAgICAgICAgICAgICAgICAweDAwNDgKKyNkZWZpbmUgUzE3X0xFRF9DVFJMMF9SRUcgICAgICAgICAgICAgICAweDAwNTAKKyNkZWZpbmUgUzE3X0xFRF9DVFJMMV9SRUcgICAgICAgICAgICAgICAweDAwNTQKKyNkZWZpbmUgUzE3X0xFRF9DVFJMMl9SRUcgICAgICAgICAgICAgICAweDAwNTgKKyNkZWZpbmUgUzE3X0xFRF9DVFJMM19SRUcgICAgICAgICAgICAgICAweDAwNWMKKyNkZWZpbmUgUzE3X01BQ0FERFIwX1JFRyAgICAgICAgICAgICAgICAweDAwNjAKKyNkZWZpbmUgUzE3X01BQ0FERFIxX1JFRyAgICAgICAgICAgICAgICAweDAwNjQKKyNkZWZpbmUgUzE3X01BWF9GUkFNRV9TSVpFX1JFRyAgICAgICAgICAweDAwNzgKKyNkZWZpbmUgUzE3X1AwU1RBVFVTX1JFRyAgICAgICAgICAgICAgICAweDAwN2MKKyNkZWZpbmUgUzE3X1AxU1RBVFVTX1JFRyAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgUzE3X1AyU1RBVFVTX1JFRyAgICAgICAgICAgICAgICAweDAwODQKKyNkZWZpbmUgUzE3X1AzU1RBVFVTX1JFRyAgICAgICAgICAgICAgICAweDAwODgKKyNkZWZpbmUgUzE3X1A0U1RBVFVTX1JFRyAgICAgICAgICAgICAgICAweDAwOGMKKyNkZWZpbmUgUzE3X1A1U1RBVFVTX1JFRyAgICAgICAgICAgICAgICAweDAwOTAKKyNkZWZpbmUgUzE3X1A2U1RBVFVTX1JFRyAgICAgICAgICAgICAgICAweDAwOTQKKyNkZWZpbmUgUzE3X0hEUkNUUkxfUkVHICAgICAgICAgICAgICAgICAweDAwOTgKKyNkZWZpbmUgUzE3X1AwSERSQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwOWMKKyNkZWZpbmUgUzE3X1AxSERSQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwQTAKKyNkZWZpbmUgUzE3X1AySERSQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwYTQKKyNkZWZpbmUgUzE3X1AzSERSQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwYTgKKyNkZWZpbmUgUzE3X1A0SERSQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwYWMKKyNkZWZpbmUgUzE3X1A1SERSQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwYjAKKyNkZWZpbmUgUzE3X1A2SERSQ1RSTF9SRUcgICAgICAgICAgICAgICAweDAwYjQKKyNkZWZpbmUgUzE3X1NHTUlJX0NUUkxfUkVHICAgICAgICAgICAgICAweDAwZTAKKyNkZWZpbmUgUzE3X0VFRV9DVFJMX1JFRwkJMHgwMTAwCisKKy8qIEFDTCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzE3X0FDTF9GVU5DMF9SRUcgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgUzE3X0FDTF9GVU5DMV9SRUcgICAgICAgICAgICAgICAweDA0MDQKKyNkZWZpbmUgUzE3X0FDTF9GVU5DMl9SRUcgICAgICAgICAgICAgICAweDA0MDgKKyNkZWZpbmUgUzE3X0FDTF9GVU5DM19SRUcgICAgICAgICAgICAgICAweDA0MGMKKyNkZWZpbmUgUzE3X0FDTF9GVU5DNF9SRUcgICAgICAgICAgICAgICAweDA0MTAKKyNkZWZpbmUgUzE3X0FDTF9GVU5DNV9SRUcgICAgICAgICAgICAgICAweDA0MTQKKyNkZWZpbmUgUzE3X1BSSVZBVEVfSVBfUkVHICAgICAgICAgICAgICAweDA0MTgKKyNkZWZpbmUgUzE3X1AwVkxBTl9DVFJMMF9SRUcgICAgICAgICAgICAweDA0MjAKKyNkZWZpbmUgUzE3X1AwVkxBTl9DVFJMMV9SRUcgICAgICAgICAgICAweDA0MjQKKyNkZWZpbmUgUzE3X1AxVkxBTl9DVFJMMF9SRUcgICAgICAgICAgICAweDA0MjgKKyNkZWZpbmUgUzE3X1AxVkxBTl9DVFJMMV9SRUcgICAgICAgICAgICAweDA0MmMKKyNkZWZpbmUgUzE3X1AyVkxBTl9DVFJMMF9SRUcgICAgICAgICAgICAweDA0MzAKKyNkZWZpbmUgUzE3X1AyVkxBTl9DVFJMMV9SRUcgICAgICAgICAgICAweDA0MzQKKyNkZWZpbmUgUzE3X1AzVkxBTl9DVFJMMF9SRUcgICAgICAgICAgICAweDA0MzgKKyNkZWZpbmUgUzE3X1AzVkxBTl9DVFJMMV9SRUcgICAgICAgICAgICAweDA0M2MKKyNkZWZpbmUgUzE3X1A0VkxBTl9DVFJMMF9SRUcgICAgICAgICAgICAweDA0NDAKKyNkZWZpbmUgUzE3X1A0VkxBTl9DVFJMMV9SRUcgICAgICAgICAgICAweDA0NDQKKyNkZWZpbmUgUzE3X1A1VkxBTl9DVFJMMF9SRUcgICAgICAgICAgICAweDA0NDgKKyNkZWZpbmUgUzE3X1A1VkxBTl9DVFJMMV9SRUcgICAgICAgICAgICAweDA0NGMKKyNkZWZpbmUgUzE3X1A2VkxBTl9DVFJMMF9SRUcgICAgICAgICAgICAweDA0NTAKKyNkZWZpbmUgUzE3X1A2VkxBTl9DVFJMMV9SRUcgICAgICAgICAgICAweDA0NTQKKworLyogVGFibGUgTG9va3VwIFJlZ2lzdGVycyAqLworI2RlZmluZSBTMTdfQVRVX0RBVEEwX1JFRyAgICAgICAgICAgICAgIDB4MDYwMAorI2RlZmluZSBTMTdfQVRVX0RBVEExX1JFRyAgICAgICAgICAgICAgIDB4MDYwNAorI2RlZmluZSBTMTdfQVRVX0RBVEEyX1JFRyAgICAgICAgICAgICAgIDB4MDYwOAorI2RlZmluZSBTMTdfQVRVX0ZVTkNfUkVHICAgICAgICAgICAgICAgIDB4MDYwQworI2RlZmluZSBTMTdfVlRVX0ZVTkMwX1JFRyAgICAgICAgICAgICAgIDB4MDYxMAorI2RlZmluZSBTMTdfVlRVX0ZVTkMxX1JFRyAgICAgICAgICAgICAgIDB4MDYxNAorI2RlZmluZSBTMTdfQVJMX0NUUkxfUkVHICAgICAgICAgICAgICAgIDB4MDYxOAorI2RlZmluZSBTMTdfR0xPRldfQ1RSTDBfUkVHICAgICAgICAgICAgIDB4MDYyMAorI2RlZmluZSBTMTdfR0xPRldfQ1RSTDFfUkVHICAgICAgICAgICAgIDB4MDYyNAorI2RlZmluZSBTMTdfR0xPTEVBUk5fTElNSVRfUkVHICAgICAgICAgIDB4MDYyOAorI2RlZmluZSBTMTdfVE9TX1BSSU1BUF9SRUcwICAgICAgICAgICAgIDB4MDYzMAorI2RlZmluZSBTMTdfVE9TX1BSSU1BUF9SRUcxICAgICAgICAgICAgIDB4MDYzNAorI2RlZmluZSBTMTdfVE9TX1BSSU1BUF9SRUcyICAgICAgICAgICAgIDB4MDYzOAorI2RlZmluZSBTMTdfVE9TX1BSSU1BUF9SRUczICAgICAgICAgICAgIDB4MDYzYworI2RlZmluZSBTMTdfVE9TX1BSSU1BUF9SRUc0ICAgICAgICAgICAgIDB4MDY0MAorI2RlZmluZSBTMTdfVE9TX1BSSU1BUF9SRUc1ICAgICAgICAgICAgIDB4MDY0NAorI2RlZmluZSBTMTdfVE9TX1BSSU1BUF9SRUc2ICAgICAgICAgICAgIDB4MDY0OAorI2RlZmluZSBTMTdfVE9TX1BSSU1BUF9SRUc3ICAgICAgICAgICAgIDB4MDY0YworI2RlZmluZSBTMTdfVkxBTl9QUklNQVBfUkVHMCAgICAgICAgICAgIDB4MDY1MAorI2RlZmluZSBTMTdfTE9PUF9DSEVDS19SRUcgICAgICAgICAgICAgIDB4MDY1NAorI2RlZmluZSBTMTdfUDBMT09LVVBfQ1RSTF9SRUcgICAgICAgICAgIDB4MDY2MAorI2RlZmluZSBTMTdfUDBQUklfQ1RSTF9SRUcgICAgICAgICAgICAgIDB4MDY2NAorI2RlZmluZSBTMTdfUDBMRUFSTl9MTVRfUkVHICAgICAgICAgICAgIDB4MDY2OAorI2RlZmluZSBTMTdfUDFMT09LVVBfQ1RSTF9SRUcgICAgICAgICAgIDB4MDY2YworI2RlZmluZSBTMTdfUDFQUklfQ1RSTF9SRUcgICAgICAgICAgICAgIDB4MDY3MAorI2RlZmluZSBTMTdfUDFMRUFSTl9MTVRfUkVHICAgICAgICAgICAgIDB4MDY3NAorI2RlZmluZSBTMTdfUDJMT09LVVBfQ1RSTF9SRUcgICAgICAgICAgIDB4MDY3OAorI2RlZmluZSBTMTdfUDJQUklfQ1RSTF9SRUcgICAgICAgICAgICAgIDB4MDY3YworI2RlZmluZSBTMTdfUDJMRUFSTl9MTVRfUkVHICAgICAgICAgICAgIDB4MDY4MAorI2RlZmluZSBTMTdfUDNMT09LVVBfQ1RSTF9SRUcgICAgICAgICAgIDB4MDY4NAorI2RlZmluZSBTMTdfUDNQUklfQ1RSTF9SRUcgICAgICAgICAgICAgIDB4MDY4OAorI2RlZmluZSBTMTdfUDNMRUFSTl9MTVRfUkVHICAgICAgICAgICAgIDB4MDY4YworI2RlZmluZSBTMTdfUDRMT09LVVBfQ1RSTF9SRUcgICAgICAgICAgIDB4MDY5MAorI2RlZmluZSBTMTdfUDRQUklfQ1RSTF9SRUcgICAgICAgICAgICAgIDB4MDY5NAorI2RlZmluZSBTMTdfUDRMRUFSTl9MTVRfUkVHICAgICAgICAgICAgIDB4MDY5OAorI2RlZmluZSBTMTdfUDVMT09LVVBfQ1RSTF9SRUcgICAgICAgICAgIDB4MDY5YworI2RlZmluZSBTMTdfUDVQUklfQ1RSTF9SRUcgICAgICAgICAgICAgIDB4MDZhMAorI2RlZmluZSBTMTdfUDVMRUFSTl9MTVRfUkVHICAgICAgICAgICAgIDB4MDZhNAorI2RlZmluZSBTMTdfUDZMT09LVVBfQ1RSTF9SRUcgICAgICAgICAgIDB4MDZhOAorI2RlZmluZSBTMTdfUDZQUklfQ1RSTF9SRUcgICAgICAgICAgICAgIDB4MDZhYworI2RlZmluZSBTMTdfUDZMRUFSTl9MTVRfUkVHICAgICAgICAgICAgIDB4MDZiMAorI2RlZmluZSBTMTdfR0xPX1RSVU5LX0NUUkwwX1JFRyAgICAgICAgIDB4MDcwMAorI2RlZmluZSBTMTdfR0xPX1RSVU5LX0NUUkwxX1JFRyAgICAgICAgIDB4MDcwNAorI2RlZmluZSBTMTdfR0xPX1RSVU5LX0NUUkwyX1JFRyAgICAgICAgIDB4MDcwOAorCisvKiBRdWV1ZSBNYW5hZ2VtZW50IFJlZ2lzdGVycyAqLworI2RlZmluZSBTMTdfUE9SVDBfSE9MX0NUUkwwCQkweDA5NzAKKyNkZWZpbmUgUzE3X1BPUlQwX0hPTF9DVFJMMQkJMHgwOTc0CisjZGVmaW5lIFMxN19QT1JUMV9IT0xfQ1RSTDAJCTB4MDk3OAorI2RlZmluZSBTMTdfUE9SVDFfSE9MX0NUUkwxCQkweDA5N2MKKyNkZWZpbmUgUzE3X1BPUlQyX0hPTF9DVFJMMAkJMHgwOTgwCisjZGVmaW5lIFMxN19QT1JUMl9IT0xfQ1RSTDEJCTB4MDk4NAorI2RlZmluZSBTMTdfUE9SVDNfSE9MX0NUUkwwCQkweDA5ODgKKyNkZWZpbmUgUzE3X1BPUlQzX0hPTF9DVFJMMQkJMHgwOThjCisjZGVmaW5lIFMxN19QT1JUNF9IT0xfQ1RSTDAJCTB4MDk5MAorI2RlZmluZSBTMTdfUE9SVDRfSE9MX0NUUkwxCQkweDA5OTQKKyNkZWZpbmUgUzE3X1BPUlQ1X0hPTF9DVFJMMAkJMHgwOTk4CisjZGVmaW5lIFMxN19QT1JUNV9IT0xfQ1RSTDEJCTB4MDk5YworI2RlZmluZSBTMTdfUE9SVDZfSE9MX0NUUkwwCQkweDA5YTAKKyNkZWZpbmUgUzE3X1BPUlQ2X0hPTF9DVFJMMQkJMHgwOWE0CisKKy8qIFBvcnQgZmxvdyBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBTMTdfUDBfRkxDVExfUkVHCQkweDA5YjAKKyNkZWZpbmUgUzE3X1AxX0ZMQ1RMX1JFRwkJMHgwOWI0CisjZGVmaW5lIFMxN19QMl9GTENUTF9SRUcJCTB4MDliOAorI2RlZmluZSBTMTdfUDNfRkxDVExfUkVHCQkweDA5YmMKKyNkZWZpbmUgUzE3X1A0X0ZMQ1RMX1JFRwkJMHgwOWMwCisjZGVmaW5lIFMxN19QNV9GTENUTF9SRUcJCTB4MDljNAorCisvKiBQYWNrZXQgRWRpdCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzE3X1BLVF9FRElUX0NUUkwJCTB4MGMwMAorI2RlZmluZSBTMTdfUDBRX1JFTUFQX1JFRzAJCTB4MGM0MAorI2RlZmluZSBTMTdfUDBRX1JFTUFQX1JFRzEJCTB4MGM0NAorI2RlZmluZSBTMTdfUDFRX1JFTUFQX1JFRzAJCTB4MGM0OAorI2RlZmluZSBTMTdfUDJRX1JFTUFQX1JFRzAJCTB4MGM0YworI2RlZmluZSBTMTdfUDNRX1JFTUFQX1JFRzAJCTB4MGM1MAorI2RlZmluZSBTMTdfUDRRX1JFTUFQX1JFRzAJCTB4MGM1NAorI2RlZmluZSBTMTdfUDVRX1JFTUFQX1JFRzAJCTB4MGM1OAorI2RlZmluZSBTMTdfUDVRX1JFTUFQX1JFRzEJCTB4MGM1YworI2RlZmluZSBTMTdfUDZRX1JFTUFQX1JFRzAJCTB4MGM2MAorI2RlZmluZSBTMTdfUDZRX1JFTUFQX1JFRzEJCTB4MGM2NAorI2RlZmluZSBTMTdfUk9VVEVSX1ZJRDAJCQkweDBjNzAKKyNkZWZpbmUgUzE3X1JPVVRFUl9WSUQxCQkJMHgwYzc0CisjZGVmaW5lIFMxN19ST1VURVJfVklEMgkJCTB4MGM3OAorI2RlZmluZSBTMTdfUk9VVEVSX1ZJRDMJCQkweDBjN2MKKyNkZWZpbmUgUzE3X1JPVVRFUl9FR19WTEFOX01PREUJCTB4MGM4MAorCisvKiBMMyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzE3X0hST1VURVJfQ1RSTF9SRUcgICAgICAgICAgICAweDBlMDAKKyNkZWZpbmUgUzE3X0hST1VURVJfUEJDVFJMMF9SRUcgICAgICAgICAweDBlMDQKKyNkZWZpbmUgUzE3X0hST1VURVJfUEJDVFJMMV9SRUcgICAgICAgICAweDBlMDgKKyNkZWZpbmUgUzE3X0hST1VURVJfUEJDVFJMMl9SRUcgICAgICAgICAweDBlMGMKKyNkZWZpbmUgUzE3X1dDTVBfSEFTSF9UQUJMRTBfUkVHICAgICAgICAweDBlMTAKKyNkZWZpbmUgUzE3X1dDTVBfSEFTSF9UQUJMRTFfUkVHICAgICAgICAweDBlMTQKKyNkZWZpbmUgUzE3X1dDTVBfSEFTSF9UQUJMRTJfUkVHICAgICAgICAweDBlMTgKKyNkZWZpbmUgUzE3X1dDTVBfSEFTSF9UQUJMRTNfUkVHICAgICAgICAweDBlMWMKKyNkZWZpbmUgUzE3X1dDTVBfTkhPUF9UQUJMRTBfUkVHICAgICAgICAweDBlMjAKKyNkZWZpbmUgUzE3X1dDTVBfTkhPUF9UQUJMRTFfUkVHICAgICAgICAweDBlMjQKKyNkZWZpbmUgUzE3X1dDTVBfTkhPUF9UQUJMRTJfUkVHICAgICAgICAweDBlMjgKKyNkZWZpbmUgUzE3X1dDTVBfTkhPUF9UQUJMRTNfUkVHICAgICAgICAweDBlMmMKKyNkZWZpbmUgUzE3X0FSUF9FTlRSWV9DVFJMX1JFRyAgICAgICAgICAweDBlMzAKKyNkZWZpbmUgUzE3X0FSUF9VU0VDTlRfUkVHICAgICAgICAgICAgICAweDBlMzQKKyNkZWZpbmUgUzE3X0hOQVRfQ1RSTF9SRUcgICAgICAgICAgICAgICAweDBlMzgKKyNkZWZpbmUgUzE3X05BUFRfRU5UUllfQ1RSTDBfUkVHICAgICAgICAweDBlM2MKKyNkZWZpbmUgUzE3X05BUFRfRU5UUllfQ1RSTDFfUkVHICAgICAgICAweDBlNDAKKyNkZWZpbmUgUzE3X05BUFRfVVNFQ05UX1JFRyAgICAgICAgICAgICAweDBlNDQKKyNkZWZpbmUgUzE3X0VOVFJZX0VESVRfREFUQTBfUkVHICAgICAgICAweDBlNDgKKyNkZWZpbmUgUzE3X0VOVFJZX0VESVRfREFUQTFfUkVHICAgICAgICAweDBlNGMKKyNkZWZpbmUgUzE3X0VOVFJZX0VESVRfREFUQTJfUkVHICAgICAgICAweDBlNTAKKyNkZWZpbmUgUzE3X0VOVFJZX0VESVRfREFUQTNfUkVHICAgICAgICAweDBlNTQKKyNkZWZpbmUgUzE3X0VOVFJZX0VESVRfQ1RSTF9SRUcgICAgICAgICAweDBlNTgKKyNkZWZpbmUgUzE3X0hOQVRfUFJJVkFURV9JUF9SRUcgICAgICAgICAweDBlNWMKKworLyogTUlCIGNvdW50ZXJzICovCisjZGVmaW5lIFMxN19NSUJfUE9SVDAJCQkweDEwMDAKKyNkZWZpbmUgUzE3X01JQl9QT1JUMQkJCTB4MTEwMAorI2RlZmluZSBTMTdfTUlCX1BPUlQyCQkJMHgxMjAwCisjZGVmaW5lIFMxN19NSUJfUE9SVDMJCQkweDEzMDAKKyNkZWZpbmUgUzE3X01JQl9QT1JUNAkJCTB4MTQwMAorI2RlZmluZSBTMTdfTUlCX1BPUlQ1CQkJMHgxNTAwCisjZGVmaW5lIFMxN19NSUJfUE9SVDYJCQkweDE2MDAKKworI2RlZmluZSBTMTdfTUlCX1JYQlJPQUQJCQkweDAKKyNkZWZpbmUgUzE3X01JQl9SWFBBVVNFCQkJMHg0CisjZGVmaW5lIFMxN19NSUJfUlhNVUxUSQkJCTB4OAorI2RlZmluZSBTMTdfTUlCX1JYRkNTRVJSCQkweEMKKyNkZWZpbmUgUzE3X01JQl9SWEFMSUdORVJSCQkweDEwCisjZGVmaW5lIFMxN19NSUJfUlhVTkRFUlNJWkUJCTB4MTQKKyNkZWZpbmUgUzE3X01JQl9SWEZSQUcJCQkweDE4CisjZGVmaW5lIFMxN19NSUJfUlg2NEIJCQkweDFDCisjZGVmaW5lIFMxN19NSUJfUlgxMjhCCQkJMHgyMAorI2RlZmluZSBTMTdfTUlCX1JYMjU2QgkJCTB4MjQKKyNkZWZpbmUgUzE3X01JQl9SWDUxMkIJCQkweDI4CisjZGVmaW5lIFMxN19NSUJfUlgxMDI0QgkJCTB4MkMKKyNkZWZpbmUgUzE3X01JQl9SWDE1MThCCQkJMHgzMAorI2RlZmluZSBTMTdfTUlCX1JYTUFYQgkJCTB4MzQKKyNkZWZpbmUgUzE3X01JQl9SWFRPT0xPTkcJCTB4MzgKKyNkZWZpbmUgUzE3X01JQl9SWEJZVEUxCQkJMHgzQworI2RlZmluZSBTMTdfTUlCX1JYQllURTIJCQkweDQwCisjZGVmaW5lIFMxN19NSUJfUlhPVkVSRkxPVwkJMHg0QworI2RlZmluZSBTMTdfTUlCX0ZJTFRFUkVECQkweDUwCisjZGVmaW5lIFMxN19NSUJfVFhCUk9BRAkJCTB4NTQKKyNkZWZpbmUgUzE3X01JQl9UWFBBVVNFCQkJMHg1OAorI2RlZmluZSBTMTdfTUlCX1RYTVVMVEkJCQkweDVDCisjZGVmaW5lIFMxN19NSUJfVFhVTkRFUlJVTgkJMHg2MAorI2RlZmluZSBTMTdfTUlCX1RYNjRCCQkJMHg2NAorI2RlZmluZSBTMTdfTUlCX1RYMTI4QgkJCTB4NjgKKyNkZWZpbmUgUzE3X01JQl9UWDI1NkIJCQkweDZjCisjZGVmaW5lIFMxN19NSUJfVFg1MTJCCQkJMHg3MAorI2RlZmluZSBTMTdfTUlCX1RYMTAyNEIJCQkweDc0CisjZGVmaW5lIFMxN19NSUJfVFgxNTE4QgkJCTB4NzgKKyNkZWZpbmUgUzE3X01JQl9UWE1BWEIJCQkweDdDCisjZGVmaW5lIFMxN19NSUJfVFhPVkVSU0laRQkJMHg4MAorI2RlZmluZSBTMTdfTUlCX1RYQllURTEJCQkweDg0CisjZGVmaW5lIFMxN19NSUJfVFhCWVRFMgkJCTB4ODgKKyNkZWZpbmUgUzE3X01JQl9UWENPTAkJCTB4OEMKKyNkZWZpbmUgUzE3X01JQl9UWEFCT1JUQ09MCQkweDkwCisjZGVmaW5lIFMxN19NSUJfVFhNVUxUSUNPTAkJMHg5NAorI2RlZmluZSBTMTdfTUlCX1RYU0lOR0xFQ09MCQkweDk4CisjZGVmaW5lIFMxN19NSUJfVFhFWENERUZFUgkJMHg5QworI2RlZmluZSBTMTdfTUlCX1RYREVGRVIJCQkweEEwCisjZGVmaW5lIFMxN19NSUJfVFhMQVRFQ09MCQkweEE0CisKKy8qIFJlZ2lzdGVyIGZpZWxkcyAqLworI2RlZmluZSBTMTdfQ0hJUElEX1YxXzAJCQkweDEyMDEKKyNkZWZpbmUgUzE3X0NISVBJRF9WMV8xCQkJMHgxMjAyCisKKyNkZWZpbmUgUzE3X01BQzBfTUFDX01JSV9SWENMS19TRUwJKDEgPDwgMCkKKyNkZWZpbmUgUzE3X01BQzBfTUFDX01JSV9UWENMS19TRUwJKDEgPDwgMSkKKyNkZWZpbmUgUzE3X01BQzBfTUFDX01JSV9FTgkJKDEgPDwgMikKKyNkZWZpbmUgUzE3X01BQzBfTUFDX0dNSUlfUlhDTEtfU0VMCSgxIDw8IDQpCisjZGVmaW5lIFMxN19NQUMwX01BQ19HTUlJX1RYQ0xLX1NFTAkoMSA8PCA1KQorI2RlZmluZSBTMTdfTUFDMF9NQUNfR01JSV9FTgkJKDEgPDwgNikKKyNkZWZpbmUgUzE3X01BQzBfU0dNSUlfRU4JCSgxIDw8IDcpCisjZGVmaW5lIFMxN19NQUMwX1BIWV9NSUlfUlhDTEtfU0VMCSgxIDw8IDgpCisjZGVmaW5lIFMxN19NQUMwX1BIWV9NSUlfVFhDTEtfU0VMCSgxIDw8IDkpCisjZGVmaW5lIFMxN19NQUMwX1BIWV9NSUlfRU4JCSgxIDw8IDEwKQorI2RlZmluZSBTMTdfTUFDMF9QSFlfTUlJX1BJUEVfU0VMCSgxIDw8IDExKQorI2RlZmluZSBTMTdfTUFDMF9QSFlfR01JSV9SWENMS19TRUwJKDEgPDwgMTIpCisjZGVmaW5lIFMxN19NQUMwX1BIWV9HTUlJX1RYQ0xLX1NFTAkoMSA8PCAxMykKKyNkZWZpbmUgUzE3X01BQzBfUEhZX0dNSUlfRU4JCSgxIDw8IDE0KQorI2RlZmluZSBTMTdfTUFDMF9SR01JSV9SWENMS19TSElGVAkyMAorI2RlZmluZSBTMTdfTUFDMF9SR01JSV9UWENMS19TSElGVAkyMgorI2RlZmluZSBTMTdfTUFDMF9SR01JSV9SWENMS19ERUxBWQkoMSA8PCAyNCkKKyNkZWZpbmUgUzE3X01BQzBfUkdNSUlfVFhDTEtfREVMQVkJKDEgPDwgMjUpCisjZGVmaW5lIFMxN19NQUMwX1JHTUlJX0VOCQkoMSA8PCAyNikKKworI2RlZmluZSBTMTdfTUFDNV9NQUNfTUlJX1JYQ0xLX1NFTAkoMSA8PCAwKQorI2RlZmluZSBTMTdfTUFDNV9NQUNfTUlJX1RYQ0xLX1NFTAkoMSA8PCAxKQorI2RlZmluZSBTMTdfTUFDNV9NQUNfTUlJX0VOCQkoMSA8PCAyKQorI2RlZmluZSBTMTdfTUFDNV9QSFlfTUlJX1JYQ0xLX1NFTAkoMSA8PCA4KQorI2RlZmluZSBTMTdfTUFDNV9QSFlfTUlJX1RYQ0xLX1NFTAkoMSA8PCA5KQorI2RlZmluZSBTMTdfTUFDNV9QSFlfTUlJX0VOCQkoMSA8PCAxMCkKKyNkZWZpbmUgUzE3X01BQzVfUEhZX01JSV9QSVBFX1NFTAkoMSA8PCAxMSkKKyNkZWZpbmUgUzE3X01BQzVfUkdNSUlfUlhDTEtfU0hJRlQJMjAKKyNkZWZpbmUgUzE3X01BQzVfUkdNSUlfVFhDTEtfU0hJRlQJMjIKKyNkZWZpbmUgUzE3X01BQzVfUkdNSUlfUlhDTEtfREVMQVkJKDEgPDwgMjQpCisjZGVmaW5lIFMxN19NQUM1X1JHTUlJX1RYQ0xLX0RFTEFZCSgxIDw8IDI1KQorI2RlZmluZSBTMTdfTUFDNV9SR01JSV9FTgkJKDEgPDwgMjYpCisKKyNkZWZpbmUgUzE3X01BQzZfTUFDX01JSV9SWENMS19TRUwJKDEgPDwgMCkKKyNkZWZpbmUgUzE3X01BQzZfTUFDX01JSV9UWENMS19TRUwJKDEgPDwgMSkKKyNkZWZpbmUgUzE3X01BQzZfTUFDX01JSV9FTgkJKDEgPDwgMikKKyNkZWZpbmUgUzE3X01BQzZfTUFDX0dNSUlfUlhDTEtfU0VMCSgxIDw8IDQpCisjZGVmaW5lIFMxN19NQUM2X01BQ19HTUlJX1RYQ0xLX1NFTAkoMSA8PCA1KQorI2RlZmluZSBTMTdfTUFDNl9NQUNfR01JSV9FTgkJKDEgPDwgNikKKyNkZWZpbmUgUzE3X01BQzZfU0dNSUlfRU4JCSgxIDw8IDcpCisjZGVmaW5lIFMxN19NQUM2X1BIWV9NSUlfUlhDTEtfU0VMCSgxIDw8IDgpCisjZGVmaW5lIFMxN19NQUM2X1BIWV9NSUlfVFhDTEtfU0VMCSgxIDw8IDkpCisjZGVmaW5lIFMxN19NQUM2X1BIWV9NSUlfRU4JCSgxIDw8IDEwKQorI2RlZmluZSBTMTdfTUFDNl9QSFlfTUlJX1BJUEVfU0VMCSgxIDw8IDExKQorI2RlZmluZSBTMTdfTUFDNl9QSFlfR01JSV9SWENMS19TRUwJKDEgPDwgMTIpCisjZGVmaW5lIFMxN19NQUM2X1BIWV9HTUlJX1RYQ0xLX1NFTAkoMSA8PCAxMykKKyNkZWZpbmUgUzE3X01BQzZfUEhZX0dNSUlfRU4JCSgxIDw8IDE0KQorI2RlZmluZSBTMTdfUEhZNF9HTUlJX0VOCQkoMSA8PCAxNikKKyNkZWZpbmUgUzE3X1BIWTRfUkdNSUlfRU4JCSgxIDw8IDE3KQorI2RlZmluZSBTMTdfUEhZNF9NSUlfRU4JCQkoMSA8PCAxOCkKKyNkZWZpbmUgUzE3X01BQzZfUkdNSUlfUlhDTEtfU0hJRlQJMjAKKyNkZWZpbmUgUzE3X01BQzZfUkdNSUlfVFhDTEtfU0hJRlQJMjIKKyNkZWZpbmUgUzE3X01BQzZfUkdNSUlfUlhDTEtfREVMQVkJKDEgPDwgMjQpCisjZGVmaW5lIFMxN19NQUM2X1JHTUlJX1RYQ0xLX0RFTEFZCSgxIDw8IDI1KQorI2RlZmluZSBTMTdfTUFDNl9SR01JSV9FTgkJKDEgPDwgMjYpCisKKyNkZWZpbmUgUzE3X1NQRUVEXzEwTQkJCSgwIDw8IDApCisjZGVmaW5lIFMxN19TUEVFRF8xMDBNCQkJKDEgPDwgMCkKKyNkZWZpbmUgUzE3X1NQRUVEXzEwMDBNCQkJKDIgPDwgMCkKKyNkZWZpbmUgUzE3X1RYTUFDX0VOCQkJKDEgPDwgMikKKyNkZWZpbmUgUzE3X1JYTUFDX0VOCQkJKDEgPDwgMykKKyNkZWZpbmUgUzE3X1RYX0ZMT1dfRU4JCQkoMSA8PCA0KQorI2RlZmluZSBTMTdfUlhfRkxPV19FTgkJCSgxIDw8IDUpCisjZGVmaW5lIFMxN19EVVBMRVhfRlVMTAkJCSgxIDw8IDYpCisjZGVmaW5lIFMxN19EVVBMRVhfSEFMRgkJCSgwIDw8IDYpCisjZGVmaW5lIFMxN19UWF9IQUxGX0ZMT1dfRU4JCSgxIDw8IDcpCisjZGVmaW5lIFMxN19MSU5LX0VOCQkJKDEgPDwgOSkKKyNkZWZpbmUgUzE3X0ZMT1dfTElOS19FTgkJKDEgPDwgMTIpCisjZGVmaW5lIFMxN19QT1JUX1NUQVRVU19ERUZBVUxUCQkoUzE3X1NQRUVEXzEwMDBNIHwgUzE3X1RYTUFDX0VOIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMxN19SWE1BQ19FTiB8IFMxN19UWF9GTE9XX0VOIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMxN19SWF9GTE9XX0VOIHwgUzE3X0RVUExFWF9GVUxMIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMxN19UWF9IQUxGX0ZMT1dfRU4pCisKKyNkZWZpbmUgUzE3X1BPUlRfU1RBVFVTX0FaX0RFRkFVTFQJKFMxN19TUEVFRF8xMDAwTSB8IFMxN19UWE1BQ19FTiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTMTdfUlhNQUNfRU4gfCBTMTdfVFhfRkxPV19FTiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTMTdfUlhfRkxPV19FTiB8IFMxN19EVVBMRVhfRlVMTCkKKworCisjZGVmaW5lIFMxN19IRFJMRU5HVEhfU0VMCQkoMSA8PCAxNikKKyNkZWZpbmUgUzE3X0hEUl9WQUxVRQkJCTB4QUFBQQorCisjZGVmaW5lIFMxN19UWEhEUl9NT0RFX05PCQkwCisjZGVmaW5lIFMxN19UWEhEUl9NT0RFX01HTQkJMQorI2RlZmluZSBTMTdfVFhIRFJfTU9ERV9BTEwJCTIKKyNkZWZpbmUgUzE3X1JYSERSX01PREVfTk8JCSgwIDw8IDIpCisjZGVmaW5lIFMxN19SWEhEUl9NT0RFX01HTQkJKDEgPDwgMikKKyNkZWZpbmUgUzE3X1JYSERSX01PREVfQUxMCQkoMiA8PCAyKQorCisjZGVmaW5lIFMxN19DUFVfUE9SVF9FTgkJCSgxIDw8IDEwKQorI2RlZmluZSBTMTdfUFBQT0VfUkVESVJfRU4JCSgxIDw8IDgpCisjZGVmaW5lIFMxN19NSVJST1JfUE9SVF9TSElGVAkJNAorI2RlZmluZSBTMTdfSUdNUF9DT1BZX0VOCQkoMSA8PCAzKQorI2RlZmluZSBTMTdfUklQX0NPUFlfRU4JCQkoMSA8PCAyKQorI2RlZmluZSBTMTdfRUFQT0xfUkVESVJfRU4JCSgxIDw8IDApCisKKyNkZWZpbmUgUzE3X0lHTVBfSk9JTl9MRUFWRV9EUF9TSElGVAkyNAorI2RlZmluZSBTMTdfQlJPQURfRFBfU0hJRlQJCTE2CisjZGVmaW5lIFMxN19NVUxUSV9GTE9PRF9EUF9TSElGVAk4CisjZGVmaW5lIFMxN19VTklfRkxPT0RfRFBfU0hJRlQJCTAKKyNkZWZpbmUgUzE3X0lHTVBfSk9JTl9MRUFWRV9EUEFMTAkoMHgzZiA8PCBTMTdfSUdNUF9KT0lOX0xFQVZFX0RQX1NISUZUKQorI2RlZmluZSBTMTdfQlJPQURfRFBBTEwJCQkoMHgzZiA8PCBTMTdfQlJPQURfRFBfU0hJRlQpCisjZGVmaW5lIFMxN19NVUxUSV9GTE9PRF9EUEFMTAkJKDB4M2YgPDwgUzE3X01VTFRJX0ZMT09EX0RQX1NISUZUKQorI2RlZmluZSBTMTdfVU5JX0ZMT09EX0RQQUxMCQkoMHgzZiA8PCBTMTdfVU5JX0ZMT09EX0RQX1NISUZUKQorCisjZGVmaW5lIFMxN19QV1NfQ0hJUF9BUjgzMjcgICAgICAgICAgICAgKDEgPDwgMzApCisKKy8qIFMxN19QSFlfQ09OVFJPTCBmaWVsZHMgKi8KKyNkZWZpbmUgUzE3X0NUUkxfU09GVFdBUkVfUkVTRVQgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBTMTdfQ1RSTF9TUEVFRF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFMxN19DVFJMX0FVVE9ORUdPVElBVElPTl9FTkFCTEUgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgUzE3X0NUUkxfUkVTVEFSVF9BVVRPTkVHT1RJQVRJT04gICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBTMTdfQ1RSTF9TUEVFRF9GVUxMX0RVUExFWCAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFMxN19DVFJMX1NQRUVEX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAKKworLyogRm9yIEVFRV9DVFJMX1JFRyAqLworI2RlZmluZSBTMTdfTFBJX0RJU0FCTEVfUDEJCSAgICAgKDEgPDwgNCkKKyNkZWZpbmUgUzE3X0xQSV9ESVNBQkxFX1AyCQkgICAgICgxIDw8IDYpCisjZGVmaW5lIFMxN19MUElfRElTQUJMRV9QMwkJICAgICAoMSA8PCA4KQorI2RlZmluZSBTMTdfTFBJX0RJU0FCTEVfUDQJCSAgICAgKDEgPDwgMTApCisjZGVmaW5lIFMxN19MUElfRElTQUJMRV9QNQkJICAgICAoMSA8PCAxMikKKyNkZWZpbmUgUzE3X0xQSV9ESVNBQkxFX0FMTAkJICAgICAweDE1NTAKKworLyogRm9yIE1NRCByZWdpc3RlciBjb250cm9sICovCisjZGVmaW5lIFMxN19NTURfRlVOQ19BRERSCQkJKDAgPDwgMTQpCisjZGVmaW5lIFMxN19NTURfRlVOQ19EQVRBCQkJKDEgPDwgMTQpCisjZGVmaW5lIFMxN19NTURfRlVOQ19EQVRBXzIJCQkoMiA8PCAxNCkKKyNkZWZpbmUgUzE3X01NRF9GVU5DX0RBVEFfMwkJCSgzIDw8IDE0KQorCisvKiBGb3IgcGh5SW5mb190IGF6RmVhdHVyZSAqLworI2RlZmluZSBTMTdfODAyM0FaX1BIWV9FTkFCTEVECQkJKDEgPDwgMCkKKyNkZWZpbmUgUzE3XzgwMjNBWl9QSFlfTElOS0VEICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisKKy8qIFF1ZXVlIE1hbmFnZW1lbnQgcmVnaXN0ZSBmaWVsZHMgKi8KKyNkZWZpbmUgUzE3X0hPTF9DVFJMMF9MQU4JCTB4MmEwMDg4ODggLyogZWdyZXNzIHByaW9yaXR5IDgsIGVnX3BvcnRxID0gMHgyYSAqLworI2RlZmluZSBTMTdfSE9MX0NUUkwwX1dBTgkJMHgyYTY2NjY2NiAvKiBlZ3Jlc3MgcHJpb3JpdHkgNiwgZWdfcG9ydHEgPSAweDJhICovCisjZGVmaW5lIFMxN19IT0xfQ1RSTDFfREVGQVVMVAkJMHhjNgkgICAvKiBlbmFibGUgSE9MIGNvbnRyb2wgKi8KKworLyogUGFja2V0IEVkaXQgcmVnaXN0ZXIgZmllbGRzICovCisjZGVmaW5lIFMxN19ST1VURVJfRUdfVU5NT0QJCTB4MAkvKiB1bm1vZGlmaWVkICovCisjZGVmaW5lIFMxN19ST1VURVJfRUdfV09WTEFOCQkweDEJLyogd2l0aG91dCBWTEFOICovCisjZGVmaW5lIFMxN19ST1VURVJfRUdfV1ZMQU4JCTB4MgkvKiB3aXRoIFZMQU4gKi8KKyNkZWZpbmUgUzE3X1JPVVRFUl9FR19VTlRPVUNICQkweDMJLyogdW50b3VjaGVkICovCisjZGVmaW5lIFMxN19ST1VURVJfRUdfTU9ERV9ERUZBVUxUCTB4MDExMTExMTEgLyogYWxsIHBvcnRzIHdpdGhvdXQgVkxBTiAqLworCisjZGVmaW5lIFMxN19SRVNFVF9ET05FKHBoeV9jb250cm9sKSAgICAgICAgICAgICAgICAgICBcCisgICAgKCgocGh5X2NvbnRyb2wpICYgKFMxN19DVFJMX1NPRlRXQVJFX1JFU0VUKSkgPT0gMCkKKyAgICAKKy8qIFBoeSBzdGF0dXMgZmllbGRzICovCisjZGVmaW5lIFMxN19TVEFUVVNfQVVUT19ORUdfRE9ORSAgICAgICAgICAgICAgICAgICAweDAwMjAKKworI2RlZmluZSBTMTdfQVVUT05FR19ET05FKGlwX3BoeV9zdGF0dXMpICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKChpcF9waHlfc3RhdHVzKSAmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKFMxN19TVEFUVVNfQVVUT19ORUdfRE9ORSkpID09ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChTMTdfU1RBVFVTX0FVVE9fTkVHX0RPTkUpKQorCisvKiBMaW5rIFBhcnRuZXIgYWJpbGl0eSAqLworI2RlZmluZSBTMTdfTElOS18xMDBCQVNFVFhfRlVMTF9EVVBMRVggICAgICAgMHgwMTAwCisjZGVmaW5lIFMxN19MSU5LXzEwMEJBU0VUWCAgICAgICAgICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgUzE3X0xJTktfMTBCQVNFVFhfRlVMTF9EVVBMRVggICAgICAgIDB4MDA0MAorI2RlZmluZSBTMTdfTElOS18xMEJBU0VUWCAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisKKy8qIEFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuICovCisjZGVmaW5lIFMxN19BRFZFUlRJU0VfTkVYVF9QQUdFICAgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgUzE3X0FEVkVSVElTRV9BU1lNX1BBVVNFICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBTMTdfQURWRVJUSVNFX1BBVVNFICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFMxN19BRFZFUlRJU0VfMTAwRlVMTCAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgUzE3X0FEVkVSVElTRV8xMDBIQUxGICAgICAgICAgICAgICAgIDB4MDA4MCAgCisjZGVmaW5lIFMxN19BRFZFUlRJU0VfMTBGVUxMICAgICAgICAgICAgICAgICAweDAwNDAgIAorI2RlZmluZSBTMTdfQURWRVJUSVNFXzEwSEFMRiAgICAgICAgICAgICAgICAgMHgwMDIwICAKKworI2RlZmluZSBTMTdfQURWRVJUSVNFX0FMTCAoUzE3X0FEVkVSVElTRV9BU1lNX1BBVVNFIHwgUzE3X0FEVkVSVElTRV9QQVVTRSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTMTdfQURWRVJUSVNFXzEwSEFMRiB8IFMxN19BRFZFUlRJU0VfMTBGVUxMIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMxN19BRFZFUlRJU0VfMTAwSEFMRiB8IFMxN19BRFZFUlRJU0VfMTAwRlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgCisvKiAxMDAwQkFTRVRfQ09OVFJPTCAqLworI2RlZmluZSBTMTdfQURWRVJUSVNFXzEwMDBGVUxMICAgICAgICAgICAgICAgMHgwMjAwCisKKy8qIFBoeSBTcGVjaWZpYyBzdGF0dXMgZmllbGRzICovCisjZGVmaW5lIFMxN19TVEFUVVNfTElOS19NQVNLICAgICAgICAgICAgICAgIDB4QzAwMAorI2RlZmluZSBTMTdfU1RBVFVTX0xJTktfU0hJRlQgICAgICAgICAgICAgICAxNAorI2RlZmluZSBTMTdfU1RBVFVTX0ZVTExfREVQTEVYICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgUzE3X1NUQVRVU19MSU5LX1BBU1MgICAgICAgICAgICAgICAgIDB4MDQwMCAKKyNkZWZpbmUgUzE3X1NUQVRVU19SRVNPTFZFRCAgICAgICAgICAgICAgICAgIDB4MDgwMAorI2RlZmluZSBTMTdfU1RBVFVTX0xJTktfMTBNCQkJIDAKKyNkZWZpbmUgUzE3X1NUQVRVU19MSU5LXzEwME0JCQkgMQorI2RlZmluZSBTMTdfU1RBVFVTX0xJTktfMTAwME0JCQkgMgorCisjZGVmaW5lIFMxN19HTE9CQUxfSU5UX1BIWU1BU0sJIAkgICAgICgxIDw8IDE1KQorCisjZGVmaW5lIFMxN19QSFlfTElOS19VUCAJCSAgICAgMHg0MDAKKyNkZWZpbmUgUzE3X1BIWV9MSU5LX0RPV04gCQkgICAgIDB4ODAwCisjZGVmaW5lIFMxN19QSFlfTElOS19EVVBMRVhfQ0hBTkdFIAkgICAgIDB4MjAwMAorI2RlZmluZSBTMTdfUEhZX0xJTktfU1BFRURfQ0hBTkdFCSAgICAgMHg0MDAwCisjZGVmaW5lIFMxN19QSFlfTElOS19JTlRSUwkJICAgICAoUzE3X1BIWV9MSU5LX1VQIHwgUzE3X1BIWV9MSU5LX0RPV04gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUzE3X1BIWV9MSU5LX0RVUExFWF9DSEFOR0UgfCBTMTdfUEhZX0xJTktfU1BFRURfQ0hBTkdFKQorCisvKiBGb3IgUG9ydCBmbG93IGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIFMxN19QT1JUX0ZMQ1RMX1hPTl9ERUZBVUxUCQkoMHgzYSA8PCAxNikKKyNkZWZpbmUgUzE3X1BPUlRfRkxDVExfWE9GRl9ERUZBVUxUCQkoMHg0YSkKKworLyogTW9kdWxlIGVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBTMTdfTU9EVUxFX0wzX0VOCQkoMSA8PCAyKQorI2RlZmluZSBTMTdfTU9EVUxFX0FDTF9FTgkJKDEgPDwgMSkKKyNkZWZpbmUgUzE3X01PRFVMRV9NSUJfRU4JCSgxIDw8IDApCisKKy8qIE1JQiBGdW5jdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIFMxN19NSUJfRlVOQ19BTEwJCSgzIDw8IDI0KQorI2RlZmluZSBTMTdfTUlCX0NQVV9LRUVQCQkoMSA8PCAyMCkKKyNkZWZpbmUgUzE3X01JQl9CVVNZCQkJKDEgPDwgMTcpCisjZGVmaW5lIFMxN19NSUJfQVRfSEFMRl9FTgkJKDEgPDwgMTYpCisjZGVmaW5lIFMxN19NSUJfVElNRVJfREVGQVVMVAkJMHgxMDAKKworI2RlZmluZSBTMTdfTUFDX01BWAkJCTcKKworLyogZW5hYmxlIDgwMi4zYXogKi8KKyNkZWZpbmUgUzE3XzgwMjNBWl9GRUFUVVJFCisKKyNpZm5kZWYgQk9PTAorI2RlZmluZSBCT09MICAgIGludAorI2VuZGlmCisKKy8qYWRkIGZlYXR1cmUgZGVmaW5lIGhlcmUqLworLyogVG8gZW5hYmxlIHRoZSBTU0RLIGZ1bGwgZmVhdHVyZSBzZXQgKi8KKy8vI2RlZmluZSBTMTdfRlVMTF9GRUFUVVJFCisvKiBBUjgzMjcvODMyOE4gSE5BVCBmZWF0dXJlICovCisvLyNkZWZpbmUgQ09ORklHX0FUSFJTMTdfSE5BVAorLyogZHVtcCBNSUIgY291bnRlcnMgKi8KKyNkZWZpbmUgUzE3X0RVTVBfTUlCCisKK2ludCBhdGhyczE3X2luaXQoY2hhciAqZGV2bmFtZSk7CitpbnQgYXRocnMxN19waHlfc2V0dXAoY2hhciAqZGV2bmFtZSwgaW50IHBoeVVuaXQpOwordW5zaWduZWQgaW50IGF0aHJzMTdfcmVnX3JlYWQoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgaW50IHJlZ19hZGRyKTsKK3ZvaWQgYXRocnMxN19yZWdfd3JpdGUoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgaW50IHJlZ19hZGRyLCB1bnNpZ25lZCBpbnQgcmVnX3ZhbCk7Cit1bnNpZ25lZCBpbnQgYXRocnMxN19waHlfZGVidWdfcmVhZChjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBpbnQgcGh5X2FkZHIsIHVuc2lnbmVkIGludCByZWdfYWRkcik7Cit2b2lkIGF0aHJzMTdfcGh5X2RlYnVnX3dyaXRlKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGludCBwaHlfYWRkciwgdW5zaWduZWQgaW50IHJlZ19hZGRyLCB1bnNpZ25lZCBpbnQgcmVnX3ZhbCk7CisKKyNlbmRpZgorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvYzIwMDBfZXRoLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9jMjAwMF9ldGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTkxZGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvYzIwMDBfZXRoLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiAgKEMpIENvcHlyaWdodCAyMDExCisgKiAgQXV0aG9yIDogTWluZHNwZWVkIFRlY2hub2xvZ2VzCisgKiAgCisgKiAgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqICBwcm9qZWN0LgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIAorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAgCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICovCisKKyNpZm5kZWYgX0MyMDAwX0VUSF9IXworI2RlZmluZSBfQzIwMDBfRVRIX0hfCisKKworI2luY2x1ZGUgInBmZV9kcml2ZXIuaCIKKworI2lmbmRlZiBTWl8xSworI2RlZmluZSBTWl8xSyAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBTWl8xTQorI2RlZmluZSBTWl8xTSAoMTAyNCAqIDEwMjQpCisjZW5kaWYKKworI2RlZmluZSBCTVUyX0REUl9CQVNFQUREUgkwCisjZGVmaW5lIEJNVTJfQlVGX0NPVU5UCQkoMyAqIFNaXzFLKQorI2RlZmluZSBCTVUyX0REUl9TSVpFCQkoRERSX0JVRl9TSVpFICogQk1VMl9CVUZfQ09VTlQpCisKKyNkZWZpbmUgVE1VX0xMTV9CQVNFQUREUgkoQk1VMl9ERFJfQkFTRUFERFIgKyBCTVUyX0REUl9TSVpFKQorI2RlZmluZSBUTVVfTExNX1FVRVVFX0xFTgkoMTYgKiAyNTYpCQkJLyoqPCBNdXN0IGJlIHBvd2VyIG9mIHR3byBhbmQgYXQgbGVhc3QgMTYgKiA4ID0gMTI4IGJ5dGVzICovCisjZGVmaW5lIFRNVV9MTE1fU0laRQkJKDQgKiAxNiAqIFRNVV9MTE1fUVVFVUVfTEVOKQkvKio8ICg0IFRNVSdzIHggMTYgcXVldWVzIHggcXVldWVfbGVuKSAqLworCisjZGVmaW5lIEhJRl9SWF9QS1RfRERSX0JBU0VBRERSIChUTVVfTExNX0JBU0VBRERSICsgVE1VX0xMTV9TSVpFKQorI2RlZmluZSBISUZfUlhfUEtUX0REUl9TSVpFICAgICAoSElGX1JYX0RFU0NfTlQgKiBERFJfQlVGX1NJWkUpCisjZGVmaW5lIEhJRl9UWF9QS1RfRERSX0JBU0VBRERSIChISUZfUlhfUEtUX0REUl9CQVNFQUREUiArIEhJRl9SWF9QS1RfRERSX1NJWkUpCisjZGVmaW5lIEhJRl9UWF9QS1RfRERSX1NJWkUgICAgIChISUZfVFhfREVTQ19OVCAqIEREUl9CVUZfU0laRSkKKworI2RlZmluZSBISUZfREVTQ19CQVNFQUREUiAgICAgICAoSElGX1RYX1BLVF9ERFJfQkFTRUFERFIgKyBISUZfVFhfUEtUX0REUl9TSVpFKQorI2RlZmluZSBISUZfUlhfREVTQ19TSVpFICAgICAgICAoMTYqSElGX1JYX0RFU0NfTlQpCisjZGVmaW5lIEhJRl9UWF9ERVNDX1NJWkUgICAgICAgICgxNipISUZfVFhfREVTQ19OVCkKKyNkZWZpbmUgSElGX0RFU0NfU0laRSAgICAgICAgICAgKEhJRl9SWF9ERVNDX1NJWkUgKyBISUZfVFhfREVTQ19TSVpFKQorCisvLyNkZWZpbmUgRlBQRElBR19DVExfQkFTRV9BRERSCShISUZfREVTQ19CQVNFQUREUiArIEhJRl9ERVNDX1NJWkUpCisjZGVmaW5lIEZQUERJQUdfQ1RMX0JBU0VfQUREUgkweDcwMDAwMAorI2RlZmluZSBGUFBESUFHX0NUTF9TSVpFCQkyNTYJLyoqPCBNdXN0IGJlIGF0IGxlYXN0IDExKjggYnl0ZXMgKi8KKyNkZWZpbmUgRlBQRElBR19QQUdFX0JBU0VfQUREUgkoRlBQRElBR19DVExfQkFTRV9BRERSICsgRlBQRElBR19DVExfU0laRSkKKyNkZWZpbmUgRlBQRElBR19QQUdFX1RPVEFMX1NJWkUJKDExICogMjU2KSAvKio8IDI1NiBieXRlcyBwZXIgUEUsIDExIFBFcyAqLworCisvLyNkZWZpbmUgVVRJTF9DT0RFX0JBU0VBRERSCShGUFBESUFHX1BBR0VfQkFTRV9BRERSICsgRlBQRElBR19QQUdFX1RPVEFMX1NJWkUpCisjZGVmaW5lIFVUSUxfQ09ERV9CQVNFQUREUgkweDc4MDAwMAorI2RlZmluZSBVVElMX0NPREVfU0laRQkJKDEyOCAqIFNaXzFLKQorCisjZGVmaW5lIFVUSUxfRERSX0RBVEFfQkFTRUFERFIJKFVUSUxfQ09ERV9CQVNFQUREUiArIFVUSUxfQ09ERV9TSVpFKQorI2RlZmluZSBVVElMX0REUl9EQVRBX1NJWkUJKDY0ICogU1pfMUspCisKKyNkZWZpbmUgQ0xBU1NfRERSX0RBVEFfQkFTRUFERFIJKFVUSUxfRERSX0RBVEFfQkFTRUFERFIgKyBVVElMX0REUl9EQVRBX1NJWkUpCisjZGVmaW5lIENMQVNTX0REUl9EQVRBX1NJWkUJKDMyICogU1pfMUspCisKKyNkZWZpbmUgVE1VX0REUl9EQVRBX0JBU0VBRERSCShDTEFTU19ERFJfREFUQV9CQVNFQUREUiArIENMQVNTX0REUl9EQVRBX1NJWkUpCisjZGVmaW5lIFRNVV9ERFJfREFUQV9TSVpFCSgzMiAqIFNaXzFLKQorCisvLyNkZWZpbmUgUk9VVEVfVEFCTEVfQkFTRUFERFIJKFRNVV9ERFJfREFUQV9CQVNFQUREUiArIFRNVV9ERFJfREFUQV9TSVpFKQorI2RlZmluZSBST1VURV9UQUJMRV9CQVNFQUREUgkweDgwMDAwMAorI2RlZmluZSBST1VURV9UQUJMRV9IQVNIX0JJVFNfTUFYCTE1CS8qKjwgMzJLIGVudHJpZXMgKi8KKyNkZWZpbmUgUk9VVEVfVEFCTEVfSEFTSF9CSVRTCTgJLyoqPCAyNTYgZW50cmllcyAqLworI2RlZmluZSBST1VURV9UQUJMRV9TSVpFCSgoMSA8PCBST1VURV9UQUJMRV9IQVNIX0JJVFNfTUFYKSAqIENMQVNTX1JPVVRFX1NJWkUpCisKKyNkZWZpbmUJUEZFX1RPVEFMX0RBVEFfU0laRQkoUk9VVEVfVEFCTEVfQkFTRUFERFIgKyBST1VURV9UQUJMRV9TSVpFKQorCisjaWYgUEZFX1RPVEFMX0RBVEFfU0laRSA+ICgxMiAqIFNaXzFNKQorI2Vycm9yIEREUiBtYXBwaW5nIGFib3ZlIDEyTWlCCisjZW5kaWYKKworLyogTE1FTSBNYXBwaW5nICovCisjZGVmaW5lIEJNVTFfTE1FTV9CQVNFQUREUgkwCisjZGVmaW5lIEJNVTFfQlVGX0NPVU5UCQkyNTYKKyNkZWZpbmUgQk1VMV9MTUVNX1NJWkUJCShMTUVNX0JVRl9TSVpFICogQk1VMV9CVUZfQ09VTlQpCisKKworI2RlZmluZSBDT05GSUdfRERSX1BIWVNfQkFTRUFERFIgMHgwMzgwMDAwMAorI2RlZmluZSBDT05GSUdfRERSX0JBU0VBRERSICAgICAgQ09ORklHX0REUl9QSFlTX0JBU0VBRERSCisKKyNpZiAwCisKKyNkZWZpbmUgUlhfUEtUX0REUl9CQVNFQUREUiAgMHgzMDAwMDAgICAvLzQgcGt0cyBvZiBlYWNoIDJrIHNpemUKKyNkZWZpbmUgVFhfUEtUX0REUl9CQVNFQUREUiAgMHgzMDIwMDAgIC8vNCBwa3RzIG9mIGVhY2ggMksgc2l6ZQorCisjZGVmaW5lIFJYX0JEX0JBU0VBRERSICAgICAgIDB4MjE0MDAwIAorI2RlZmluZSBUWF9CRF9CQVNFQUREUiAgICAgICAweDIxNDIwMCAKKworI2RlZmluZSBCTVUxX0xNRU1fQkFTRUFERFIgICAwCisjZGVmaW5lIEJNVTFfQlVGX0NPVU5UICAgICAgIDMyCisKKyNkZWZpbmUgQk1VMl9CVUZfQ09VTlQgICAgICAgMzIKKyNkZWZpbmUgQk1VMl9ERFJfQkFTRUFERFIgICAgMHgyMDAwMDAKKworCisjZGVmaW5lIFJPVVRFX1RBQkxFX0JBU0VBRERSCTB4MjE1MDAwIAorI2RlZmluZSBST1VURV9UQUJMRV9IQVNIX0JJVFMJMgkvKio8IDIgZW50cmllcyAqLworCisjZGVmaW5lIFRNVV9MTE1fQkFTRUFERFIgICAweDIxNjAwMCAKKyNkZWZpbmUgVE1VX0xMTV9RVUVVRV9MRU4gICgxNiAqIDI1NikKKworI2VuZGlmCisKKyNkZWZpbmUgR0VNQUNfTk9fUEhZIAkJMQorI2RlZmluZSBHRU1BQ19IQVZFX1NXSVRDSF9QSFkgICAgIDIKKyNkZWZpbmUgR0VNQUNfSEFWRV9TV0lUQ0ggICAgICAgCTQKKworCit0eXBlZGVmIHN0cnVjdCBnZW1hY19zIHsKKworCXZvaWQgKmdlbWFjX2Jhc2U7IAorCXZvaWQgKmVncGlfYmFzZTsKKworCS8qIEdFTUFDIGNvbmZpZyAqLworCWludCBnZW1hY19tb2RlOworCWludCBnZW1hY19zcGVlZDsKKwlpbnQgZ2VtYWNfZHVwbGV4OworICAgICAgICBpbnQgZmxhZ3M7CisJLyogcGh5IGlmYWNlICovCisJaW50IHBoeV9yZWdfaW5kZXg7CisJaW50IHBoeV9hZGRyZXNzOworCit9IGdlbWFjX3Q7CisKK3N0cnVjdCBwZmUgeworCXVuc2lnbmVkIGxvbmcgZGRyX3BoeXNfYmFzZWFkZHI7CisJdm9pZCAqZGRyX2Jhc2VhZGRyOworCXZvaWQgKmNidXNfYmFzZWFkZHI7Cit9OworCisKK3R5cGVkZWYgc3RydWN0IGMyMDAwX2V0aF9kZXYgeworCisJaW50IGdlbWFjX3BvcnQ7CisJdm9pZCAqcGh5cmVnaXN0ZXJzOworCisJc3RydWN0IGdlbWFjX3MgKmdlbTsKKwlzdHJ1Y3QgcGZlICAgICAgcGZlOworCisgICAgICAgIHN0cnVjdCBldGhfZGV2aWNlICpkZXY7CisKK30gYzIwMDBfZXRoX2Rldl90OworCisKK3N0cnVjdCBmaXJtd2FyZSB7CisJdTggKmRhdGE7Cit9OworCisKK2ludCBwZmVfcHJvYmUoc3RydWN0IHBmZSAqcGZlKTsKK2ludCBwZmVfcmVtb3ZlKHN0cnVjdCBwZmUgKnBmZSk7CisKKworLy8jZGVmaW5lIGRwcmludChmbXQsIGFyZy4uLikJcHJfaW5mbyhmbXQsICMjYXJnKQorI2RlZmluZSBkcHJpbnQoZm10LCBhcmcuLi4pCisvLyNkZWZpbmUgZHByaW50CXByaW50ZgorCisKKyNlbmRpZiAvL19DMjAwMF9FVEhfSF8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvYzIwMDBfZXRoZXJuZXQuYyBiL2RyaXZlcnMvYzIwMDBfZXRoL2MyMDAwX2V0aGVybmV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwZjk3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL2MyMDAwX2V0aGVybmV0LmMKQEAgLTAsMCArMSw1MzkgQEAKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKy8vI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxtaWlwaHkuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbGtjb3JlX2MyMDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpb19jMjAwMC5oPgorI2luY2x1ZGUgImMyMDAwX2V0aC5oIgorI2lmZGVmIENPTkZJR19BUjgzMjhfU1dJVENICisjaW5jbHVkZSAiYXI4MzI4LmgiCisjZW5kaWYKKworc3RydWN0IGdlbWFjX3MgZ2VtX2luZm9bXSA9IHsKKyAgICAgICAgLyogUE9SVF8wIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEdFTUFDIGNvbmZpZyAqLworICAgICAgICAgICAgICAgIC5nZW1hY19tb2RlID0gUkdNSUksCisgICAgICAgICAgICAgICAgLmdlbWFjX3NwZWVkID0gU1BFRURfMTAwME0sCisgICAgICAgICAgICAgICAgLmdlbWFjX2R1cGxleCA9IERVUExFWF9GVUxMLAorICAgICAgICAgICAgICAgIC5mbGFncyA9IEVNQUMwX0ZMQUdTLAorCisgICAgICAgICAgICAgICAgLyogcGh5IGlmYWNlICovCisgICAgICAgICAgICAgICAgLnBoeV9yZWdfaW5kZXggPSBFTUFDX1BPUlRfMCwKKyAgICAgICAgICAgICAgICAucGh5X2FkZHJlc3MgPSBFTUFDMF9QSFlfQUREUiwKKyAgICAgICAgfSwKKyAgICAgICAgLyogUE9SVF8xIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEdFTUFDIGNvbmZpZyAqLworICAgICAgICAgICAgICAgIC5nZW1hY19tb2RlID0gUkdNSUksCisgICAgICAgICAgICAgICAgLmdlbWFjX3NwZWVkID0gU1BFRURfMTAwME0sCisgICAgICAgICAgICAgICAgLmdlbWFjX2R1cGxleCA9IERVUExFWF9GVUxMLAorICAgICAgICAgICAgICAgIC5mbGFncyA9IEVNQUMxX0ZMQUdTLAorCisgICAgICAgICAgICAgICAgLyogcGh5IGlmYWNlICovCisgICAgICAgICAgICAgICAgLnBoeV9yZWdfaW5kZXggPSBFTUFDX1BPUlRfMCwKKyAgICAgICAgICAgICAgICAucGh5X2FkZHJlc3MgPSBFTUFDMV9QSFlfQUREUiwKKyAgICAgICAgfSwKKworICAgICAgICAvKiBQT1JUXzIgY29uZmlndXJhdGlvbiAqLworICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogR0VNQUMgY29uZmlnICovCisgICAgICAgICAgICAgICAgLmdlbWFjX21vZGUgPSBSR01JSSwKKyAgICAgICAgICAgICAgICAuZ2VtYWNfc3BlZWQgPSBTUEVFRF8xMDAwTSwKKyAgICAgICAgICAgICAgICAuZ2VtYWNfZHVwbGV4ID0gRFVQTEVYX0ZVTEwsCisgICAgICAgICAgICAgICAgLmZsYWdzID0gRU1BQzJfRkxBR1MsCisKKyAgICAgICAgICAgICAgICAvKiBwaHkgaWZhY2UgKi8KKyAgICAgICAgICAgICAgICAucGh5X3JlZ19pbmRleCA9IEVNQUNfUE9SVF8wLAorICAgICAgICAgICAgICAgIC5waHlfYWRkcmVzcyA9IDAsCisgICAgICAgIH0sCit9OworCisjZGVmaW5lIE1BWF9HRU1BQ1MgICAgICAzCisKK3N0YXRpYyBzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqZ2VtYWNfbGlzdFtNQVhfR0VNQUNTXTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBwaHkgcmVhZC93cml0ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1heCBNSUkgcmVnaXN0ZXIvYWRkcmVzcyAod2Ugc3VwcG9ydCkgKi8KKyNkZWZpbmUgTUlJX1JFR0lTVEVSX01BWCAgMzEKKyNkZWZpbmUgTUlJX0FERFJFU1NfTUFYICAgMzEKKworI2RlZmluZSBNRElPX1RJTUVPVVQgICAgNTAwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGdlbV9waHlfbWFuX3JkIDoKKyAqICAgICAgUGVyZm9ybXMgcGh5IG1hbmFnZW1lbnQgcmVhZCBvcGVyYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZ2VtX3BoeV9tYW5fcmQoc3RydWN0IGMyMDAwX2V0aF9kZXYgKnByaXYsIHUzMiBwaHlfYWRkciwgdTMyIHBoeV9yZWcpCit7CisgICAgICAgIHUzMiB3cml0ZV9kYXRhOworCisgICAgICAgIHdyaXRlX2RhdGEgPSAweDYwMDIwMDAwIHwgKCAocGh5X2FkZHIgJiAodTMyKSAweDFmKSA8PCAyMykgfCAoIChwaHlfcmVnICYgKHUzMikgMHgxZikgPDwgMTgpOyAvLyByZWFkX29wCisgICAgICAgIHdyaXRlbCh3cml0ZV9kYXRhLCBwcml2LT5waHlyZWdpc3RlcnMgKyBFTUFDX1BIWV9NQU5BR0VNRU5UKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW1fcGh5X21hbl93cihzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqcHJpdiwgdTMyIHBoeV9hZGRyLCB1MzIgcGh5X3JlZywgdTMyIHZhbCkKK3sKKyAgICAgICAgdTMyIHdyaXRlX2RhdGE7CisKKyAgICAgICAgd3JpdGVfZGF0YSA9ICAweDUwMDIwMDAwIHwgKCAocGh5X2FkZHIgJiAodTMyKSAweDFmKSA8PCAyMykgfCAoIChwaHlfcmVnICYgKHUzMikgMHgxZikgPDwgMTgpIHwgKHZhbCAmICh1MzIpIDB4ZmZmZik7IC8vIHdyaXRlX29wCisgICAgICAgIHdyaXRlbCh3cml0ZV9kYXRhLCBwcml2LT5waHlyZWdpc3RlcnMgKyBFTUFDX1BIWV9NQU5BR0VNRU5UKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworLyoqIGdlbV9waHlfbWFuX2RhdGEKKyAqICAgICAgUmVhZCB0aGUgZGF0YSBzZWN0aW9uIG9mIHBoeSBtYW5hZ2VtZW50IHJlZ2lzdGVyLgorICogICAgQWZ0ZXIgYSBzdWNjZXNzZnVsIHJlYWQgb3BlZXJhdGlvbiB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbgorICogICAgaW4gdGhpcyByZWdpc3RlciBpbiBsb3dlciAxNmJpdHMuCisgKi8KK3N0YXRpYyB1MzIgZ2VtX3BoeV9tYW5fZGF0YShzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqcHJpdikKK3sKKyAgICAgICAgdTMyIHZhbHVlOworCisgICAgICAgIHZhbHVlID0gcmVhZGwocHJpdi0+cGh5cmVnaXN0ZXJzICsgRU1BQ19QSFlfTUFOQUdFTUVOVCkgJiAweEZGRkY7CisgICAgICAgIHJldHVybiB2YWx1ZTsKK30KKworI2RlZmluZSBFTUFDX1BIWV9JRExFICAgKDEgPDwgMikKKworc3RhdGljIGludCBnZW1fcGh5X21hbl9pZGxlKHN0cnVjdCBjMjAwMF9ldGhfZGV2ICpwcml2KQoreworICAgICAgICB1MzIgdmFsdWU7CisKKyAgICAgICAgdmFsdWUgPSByZWFkbChwcml2LT5waHlyZWdpc3RlcnMgKyBFTUFDX05FVFdPUktfU1RBVFVTKTsKKyAgICAgICAgcmV0dXJuICgodmFsdWUgJiBFTUFDX1BIWV9JRExFKSA9PSBFTUFDX1BIWV9JRExFKTsKK30KKworc3RhdGljIGludCBnZW1fcGh5X3RpbWVvdXQoc3RydWN0IGMyMDAwX2V0aF9kZXYgKnByaXYsIGludCB0aW1lb3V0KQoreworICAgICAgICB3aGlsZSghZ2VtX3BoeV9tYW5faWRsZShwcml2KSkgeworCisgICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQtLSA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlBoeSBNRElPIHJlYWQvd3JpdGUgdGltZW91dFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy91ZGVsYXkoMSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYzIwMDBfZXRoX2RldiogZ2V0X2dlbWFjKGNoYXIgKmRldm5hbWUpCit7CisgICAgICAgIGludCBpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfR0VNQUNTOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChnZW1hY19saXN0W2ldLT5kZXYtPm5hbWUsIGRldm5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlbWFjX2xpc3RbaV07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlVMTDsKK30KKworCisvKiogUEhZIHJlYWQgZnVuY3Rpb24KKyAqIFJlYWRzIGEgMTZiaXQgdmFsdWUgZnJvbSBhIE1JSSByZWdpc3RlcgorICoKKyAqIEBwYXJhbVtpbl0gbWRldiAgICAgICAgICAgICAgUG9pbnRlciB0byBNSUkgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtW2luXSBwaHlfYWRkcgorICogQHBhcmFtW2luXSBwaHlfcmVnCisgKgorICogQHJldHVybiAgMTZiaXQgdmFsdWUgb24gc3VjY2VzcywgYSBuZWdpdmllIHZhbHVlICgtMSkgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBjMjAwMF9waHlfcmVhZChjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIHBoeV9hZGRyLCB1bnNpZ25lZCBjaGFyIHBoeV9yZWcsIHVuc2lnbmVkIHNob3J0ICp2YWx1ZSkKK3sKKyAgICAgICAgc3RydWN0IGMyMDAwX2V0aF9kZXYgKnByaXYgPSBnZXRfZ2VtYWMoZGV2bmFtZSk7CisKKyAgICAgICAgaWYgKCFwcml2KSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJVbmtub3duIGRldmljZSAlc1xuIiwgZGV2bmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChwaHlfYWRkciA+IE1JSV9BRERSRVNTX01BWCkgfHwgKHBoeV9yZWcgPiBNSUlfUkVHSVNURVJfTUFYKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgZ2VtX3BoeV9tYW5fcmQocHJpdiwgcGh5X2FkZHIsIHBoeV9yZWcpOworICAgICAgICBpZiAoZ2VtX3BoeV90aW1lb3V0KHByaXYsIE1ESU9fVElNRU9VVCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICp2YWx1ZSA9IGdlbV9waHlfbWFuX2RhdGEocHJpdik7CisKKyAgICAgICAgZHByaW50KCIlczogQWRkcjogJWQsIFJlZzogJWQsIFZhbDogMHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcGh5X2FkZHIsIHBoeV9yZWcsICp2YWx1ZSk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qKiBQSFkgd3JpdGUgZnVuY3Rpb24KKyAqIFdyaXRlcyBhIDE2Yml0IHZhbHVlIHRvIGEgTUlJIHJlZ2lzdGVyCisgKgorICogQHBhcmFtW2luXSBtZGV2ICAgICAgICAgICAgICBQb2ludGVyIHRvIE1JSSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW1baW5dIHBoeV9hZGRyCisgKiBAcGFyYW1baW5dIHBoeV9yZWcKKyAqIEBwYXJhbVtpbl0gdmFsdWUgICAgIFZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gUGh5CisgKgorICogQHJldHVybiAgICAgICAgICAgICAgT24gc3VjY2VzcyByZXR1cm5zIDAsIGEgbmVnYXRpdmUgdmFsdWUgKC0xKSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IGMyMDAwX3BoeV93cml0ZShjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIHBoeV9hZGRyLCB1bnNpZ25lZCBjaGFyIHBoeV9yZWcsIHVuc2lnbmVkIHNob3J0IHZhbHVlKQoreworICAgICAgICBzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqcHJpdiA9IGdldF9nZW1hYyhkZXZuYW1lKTsKKworICAgICAgICBpZiAoIXByaXYpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlVua25vd24gZGV2aWNlICVzXG4iLCBkZXZuYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChwaHlfYWRkciA+IE1JSV9BRERSRVNTX01BWCkgfHwgKHBoeV9yZWcgPiBNSUlfUkVHSVNURVJfTUFYKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgZ2VtX3BoeV9tYW5fd3IocHJpdiwgcGh5X2FkZHIsIHBoeV9yZWcsIHZhbHVlKTsKKyAgICAgICAgaWYgKGdlbV9waHlfdGltZW91dChwcml2LCBNRElPX1RJTUVPVVQpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBkcHJpbnQoIiVzOiBBZGRyOiAlZCwgUmVnOiAlZCwgVmFsOiAweCV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBwaHlfYWRkciwgcGh5X3JlZywgdmFsdWUpOworCisgICAgICAgIHJldHVybiAwOworfQorCisvKiogTUFDIEFkZHJlc3MgY29udmVydGVyCisgKiBDb252ZXJ0IHN0YW5kYXJkIGJ5dGUgc3R5bGUgZXRoZXJuZXQgYWRkcmVzcyB0byBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIE1BQy4KKyAqCisgKiBAcGFyYW1baW5dIGVuZXRfYnl0ZV9hZGRyICAgIFBvaW50ZXIgdG8gdGhlIG1hYyBhZGRyZXNzIGluIGJ5dGUgZm9ybWF0CisgKiBAcGFyYW1bb3V0XSBQb2ludGVyIHRvIE1BQ19BRERSIHN0cnVjdHVyZQorICoKKyAqIEByZXR1cm4gICAgICAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUKKyAqLworaW50IGdlbWFjX2VuZXRfYWRkcl9ieXRlX21hYyh1OCAqZW5ldF9ieXRlX2FkZHIsIE1BQ19BRERSICplbmV0X2FkZHIpCit7CisgICAgaWYgKChlbmV0X2J5dGVfYWRkciA9PSBOVUxMKSB8fCAoZW5ldF9hZGRyID09IE5VTEwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlbmV0X2FkZHItPmJvdHRvbSA9IGVuZXRfYnl0ZV9hZGRyWzBdIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5ldF9ieXRlX2FkZHJbMV0gPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmV0X2J5dGVfYWRkclsyXSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmV0X2J5dGVfYWRkclszXSA8PCAyNCk7CisgICAgICAgIGVuZXRfYWRkci0+dG9wID0gZW5ldF9ieXRlX2FkZHJbNF0gfAorICAgICAgICAgICAgICAgICAgICAgICAgIChlbmV0X2J5dGVfYWRkcls1XSA8PCA4KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvKiogQ29uZmlndXJlcyBldGhlcm5ldCBhZGRyZXNzIHRvIEdFTUFDIEFERFIxIGxvY2F0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gZWRldiAgICAgIFBvaW50ZXIgdG8gdGhlIGV0aCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW1baW5dIGFkZHIgICAgICBQb2ludGVyIHRvIGV0aGVybmV0IGFkZHJlc3MgaW4gYnl0ZSBvcmRlcgorICoKKyAqIEByZXR1cm4gIDAgb24gc3VjY2VzcyAoYWx3YXlzIHN1Y2Nlc3MpCisgKi8KK3N0YXRpYyBpbnQgYzIwMDBfc2V0X2V0aGFkZHIoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwgdTggKmVuZXRfYnl0ZV9hZGRyKQoreworICAgICAgICBzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqcHJpdiA9IChzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqKWRldi0+cHJpdjsKKyAgICAgICAgTUFDX0FERFIgZW5ldF9hZGRyZXNzID0gezB4MCwgMHgwfTsKKworCisgICAgICAgIGdlbWFjX2VuZXRfYWRkcl9ieXRlX21hYyhlbmV0X2J5dGVfYWRkciwgJmVuZXRfYWRkcmVzcyk7CisgICAgICAgIGdlbWFjX3NldF9sYWRkcjEocHJpdi0+Z2VtLT5nZW1hY19iYXNlLCAmZW5ldF9hZGRyZXNzKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworLyoqIEdldC9SZWFkIGNvbmZpZ3VyZWQgZXRoZXJuZXQgbWFjIGFkZHJlc3MgZnJvbSBHRU1BQy4KKyAqCisgKiBAcGFyYW1baW5dIGVkZXYgICAgICBQb2ludGVyIHRvIGV0aCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW1bb3V0XSBhZGRyICAgICBQb2ludGVyIHRvIGV0aGVybmV0IGFkZHJlc3MgdG8gYmUgY29waWVkCisgKgorICogQHJldHVybiAgICAgIDAgb24gc3VjY2VzcywgYWx3YXlzIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgYzIwMDBfZ2V0X2V0aGFkZHIoc3RydWN0IGV0aF9kZXZpY2UgKmVkZXYsIHVuc2lnbmVkIGNoYXIgKmFkZHIpCit7CisgICAgICAgIHN0cnVjdCBjMjAwMF9ldGhfZGV2ICpwcml2ID0gKHN0cnVjdCBjMjAwMF9ldGhfZGV2ICopZWRldi0+cHJpdjsKKyAgICAgICAgTUFDX0FERFIgZW5ldF9hZGRyZXNzID0gezB4MCwgMHgwfTsKKyAgICAgICAgdTE2ICpwID0gKHUxNiAqKWFkZHI7CisKKyAgICAgICAgZW5ldF9hZGRyZXNzID0gZ2VtX2dldF9sYWRkcjEocHJpdi0+Z2VtLT5nZW1hY19iYXNlKTsKKyAgICAgICAgcFswXSA9IGVuZXRfYWRkcmVzcy5ib3R0b20gJiAweGZmZmY7CisgICAgICAgIHBbMV0gPSAoZW5ldF9hZGRyZXNzLmJvdHRvbSA+PiAxNikgJiAweGZmZmY7CisgICAgICAgIHBbMl0gPSBlbmV0X2FkZHJlc3MudG9wICYgMHhmZmZmOworCisgICAgICAgIHJldHVybiAwOworfQorCisKKy8qKiBTdG9wcyBvciBEaXNhYmxlcyBHRU1BQyBwb2ludGluZyB0byB0aGlzIGV0aCBpZmFjZS4KKyAqCisgKiBAcGFyYW1baW5dICAgZWRldiAgICBQb2ludGVyIHRvIGV0aCBkZXZpY2Ugc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gICAgICBub25lCisgKi8KK3N0YXRpYyB2b2lkIGMyMDAwX2V0aF9oYWx0KHN0cnVjdCBldGhfZGV2aWNlICplZGV2KQoreworICAgICAgICBzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqcHJpdiA9IChzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqKWVkZXYtPnByaXY7CisKKy8vICAgICAgICBwcmludGYoIiVzOlxuIixfX2Z1bmNfXyk7CisKKyAgICAgICAgZ2VtYWNfZGlzYWJsZShwcml2LT5nZW0tPmdlbWFjX2Jhc2UpOworCisgICAgICAgIGdwaV9kaXNhYmxlKHByaXYtPmdlbS0+ZWdwaV9iYXNlKTsKKworICAgICAgICByZXR1cm47Cit9CisKKyNpZmRlZiBDT05GSUdfQk9BUkRfQzJLQVNJQworaW50IGMyMDAwX2V0aF9ib2FyZF9pbml0KGNoYXIgKmRldm5hbWUsIGludCBldGhfcG9ydCkKK3sKKyAgICAgICAgLy9ldGgwIHBvcnQgaXMgY2hvc2VuIGFzIGNyaXRlcmlhIGZvciBicmluZ2luZ3VwIG91dCBvZiByZXNldCBiZWNhdXNlCisgICAgICAgIC8vYWxsIE1ESU8gYWNjZXNzIGNhbiBoYXBwZW4gdGhyb3VnaCBFTUFDMCBhbmQgd2l0aG91dCBicmluZ2luZyBldGgwIGZpcnN0CisgICAgICAgIC8vbm8gUEhZIGNvbmZpZ3VyYXRpb24gY2FuIGhhcHBlbiBhbmQgbm8gcG9pbnQgaW4gcmVtb3ZpbmcgcmVzZXQgd2l0aG91dCBldGgwCisgICAgICAgIGlmKGV0aF9wb3J0ICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKy8vICAgICAgICBwcmludGYoIiVzOiBCcmluZ2luZyBQSFkgb3V0IG9mIHJlc2V0XG4iLF9fZnVuY19fKTsKKyAgICAgICAgLy9CcmluZyBhbGwgUEhZcyBvdXQgb2YgcmVzZXQuIFRoZSBjb3JyZWN0IHdheSBpcyB0byBhc3NlcnQsIGRlYXNzZXJ0IGFuZCByZS1hc3NlcnQgdGhlIEdQSU8gcmVzZXQgc2lnbmFsCisgICAgICAgIC8vd2l0aCBkZWxheSBpbiBiZXR3ZWVuCisgICAgICAgIHdyaXRlbChyZWFkbChDT01DRVJUT19HUElPX09FX1JFRykgfCBHUElPXzMsIENPTUNFUlRPX0dQSU9fT0VfUkVHKTsKKworICAgICAgICB3cml0ZWwocmVhZGwoQ09NQ0VSVE9fR1BJT19PVVRQVVRfUkVHKSB8IEdQSU9fMywgQ09NQ0VSVE9fR1BJT19PVVRQVVRfUkVHKTsKKyAgICAgICAgdWRlbGF5KDEwMDAwMCk7CisgICAgICAgIHdyaXRlbChyZWFkbChDT01DRVJUT19HUElPX09VVFBVVF9SRUcpICYgfkdQSU9fMywgQ09NQ0VSVE9fR1BJT19PVVRQVVRfUkVHKTsKKyAgICAgICAgdWRlbGF5KDEwMDAwMCk7CisgICAgICAgIHdyaXRlbChyZWFkbChDT01DRVJUT19HUElPX09VVFBVVF9SRUcpIHwgR1BJT18zLCBDT01DRVJUT19HUElPX09VVFBVVF9SRUcpOworICAgICAgICB1ZGVsYXkoMTAwMDAwKTsKKworfQorI2Vsc2UKK2ludCBjMjAwMF9ldGhfYm9hcmRfaW5pdChjaGFyICpkZXZuYW1lLCBpbnQgZXRoX3BvcnQpCit7CisgICAgICAgIC8vZXRoMCBwb3J0IGlzIGNob3NlbiBhcyBjcml0ZXJpYSBmb3IgYnJpbmdpbmd1cCBvdXQgb2YgcmVzZXQgYmVjYXVzZQorICAgICAgICAvL2FsbCBNRElPIGFjY2VzcyBjYW4gaGFwcGVuIHRocm91Z2ggRU1BQzAgYW5kIHdpdGhvdXQgYnJpbmdpbmcgZXRoMCBmaXJzdAorICAgICAgICAvL25vIFN3aXRjaC9QSFkgY29uZmlndXJhdGlvbiBjYW4gaGFwcGVuIGFuZCBubyBwb2ludCBpbiByZW1vdmluZyByZXNldCB3aXRob3V0IGV0aDAKKyAgICAgICAgaWYoZXRoX3BvcnQgPT0gMCkKKyAgICAgICAgeworCisgICAgICAgICAgICAgICAgLy9CcmluZyBBUjgzMjcgc3dpdGNoIG91dCBvZiByZXNldC4gVG9nZ2xlIHJlc2V0CisgICAgICAgICAgICAgICAgd3JpdGVsKHJlYWRsKENPTUNFUlRPX0dQSU9fT0VfUkVHKSB8IEdQSU9fMjcsIENPTUNFUlRPX0dQSU9fT0VfUkVHKTsKKyAgICAgICAgICAgICAgICB3cml0ZWwocmVhZGwoQ09NQ0VSVE9fR1BJT19PVVRQVVRfUkVHKSB8IEdQSU9fMjcsIENPTUNFUlRPX0dQSU9fT1VUUFVUX1JFRyk7CisgICAgICAgICAgICAgICAgdWRlbGF5KDEwMDAwKTsKKyAgICAgICAgICAgICAgICB3cml0ZWwocmVhZGwoQ09NQ0VSVE9fR1BJT19PVVRQVVRfUkVHKSAmIH5HUElPXzI3LCBDT01DRVJUT19HUElPX09VVFBVVF9SRUcpOworICAgICAgICAgICAgICAgIHVkZWxheSgxMDAwMCk7CisgICAgICAgICAgICAgICAgd3JpdGVsKHJlYWRsKENPTUNFUlRPX0dQSU9fT1VUUFVUX1JFRykgfCBHUElPXzI3LCBDT01DRVJUT19HUElPX09VVFBVVF9SRUcpOworICAgICAgICAgICAgICAgIHVkZWxheSgxMDAwMCk7CisKKworICAgICAgICAgICAgICAgIC8vQVI4MzI3IFN3aXRjaCBpbml0CisgICAgICAgICAgICAgICAgYXRocnMxN19pbml0KGRldm5hbWUpOworCisgICAgICAgICAgICAgICAgLy9BUjgzMjcgV0FOIFBIWTQgaW5pdAorICAgICAgICAgICAgICAgIGF0aHJzMTdfcGh5X3NldHVwKGRldm5hbWUsRU1BQzBfUEhZX0FERFIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8vQVI4MzI3IExBTiBQSFlzIGluaXQKKyAgICAgICAgICAgICAgICBhdGhyczE3X3BoeV9zZXR1cChkZXZuYW1lLEVNQUMxX1BIWV9BRERSKTsKKyAgICAgICAgfQorCit9CisjZW5kaWYKKworc3RhdGljIGludCBjMjAwMF9ldGhfaW5pdChzdHJ1Y3QgZXRoX2RldmljZSAqZGV2LCBiZF90ICogYmQpCit7CisgICAgICAgIHN0cnVjdCBjMjAwMF9ldGhfZGV2ICpwcml2ID0gKHN0cnVjdCBjMjAwMF9ldGhfZGV2ICopZGV2LT5wcml2OworICAgICAgICBzdHJ1Y3QgZ2VtYWNfcyAqZ2VtID0gcHJpdi0+Z2VtOworCXUzMiBwaHlhZGRyOworCisvLwlwcmludGYoIiMjICVzXG4iLF9fZnVuY19fKTsKKworICAgICAgICAvKiBHRU1BQyBpbml0ICovCisgICAgICAgIHBmZV9nZW1hY19pbml0KGdlbS0+Z2VtYWNfYmFzZSwgZ2VtLT5nZW1hY19tb2RlLCBnZW0tPmdlbWFjX3NwZWVkLCBnZW0tPmdlbWFjX2R1cGxleCk7CisKKyAgICAgICAgLyogc2V0IGV0aGVybmV0IG1hYyBhZGRyZXNzICovCisgICAgICAgIGMyMDAwX3NldF9ldGhhZGRyKGRldiwgZGV2LT5lbmV0YWRkcik7CisKKwlwaHlhZGRyID0gZ2VtX2luZm9bcHJpdi0+Z2VtYWNfcG9ydF0ucGh5X2FkZHJlc3M7CisKKyAgICAgICAgaWYgKCEoZ2VtLT5mbGFncyAmIEdFTUFDX05PX1BIWSkgJiYgKGdlbS0+Z2VtYWNfbW9kZSA9PSBSR01JSSkgKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgbWlpcGh5X2VuYWJsZV9yZ21paV9yeF9kZWxheShkZXYtPm5hbWUsIHBoeWFkZHIpOworICAgICAgICAgICAgICAgIG1paXBoeV9lbmFibGVfcmdtaWlfdHhfZGVsYXkoZGV2LT5uYW1lLCBwaHlhZGRyKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgLyogUmUtbmVnb3RpYXRlIHNwZWVkIGFuZCBkdXBsZXggKi8KKyAgICAgICAgaWYgKCEoZ2VtLT5mbGFncyAmIEdFTUFDX05PX1BIWSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgc3BlZWQgPSBnZW0tPmdlbWFjX3NwZWVkOworICAgICAgICAgICAgICAgIGludCBkdXBsZXggPSBnZW0tPmdlbWFjX2R1cGxleDsKKworCQltaWlwaHlfc3BlZWRfZHVwbGV4KGRldi0+bmFtZSwgcGh5YWRkciwgJnNwZWVkLCAmZHVwbGV4KTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3BlZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfMTBCQVNFVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSBTUEVFRF8xME07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF8xMDBCQVNFVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSBTUEVFRF8xMDBNOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfMTAwMEJBU0VUOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IFNQRUVEXzEwMDBNOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkdXBsZXggPSAoZHVwbGV4ID09IEhBTEYpID8gRFVQTEVYX0hBTEY6RFVQTEVYX0ZVTEw7CisgICAgICAgICAgICAgICAgZ2VtYWNfc2V0X3NwZWVkKGdlbS0+Z2VtYWNfYmFzZSwgc3BlZWQpOworICAgICAgICAgICAgICAgIGdlbWFjX3NldF9kdXBsZXgoZ2VtLT5nZW1hY19iYXNlLCBkdXBsZXgpOworICAgICAgICB9CisKKyAgICAgICAgLyogRW5hYmxlIEdQSSAqLworICAgICAgICBncGlfZW5hYmxlKHByaXYtPmdlbS0+ZWdwaV9iYXNlKTsKKworICAgICAgICAvKiBFbmFibGUgR0VNQUMgZm9yIHR4IGFuZCByeCAqLworICAgICAgICBnZW1hY19lbmFibGUocHJpdi0+Z2VtLT5nZW1hY19iYXNlKTsKKwkKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYzIwMDBfZXRoX3NlbmQoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwgdm9sYXRpbGUgdm9pZCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICAgICAgc3RydWN0IGMyMDAwX2V0aF9kZXYgKnByaXYgPSAoc3RydWN0IGMyMDAwX2V0aF9kZXYgKilkZXYtPnByaXY7CisKKyAgICAgICAgaW50IHJjOworICAgICAgICB1aW50NjRfdCB0eF90bW87CisJaW50IGk7CisKKyAgICAgICAgcmMgPSBwZmVfc2VuZChwcml2LT5nZW1hY19wb3J0LCBkYXRhLCBsZW5ndGgpOworCisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIlR4IFEgZnVsbFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIHJjID0gcGZlX3R4X2RvbmUoKTsKKyAgICAgICAgICAgICAgICBpZiAocmMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkKKwkJdWRlbGF5KDEwMCk7CisJCWkrKzsKKwkJaWYoaSA9PSAzMDAwMCkKKwkJCXByaW50ZigiVHggdGltZW91dCwgc2VuZCBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjMjAwMF9ldGhfcmVjdihzdHJ1Y3QgZXRoX2RldmljZSAqZGV2KQoreworICAgICAgICBzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqcHJpdiA9IChzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqKWRldi0+cHJpdjsKKyAgICAgICAgdTMyIHBrdF9idWY7CisgICAgICAgIGludCBsZW47CisgICAgICAgIGludCBwaHlfcG9ydDsKKworICAgICAgICBsZW4gPSBwZmVfcmVjdigmcGt0X2J1ZiwgJnBoeV9wb3J0KTsKKworICAgICAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgLy9ubyBwYWNrZXQgaW4gcngKKworICAgICAgICBkcHJpbnQoIlJ4IHBrdDogcGt0X2J1ZiglMDh4KSwgcGh5X3BvcnQoJWQpLCBsZW4oJWQpXG4iLCBwa3RfYnVmLCBwaHlfcG9ydCwgbGVuKTsKKyAgICAgICAgaWYgKHBoeV9wb3J0ICE9IHByaXYtPmdlbWFjX3BvcnQpICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJSeCBwa3Qgbm90IG9uIGV4cGVjdGVkIHBvcnRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKwkvLyBQYXNzIHRoZSBwYWNrZXQgdXAgdG8gdGhlIHByb3RvY29sIGxheWVycy4KKwlOZXRSZWNlaXZlKCh1bnNpZ25lZCBjaGFyICopcGt0X2J1ZiwgbGVuKTsKKworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjMjAwMF9nZW1hY19pbml0aWFsaXplKGJkX3QgKiBiaXMsIGludCBpbmRleCwgY2hhciAqZGV2bmFtZSkKK3sKKyAgICAgICAgc3RydWN0IGV0aF9kZXZpY2UgKmRldjsKKyAgICAgICAgc3RydWN0IGMyMDAwX2V0aF9kZXYgKnByaXY7CisgICAgICAgIHN0cnVjdCBwZmUgKnBmZTsKKwlpbnQgaTsKKwkKKyAgICAgICAgLy9CcmluZyBIRkUgYW5kIEdFTVRYIG91dCBvZiByZXNldAorICAgICAgICB3cml0ZWwoMHgwLCBIRkVfUkVTRVQpOworICAgICAgICB3cml0ZWwoMHgwLCBHRU1UWF9SRVNFVCk7CisKKyAgICAgICAgZGV2ID0gKHN0cnVjdCBldGhfZGV2aWNlICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXRoX2RldmljZSkpOworICAgICAgICBpZiAoIWRldikKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgbWVtc2V0KGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBldGhfZGV2aWNlKSk7CisKKyAgICAgICAgcHJpdiA9IChzdHJ1Y3QgYzIwMDBfZXRoX2RldiAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGMyMDAwX2V0aF9kZXYpKTsKKyAgICAgICAgaWYgKCFwcml2KQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBnZW1hY19saXN0W2luZGV4XSA9IHByaXY7CisJcHJpdi0+Z2VtYWNfcG9ydCA9IGluZGV4OworICAgICAgICBwcml2LT5nZW0gPSAmZ2VtX2luZm9bcHJpdi0+Z2VtYWNfcG9ydF07CisgICAgICAgIHByaXYtPmRldiA9IGRldjsKKworICAgICAgICBwZmUgPSAmcHJpdi0+cGZlOworCisgICAgICAgIHBmZS0+Y2J1c19iYXNlYWRkciA9ICh2b2lkICopQ09NQ0VSVE9fQVhJX0hGRV9DRkdfQkFTRTsKKyAgICAgICAgcGZlLT5kZHJfYmFzZWFkZHIgPSAodm9pZCAqKUNPTkZJR19ERFJfQkFTRUFERFI7CisgICAgICAgIHBmZS0+ZGRyX3BoeXNfYmFzZWFkZHIgPSAodW5zaWduZWQgbG9uZylDT05GSUdfRERSX1BIWVNfQkFTRUFERFI7CisKKwlzcHJpbnRmKGRldi0+bmFtZSwgZGV2bmFtZSk7CisgICAgICAgIGRldi0+cHJpdiA9IHByaXY7CisgICAgICAgIGRldi0+aW5pdCA9IGMyMDAwX2V0aF9pbml0OworICAgICAgICBkZXYtPmhhbHQgPSBjMjAwMF9ldGhfaGFsdDsKKyAgICAgICAgZGV2LT5zZW5kID0gYzIwMDBfZXRoX3NlbmQ7CisgICAgICAgIGRldi0+cmVjdiA9IGMyMDAwX2V0aF9yZWN2OworCisgICAgICAgIC8qIFRlbGwgdS1ib290IHRvIGdldCB0aGUgYWRkciBmcm9tIHRoZSBlbnYgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKyAgICAgICAgICAgICAgICBkZXYtPmVuZXRhZGRyW2ldID0gMDsKKworCisgICAgICAgIHN3aXRjaChwcml2LT5nZW1hY19wb3J0KSAgeworICAgICAgICAgICAgICAgIGNhc2UgRU1BQ19QT1JUXzA6CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmdlbS0+Z2VtYWNfYmFzZSA9IEVNQUMxX0JBU0VfQUREUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmdlbS0+ZWdwaV9iYXNlID0gRUdQSTFfQkFTRV9BRERSOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRU1BQ19QT1JUXzE6CisgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5nZW0tPmdlbWFjX2Jhc2UgPSBFTUFDMl9CQVNFX0FERFI7CisgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5nZW0tPmVncGlfYmFzZSA9IEVHUEkyX0JBU0VfQUREUjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEVNQUNfUE9SVF8yOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+Z2VtLT5nZW1hY19iYXNlID0gRU1BQzNfQkFTRV9BRERSOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+Z2VtLT5lZ3BpX2Jhc2UgPSBFR1BJM19CQVNFX0FERFI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBwZmVfcHJvYmUocGZlKTsKKyAgICAgICAgcHJpdi0+cGh5cmVnaXN0ZXJzID0gKHZvaWQgKilnZW1faW5mb1tnZW1faW5mb1twcml2LT5nZW1hY19wb3J0XS5waHlfcmVnX2luZGV4XS5nZW1hY19iYXNlOworCisgICAgICAgIGlmKHByaXYtPmdlbWFjX3BvcnQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGdlbWFjX3NldF9tZGNfZGl2KHByaXYtPmdlbS0+Z2VtYWNfYmFzZSwgTURDX0RJVl85Nik7CisgICAgICAgICAgICAgICAgZ2VtYWNfZW5hYmxlX21kaW8ocHJpdi0+Z2VtLT5nZW1hY19iYXNlKTsKKyAgICAgICAgICAgICAgICBtaWlwaHlfcmVnaXN0ZXIoZGV2LT5uYW1lLCBjMjAwMF9waHlfcmVhZCwgYzIwMDBfcGh5X3dyaXRlKTsKKyAgICAgICAgfQorCisJYzIwMDBfZXRoX2JvYXJkX2luaXQoZGV2LT5uYW1lLCBwcml2LT5nZW1hY19wb3J0KTsKKwkKKyAgICAgICAgZXRoX3JlZ2lzdGVyKGRldik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9jbGFzc19zYmxfYzIwMDBfZWxmLmZ3IGIvZHJpdmVycy9jMjAwMF9ldGgvY2xhc3Nfc2JsX2MyMDAwX2VsZi5mdwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTg3MWRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvY2xhc3Nfc2JsX2MyMDAwX2VsZi5mdwpAQCAtMCwwICsxIEBACisweDdmLDB4NDUsMHg0YywweDQ2LDB4MDEsMHgwMiwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4NmYsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsMHgwMCwweDAwLDB4MTIsMHhjNCwweDAwLDB4MDQsMHgwMCwweDA1LDB4MDAsMHgzNCwweDAwLDB4MjAsMHgwMCwweDAzLDB4MDAsMHgyOCwweDAwLDB4MGEsMHgwMCwweDA5LDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGEsMHgwYywweDAwLDB4MDAsMHgwYSwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDBmLDB4ODAsMHgwMCwweDAwLDB4MWYsMHg4MCwweDAwLDB4MDAsMHgxZiwweDgwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDAwLDB4MDAsMHgyOCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDU0LDB4MDAsMHgwMCwweDAyLDB4NTQsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYSwweDJhLDB4MmEsMHgyYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4M2MsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwOCwweDVjLDB4MDAsMHgwMCwweDA4LDB4NGMsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDEsMHg4MCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDAsMHgwMCwweDAzLDB4ODAsMHg0NCwweDQ1LDB4NDEsMHg0NCwweDUzLDB4NTQsMHg0ZiwweDUwLDB4YzAsMHgyNSwweDAwLDB4MzQsMHhjMSwweDAyLDB4MDAsMHgxMCwweGMxLDB4MDIsMHgwMCwweDBjLDB4YzEsMHgwMiwweDAwLDB4MDgsMHg2OSwweDZlLDB4NjksMHg3NCwweDcyLDB4NzUsMHg2ZSwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHgwMCwweDAxLDB4MDAsMHg0MCwweDAwLDB4MDEsMHgwMCwweDQwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHgwMCwweDAxLDB4MDAsMHg0MCwweDAwLDB4MDEsMHgwMCwweDQwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHgwMCwweDAxLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDEwLDB4ODAsMHgxMSwweDAwLDB4MTEsMHg4MCwweDEyLDB4MDAsMHgxMiwweDgwLDB4MTMsMHgwMCwweDEzLDB4ODAsMHgxNCwweDAwLDB4MTQsMHg4MCwweDE1LDB4MDAsMHgxNSwweDgwLDB4MTYsMHgwMCwweDE2LDB4ODAsMHgxNywweDAwLDB4MTcsMHg4MCwweGVhLDB4MDAsMHhjOCwweDAwLDB4ZTAsMHgxNCwweGM4LDB4MDgsMHhlYSwweDAwLDB4Y2IsMHg4MCwweGUwLDB4MTAsMHhjYiwweGEwLDB4ZTAsMHg2MCwweDNjLDB4MDAsMHhjYywweDAyLDB4ZTAsMHg2MCwweDNjLDB4MTAsMHhlMCwweDAwLDB4ZDEsMHgwMiwweDNhLDB4ODAsMHhlYSwweDAwLDB4Y2IsMHg4MCwweGUwLDB4M2YsMHhjYiwweGE4LDB4YjgsMHg0NywweGI4LDB4ZDcsMHhiOSwweDY3LDB4YjksMHhmNywweGUwLDB4MDEsMHhiYSwweDA3LDB4ZTAsMHgwMSwweGJhLDB4OTcsMHhlMCwweDAxLDB4YmIsMHgyNywweGUwLDB4MDEsMHhiYiwweGI3LDB4ZTAsMHgwMSwweGJjLDB4NDcsMHhlMCwweDAxLDB4YmMsMHhkNywweGUwLDB4MDEsMHhiZCwweDY3LDB4ZTAsMHgwMSwweGJkLDB4ZjcsMHhlMCwweDAyLDB4YmUsMHgwNywweGUwLDB4MDIsMHhiZSwweDk3LDB4ZTAsMHgwMiwweGJmLDB4MjcsMHhlMCwweDAyLDB4YmYsMHhiNywweGUwLDB4NjAsMHgzZSwweDA5LDB4ZTAsMHg2MCwweDNlLDB4OGEsMHhlMCwweDYwLDB4M2YsMHgwYiwweGUwLDB4NjAsMHgzZiwweDhjLDB4YmUsMHgwNywweGJlLDB4OTcsMHhiZiwweDI3LDB4YmYsMHhiNywweGUwLDB4MDAsMHgwMCwweDgyLDB4ZTAsMHgwMCwweDFjLDB4MDQsMHhlMCwweDAwLDB4MWMsMHg5MywweGJjLDB4ODgsMHhlMCwweDAwLDB4MWMsMHg5NCwweGJjLDB4ODgsMHgzYSwweDgwLDB4MDAsMHhmZiwweGE1LDB4MDgsMHhlMCwweDAwLDB4MWMsMHgxNSwweGJkLDB4MDgsMHgwMCwweDAwLDB4ZTAsMHgwMCwweDFjLDB4MDMsMHhlMCwweDI5LDB4YTQsMHhmOCwweGUwLDB4MDAsMHgxYywweDE2LDB4YmMsMHg4OCwweDAwLDB4MDAsMHhlMCwweDAwLDB4MWMsMHg4NCwweGE0LDB4NDksMHhjNCwweDAxLDB4YmMsMHg0OSwweDM4LDB4ODIsMHgxNSwweDgwLDB4MDAsMHg4NiwweGUxLDB4ODAsMHhhNiwweDE5LDB4YzUsMHg4NCwweGUxLDB4ODAsMHhiZSwweDE4LDB4M2QsMHhmYSwweDA0LDB4ZmEsMHgzOCwweDgyLDB4YzAsMHg2NCwweDc4LDB4ODYsMHg3OSwweDA1LDB4NzksMHg4NCwweDdhLDB4MDMsMHg3YSwweDgyLDB4N2IsMHgwMSwweGUwLDB4MDAsMHgxOSwweDgzLDB4MTIsMHgwMCwweGUwLDB4MjQsMHhhNSwweGYzLDB4ZTAsMHgwMCwweDFkLDB4MDQsMHhhNCwweDFhLDB4ZWIsMHg4MiwweGNlLDB4MDIsMHhjNCwweDAxLDB4YmMsMHgxYSwweGUwLDB4MDAsMHgxYywweDg0LDB4YTQsMHgwYywweGUwLDB4MDgsMHgzZCwweGQ4LDB4MjQsMHg3NiwweGE0LDB4MjksMHhjNCwweDAxLDB4YmMsMHgyOSwweGUwLDB4MDAsMHgxYywweDA1LDB4ZTAsMHgyNCwweGE0LDB4NzgsMHg5YywweGI4LDB4ZTIsMHgwMCwweGNjLDB4ODMsMHgwMSwweDg1LDB4OWQsMHgyOCwweGUyLDB4MDAsMHhjZCwweDM3LDB4MDUsMHg4NSwweGE1LDB4MjgsMHhlYiwweGUwLDB4YzUsMHgwMSwweDI1LDB4MDUsMHgzYywweGU0LDB4ZGYsMHhiNiwweGUwLDB4MDAsMHgwMCwweGYwLDB4ZTIsMHgwMCwweGNjLDB4ODMsMHgwMSwweDA0LDB4OTUsMHgyOCwweGM1LDB4N2MsMHhiNSwweDI4LDB4OWQsMHhhOCwweDNlLDB4NjgsMHhlMiwweDAwLDB4Y2QsMHhlZiwweGUwLDB4MDAsMHgxNSwweDcwLDB4YzYsMHgxMCwweGUwLDB4NmEsMHgzZCwweGFiLDB4ZTIsMHgwMCwweGNjLDB4ODMsMHgzZCwweDFjLDB4YTYsMHgwOCwweDAxLDB4OGYsMHhlMCwweDAyLDB4ODksMHgwOCwweDE0LDB4ODAsMHhlMiwweDAwLDB4YzksMHgwMywweGUwLDB4NjksMHgzYywweGEyLDB4M2EsMHhlOCwweGM1LDB4ZmEsMHgzOSwweDY5LDB4YzIsMHg5NiwweGUzLDB4ZmYsMHhjNSwweGZmLDB4MDAsMHg5MCwweDNhLDB4ZTgsMHhjMiwweDhhLDB4ZTAsMHgwMSwweGFjLDB4YTgsMHgxNCwweDAwLDB4YWMsMHgxNSwweDE0LDB4MDAsMHhhYywweDI1LDB4YzUsMHg4NiwweGFjLDB4MzUsMHhlMywweGZmLDB4YzUsMHhmZiwweGFjLDB4NDUsMHgxMSwweDAzLDB4YWMsMHg1NSwweGUwLDB4MDAsMHgxYywweDA2LDB4MTQsMHhmOCwweGUwLDB4MDksMHgzYSwweGQ5LDB4ZTAsMHgyNCwweGEzLDB4NzgsMHhjNCwweGY4LDB4ZTMsMHhmZiwweGM0LDB4ZjgsMHgxNCwweDAxLDB4YWMsMHgwNiwweDNjLDB4NjksMHgzZCwweDI5LDB4ZTIsMHgwMSwweGM0LDB4N2YsMHhlMiwweDAxLDB4YzUsMHg3ZiwweGUwLDB4MGMsMHgzYywweDFjLDB4YjQsMHg5NiwweGUyLDB4MDEsMHhjZCwweDAwLDB4YWQsMHgxNiwweGJlLDB4MTYsMHgwNSwweDhlLDB4M2MsMHg2YywweGUwLDB4MDEsMHhjNCwweDAwLDB4ZTAsMHgwMSwweGM0LDB4ODAsMHhlMSwweGZmLDB4YzUsMHgwMCwweDdkLDB4ODcsMHhkZiwweDczLDB4ZTcsMHhmZiwweDE0LDB4MDAsMHhhYywweDE2LDB4NjUsMHg4NywweDljLDB4MTYsMHgzYywweGU4LDB4ZTIsMHgwMSwweGM0LDB4ZmYsMHhhYywweDk4LDB4M2EsMHhhOSwweDE0LDB4ODAsMHhhYywweGQ4LDB4YWEsMHg4OCwweGE5LDB4NDgsMHhiNSwweDk4LDB4ZTAsMHgwMCwweDFjLDB4OTcsMHhlMCwweDI0LDB4YTQsMHg3MywweGJjLDB4MDksMHgwMCwweDAwLDB4ZTAsMHgwMCwweDFjLDB4ODQsMHhhNCwweDM5LDB4YzQsMHgwMSwweGJjLDB4MzksMHhlMCwweDI0LDB4YTQsMHg3MywweGUwLDB4MDAsMHgxZSwweDE4LDB4YmMsMHgwYywweDAwLDB4MDAsMHhjMiwweDAxLDB4ZTIsMHgwMCwweGMyLDB4MDMsMHhlNywweGZlLDB4MDAsMHhlMywweDM4LDB4ODIsMHhjMCwweDdjLDB4NzgsMHg4MSwweGUwLDB4MDAsMHgxYywweDA0LDB4ZTAsMHgwMCwweDFjLDB4OTksMHhiYywweDg4LDB4ZTAsMHgwMCwweDFjLDB4OWEsMHhiYywweDg4LDB4ZGYsMHg0YywweDQ3LDB4NDMsMHg0MywweDNhLDB4MjAsMHgyOCwweDQ3LDB4NGUsMHg1NSwweDI5LDB4MjAsMHgzNCwweDJlLDB4MzYsMHgyZSwweDMxLDB4MDAsMHgwMCwweDJlLDB4NzMsMHg2OCwweDczLDB4NzQsMHg3MiwweDc0LDB4NjEsMHg2MiwweDAwLDB4MmUsMHg3MCwweDZkLDB4NjUsMHg2ZCwweDAwLDB4MmUsMHg2NCwweDZkLDB4NjUsMHg2ZCwweDVmLDB4NzAsMHg2NSwweDczLDB4NzQsMHg2MSwweDc0LDB4NzUsMHg3MywweDAwLDB4MmUsMHg2NCwweDZkLDB4NjUsMHg2ZCwweDVmLDB4NjcsMHg2ZiwweDc0LDB4MDAsMHgyZSwweDY0LDB4NmQsMHg2NSwweDZkLDB4NWYsMHg3MywweDY0LDB4NjEsMHg3NCwweDYxLDB4MDAsMHgyZSwweDY0LDB4NmQsMHg2NSwweDZkLDB4NWYsMHg2YywweDY5LDB4NzQsMHgzNCwweDAwLDB4MmUsMHg2NCwweDZkLDB4NjUsMHg2ZCwweDVmLDB4NzMsMHg3NCwweDYxLDB4NjMsMHg2YiwweDAwLDB4MmUsMHg3NiwweDY1LDB4NjMsMHg3NCwweDZmLDB4NzIsMHgwMCwweDJlLDB4NjMsMHg2ZiwweDZkLDB4NmQsMHg2NSwweDZlLDB4NzQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYiwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4NTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDA4LDB4MjAsMHgwMCwweDAwLDB4MDgsMHgyMCwweDAwLDB4MDAsMHgwMCwweDFjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgyYSwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDgsMHgzYywweDAwLDB4MDAsMHgwOCwweDNjLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM2LDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgxMiwweDAwLDB4MDAsMHgwOCwweDZjLDB4MDAsMHgwMCwweDA4LDB4NmMsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4NDEsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDA4LDB4OGMsMHgwMCwweDAwLDB4MDgsMHg4YywweDAwLDB4MDAsMHgwMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0ZCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MWYsMHg4MCwweDAwLDB4MDAsMHgwZiwweDgwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDU1LDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEyLDB4NTQsMHgwMCwweDAwLDB4MDAsMHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTIsMHg2NSwweDAwLDB4MDAsMHgwMCwweDVlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvaGFsLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9oYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODU0MWYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvaGFsLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqICAoQykgQ29weXJpZ2h0IDIwMTEKKyAqICBBdXRob3IgOiBNaW5kc3BlZWQgVGVjaG5vbG9nZXMKKyAqICAKKyAqICBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogIHByb2plY3QuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqICAKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqICBNQSAwMjExMS0xMzA3IFVTQQorICogKi8KKworI2lmbmRlZiBfSEFMX0hfCisjZGVmaW5lIF9IQUxfSF8KKworI2lmIGRlZmluZWQoQ09ORklHX1BMQVRGT1JNX1BDSSkgIAorLyogRm9yIENoaXBJVCAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAicGZlX21vZC5oIgorCisjZGVmaW5lIGZyZWUoeCkgIGtmcmVlKHgpCisjZGVmaW5lIHh6YWxsb2MoeCkgIGttYWxsb2MoeCwgR0ZQX0RNQSkKKyNkZWZpbmUgcHJpbnRmICBwcmludGsKKworLy8jZGVmaW5lIGRwcmludChmbXQsIGFyZy4uLikJcHJpbnRrKGZtdCwgIyNhcmcpCisjZGVmaW5lIGRwcmludChmbXQsIGFyZy4uLikJCisKKyNlbHNlCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGVsZi5oPgorI2luY2x1ZGUgPGNvbW1vbi5oPgorLy8jaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bWlpcGh5Lmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKworI2luY2x1ZGUgImMyMDAwX2V0aC5oIgorCisjZW5kaWYKKworCisjZW5kaWYgLyogX0hBTF9IXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmUuYyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OTM3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUuYwpAQCAtMCwwICsxLDE0NzQgQEAKKyNpbmNsdWRlICJoYWwuaCIKKyNpbmNsdWRlICJwZmUvcGZlLmgiCisKK3ZvaWQgKmNidXNfYmFzZV9hZGRyOwordm9pZCAqZGRyX2Jhc2VfYWRkcjsKK3Vuc2lnbmVkIGxvbmcgZGRyX3BoeXNfYmFzZV9hZGRyOworCitzdGF0aWMgc3RydWN0IHBlX2luZm8gcGVbTUFYX1BFXTsKKworLyoqIEluaXRpYWxpemVzIHRoZSBQRkUgbGlicmFyeS4KKyogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIGFueSBvZiB0aGUgbGlicmFyeSBmdW5jdGlvbnMuCisqCisqIEBwYXJhbVtpbl0gY2J1c19iYXNlCQlDQlVTIHZpcnR1YWwgYmFzZSBhZGRyZXNzIChhcyBtYXBwZWQgaW4gdGhlIGhvc3QgQ1BVIGFkZHJlc3Mgc3BhY2UpCisqIEBwYXJhbVtpbl0gZGRyX2Jhc2UJCUREUiB2aXJ0dWFsIGJhc2UgYWRkcmVzcyAoYXMgbWFwcGVkIGluIHRoZSBob3N0IENQVSBhZGRyZXNzIHNwYWNlKQorKiBAcGFyYW1baW5dIGRkcl9waHlzX2Jhc2UJRERSIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAoYXMgbWFwcGVkIGluIHBsYXRmb3JtKQorKi8KK3ZvaWQgcGZlX2xpYl9pbml0KHZvaWQgKmNidXNfYmFzZSwgdm9pZCAqZGRyX2Jhc2UsIHVuc2lnbmVkIGxvbmcgZGRyX3BoeXNfYmFzZSkKK3sKKwljYnVzX2Jhc2VfYWRkciA9IGNidXNfYmFzZTsKKwlkZHJfYmFzZV9hZGRyID0gZGRyX2Jhc2U7CisJZGRyX3BoeXNfYmFzZV9hZGRyID0gZGRyX3BoeXNfYmFzZTsKKworCXBlW0NMQVNTMF9JRF0uZG1lbV9iYXNlX2FkZHIgPSBDTEFTU19ETUVNX0JBU0VfQUREUigwKTsKKwlwZVtDTEFTUzBfSURdLnBtZW1fYmFzZV9hZGRyID0gQ0xBU1NfSU1FTV9CQVNFX0FERFIoMCk7CisJcGVbQ0xBU1MwX0lEXS5wbWVtX3NpemUgPSBDTEFTU19JTUVNX1NJWkU7CisJcGVbQ0xBU1MwX0lEXS5tZW1fYWNjZXNzX3dkYXRhID0gQ0xBU1NfTUVNX0FDQ0VTU19XREFUQTsKKwlwZVtDTEFTUzBfSURdLm1lbV9hY2Nlc3NfYWRkciA9IENMQVNTX01FTV9BQ0NFU1NfQUREUjsKKwlwZVtDTEFTUzBfSURdLm1lbV9hY2Nlc3NfcmRhdGEgPSBDTEFTU19NRU1fQUNDRVNTX1JEQVRBOworCisJcGVbQ0xBU1MxX0lEXS5kbWVtX2Jhc2VfYWRkciA9IENMQVNTX0RNRU1fQkFTRV9BRERSKDEpOworCXBlW0NMQVNTMV9JRF0ucG1lbV9iYXNlX2FkZHIgPSBDTEFTU19JTUVNX0JBU0VfQUREUigxKTsKKwlwZVtDTEFTUzFfSURdLnBtZW1fc2l6ZSA9IENMQVNTX0lNRU1fU0laRTsKKwlwZVtDTEFTUzFfSURdLm1lbV9hY2Nlc3Nfd2RhdGEgPSBDTEFTU19NRU1fQUNDRVNTX1dEQVRBOworCXBlW0NMQVNTMV9JRF0ubWVtX2FjY2Vzc19hZGRyID0gQ0xBU1NfTUVNX0FDQ0VTU19BRERSOworCXBlW0NMQVNTMV9JRF0ubWVtX2FjY2Vzc19yZGF0YSA9IENMQVNTX01FTV9BQ0NFU1NfUkRBVEE7CisKKwlwZVtDTEFTUzJfSURdLmRtZW1fYmFzZV9hZGRyID0gQ0xBU1NfRE1FTV9CQVNFX0FERFIoMik7CisJcGVbQ0xBU1MyX0lEXS5wbWVtX2Jhc2VfYWRkciA9IENMQVNTX0lNRU1fQkFTRV9BRERSKDIpOworCXBlW0NMQVNTMl9JRF0ucG1lbV9zaXplID0gQ0xBU1NfSU1FTV9TSVpFOworCXBlW0NMQVNTMl9JRF0ubWVtX2FjY2Vzc193ZGF0YSA9IENMQVNTX01FTV9BQ0NFU1NfV0RBVEE7CisJcGVbQ0xBU1MyX0lEXS5tZW1fYWNjZXNzX2FkZHIgPSBDTEFTU19NRU1fQUNDRVNTX0FERFI7CisJcGVbQ0xBU1MyX0lEXS5tZW1fYWNjZXNzX3JkYXRhID0gQ0xBU1NfTUVNX0FDQ0VTU19SREFUQTsKKworCXBlW0NMQVNTM19JRF0uZG1lbV9iYXNlX2FkZHIgPSBDTEFTU19ETUVNX0JBU0VfQUREUigzKTsKKwlwZVtDTEFTUzNfSURdLnBtZW1fYmFzZV9hZGRyID0gQ0xBU1NfSU1FTV9CQVNFX0FERFIoMyk7CisJcGVbQ0xBU1MzX0lEXS5wbWVtX3NpemUgPSBDTEFTU19JTUVNX1NJWkU7CisJcGVbQ0xBU1MzX0lEXS5tZW1fYWNjZXNzX3dkYXRhID0gQ0xBU1NfTUVNX0FDQ0VTU19XREFUQTsKKwlwZVtDTEFTUzNfSURdLm1lbV9hY2Nlc3NfYWRkciA9IENMQVNTX01FTV9BQ0NFU1NfQUREUjsKKwlwZVtDTEFTUzNfSURdLm1lbV9hY2Nlc3NfcmRhdGEgPSBDTEFTU19NRU1fQUNDRVNTX1JEQVRBOworCisjaWYgIWRlZmluZWQoQ09ORklHX1BMQVRGT1JNX1BDSSkKKwlwZVtDTEFTUzRfSURdLmRtZW1fYmFzZV9hZGRyID0gQ0xBU1NfRE1FTV9CQVNFX0FERFIoNCk7CisJcGVbQ0xBU1M0X0lEXS5wbWVtX2Jhc2VfYWRkciA9IENMQVNTX0lNRU1fQkFTRV9BRERSKDQpOworCXBlW0NMQVNTNF9JRF0ucG1lbV9zaXplID0gQ0xBU1NfSU1FTV9TSVpFOworCXBlW0NMQVNTNF9JRF0ubWVtX2FjY2Vzc193ZGF0YSA9IENMQVNTX01FTV9BQ0NFU1NfV0RBVEE7CisJcGVbQ0xBU1M0X0lEXS5tZW1fYWNjZXNzX2FkZHIgPSBDTEFTU19NRU1fQUNDRVNTX0FERFI7CisJcGVbQ0xBU1M0X0lEXS5tZW1fYWNjZXNzX3JkYXRhID0gQ0xBU1NfTUVNX0FDQ0VTU19SREFUQTsKKworCXBlW0NMQVNTNV9JRF0uZG1lbV9iYXNlX2FkZHIgPSBDTEFTU19ETUVNX0JBU0VfQUREUig1KTsKKwlwZVtDTEFTUzVfSURdLnBtZW1fYmFzZV9hZGRyID0gQ0xBU1NfSU1FTV9CQVNFX0FERFIoNSk7CisJcGVbQ0xBU1M1X0lEXS5wbWVtX3NpemUgPSBDTEFTU19JTUVNX1NJWkU7CisJcGVbQ0xBU1M1X0lEXS5tZW1fYWNjZXNzX3dkYXRhID0gQ0xBU1NfTUVNX0FDQ0VTU19XREFUQTsKKwlwZVtDTEFTUzVfSURdLm1lbV9hY2Nlc3NfYWRkciA9IENMQVNTX01FTV9BQ0NFU1NfQUREUjsKKwlwZVtDTEFTUzVfSURdLm1lbV9hY2Nlc3NfcmRhdGEgPSBDTEFTU19NRU1fQUNDRVNTX1JEQVRBOworI2VuZGlmCisJcGVbVE1VMF9JRF0uZG1lbV9iYXNlX2FkZHIgPSBUTVVfRE1FTV9CQVNFX0FERFIoMCk7CisJcGVbVE1VMF9JRF0ucG1lbV9iYXNlX2FkZHIgPSBUTVVfSU1FTV9CQVNFX0FERFIoMCk7CisJcGVbVE1VMF9JRF0ucG1lbV9zaXplID0gVE1VX0lNRU1fU0laRTsKKwlwZVtUTVUwX0lEXS5tZW1fYWNjZXNzX3dkYXRhID0gVE1VX01FTV9BQ0NFU1NfV0RBVEE7CisJcGVbVE1VMF9JRF0ubWVtX2FjY2Vzc19hZGRyID0gVE1VX01FTV9BQ0NFU1NfQUREUjsKKwlwZVtUTVUwX0lEXS5tZW1fYWNjZXNzX3JkYXRhID0gVE1VX01FTV9BQ0NFU1NfUkRBVEE7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfVE1VX0RVTU1ZKQorCXBlW1RNVTFfSURdLmRtZW1fYmFzZV9hZGRyID0gVE1VX0RNRU1fQkFTRV9BRERSKDEpOworCXBlW1RNVTFfSURdLnBtZW1fYmFzZV9hZGRyID0gVE1VX0lNRU1fQkFTRV9BRERSKDEpOworCXBlW1RNVTFfSURdLnBtZW1fc2l6ZSA9IFRNVV9JTUVNX1NJWkU7CisJcGVbVE1VMV9JRF0ubWVtX2FjY2Vzc193ZGF0YSA9IFRNVV9NRU1fQUNDRVNTX1dEQVRBOworCXBlW1RNVTFfSURdLm1lbV9hY2Nlc3NfYWRkciA9IFRNVV9NRU1fQUNDRVNTX0FERFI7CisJcGVbVE1VMV9JRF0ubWVtX2FjY2Vzc19yZGF0YSA9IFRNVV9NRU1fQUNDRVNTX1JEQVRBOworCisJcGVbVE1VMl9JRF0uZG1lbV9iYXNlX2FkZHIgPSBUTVVfRE1FTV9CQVNFX0FERFIoMik7CisJcGVbVE1VMl9JRF0ucG1lbV9iYXNlX2FkZHIgPSBUTVVfSU1FTV9CQVNFX0FERFIoMik7CisJcGVbVE1VMl9JRF0ucG1lbV9zaXplID0gVE1VX0lNRU1fU0laRTsKKwlwZVtUTVUyX0lEXS5tZW1fYWNjZXNzX3dkYXRhID0gVE1VX01FTV9BQ0NFU1NfV0RBVEE7CisJcGVbVE1VMl9JRF0ubWVtX2FjY2Vzc19hZGRyID0gVE1VX01FTV9BQ0NFU1NfQUREUjsKKwlwZVtUTVUyX0lEXS5tZW1fYWNjZXNzX3JkYXRhID0gVE1VX01FTV9BQ0NFU1NfUkRBVEE7CisKKwlwZVtUTVUzX0lEXS5kbWVtX2Jhc2VfYWRkciA9IFRNVV9ETUVNX0JBU0VfQUREUigzKTsKKwlwZVtUTVUzX0lEXS5wbWVtX2Jhc2VfYWRkciA9IFRNVV9JTUVNX0JBU0VfQUREUigzKTsKKwlwZVtUTVUzX0lEXS5wbWVtX3NpemUgPSBUTVVfSU1FTV9TSVpFOworCXBlW1RNVTNfSURdLm1lbV9hY2Nlc3Nfd2RhdGEgPSBUTVVfTUVNX0FDQ0VTU19XREFUQTsKKwlwZVtUTVUzX0lEXS5tZW1fYWNjZXNzX2FkZHIgPSBUTVVfTUVNX0FDQ0VTU19BRERSOworCXBlW1RNVTNfSURdLm1lbV9hY2Nlc3NfcmRhdGEgPSBUTVVfTUVNX0FDQ0VTU19SREFUQTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX1VUSUxfUEVfRElTQUJMRUQpCisJcGVbVVRJTF9JRF0uZG1lbV9iYXNlX2FkZHIgPSBVVElMX0RNRU1fQkFTRV9BRERSOworCXBlW1VUSUxfSURdLm1lbV9hY2Nlc3Nfd2RhdGEgPSBVVElMX01FTV9BQ0NFU1NfV0RBVEE7CisJcGVbVVRJTF9JRF0ubWVtX2FjY2Vzc19hZGRyID0gVVRJTF9NRU1fQUNDRVNTX0FERFI7CisJcGVbVVRJTF9JRF0ubWVtX2FjY2Vzc19yZGF0YSA9IFVUSUxfTUVNX0FDQ0VTU19SREFUQTsKKyNlbmRpZgorfQorCisKKy8qKiBXcml0ZXMgYSBidWZmZXIgdG8gUEUgaW50ZXJuYWwgbWVtb3J5IGZyb20gdGhlIGhvc3QKKyAqIHRocm91Z2ggaW5kaXJlY3QgYWNjZXNzIHJlZ2lzdGVycy4KKyAqCisgKiBAcGFyYW1baW5dIGlkCQlQRSBpZGVudGlmaWNhdGlvbiAoQ0xBU1MwX0lELCAuLi4sIFRNVTBfSUQsIC4uLiwgVVRJTF9JRCkKKyAqIEBwYXJhbVtpbl0gc3JjCQlCdWZmZXIgc291cmNlIGFkZHJlc3MKKyAqIEBwYXJhbVtpbl0gbWVtX2FjY2Vzc19hZGRyCURNRU0gZGVzdGluYXRpb24gYWRkcmVzcyAobXVzdCBiZSAzMmJpdCBhbGlnbmVkKQorICogQHBhcmFtW2luXSBsZW4JCU51bWJlciBvZiBieXRlcyB0byBjb3B5CisgKi8KK3ZvaWQgcGVfbWVtX21lbWNweV90bzMyKGludCBpZCwgdTMyIG1lbV9hY2Nlc3NfYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXUzMiBvZmZzZXQgPSAwLCB2YWwsIGFkZHI7CisJdW5zaWduZWQgaW50IGxlbjMyID0gbGVuID4+IDI7CisJaW50IGk7CisKKwlhZGRyID0gbWVtX2FjY2Vzc19hZGRyIHwgUEVfTUVNX0FDQ0VTU19XUklURSB8IFBFX01FTV9BQ0NFU1NfQllURV9FTkFCTEUoMCwgNCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuMzI7IGkrKywgb2Zmc2V0ICs9IDQsIHNyYyArPSA0KSB7CisJCXZhbCA9ICoodTMyICopc3JjOworCQl3cml0ZWwoY3B1X3RvX2JlMzIodmFsKSwgcGVbaWRdLm1lbV9hY2Nlc3Nfd2RhdGEpOworCQl3cml0ZWwoYWRkciArIG9mZnNldCwgcGVbaWRdLm1lbV9hY2Nlc3NfYWRkcik7CisJfQorCisJaWYgKChsZW4gPSAobGVuICYgMHgzKSkpIHsKKwkJdmFsID0gMDsKKworCQlhZGRyID0gKG1lbV9hY2Nlc3NfYWRkciB8IFBFX01FTV9BQ0NFU1NfV1JJVEUgfCBQRV9NRU1fQUNDRVNTX0JZVEVfRU5BQkxFKDAsIGxlbikpICsgb2Zmc2V0OworCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgc3JjKyspCisJCQl2YWwgfD0gKCoodTggKilzcmMpIDw8ICg4ICogaSk7CisKKwkJd3JpdGVsKGNwdV90b19iZTMyKHZhbCksIHBlW2lkXS5tZW1fYWNjZXNzX3dkYXRhKTsKKwkJd3JpdGVsKGFkZHIsIHBlW2lkXS5tZW1fYWNjZXNzX2FkZHIpOworCX0KK30KKworLyoqIFdyaXRlcyBhIGJ1ZmZlciB0byBQRSBpbnRlcm5hbCBkYXRhIG1lbW9yeSAoRE1FTSkgZnJvbSB0aGUgaG9zdAorICogdGhyb3VnaCBpbmRpcmVjdCBhY2Nlc3MgcmVnaXN0ZXJzLgorICogQHBhcmFtW2luXSBpZAkJUEUgaWRlbnRpZmljYXRpb24gKENMQVNTMF9JRCwgLi4uLCBUTVUwX0lELCAuLi4sIFVUSUxfSUQpCisgKiBAcGFyYW1baW5dIHNyYwkJQnVmZmVyIHNvdXJjZSBhZGRyZXNzCisgKiBAcGFyYW1baW5dIGRzdAkJRE1FTSBkZXN0aW5hdGlvbiBhZGRyZXNzIChtdXN0IGJlIDMyYml0IGFsaWduZWQpCisgKiBAcGFyYW1baW5dIGxlbgkJTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqLwordm9pZCBwZV9kbWVtX21lbWNweV90bzMyKGludCBpZCwgdTMyIGRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXBlX21lbV9tZW1jcHlfdG8zMihpZCwgcGVbaWRdLmRtZW1fYmFzZV9hZGRyIHwgZHN0IHwgUEVfTUVNX0FDQ0VTU19ETUVNLCBzcmMsIGxlbik7Cit9CisKKworLyoqIFdyaXRlcyBhIGJ1ZmZlciB0byBQRSBpbnRlcm5hbCBwcm9ncmFtIG1lbW9yeSAoUE1FTSkgZnJvbSB0aGUgaG9zdAorICogdGhyb3VnaCBpbmRpcmVjdCBhY2Nlc3MgcmVnaXN0ZXJzLgorICogQHBhcmFtW2luXSBpZAkJUEUgaWRlbnRpZmljYXRpb24gKENMQVNTMF9JRCwgLi4uLCBUTVUwX0lELCAuLi4sIFRNVTNfSUQpCisgKiBAcGFyYW1baW5dIHNyYwkJQnVmZmVyIHNvdXJjZSBhZGRyZXNzCisgKiBAcGFyYW1baW5dIGRzdAkJUE1FTSBkZXN0aW5hdGlvbiBhZGRyZXNzIChtdXN0IGJlIDMyYml0IGFsaWduZWQpCisgKiBAcGFyYW1baW5dIGxlbgkJTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqLwordm9pZCBwZV9wbWVtX21lbWNweV90bzMyKGludCBpZCwgdTMyIGRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXBlX21lbV9tZW1jcHlfdG8zMihpZCwgcGVbaWRdLnBtZW1fYmFzZV9hZGRyIHwgKGRzdCAmIChwZVtpZF0ucG1lbV9zaXplIC0gMSkpIHwgUEVfTUVNX0FDQ0VTU19JTUVNLCBzcmMsIGxlbik7Cit9CisKKworLyoqIFJlYWRzIFBFIGludGVybmFsIHByb2dyYW0gbWVtb3J5IChJTUVNKSBmcm9tIHRoZSBob3N0CisgKiB0aHJvdWdoIGluZGlyZWN0IGFjY2VzcyByZWdpc3RlcnMuCisgKiBAcGFyYW1baW5dIGlkCQlQRSBpZGVudGlmaWNhdGlvbiAoQ0xBU1MwX0lELCAuLi4sIFRNVTBfSUQsIC4uLiwgVE1VM19JRCkKKyAqIEBwYXJhbVtpbl0gYWRkcgkJUE1FTSByZWFkIGFkZHJlc3MgKG11c3QgYmUgYWxpZ25lZCBvbiBzaXplKQorICogQHBhcmFtW2luXSBzaXplCQlOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCAobWF4aW11bSA0LCBtdXN0IG5vdCBjcm9zcyAzMmJpdCBib3VuZGFyaWVzKQorICogQHJldHVybgkJCXRoZSBkYXRhIHJlYWQgKGluIFBFIGVuZGlhbmVzcywgaS5lIEJFKS4KKyAqLwordTMyIHBlX3BtZW1fcmVhZChpbnQgaWQsIHUzMiBhZGRyLCB1OCBzaXplKQoreworCXUzMiBvZmZzZXQgPSBhZGRyICYgMHgzOworCXUzMiBtYXNrID0gMHhmZmZmZmZmZiA+PiAoKDQgLSBzaXplKSA8PCAzKTsKKwl1MzIgdmFsOworCisJYWRkciA9IHBlW2lkXS5wbWVtX2Jhc2VfYWRkciB8ICgoYWRkciAmIH4weDMpICYgKHBlW2lkXS5wbWVtX3NpemUgLSAxKSkgfCBQRV9NRU1fQUNDRVNTX1JFQUQgfCBQRV9NRU1fQUNDRVNTX0lNRU0gfCBQRV9NRU1fQUNDRVNTX0JZVEVfRU5BQkxFKG9mZnNldCwgc2l6ZSk7CisKKwl3cml0ZWwoYWRkciwgcGVbaWRdLm1lbV9hY2Nlc3NfYWRkcik7CisJdmFsID0gYmUzMl90b19jcHUocmVhZGwocGVbaWRdLm1lbV9hY2Nlc3NfcmRhdGEpKTsKKworCXJldHVybiAodmFsID4+IChvZmZzZXQgPDwgMykpICYgbWFzazsKK30KKworCisvKiogV3JpdGVzIFBFIGludGVybmFsIGRhdGEgbWVtb3J5IChETUVNKSBmcm9tIHRoZSBob3N0CisgKiB0aHJvdWdoIGluZGlyZWN0IGFjY2VzcyByZWdpc3RlcnMuCisgKiBAcGFyYW1baW5dIGlkCQlQRSBpZGVudGlmaWNhdGlvbiAoQ0xBU1MwX0lELCAuLi4sIFRNVTBfSUQsIC4uLiwgVVRJTF9JRCkKKyAqIEBwYXJhbVtpbl0gYWRkcgkJRE1FTSB3cml0ZSBhZGRyZXNzIChtdXN0IGJlIGFsaWduZWQgb24gc2l6ZSkKKyAqIEBwYXJhbVtpbl0gdmFsCQlWYWx1ZSB0byB3cml0ZSAoaW4gUEUgZW5kaWFuZXNzLCBpLmUgQkUpCisgKiBAcGFyYW1baW5dIHNpemUJCU51bWJlciBvZiBieXRlcyB0byB3cml0ZSAobWF4aW11bSA0LCBtdXN0IG5vdCBjcm9zcyAzMmJpdCBib3VuZGFyaWVzKQorICovCit2b2lkIHBlX2RtZW1fd3JpdGUoaW50IGlkLCB1MzIgdmFsLCB1MzIgYWRkciwgdTggc2l6ZSkKK3sKKwl1MzIgb2Zmc2V0ID0gYWRkciAmIDB4MzsKKworCWFkZHIgPSBwZVtpZF0uZG1lbV9iYXNlX2FkZHIgfCAoYWRkciAmIH4weDMpIHwgUEVfTUVNX0FDQ0VTU19XUklURSB8IFBFX01FTV9BQ0NFU1NfRE1FTSB8IFBFX01FTV9BQ0NFU1NfQllURV9FTkFCTEUob2Zmc2V0LCBzaXplKTsKKworCS8qIEluZGlyZWN0IGFjY2VzcyBpbnRlcmZhY2UgaXMgYnl0ZSBzd2FwcGluZyBkYXRhIGJlaW5nIHdyaXR0ZW4gKi8KKwl3cml0ZWwoY3B1X3RvX2JlMzIodmFsIDw8IChvZmZzZXQgPDwgMykpLCBwZVtpZF0ubWVtX2FjY2Vzc193ZGF0YSk7CisJd3JpdGVsKGFkZHIsIHBlW2lkXS5tZW1fYWNjZXNzX2FkZHIpOworfQorCisKKy8qKiBSZWFkcyBQRSBpbnRlcm5hbCBkYXRhIG1lbW9yeSAoRE1FTSkgZnJvbSB0aGUgaG9zdAorICogdGhyb3VnaCBpbmRpcmVjdCBhY2Nlc3MgcmVnaXN0ZXJzLgorICogQHBhcmFtW2luXSBpZAkJUEUgaWRlbnRpZmljYXRpb24gKENMQVNTMF9JRCwgLi4uLCBUTVUwX0lELCAuLi4sIFVUSUxfSUQpCisgKiBAcGFyYW1baW5dIGFkZHIJCURNRU0gcmVhZCBhZGRyZXNzIChtdXN0IGJlIGFsaWduZWQgb24gc2l6ZSkKKyAqIEBwYXJhbVtpbl0gc2l6ZQkJTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgKG1heGltdW0gNCwgbXVzdCBub3QgY3Jvc3MgMzJiaXQgYm91bmRhcmllcykKKyAqIEByZXR1cm4JCQl0aGUgZGF0YSByZWFkIChpbiBQRSBlbmRpYW5lc3MsIGkuZSBCRSkuCisgKi8KK3UzMiBwZV9kbWVtX3JlYWQoaW50IGlkLCB1MzIgYWRkciwgdTggc2l6ZSkKK3sKKwl1MzIgb2Zmc2V0ID0gYWRkciAmIDB4MzsKKwl1MzIgbWFzayA9IDB4ZmZmZmZmZmYgPj4gKCg0IC0gc2l6ZSkgPDwgMyk7CisJdTMyIHZhbDsKKworCWFkZHIgPSBwZVtpZF0uZG1lbV9iYXNlX2FkZHIgfCAoYWRkciAmIH4weDMpIHwgUEVfTUVNX0FDQ0VTU19SRUFEIHwgUEVfTUVNX0FDQ0VTU19ETUVNIHwgUEVfTUVNX0FDQ0VTU19CWVRFX0VOQUJMRShvZmZzZXQsIHNpemUpOworCisJd3JpdGVsKGFkZHIsIHBlW2lkXS5tZW1fYWNjZXNzX2FkZHIpOworCisJLyogSW5kaXJlY3QgYWNjZXNzIGludGVyZmFjZSBpcyBieXRlIHN3YXBwaW5nIGRhdGEgYmVpbmcgcmVhZCAqLworCXZhbCA9IGJlMzJfdG9fY3B1KHJlYWRsKHBlW2lkXS5tZW1fYWNjZXNzX3JkYXRhKSk7CisKKwlyZXR1cm4gKHZhbCA+PiAob2Zmc2V0IDw8IDMpKSAmIG1hc2s7Cit9CisKKworLyoqIFdyaXRlcyBVVElMIHByb2dyYW0gbWVtb3J5IChERFIpIGZyb20gdGhlIGhvc3QuCisgKgorICogQHBhcmFtW2luXSBhZGRyCUFkZHJlc3MgdG8gd3JpdGUgKHZpcnR1YWwsIG11c3QgYmUgYWxpZ25lZCBvbiBzaXplKQorICogQHBhcmFtW2luXSB2YWwJCVZhbHVlIHRvIHdyaXRlIChpbiBQRSBlbmRpYW5lc3MsIGkuZSBCRSkKKyAqIEBwYXJhbVtpbl0gc2l6ZQkJTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlICgyIG9yIDQpCisgKi8KK3N0YXRpYyB2b2lkIHV0aWxfcG1lbV93cml0ZSh1MzIgdmFsLCB2b2lkICphZGRyLCB1OCBzaXplKQoreworCXZvaWQgKmFkZHI2NCA9ICh2b2lkICopKCh1bnNpZ25lZCBsb25nKWFkZHIgJiB+MHg3KTsKKwl1bnNpZ25lZCBsb25nIG9mZiA9IDggLSAoKHVuc2lnbmVkIGxvbmcpYWRkciAmIDB4NykgLSBzaXplOworCQorCS8vSU1FTSBzaG91bGQgIGJlIGxvYWRlZCBhcyBhIDY0Yml0IHN3YXBwZWQgdmFsdWUgaW4gYSA2NGJpdCBhbGlnbmVkIGxvY2F0aW9uCisJaWYgKHNpemUgPT0gNCkKKwkJd3JpdGVsKGJlMzJfdG9fY3B1KHZhbCksIGFkZHI2NCArIG9mZik7CisJZWxzZQorCQl3cml0ZXcoYmUxNl90b19jcHUoKHUxNil2YWwpLCBhZGRyNjQgKyBvZmYpOworfQorCisKKy8qKiBXcml0ZXMgYSBidWZmZXIgdG8gVVRJTCBwcm9ncmFtIG1lbW9yeSAoRERSKSBmcm9tIHRoZSBob3N0LgorICoKKyAqIEBwYXJhbVtpbl0gZHN0CUFkZHJlc3MgdG8gd3JpdGUgKHZpcnR1YWwsIG11c3QgYmUgYXQgbGVhc3QgMTZiaXQgYWxpZ25lZCkKKyAqIEBwYXJhbVtpbl0gc3JjCUJ1ZmZlciB0byB3cml0ZSAoaW4gUEUgZW5kaWFuZXNzLCBpLmUgQkUsIG11c3QgaGF2ZSBzYW1lIGFsaWdubWVudCBhcyBkc3QpCisgKiBAcGFyYW1baW5dIGxlbglOdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgKG11c3QgYmUgYXQgbGVhc3QgMTZiaXQgYWxpZ25lZCkKKyAqLworc3RhdGljIHZvaWQgdXRpbF9wbWVtX21lbWNweSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgbGVuMzI7CisJaW50IGk7CisKKwlpZiAoKHVuc2lnbmVkIGxvbmcpc3JjICYgMHgyKSB7CisJCXV0aWxfcG1lbV93cml0ZSgqKHUxNiAqKXNyYywgZHN0LCAyKTsKKwkJc3JjICs9IDI7CisJCWRzdCArPSAyOworCQlsZW4gLT0gMjsKKwl9CisKKwlsZW4zMiA9IGxlbiA+PiAyOworCisJZm9yIChpID0gMDsgaSA8IGxlbjMyOyBpKyssIGRzdCArPSA0LCBzcmMgKz0gNCkKKwkJdXRpbF9wbWVtX3dyaXRlKCoodTMyICopc3JjLCBkc3QsIDQpOworCisJaWYgKGxlbiAmIDB4MikKKwkJdXRpbF9wbWVtX3dyaXRlKCoodTE2ICopc3JjLCBkc3QsIGxlbiAmIDB4Mik7Cit9CisKKworLyoqIExvYWRzIGFuIGVsZiBzZWN0aW9uIGludG8gcG1lbQorICogQ29kZSBuZWVkcyB0byBiZSBhdCBsZWFzdCAxNmJpdCBhbGlnbmVkIGFuZCBvbmx5IFBST0dCSVRTIHNlY3Rpb25zIGFyZSBzdXBwb3J0ZWQKKyAqCisgKiBAcGFyYW1baW5dIGlkCVBFIGlkZW50aWZpY2F0aW9uIChDTEFTUzBfSUQsIC4uLiwgVE1VMF9JRCwgLi4uLCBUTVUzX0lEKQorICogQHBhcmFtW2luXSBkYXRhCXBvaW50ZXIgdG8gdGhlIGVsZiBmaXJtd2FyZQorICogQHBhcmFtW2luXSBzaGRyCXBvaW50ZXIgdG8gdGhlIGVsZiBzZWN0aW9uIGhlYWRlcgorICoKKyAqLworc3RhdGljIGludCBwZV9sb2FkX3BtZW1fc2VjdGlvbihpbnQgaWQsIGNvbnN0IHZvaWQgKmRhdGEsIEVsZjMyX1NoZHIgKnNoZHIpCit7CisJdTMyIG9mZnNldCA9IGJlMzJfdG9fY3B1KHNoZHItPnNoX29mZnNldCk7CisJdTMyIGFkZHIgPSBiZTMyX3RvX2NwdShzaGRyLT5zaF9hZGRyKTsKKwl1MzIgc2l6ZSA9IGJlMzJfdG9fY3B1KHNoZHItPnNoX3NpemUpOworCXUzMiB0eXBlID0gYmUzMl90b19jcHUoc2hkci0+c2hfdHlwZSk7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfVVRJTF9QRV9ESVNBQkxFRCkKKwlpZiAoaWQgPT0gVVRJTF9JRCkKKwl7CisJCXByaW50ZigiJXM6IHVuc3Vwb3J0ZWQgcG1lbSBzZWN0aW9uIGZvciBVVElMXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisjZW5kaWYKKworCWlmICgoKHVuc2lnbmVkIGxvbmcpKGRhdGEgKyBvZmZzZXQpICYgMHgzKSAhPSAoYWRkciAmIDB4MykpCisJeworCQlwcmludGYoIiVzOiBsb2FkIGFkZHJlc3MoJXgpIGFuZCBlbGYgZmlsZSBhZGRyZXNzKCVseCkgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBhbGlnbm1lbnRcbiIsCisJCQlfX2Z1bmNfXywgYWRkciwgKHVuc2lnbmVkIGxvbmcpIGRhdGEgKyBvZmZzZXQpOworCisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYWRkciAmIDB4MSkKKwl7CisJCXByaW50ZigiJXM6IGxvYWQgYWRkcmVzcygleCkgaXMgbm90IDE2Yml0IGFsaWduZWRcbiIsIF9fZnVuY19fLCBhZGRyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChzaXplICYgMHgxKQorCXsKKwkJcHJpbnRmKCIlczogbG9hZCBzaXplKCV4KSBpcyBub3QgMTZiaXQgYWxpZ25lZFxuIiwgX19mdW5jX18sIHNpemUpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgU0hUX1BST0dCSVRTOgorCQlwZV9wbWVtX21lbWNweV90bzMyKGlkLCBhZGRyLCBkYXRhICsgb2Zmc2V0LCBzaXplKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGYoIiVzOiB1bnN1cG9ydGVkIHNlY3Rpb24gdHlwZSgleClcbiIsIF9fZnVuY19fLCB0eXBlKTsKKwkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKiogTG9hZHMgYW4gZWxmIHNlY3Rpb24gaW50byBkbWVtCisgKiBEYXRhIG5lZWRzIHRvIGJlIGF0IGxlYXN0IDMyYml0IGFsaWduZWQsIE5PQklUUyBzZWN0aW9ucyBhcmUgY29ycmVjdGx5IGluaXRpYWxpemVkIHRvIDAKKyAqCisgKiBAcGFyYW1baW5dIGlkCQlQRSBpZGVudGlmaWNhdGlvbiAoQ0xBU1MwX0lELCAuLi4sIFRNVTBfSUQsIC4uLiwgVVRJTF9JRCkKKyAqIEBwYXJhbVtpbl0gZGF0YQkJcG9pbnRlciB0byB0aGUgZWxmIGZpcm13YXJlCisgKiBAcGFyYW1baW5dIHNoZHIJCXBvaW50ZXIgdG8gdGhlIGVsZiBzZWN0aW9uIGhlYWRlcgorICoKKyAqLworc3RhdGljIGludCBwZV9sb2FkX2RtZW1fc2VjdGlvbihpbnQgaWQsIGNvbnN0IHZvaWQgKmRhdGEsIEVsZjMyX1NoZHIgKnNoZHIpCit7CisJdTMyIG9mZnNldCA9IGJlMzJfdG9fY3B1KHNoZHItPnNoX29mZnNldCk7CisJdTMyIGFkZHIgPSBiZTMyX3RvX2NwdShzaGRyLT5zaF9hZGRyKTsKKwl1MzIgc2l6ZSA9IGJlMzJfdG9fY3B1KHNoZHItPnNoX3NpemUpOworCXUzMiB0eXBlID0gYmUzMl90b19jcHUoc2hkci0+c2hfdHlwZSk7CisJdTMyIHNpemUzMiA9IHNpemUgPj4gMjsKKwlpbnQgaTsKKworCWlmICgoKHVuc2lnbmVkIGxvbmcpKGRhdGEgKyBvZmZzZXQpICYgMHgzKSAhPSAoYWRkciAmIDB4MykpCisJeworCQlwcmludGYoIiVzOiBsb2FkIGFkZHJlc3MoJXgpIGFuZCBlbGYgZmlsZSBhZGRyZXNzKCVseCkgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBhbGlnbm1lbnRcbiIsCisJCQlfX2Z1bmNfXywgYWRkciwgKHVuc2lnbmVkIGxvbmcpZGF0YSArIG9mZnNldCk7CisKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChhZGRyICYgMHgzKQorCXsKKwkJcHJpbnRmKCIlczogbG9hZCBhZGRyZXNzKCV4KSBpcyBub3QgMzJiaXQgYWxpZ25lZFxuIiwgX19mdW5jX18sIGFkZHIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgU0hUX1BST0dCSVRTOgorCQlwZV9kbWVtX21lbWNweV90bzMyKGlkLCBhZGRyLCBkYXRhICsgb2Zmc2V0LCBzaXplKTsKKwkJYnJlYWs7CisKKwljYXNlIFNIVF9OT0JJVFM6CisJCWZvciAoaSA9IDA7IGkgPCBzaXplMzI7IGkrKywgYWRkciArPSA0KQorCQkJcGVfZG1lbV93cml0ZShpZCwgMCwgYWRkciwgNCk7CisKKwkJaWYgKHNpemUgJiAweDMpCisJCQlwZV9kbWVtX3dyaXRlKGlkLCAwLCBhZGRyLCBzaXplICYgMHgzKTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ZigiJXM6IHVuc3Vwb3J0ZWQgc2VjdGlvbiB0eXBlKCV4KVxuIiwgX19mdW5jX18sIHR5cGUpOworCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qKiBMb2FkcyBhbiBlbGYgc2VjdGlvbiBpbnRvIEREUgorICogRGF0YSBuZWVkcyB0byBiZSBhdCBsZWFzdCAzMmJpdCBhbGlnbmVkLCBOT0JJVFMgc2VjdGlvbnMgYXJlIGNvcnJlY3RseSBpbml0aWFsaXplZCB0byAwCisgKgorICogQHBhcmFtW2luXSBpZAkJUEUgaWRlbnRpZmljYXRpb24gKENMQVNTMF9JRCwgLi4uLCBUTVUwX0lELCAuLi4sIFVUSUxfSUQpCisgKiBAcGFyYW1baW5dIGRhdGEJCXBvaW50ZXIgdG8gdGhlIGVsZiBmaXJtd2FyZQorICogQHBhcmFtW2luXSBzaGRyCQlwb2ludGVyIHRvIHRoZSBlbGYgc2VjdGlvbiBoZWFkZXIKKyAqCisgKi8KK3N0YXRpYyBpbnQgcGVfbG9hZF9kZHJfc2VjdGlvbihpbnQgaWQsIGNvbnN0IHZvaWQgKmRhdGEsIEVsZjMyX1NoZHIgKnNoZHIpCit7CisJdTMyIG9mZnNldCA9IGJlMzJfdG9fY3B1KHNoZHItPnNoX29mZnNldCk7CisJdTMyIGFkZHIgPSBiZTMyX3RvX2NwdShzaGRyLT5zaF9hZGRyKTsKKwl1MzIgc2l6ZSA9IGJlMzJfdG9fY3B1KHNoZHItPnNoX3NpemUpOworCXUzMiB0eXBlID0gYmUzMl90b19jcHUoc2hkci0+c2hfdHlwZSk7CisJdTMyIGZsYWdzID0gYmUzMl90b19jcHUoc2hkci0+c2hfZmxhZ3MpOworCXUzMiBzaXplMzIgPSBzaXplID4+IDI7CisJaW50IGk7CisKKwlzd2l0Y2ggKHR5cGUpCisJeworCWNhc2UgU0hUX1BST0dCSVRTOgorCQlpZiAoZmxhZ3MgJiBTSEZfRVhFQ0lOU1RSKQorCQl7CisjaWYgIWRlZmluZWQoQ09ORklHX1VUSUxfUEVfRElTQUJMRUQpCisJCQlpZiAoaWQgPT0gVVRJTF9JRCkKKwkJCXsKKwkJCQlpZiAoKCh1bnNpZ25lZCBsb25nKShkYXRhICsgb2Zmc2V0KSAmIDB4MykgIT0gKGFkZHIgJiAweDMpKQorCQkJCXsKKwkJCQkJcHJpbnRmKCIlczogbG9hZCBhZGRyZXNzKCV4KSBhbmQgZWxmIGZpbGUgYWRkcmVzcyglbHgpIGRvbid0IGhhdmUgdGhlIHNhbWUgYWxpZ25tZW50XG4iLAorCQkJCQkJCQlfX2Z1bmNfXywgYWRkciwgKHVuc2lnbmVkIGxvbmcpZGF0YSArIG9mZnNldCk7CisKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKworCQkJCWlmIChhZGRyICYgMHgxKQorCQkJCXsKKwkJCQkJcHJpbnRmKCIlczogbG9hZCBhZGRyZXNzKCV4KSBpcyBub3QgMTZiaXQgYWxpZ25lZFxuIiwgX19mdW5jX18sIGFkZHIpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCisJCQkJaWYgKHNpemUgJiAweDEpCisJCQkJeworCQkJCQlwcmludGYoIiVzOiBsb2FkIGxlbmd0aCgleCkgaXMgbm90IDE2Yml0IGFsaWduZWRcbiIsIF9fZnVuY19fLCBzaXplKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKworCQkJCXV0aWxfcG1lbV9tZW1jcHkoRERSX1BIWVNfVE9fVklSVChhZGRyKSwgZGF0YSArIG9mZnNldCwgc2l6ZSk7CisJCQl9CisJCQllbHNlCisjZW5kaWYKKwkJCXsKKwkJCQlwcmludGYoIiVzOiB1bnN1cG9ydGVkIGRkciBzZWN0aW9uIHR5cGUoJXgpIGZvciBQRSglZClcbiIsIF9fZnVuY19fLCB0eXBlLCBpZCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCX0KKwkJZWxzZQorCQl7CisJCQltZW1jcHkoRERSX1BIWVNfVE9fVklSVChhZGRyKSwgZGF0YSArIG9mZnNldCwgc2l6ZSk7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgU0hUX05PQklUUzoKKwkJbWVtc2V0KEREUl9QSFlTX1RPX1ZJUlQoYWRkciksIDAsIHNpemUpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRmKCIlczogdW5zdXBvcnRlZCBzZWN0aW9uIHR5cGUoJXgpXG4iLCBfX2Z1bmNfXywgdHlwZSk7CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoqIExvYWRzIGFuIGVsZiBzZWN0aW9uIGludG8gYSBQRQorICogRm9yIG5vdyBvbmx5IHN1cHBvcnRzIGxvYWRpbmcgYSBzZWN0aW9uIHRvIGRtZW0gKGFsbCBQRSdzKSwgcG1lbSAoY2xhc3MgYW5kIHRtdSBQRSdzKSwKKyAqIERERFIgKHV0aWwgUEUgY29kZSkKKyAqCisgKiBAcGFyYW1baW5dIGlkCQlQRSBpZGVudGlmaWNhdGlvbiAoQ0xBU1MwX0lELCAuLi4sIFRNVTBfSUQsIC4uLiwgVVRJTF9JRCkKKyAqIEBwYXJhbVtpbl0gZGF0YQkJcG9pbnRlciB0byB0aGUgZWxmIGZpcm13YXJlCisgKiBAcGFyYW1baW5dIHNoZHIJCXBvaW50ZXIgdG8gdGhlIGVsZiBzZWN0aW9uIGhlYWRlcgorICoKKyAqLworaW50IHBlX2xvYWRfZWxmX3NlY3Rpb24oaW50IGlkLCBjb25zdCB2b2lkICpkYXRhLCBFbGYzMl9TaGRyICpzaGRyKQoreworCXUzMiBhZGRyID0gYmUzMl90b19jcHUoc2hkci0+c2hfYWRkcik7CisJdTMyIHNpemUgPSBiZTMyX3RvX2NwdShzaGRyLT5zaF9zaXplKTsKKworCWlmIChJU19ETUVNKGFkZHIsIHNpemUpKQorCQlyZXR1cm4gcGVfbG9hZF9kbWVtX3NlY3Rpb24oaWQsIGRhdGEsIHNoZHIpOworCWVsc2UgaWYgKElTX1BNRU0oYWRkciwgc2l6ZSkpCisJCXJldHVybiBwZV9sb2FkX3BtZW1fc2VjdGlvbihpZCwgZGF0YSwgc2hkcik7CisJZWxzZSBpZiAoSVNfUEZFX0xNRU0oYWRkciwgc2l6ZSkpCisJCXJldHVybiAwOyAvKiBGSVhNRSAqLworCWVsc2UgaWYgKElTX1BIWVNfRERSKGFkZHIsIHNpemUpKQorCQlyZXR1cm4gcGVfbG9hZF9kZHJfc2VjdGlvbihpZCwgZGF0YSwgc2hkcik7CisJZWxzZSBpZiAoSVNfUEVfTE1FTShhZGRyLCBzaXplKSkKKwkJcmV0dXJuIDA7IC8qIEZJWE1FICovCisJZWxzZSB7CisJCXByaW50ZigiJXM6IHVuc3Vwb3J0ZWQgbWVtb3J5IHJhbmdlKCV4KVxuIiwgX19mdW5jX18sIGFkZHIpOworLy8JCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB3cml0ZSB0byBVVElMIGludGVybmFsIGJ1cyBwZXJpcGhlcmFscyBmcm9tIHRoZSBob3N0CisqIHRocm91Z2ggaW5kaXJlY3QgYWNjZXNzIHJlZ2lzdGVycy4KKyogQHBhcmFtW2luXQl2YWwJMzJiaXRzIHZhbHVlIHRvIHdyaXRlCisqIEBwYXJhbVtpbl0JYWRkcglBZGRyZXNzIHRvIHdyaXRlIHRvCisqIEBwYXJhbVtpbl0Jc2l6ZQlOdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyoKKyovCit2b2lkIHV0aWxfYnVzX3dyaXRlKHUzMiB2YWwsIHUzMiBhZGRyLCB1OCBzaXplKQoreworCXUzMiBvZmZzZXQgPSBhZGRyICYgMHgzOworCXUzMiBhY2Nlc3NfYWRkcjsKKworCWFjY2Vzc19hZGRyID0gKChhZGRyICYgfjB4MykgJiBDTEFTU19CVVNfQUNDRVNTX0FERFJfTUFTSykgfCBQRV9NRU1fQUNDRVNTX1dSSVRFIHwgUEVfTUVNX0FDQ0VTU19CWVRFX0VOQUJMRShvZmZzZXQsIHNpemUpOworCisvLwl3cml0ZWwoKGFkZHIgJiBDTEFTU19CVVNfQUNDRVNTX0JBU0VfTUFTSyksIENMQVNTX0JVU19BQ0NFU1NfQkFTRSk7CisKKwl3cml0ZWwoY3B1X3RvX2JlMzIodmFsIDw8IChvZmZzZXQgPDwgMykpLCBVVElMX0JVU19BQ0NFU1NfV0RBVEEpOworCXdyaXRlbChhY2Nlc3NfYWRkciwgVVRJTF9CVVNfQUNDRVNTX0FERFIpOworfQorCisKKy8qKiBSZWFkcyBmcm9tIFVUSUwgaW50ZXJuYWwgYnVzIHBlcmlwaGVyYWxzIGZyb20gdGhlIGhvc3QKKyogdGhyb3VnaCBpbmRpcmVjdCBhY2Nlc3MgcmVnaXN0ZXJzLgorKiBAcGFyYW1baW5dIGFkZHIJQWRkcmVzcyB0byByZWFkIGZyb20KKyogQHBhcmFtW2luXSBzaXplCU51bWJlciBvZiBieXRlcyB0byByZWFkCisqIEByZXR1cm4JCXRoZSByZWFkIGRhdGEKKyoKKyovCit1MzIgdXRpbF9idXNfcmVhZCh1MzIgYWRkciwgdTggc2l6ZSkKK3sKKwl1MzIgb2Zmc2V0ID0gYWRkciAmIDB4MzsKKwl1MzIgbWFzayA9IDB4ZmZmZmZmZmYgPj4gKCg0IC0gc2l6ZSkgPDwgMyk7CisJdTMyIGFjY2Vzc19hZGRyLCB2YWw7CisKKwlhY2Nlc3NfYWRkciA9ICgoYWRkciAmIH4weDMpICYgQ0xBU1NfQlVTX0FDQ0VTU19BRERSX01BU0spIHwgUEVfTUVNX0FDQ0VTU19SRUFEIHwgUEVfTUVNX0FDQ0VTU19CWVRFX0VOQUJMRShvZmZzZXQsIHNpemUpOworCisvLwl3cml0ZWwoKGFkZHIgJiBDTEFTU19CVVNfQUNDRVNTX0JBU0VfTUFTSyksIENMQVNTX0JVU19BQ0NFU1NfQkFTRSk7CisKKwl3cml0ZWwoYWNjZXNzX2FkZHIsIFVUSUxfQlVTX0FDQ0VTU19BRERSKTsKKwl2YWwgPSBiZTMyX3RvX2NwdShyZWFkbChVVElMX0JVU19BQ0NFU1NfUkRBVEEpKTsKKworCXJldHVybiAodmFsID4+IChvZmZzZXQgPDwgMykpICYgbWFzazsKK30KKworLyoqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB3cml0ZSB0byBDTEFTUyBpbnRlcm5hbCBidXMgcGVyaXBoZXJhbHMgKGNjdSwgcGUtbGVtKSBmcm9tIHRoZSBob3N0CisqIHRocm91Z2ggaW5kaXJlY3QgYWNjZXNzIHJlZ2lzdGVycy4KKyogQHBhcmFtW2luXQl2YWwJMzJiaXRzIHZhbHVlIHRvIHdyaXRlCisqIEBwYXJhbVtpbl0JYWRkcglBZGRyZXNzIHRvIHdyaXRlIHRvCisqIEBwYXJhbVtpbl0Jc2l6ZQlOdW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyoKKyovCit2b2lkIGNsYXNzX2J1c193cml0ZSh1MzIgdmFsLCB1MzIgYWRkciwgdTggc2l6ZSkKK3sKKwl1MzIgb2Zmc2V0ID0gYWRkciAmIDB4MzsKKwl1MzIgYWNjZXNzX2FkZHI7CisKKwlhY2Nlc3NfYWRkciA9ICgoYWRkciAmIH4weDMpICYgQ0xBU1NfQlVTX0FDQ0VTU19BRERSX01BU0spIHwgUEVfTUVNX0FDQ0VTU19XUklURSB8IFBFX01FTV9BQ0NFU1NfQllURV9FTkFCTEUob2Zmc2V0LCBzaXplKTsKKworCXdyaXRlbCgoYWRkciAmIENMQVNTX0JVU19BQ0NFU1NfQkFTRV9NQVNLKSwgQ0xBU1NfQlVTX0FDQ0VTU19CQVNFKTsKKworCXdyaXRlbChjcHVfdG9fYmUzMih2YWwgPDwgKG9mZnNldCA8PCAzKSksIENMQVNTX0JVU19BQ0NFU1NfV0RBVEEpOworCXdyaXRlbChhY2Nlc3NfYWRkciwgQ0xBU1NfQlVTX0FDQ0VTU19BRERSKTsKK30KKworCisvKiogUmVhZHMgZnJvbSBDTEFTUyBpbnRlcm5hbCBidXMgcGVyaXBoZXJhbHMgKGNjdSwgcGUtbGVtKSBmcm9tIHRoZSBob3N0CisqIHRocm91Z2ggaW5kaXJlY3QgYWNjZXNzIHJlZ2lzdGVycy4KKyogQHBhcmFtW2luXSBhZGRyCUFkZHJlc3MgdG8gcmVhZCBmcm9tCisqIEBwYXJhbVtpbl0gc2l6ZQlOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorKiBAcmV0dXJuCQl0aGUgcmVhZCBkYXRhCisqCisqLwordTMyIGNsYXNzX2J1c19yZWFkKHUzMiBhZGRyLCB1OCBzaXplKQoreworCXUzMiBvZmZzZXQgPSBhZGRyICYgMHgzOworCXUzMiBtYXNrID0gMHhmZmZmZmZmZiA+PiAoKDQgLSBzaXplKSA8PCAzKTsKKwl1MzIgYWNjZXNzX2FkZHIsIHZhbDsKKwkKKwlhY2Nlc3NfYWRkciA9ICgoYWRkciAmIH4weDMpICYgQ0xBU1NfQlVTX0FDQ0VTU19BRERSX01BU0spIHwgUEVfTUVNX0FDQ0VTU19SRUFEIHwgUEVfTUVNX0FDQ0VTU19CWVRFX0VOQUJMRShvZmZzZXQsIHNpemUpOworCisJd3JpdGVsKChhZGRyICYgQ0xBU1NfQlVTX0FDQ0VTU19CQVNFX01BU0spLCBDTEFTU19CVVNfQUNDRVNTX0JBU0UpOworCisJd3JpdGVsKGFjY2Vzc19hZGRyLCBDTEFTU19CVVNfQUNDRVNTX0FERFIpOworCXZhbCA9IGJlMzJfdG9fY3B1KHJlYWRsKENMQVNTX0JVU19BQ0NFU1NfUkRBVEEpKTsKKworCXJldHVybiAodmFsID4+IChvZmZzZXQgPDwgMykpICYgbWFzazsKK30KKworCisvKiogUmVhZHMgZGF0YSBmcm9tIHRoZSBjbHVzdGVyIG1lbW9yeSAoUEVfTE1FTSkKKyogQHBhcmFtW291dF0gZHN0CQlwb2ludGVyIHRvIHRoZSBzb3VyY2UgYnVmZmVyIGRhdGEgYXJlIGNvcGllZCB0bworKiBAcGFyYW1baW5dIGxlbgkJbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBhbW91bnQgb2YgZGF0YSB0byByZWFkIGZyb20gY2x1c3RlciBtZW1vcnkKKyogQHBhcmFtW2luXSBvZmZzZXQJb2Zmc2V0IGluIGJ5dGVzIGluIHRoZSBjbHVzdGVyIG1lbW9yeSB3aGVyZSBkYXRhIGFyZSByZWFkIGZyb20KKyovCit2b2lkIHBlX2xtZW1fcmVhZCh1MzIgKmRzdCwgdTMyIGxlbiwgdTMyIG9mZnNldCkKK3sKKwl1MzIgbGVuMzIgPSBsZW4gPj4gMjsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuMzI7IGRzdCsrLCBpKyssIG9mZnNldCArPSA0KQorCQkqZHN0ID0gY2xhc3NfYnVzX3JlYWQoUEVfTE1FTV9CQVNFX0FERFIgKyBvZmZzZXQsIDQpOworCisJLyogRklYTUUgd2UgbWF5IGhhdmUgYW4gb3V0IG9mIGJvdW5kcyBhY2Nlc3Mgb24gZHN0ICovCisJaWYgKGxlbiAmIDB4MDMpCisJCSpkc3QgPSBjbGFzc19idXNfcmVhZChQRV9MTUVNX0JBU0VfQUREUiArIG9mZnNldCwgKGxlbiAmIDB4MDMpKTsKK30KKworLyoqIFdyaXRlcyBkYXRhIHRvIHRoZSBjbHVzdGVyIG1lbW9yeSAoUEVfTE1FTSkKKyogQHBhcmFtW2luXSBzcmMJcG9pbnRlciB0byB0aGUgc291cmNlIGJ1ZmZlciBkYXRhIGFyZSBjb3BpZWQgZnJvbQorKiBAcGFyYW1baW5dIGxlbglsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGFtb3VudCBvZiBkYXRhIHRvIHdyaXRlIHRvIHRoZSBjbHVzdGVyIG1lbW9yeQorKiBAcGFyYW1baW5dIG9mZnNldAlvZmZzZXQgaW4gYnl0ZXMgaW4gdGhlIGNsdXN0ZXIgbWVtb3J5IHdoZXJlIGRhdGEgYXJlIHdyaXR0ZW4gdG8KKyovCit2b2lkIHBlX2xtZW1fd3JpdGUodTMyICpzcmMsIHUzMiBsZW4sIHUzMiBvZmZzZXQpCit7CisJdTMyIGxlbjMyID0gbGVuID4+IDI7CisJaW50IGkgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjMyOyBzcmMrKywgaSsrLCBvZmZzZXQgKz0gNCkKKwkJY2xhc3NfYnVzX3dyaXRlKCpzcmMsIFBFX0xNRU1fQkFTRV9BRERSICsgb2Zmc2V0LCA0KTsKKworCS8qIEZJWE1FIHdlIG1heSBoYXZlIGFuIG91dCBvZiBib3VuZHMgYWNjZXNzIG9uIHNyYyAqLworCWlmIChsZW4gJiAweDAzKQorCQljbGFzc19idXNfd3JpdGUoKnNyYywgUEVfTE1FTV9CQVNFX0FERFIgKyBvZmZzZXQsIChsZW4gJiAweDAzKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIEJNVSAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKiBJbml0aWFsaXplcyBhIEJNVSBibG9jay4KKyogQHBhcmFtW2luXSBiYXNlCUJNVSBibG9jayBiYXNlIGFkZHJlc3MKKyogQHBhcmFtW2luXSBjZmcJQk1VIGNvbmZpZ3VyYXRpb24KKyovCit2b2lkIGJtdV9pbml0KHZvaWQgKmJhc2UsIEJNVV9DRkcgKmNmZykKK3sKKwlibXVfcmVzZXQoYmFzZSk7CisKKwlibXVfZGlzYWJsZShiYXNlKTsKKworCWJtdV9zZXRfY29uZmlnKGJhc2UsIGNmZyk7Cit9CisKKy8qKiBSZXNldHMgYSBCTVUgYmxvY2suCisqIEBwYXJhbVtpbl0gYmFzZQlCTVUgYmxvY2sgYmFzZSBhZGRyZXNzCisqLwordm9pZCBibXVfcmVzZXQodm9pZCAqYmFzZSkKK3sKKwl3cml0ZWwoQ09SRV9TV19SRVNFVCwgYmFzZSArIEJNVV9DVFJMKTsKK30KKworLyoqIEVuYWJsZWQgYSBCTVUgYmxvY2suCisqIEBwYXJhbVtpbl0gYmFzZQlCTVUgYmxvY2sgYmFzZSBhZGRyZXNzCisqLwordm9pZCBibXVfZW5hYmxlKHZvaWQgKmJhc2UpCit7CisJd3JpdGVsIChDT1JFX0VOQUJMRSwgYmFzZSArIEJNVV9DVFJMKTsKK30KKworLyoqIERpc2FibGVzIGEgQk1VIGJsb2NrLgorKiBAcGFyYW1baW5dIGJhc2UJQk1VIGJsb2NrIGJhc2UgYWRkcmVzcworKi8KK3ZvaWQgYm11X2Rpc2FibGUodm9pZCAqYmFzZSkKK3sKKwl3cml0ZWwgKENPUkVfRElTQUJMRSwgYmFzZSArIEJNVV9DVFJMKTsKK30KKworLyoqIFNldHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBCTVUgYmxvY2suCisqIEBwYXJhbVtpbl0gYmFzZQlCTVUgYmxvY2sgYmFzZSBhZGRyZXNzCisqIEBwYXJhbVtpbl0gY2ZnCUJNVSBjb25maWd1cmF0aW9uCisqLwordm9pZCBibXVfc2V0X2NvbmZpZyh2b2lkICpiYXNlLCBCTVVfQ0ZHICpjZmcpCit7CQorCXdyaXRlbCAoY2ZnLT5iYXNlYWRkciwgYmFzZSArIEJNVV9VQ0FTVF9CQVNFX0FERFIpOworCXdyaXRlbCAoY2ZnLT5jb3VudCAmIDB4ZmZmZiwgYmFzZSArIEJNVV9VQ0FTVF9DT05GSUcpOworCXdyaXRlbCAoY2ZnLT5zaXplICYgMHhmZmZmLCBiYXNlICsgQk1VX0JVRl9TSVpFKTsKKy8vCXdyaXRlbCAoQk1VMV9USFJFU19DTlQsIGJhc2UgKyBCTVVfVEhSRVMpOworCisJLyogSW50ZXJydXB0cyBhcmUgbmV2ZXIgdXNlZCAqLworLy8Jd3JpdGVsICgweDAsIGJhc2UgKyBCTVVfSU5UX1NSQyk7CisJd3JpdGVsICgweDAsIGJhc2UgKyBCTVVfSU5UX0VOQUJMRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIEdFTUFDICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIEdFTUFDIGJsb2NrIGluaXRpYWxpemF0aW9uLgorKiBAcGFyYW1baW5dIGJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzIChHRU1BQzAsIEdFTUFDMSwgR0VNQUMyKQorKiBAcGFyYW1baW5dIGNmZwlHRU1BQyBjb25maWd1cmF0aW9uCisqLwordm9pZCBnZW1hY19pbml0KHZvaWQgKmJhc2UsIHZvaWQgKmNmZykKK3sKKwlnZW1hY19zZXRfY29uZmlnKGJhc2UsIGNmZyk7CisJZ2VtYWNfc2V0X2J1c193aWR0aChiYXNlLCA2NCk7Cit9CisKKy8qKiBHRU1BQyBzZXQgc3BlZWQuCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyogQHBhcmFtW2luXSBzcGVlZAlHRU1BQyBzcGVlZCAoMTAsIDEwMCBvciAxMDAwIE1icHMpCisqLwordm9pZCBnZW1hY19zZXRfc3BlZWQodm9pZCAqYmFzZSwgTUFDX1NQRUVEIGdlbV9zcGVlZCkKK3sKKwl1MzIgdmFsID0gcmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworCisJdmFsID0gdmFsICYgfkVNQUNfU1BFRURfTUFTSzsKKworCXN3aXRjaCAoZ2VtX3NwZWVkKQorCXsKKwkJY2FzZSBTUEVFRF8xME06CisJCQl2YWwgJj0gKH5FTUFDX1BDU19FTkFCTEUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVFRF8xMDBNOgorCQkJdmFsID0gdmFsIHwgRU1BQ19TUEVFRF8xMDA7CisJCQl2YWwgJj0gKH5FTUFDX1BDU19FTkFCTEUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTUEVFRF8xMDAwTToKKwkJCXZhbCA9IHZhbCB8IEVNQUNfU1BFRURfMTAwMDsKKwkJCXZhbCAmPSAofkVNQUNfUENTX0VOQUJMRSk7CisJCQlicmVhazsKKworCQljYXNlIFNQRUVEXzEwMDBNX1BDUzoKKwkJCXZhbCA9IHZhbCB8IEVNQUNfU1BFRURfMTAwMDsKKwkJCXZhbCB8PSBFTUFDX1BDU19FTkFCTEU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJdmFsID0gdmFsIHwgRU1BQ19TUEVFRF8xMDA7CisJCQl2YWwgJj0gKH5FTUFDX1BDU19FTkFCTEUpOworCQlicmVhazsKKwl9CisJCisJd3JpdGVsICh2YWwsIGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKK30KKworLyoqIEdFTUFDIHNldCBkdXBsZXguCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyogQHBhcmFtW2luXSBkdXBsZXgJR0VNQUMgZHVwbGV4IG1vZGUgKEZ1bGwsIEhhbGYpCisqLwordm9pZCBnZW1hY19zZXRfZHVwbGV4KHZvaWQgKmJhc2UsIGludCBkdXBsZXgpCit7CisJdTMyIHZhbCA9IHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKKworCWlmIChkdXBsZXggPT0gRFVQTEVYX0hBTEYpCisJCXZhbCA9ICh2YWwgJiB+RU1BQ19EVVBMRVhfTUFTSykgfCBFTUFDX0hBTEZfRFVQOworCWVsc2UKKwkJdmFsID0gKHZhbCAmIH5FTUFDX0RVUExFWF9NQVNLKSB8IEVNQUNfRlVMTF9EVVA7CisgIAorCXdyaXRlbCAodmFsLCBiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRyk7Cit9CisKKy8qKiBHRU1BQyBzZXQgbW9kZS4KKyogQHBhcmFtW2luXSBiYXNlCUdFTUFDIGJhc2UgYWRkcmVzcworKiBAcGFyYW1baW5dIG1vZGUJR0VNQUMgb3BlcmF0aW9uIG1vZGUgKE1JSSwgUk1JSSwgUkdNSUksIFNHTUlJKQorKi8KK3ZvaWQgZ2VtYWNfc2V0X21vZGUodm9pZCAqYmFzZSwgaW50IG1vZGUpCit7CisJc3dpdGNoIChtb2RlKQorCXsKKwljYXNlIEdNSUk6CisJCXdyaXRlbCAoKHJlYWRsKGJhc2UgKyBFTUFDX0NPTlRST0wpICYgfkVNQUNfTU9ERV9NQVNLKSB8IEVNQUNfR01JSV9NT0RFX0VOQUJMRSwgYmFzZSArIEVNQUNfQ09OVFJPTCk7CisJCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpICYgKH5FTUFDX1NHTUlJX01PREVfRU5BQkxFKSwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworCQlicmVhazsKKworCWNhc2UgUkdNSUk6CisJCXdyaXRlbCAoKHJlYWRsKGJhc2UgKyBFTUFDX0NPTlRST0wpICYgfkVNQUNfTU9ERV9NQVNLKSB8IEVNQUNfUkdNSUlfTU9ERV9FTkFCTEUsIGJhc2UgKyBFTUFDX0NPTlRST0wpOworCQl3cml0ZWwgKHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKSAmICh+RU1BQ19TR01JSV9NT0RFX0VOQUJMRSksIGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKKwkJYnJlYWs7CisKKwljYXNlIFJNSUk6CisJCXdyaXRlbCAoKHJlYWRsKGJhc2UgKyBFTUFDX0NPTlRST0wpICYgfkVNQUNfTU9ERV9NQVNLKSB8IEVNQUNfUk1JSV9NT0RFX0VOQUJMRSwgYmFzZSArIEVNQUNfQ09OVFJPTCk7CisJCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpICYgKH5FTUFDX1NHTUlJX01PREVfRU5BQkxFKSwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworCQlicmVhazsKKworCWNhc2UgTUlJOgorCQl3cml0ZWwgKChyZWFkbChiYXNlICsgRU1BQ19DT05UUk9MKSAmIH5FTUFDX01PREVfTUFTSykgfCBFTUFDX01JSV9NT0RFX0VOQUJMRSwgYmFzZSArIEVNQUNfQ09OVFJPTCk7CisJCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpICYgKH5FTUFDX1NHTUlJX01PREVfRU5BQkxFKSwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworCQlicmVhazsKKworCWNhc2UgU0dNSUk6CisJCXdyaXRlbCAoKHJlYWRsKGJhc2UgKyBFTUFDX0NPTlRST0wpICYgfkVNQUNfTU9ERV9NQVNLKSB8IChFTUFDX1JNSUlfTU9ERV9ESVNBQkxFIHwgRU1BQ19SR01JSV9NT0RFX0RJU0FCTEUpLCBiYXNlICsgRU1BQ19DT05UUk9MKTsKKwkJd3JpdGVsIChyZWFkbChiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRykgfCBFTUFDX1NHTUlJX01PREVfRU5BQkxFLCBiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJd3JpdGVsICgocmVhZGwoYmFzZSArIEVNQUNfQ09OVFJPTCkgJiB+RU1BQ19NT0RFX01BU0spIHwgRU1BQ19NSUlfTU9ERV9FTkFCTEUsIGJhc2UgKyBFTUFDX0NPTlRST0wpOworCQl3cml0ZWwgKHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKSAmICh+RU1BQ19TR01JSV9NT0RFX0VOQUJMRSksIGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiogR0VNQUMgRW5hYmxlIE1ESU86IEFjdGl2YXRlIHRoZSBNYW5hZ2VtZW50IGludGVyZmFjZS4gIFRoaXMgaXMgcmVxdWlyZWQgdG8gcHJvZ3JhbSB0aGUgUEhZCisgKiBAcGFyYW1baW5dIGJhc2UgICAgICAgR0VNQUMgYmFzZSBhZGRyZXNzCisgKi8KK3ZvaWQgZ2VtYWNfZW5hYmxlX21kaW8odm9pZCAqYmFzZSkKK3sKKyAgICAgICAgdTMyIGRhdGE7CisKKyAgICAgICAgZGF0YSA9IHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09OVFJPTCk7CisgICAgICAgIGRhdGEgfD0gRU1BQ19NRElPX0VOOworICAgICAgICB3cml0ZWwoZGF0YSwgYmFzZSArIEVNQUNfTkVUV09SS19DT05UUk9MKTsKK30KKworLyoqIEdFTUFDIERpc2FibGUgTURJTzogRGlzYWJsZSB0aGUgTWFuYWdlbWVudCBpbnRlcmZhY2UuCisgKiBAcGFyYW1baW5dIGJhc2UgICAgICAgR0VNQUMgYmFzZSBhZGRyZXNzCisgKi8KK3ZvaWQgZ2VtYWNfZGlzYWJsZV9tZGlvKHZvaWQgKmJhc2UpCit7CisgICAgICAgIHUzMiBkYXRhOworCisgICAgICAgIGRhdGEgPSByZWFkbChiYXNlICsgRU1BQ19ORVRXT1JLX0NPTlRST0wpOworICAgICAgICBkYXRhICY9IH5FTUFDX01ESU9fRU47CisgICAgICAgIHdyaXRlbChkYXRhLCBiYXNlICsgRU1BQ19ORVRXT1JLX0NPTlRST0wpOworfQorCisvKiogR0VNQUMgU2V0IE1EQyBjbG9jayBkaXZpc2lvbgorICogQHBhcmFtW2luXSBiYXNlICAgICAgIEdFTUFDIGJhc2UgYWRkcmVzcworICogQHBhcmFtW2luXSBiYXNlICAgICAgIE1EQyBkaXZpZGVyIHZhbHVlCisgKi8KK3ZvaWQgZ2VtYWNfc2V0X21kY19kaXYodm9pZCAqYmFzZSwgTUFDX01EQ19ESVYgZ2VtX21kY2RpdikKK3sKKyAgICAgICAgdTMyIGRhdGE7CisKKyAgICAgICAgZGF0YSA9IHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKKwlkYXRhICY9IH4oTURDX0RJVl9NQVNLIDw8IE1EQ19ESVZfU0hJRlQpOworICAgICAgICBkYXRhIHw9IChnZW1fbWRjZGl2ICYgTURDX0RJVl9NQVNLKSA8PCBNRENfRElWX1NISUZUOworICAgICAgICB3cml0ZWwoZGF0YSwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworfQorCisvKiogR0VNQUMgcmVzZXQgZnVuY3Rpb24uCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyovCit2b2lkIGdlbWFjX3Jlc2V0KHZvaWQgKmJhc2UpCit7ICAKK30KKworLyoqIEdFTUFDIGVuYWJsZSBmdW5jdGlvbi4KKyogQHBhcmFtW2luXSBiYXNlCUdFTUFDIGJhc2UgYWRkcmVzcworKi8KK3ZvaWQgZ2VtYWNfZW5hYmxlKHZvaWQgKmJhc2UpCit7ICAKKwl3cml0ZWwgKHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09OVFJPTCkgfCBFTUFDX1RYX0VOQUJMRSB8IEVNQUNfUlhfRU5BQkxFLCBiYXNlICsgRU1BQ19ORVRXT1JLX0NPTlRST0wpOworfQorCisvKiogR0VNQUMgZGlzYWJsZSBmdW5jdGlvbi4KKyogQHBhcmFtW2luXSBiYXNlCUdFTUFDIGJhc2UgYWRkcmVzcworKi8KK3ZvaWQgZ2VtYWNfZGlzYWJsZSh2b2lkICpiYXNlKQoreworCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05UUk9MKSAmIH4oRU1BQ19UWF9FTkFCTEUgfCBFTUFDX1JYX0VOQUJMRSksIGJhc2UgKyBFTUFDX05FVFdPUktfQ09OVFJPTCk7Cit9CisKKy8qKiBHRU1BQyBzZXQgbWFjIGFkZHJlc3MgY29uZmlndXJhdGlvbi4KKyogQHBhcmFtW2luXSBiYXNlCUdFTUFDIGJhc2UgYWRkcmVzcworKiBAcGFyYW1baW5dIGFkZHIJTUFDIGFkZHJlc3MgdG8gYmUgY29uZmlndXJlZAorKi8KK3ZvaWQgZ2VtYWNfc2V0X2FkZHJlc3Modm9pZCAqYmFzZSwgU1BFQ19BRERSICphZGRyKQoreyAKKwl3cml0ZWwoYWRkci0+b25lLmJvdHRvbSwJYmFzZSArIEVNQUNfU1BFQzFfQUREX0JPVCk7CisJd3JpdGVsKGFkZHItPm9uZS50b3AsCQliYXNlICsgRU1BQ19TUEVDMV9BRERfVE9QKTsgCisJd3JpdGVsKGFkZHItPnR3by5ib3R0b20sCWJhc2UgKyBFTUFDX1NQRUMyX0FERF9CT1QpOworCXdyaXRlbChhZGRyLT50d28udG9wLAkJYmFzZSArIEVNQUNfU1BFQzJfQUREX1RPUCk7CisJd3JpdGVsKGFkZHItPnRocmVlLmJvdHRvbSwJYmFzZSArIEVNQUNfU1BFQzNfQUREX0JPVCk7CisJd3JpdGVsKGFkZHItPnRocmVlLnRvcCwJCWJhc2UgKyBFTUFDX1NQRUMzX0FERF9UT1ApOworCXdyaXRlbChhZGRyLT5mb3VyLmJvdHRvbSwJYmFzZSArIEVNQUNfU1BFQzRfQUREX0JPVCk7CisJd3JpdGVsKGFkZHItPmZvdXIudG9wLAkJYmFzZSArIEVNQUNfU1BFQzRfQUREX1RPUCk7Cit9IAorCisvKiogR0VNQUMgZ2V0IG1hYyBhZGRyZXNzIGNvbmZpZ3VyYXRpb24uCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyoKKyogQHJldHVybgkJTUFDIGFkZHJlc3NlcyBjb25maWd1cmVkCisqLworU1BFQ19BRERSIGdlbWFjX2dldF9hZGRyZXNzKHZvaWQgKmJhc2UpCit7CisJU1BFQ19BRERSIGFkZHI7CisJCisJYWRkci5vbmUuYm90dG9tID0gCXJlYWRsKGJhc2UgKyBFTUFDX1NQRUMxX0FERF9CT1QpOworCWFkZHIub25lLnRvcCA9IAkJcmVhZGwoYmFzZSArIEVNQUNfU1BFQzFfQUREX1RPUCk7IAorCWFkZHIudHdvLmJvdHRvbSA9CXJlYWRsKGJhc2UgKyBFTUFDX1NQRUMyX0FERF9CT1QpOworCWFkZHIudHdvLnRvcCA9CQlyZWFkbChiYXNlICsgRU1BQ19TUEVDMl9BRERfVE9QKTsKKwlhZGRyLnRocmVlLmJvdHRvbSA9CXJlYWRsKGJhc2UgKyBFTUFDX1NQRUMzX0FERF9CT1QpOworCWFkZHIudGhyZWUudG9wID0JcmVhZGwoYmFzZSArIEVNQUNfU1BFQzNfQUREX1RPUCk7CisJYWRkci5mb3VyLmJvdHRvbSA9CXJlYWRsKGJhc2UgKyBFTUFDX1NQRUM0X0FERF9CT1QpOworCWFkZHIuZm91ci50b3AgPQkJcmVhZGwoYmFzZSArIEVNQUNfU1BFQzRfQUREX1RPUCk7CisJCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qKiBHRU1BQyBzZXQgc3BlY2lmaWMgbG9jYWwgYWRkcmVzc2VzIG9mIHRoZSBNQUMuCisqIFJhdGhlciB0aGFuIHNldHRpbmcgdXAgYWxsIGZvdXIgc3BlY2lmaWMgYWRkcmVzc2VzLCB0aGlzIGZ1bmN0aW9uIHNldHMgdGhlbSB1cCBpbmRpdmlkdWFsbHkuCisqCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyogQHBhcmFtW2luXSBhZGRyCU1BQyBhZGRyZXNzIHRvIGJlIGNvbmZpZ3VyZWQKKyovCit2b2lkIGdlbWFjX3NldF9sYWRkcjEodm9pZCAqYmFzZSwgTUFDX0FERFIgKmFkZHJlc3MpCit7CisJd3JpdGVsKGFkZHJlc3MtPmJvdHRvbSwJCWJhc2UgKyBFTUFDX1NQRUMxX0FERF9CT1QpOworCXdyaXRlbChhZGRyZXNzLT50b3AsCQliYXNlICsgRU1BQ19TUEVDMV9BRERfVE9QKTsgCit9CisKKwordm9pZCBnZW1hY19zZXRfbGFkZHIyKHZvaWQgKmJhc2UsIE1BQ19BRERSICphZGRyZXNzKQoreworCXdyaXRlbChhZGRyZXNzLT5ib3R0b20sCQliYXNlICsgRU1BQ19TUEVDMl9BRERfQk9UKTsKKwl3cml0ZWwoYWRkcmVzcy0+dG9wLAkJYmFzZSArIEVNQUNfU1BFQzJfQUREX1RPUCk7IAorfQorCisKK3ZvaWQgZ2VtYWNfc2V0X2xhZGRyMyh2b2lkICpiYXNlLCBNQUNfQUREUiAqYWRkcmVzcykKK3sKKwl3cml0ZWwoYWRkcmVzcy0+Ym90dG9tLAkJYmFzZSArIEVNQUNfU1BFQzNfQUREX0JPVCk7CisJd3JpdGVsKGFkZHJlc3MtPnRvcCwJCWJhc2UgKyBFTUFDX1NQRUMzX0FERF9UT1ApOyAKK30KKworCit2b2lkIGdlbWFjX3NldF9sYWRkcjQodm9pZCAqYmFzZSwgTUFDX0FERFIgKmFkZHJlc3MpCit7CisJd3JpdGVsKGFkZHJlc3MtPmJvdHRvbSwJCWJhc2UgKyBFTUFDX1NQRUM0X0FERF9CT1QpOworCXdyaXRlbChhZGRyZXNzLT50b3AsCQliYXNlICsgRU1BQ19TUEVDNF9BRERfVE9QKTsgCit9CisKK3ZvaWQgZ2VtYWNfc2V0X2xhZGRyTih2b2lkICpiYXNlLCBNQUNfQUREUiAqYWRkcmVzcywgdW5zaWduZWQgaW50IGVudHJ5X2luZGV4KQoreworCWlmIChlbnRyeV9pbmRleCA8IDUpCisJewkKKwkJd3JpdGVsKGFkZHJlc3MtPmJvdHRvbSwJCWJhc2UgKyAoZW50cnlfaW5kZXggKiA4KSArIEVNQUNfU1BFQzFfQUREX0JPVCk7CisJCXdyaXRlbChhZGRyZXNzLT50b3AsCQliYXNlICsgKGVudHJ5X2luZGV4ICogOCkgKyBFTUFDX1NQRUMxX0FERF9UT1ApOworCX0gCisJZWxzZSAKKwl7CisJCXdyaXRlbChhZGRyZXNzLT5ib3R0b20sCQliYXNlICsgKChlbnRyeV9pbmRleCAtIDUpICogOCkgKyBFTUFDX1NQRUM1X0FERF9CT1QpOworCQl3cml0ZWwoYWRkcmVzcy0+dG9wLAkJYmFzZSArICgoZW50cnlfaW5kZXggLSA1KSAqIDgpICsgRU1BQ19TUEVDNV9BRERfVE9QKTsKKwl9Cit9CisKKy8qKiBHZXQgc3BlY2lmaWMgbG9jYWwgYWRkcmVzc2VzIG9mIHRoZSBNQUMuCisqIFRoaXMgYWxsb3dzIHJldHVybmluZyBvZiBhIHNpbmdsZSBzcGVjaWZpYyBhZGRyZXNzIHN0b3JlZCBpbiB0aGUgTUFDLgorKiBAcGFyYW1baW5dIGJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzCisqCisqIEByZXR1cm4JCVNwZWNpZmljIE1BQyBhZGRyZXNzIDEKKyogCisqLworTUFDX0FERFIgZ2VtX2dldF9sYWRkcjEodm9pZCAqYmFzZSkKK3sKKwlNQUNfQUREUiBhZGRyOworCWFkZHIuYm90dG9tID0gcmVhZGwoYmFzZSArIEVNQUNfU1BFQzFfQUREX0JPVCk7CisJYWRkci50b3AgPSByZWFkbChiYXNlICsgRU1BQ19TUEVDMV9BRERfVE9QKTsKKwlyZXR1cm4gYWRkcjsKK30KKworCitNQUNfQUREUiBnZW1fZ2V0X2xhZGRyMih2b2lkICpiYXNlKQoreworCU1BQ19BRERSIGFkZHI7CisJYWRkci5ib3R0b20gPSByZWFkbChiYXNlICsgRU1BQ19TUEVDMl9BRERfQk9UKTsKKwlhZGRyLnRvcCA9IHJlYWRsKGJhc2UgKyBFTUFDX1NQRUMyX0FERF9UT1ApOworCXJldHVybiBhZGRyOworfQorCisKK01BQ19BRERSIGdlbV9nZXRfbGFkZHIzKHZvaWQgKmJhc2UpCit7CisJTUFDX0FERFIgYWRkcjsKKwlhZGRyLmJvdHRvbSA9IHJlYWRsKGJhc2UgKyBFTUFDX1NQRUMzX0FERF9CT1QpOworCWFkZHIudG9wID0gcmVhZGwoYmFzZSArIEVNQUNfU1BFQzNfQUREX1RPUCk7CisJcmV0dXJuIGFkZHI7Cit9CisKKworTUFDX0FERFIgZ2VtX2dldF9sYWRkcjQodm9pZCAqYmFzZSkKK3sKKwlNQUNfQUREUiBhZGRyOworCWFkZHIuYm90dG9tID0gcmVhZGwoYmFzZSArIEVNQUNfU1BFQzRfQUREX0JPVCk7CisJYWRkci50b3AgPSByZWFkbChiYXNlICsgRU1BQ19TUEVDNF9BRERfVE9QKTsKKwlyZXR1cm4gYWRkcjsKK30KKworCitNQUNfQUREUiBnZW1fZ2V0X2xhZGRyTih2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgZW50cnlfaW5kZXgpCit7CisJTUFDX0FERFIgYWRkcjsKKworCWlmIChlbnRyeV9pbmRleCA8IDUpCisJeworCQlhZGRyLmJvdHRvbSA9IHJlYWRsKGJhc2UgKyAoZW50cnlfaW5kZXggKiA4KSArIEVNQUNfU1BFQzFfQUREX0JPVCk7CisJCWFkZHIudG9wID0gcmVhZGwoYmFzZSArIChlbnRyeV9pbmRleCAqIDgpICsgRU1BQ19TUEVDMV9BRERfVE9QKTsKKwl9CisJZWxzZQorCXsKKwkJYWRkci5ib3R0b20gPSByZWFkbChiYXNlICsgKChlbnRyeV9pbmRleCAtIDUpICogOCkgKyBFTUFDX1NQRUM1X0FERF9CT1QpOworCQlhZGRyLnRvcCA9IHJlYWRsKGJhc2UgKyAoKGVudHJ5X2luZGV4IC0gNSkgKiA4KSArIEVNQUNfU1BFQzVfQUREX1RPUCk7CisJfQorCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qKiBHRU1BQyBhbGxvdyBmcmFtZXMKKyogQHBhcmFtW2luXSBiYXNlCUdFTUFDIGJhc2UgYWRkcmVzcworKi8KK3ZvaWQgZ2VtYWNfZW5hYmxlX2NvcHlfYWxsKHZvaWQgKmJhc2UpCit7CisJd3JpdGVsIChyZWFkbChiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRykgJiBFTUFDX0VOQUJMRV9DT1BZX0FMTCwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworfQorCisvKiogR0VNQUMgZG8gbm90IGFsbG93IGZyYW1lcworKiBAcGFyYW1baW5dIGJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzCisqLwordm9pZCBnZW1hY19kaXNhYmxlX2NvcHlfYWxsKHZvaWQgKmJhc2UpCit7CisJd3JpdGVsIChyZWFkbChiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRykgJiB+RU1BQ19FTkFCTEVfQ09QWV9BTEwsIGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKK30KKworCisKKy8qKiBHRU1BQyBhbGxvdyBicm9hZGNhc3QgZnVuY3Rpb24uCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyovCit2b2lkIGdlbWFjX2FsbG93X2Jyb2FkY2FzdCh2b2lkICpiYXNlKQoreworCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpICYgfkVNQUNfTk9fQlJPQURDQVNULCBiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRyk7Cit9CisKKy8qKiBHRU1BQyBubyBicm9hZGNhc3QgZnVuY3Rpb24uCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyovCit2b2lkIGdlbWFjX25vX2Jyb2FkY2FzdCh2b2lkICpiYXNlKQoreworCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpIHwgRU1BQ19OT19CUk9BRENBU1QsIGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKK30KKworLyoqIEdFTUFDIGVuYWJsZSB1bmljYXN0IGZ1bmN0aW9uLgorKiBAcGFyYW1baW5dIGJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzCisqLwordm9pZCBnZW1hY19lbmFibGVfdW5pY2FzdCh2b2lkICpiYXNlKQoreworCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpIHwgRU1BQ19FTkFCTEVfVU5JQ0FTVCwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworfQorCisvKiogR0VNQUMgZGlzYWJsZSB1bmljYXN0IGZ1bmN0aW9uLgorKiBAcGFyYW1baW5dIGJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzCisqLwordm9pZCBnZW1hY19kaXNhYmxlX3VuaWNhc3Qodm9pZCAqYmFzZSkKK3sKKwl3cml0ZWwgKHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKSAmIH5FTUFDX0VOQUJMRV9VTklDQVNULCBiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRyk7Cit9CisKKy8qKiBHRU1BQyBlbmFibGUgbXVsdGljYXN0IGZ1bmN0aW9uLgorKiBAcGFyYW1baW5dIGJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzCisqLwordm9pZCBnZW1hY19lbmFibGVfbXVsdGljYXN0KHZvaWQgKmJhc2UpCit7CisJd3JpdGVsIChyZWFkbChiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRykgfCBFTUFDX0VOQUJMRV9NVUxUSUNBU1QsIGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKK30KKworLyoqIEdFTUFDIGRpc2FibGUgbXVsdGljYXN0IGZ1bmN0aW9uLgorKiBAcGFyYW1baW5dCWJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzCisqLwordm9pZCBnZW1hY19kaXNhYmxlX211bHRpY2FzdCh2b2lkICpiYXNlKQoreworCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpICYgfkVNQUNfRU5BQkxFX01VTFRJQ0FTVCwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworfQorCisvKiogR0VNQUMgZW5hYmxlIGZjcyByeCBmdW5jdGlvbi4KKyogQHBhcmFtW2luXQliYXNlCUdFTUFDIGJhc2UgYWRkcmVzcworKi8KK3ZvaWQgZ2VtYWNfZW5hYmxlX2Zjc19yeCh2b2lkICpiYXNlKQoreworCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpIHwgRU1BQ19FTkFCTEVfRkNTX1JYLCBiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRyk7Cit9CisKKy8qKiBHRU1BQyBkaXNhYmxlIGZjcyByeCBmdW5jdGlvbi4KKyogQHBhcmFtW2luXQliYXNlCUdFTUFDIGJhc2UgYWRkcmVzcworKi8KK3ZvaWQgZ2VtYWNfZGlzYWJsZV9mY3Nfcngodm9pZCAqYmFzZSkKK3sKKwl3cml0ZWwgKHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKSAmIH5FTUFDX0VOQUJMRV9GQ1NfUlgsIGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKK30KKworLyoqIEdFTUFDIGVuYWJsZSAxNTM2IHJ4IGZ1bmN0aW9uLgorKiBAcGFyYW1baW5dCWJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzCisqLwordm9pZCBnZW1hY19lbmFibGVfMTUzNl9yeCh2b2lkICpiYXNlKQoreworCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpIHwgRU1BQ19FTkFCTEVfMTUzNl9SWCwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworfQorCisvKiogR0VNQUMgZGlzYWJsZSAxNTM2IHJ4IGZ1bmN0aW9uLgorKiBAcGFyYW1baW5dCWJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzCisqLwordm9pZCBnZW1hY19kaXNhYmxlXzE1MzZfcngodm9pZCAqYmFzZSkKK3sKKwl3cml0ZWwgKHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKSAmIH5FTUFDX0VOQUJMRV8xNTM2X1JYLCBiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRyk7Cit9CisKKy8qKiBHRU1BQyBlbmFibGUgcGF1c2UgcnggZnVuY3Rpb24uCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyovCit2b2lkIGdlbWFjX2VuYWJsZV9wYXVzZV9yeCh2b2lkICpiYXNlKQoreworCXdyaXRlbCAocmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpIHwgRU1BQ19FTkFCTEVfUEFVU0VfUlgsIGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKTsKK30KKworLyoqIEdFTUFDIGRpc2FibGUgcGF1c2UgcnggZnVuY3Rpb24uCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyovCit2b2lkIGdlbWFjX2Rpc2FibGVfcGF1c2Vfcngodm9pZCAqYmFzZSkKK3sKKwl3cml0ZWwgKHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKSAmIH5FTUFDX0VOQUJMRV9QQVVTRV9SWCwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworfQorCisvKiogR0VNQUMgZW5hYmxlIHJ4IGNoZWNrc3VtIG9mZmxvYWQgZnVuY3Rpb24uCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyovCit2b2lkIGdlbWFjX2VuYWJsZV9yeF9jaGVja3N1bV9vZmZsb2FkKHZvaWQgKmJhc2UpCit7CisJd3JpdGVsKHJlYWRsKGJhc2UgKyBFTUFDX05FVFdPUktfQ09ORklHKSB8IEVNQUNfRU5BQkxFX0NIS1NVTV9SWCwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworCXdyaXRlbChyZWFkbChDTEFTU19MNF9DSEtTVU1fQUREUikgfCBJUFY0X0NIS1NVTV9EUk9QLCBDTEFTU19MNF9DSEtTVU1fQUREUik7Cit9CisKKy8qKiBHRU1BQyBkaXNhYmxlIHJ4IGNoZWNrc3VtIG9mZmxvYWQgZnVuY3Rpb24uCisqIEBwYXJhbVtpbl0gYmFzZQlHRU1BQyBiYXNlIGFkZHJlc3MKKyovCit2b2lkIGdlbWFjX2Rpc2FibGVfcnhfY2hlY2tzdW1fb2ZmbG9hZCh2b2lkICpiYXNlKQoreworCXdyaXRlbChyZWFkbChiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRykgJiB+RU1BQ19FTkFCTEVfQ0hLU1VNX1JYLCBiYXNlICsgRU1BQ19ORVRXT1JLX0NPTkZJRyk7CisJd3JpdGVsKHJlYWRsKENMQVNTX0w0X0NIS1NVTV9BRERSKSAmIH5JUFY0X0NIS1NVTV9EUk9QLCBDTEFTU19MNF9DSEtTVU1fQUREUik7Cit9CisKKy8qKiBTZXRzIEdlbWFjIGJ1cyB3aWR0aCB0byA2NGJpdAorICogQHBhcmFtW2luXSBiYXNlICAgICAgIEdFTUFDIGJhc2UgYWRkcmVzcworICogQHBhcmFtW2luXSB3aWR0aAlnZW1hYyBidXMgd2lkdGggdG8gYmUgc2V0IHBvc3NpYmxlIHZhbHVlcyBhcmUgMzIvNjQvMTI4CisgKiAqLwordm9pZCBnZW1hY19zZXRfYnVzX3dpZHRoKHZvaWQgKmJhc2UsIGludCB3aWR0aCkKK3sKKwl1MzIgdmFsID0gcmVhZGwoYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworCXN3aXRjaCh3aWR0aCkgCisJeworCWNhc2UgMzI6CisJCXZhbCA9ICh2YWwgJiB+RU1BQ19EQVRBX0JVU19XSURUSF9NQVNLKSB8IEVNQUNfREFUQV9CVVNfV0lEVEhfMzI7CisJY2FzZSAxMjg6CisJCXZhbCA9ICh2YWwgJiB+RU1BQ19EQVRBX0JVU19XSURUSF9NQVNLKSB8IEVNQUNfREFUQV9CVVNfV0lEVEhfMTI4OworCWNhc2UgNjQ6CisJZGVmYXVsdDoKKwkJdmFsID0gKHZhbCAmIH5FTUFDX0RBVEFfQlVTX1dJRFRIX01BU0spIHwgRU1BQ19EQVRBX0JVU19XSURUSF82NDsKKworCX0KKwl3cml0ZWwgKHZhbCwgYmFzZSArIEVNQUNfTkVUV09SS19DT05GSUcpOworfQorCisvKiogU2V0cyBHZW1hYyBjb25maWd1cmF0aW9uLgorKiBAcGFyYW1baW5dIGJhc2UJR0VNQUMgYmFzZSBhZGRyZXNzCisqIEBwYXJhbVtpbl0gY2ZnCUdFTUFDIGNvbmZpZ3VyYXRpb24KKyovCit2b2lkIGdlbWFjX3NldF9jb25maWcodm9pZCAqYmFzZSwgR0VNQUNfQ0ZHICpjZmcpCit7CisJZ2VtYWNfc2V0X21vZGUoYmFzZSwgY2ZnLT5tb2RlKTsKKworCWdlbWFjX3NldF9zcGVlZChiYXNlLCBjZmctPnNwZWVkKTsKKworCWdlbWFjX3NldF9kdXBsZXgoYmFzZSxjZmctPmR1cGxleCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogR1BJICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIEluaXRpYWxpemVzIGEgR1BJIGJsb2NrLgorKiBAcGFyYW1baW5dIGJhc2UJR1BJIGJhc2UgYWRkcmVzcworKiBAcGFyYW1baW5dIGNmZwlHUEkgY29uZmlndXJhdGlvbgorKi8KK3ZvaWQgZ3BpX2luaXQodm9pZCAqYmFzZSwgR1BJX0NGRyAqY2ZnKQoreyAKKwlncGlfcmVzZXQoYmFzZSk7CisJCisJZ3BpX2Rpc2FibGUoYmFzZSk7CisJCisJZ3BpX3NldF9jb25maWcoYmFzZSwgY2ZnKTsKK30KKworLyoqIFJlc2V0cyBhIEdQSSBibG9jay4KKyogQHBhcmFtW2luXSBiYXNlCUdQSSBiYXNlIGFkZHJlc3MKKyovCit2b2lkIGdwaV9yZXNldCh2b2lkICpiYXNlKQoreworCXdyaXRlbCAoQ09SRV9TV19SRVNFVCwgYmFzZSArIEdQSV9DVFJMKTsKK30KKworLyoqIEVuYWJsZXMgYSBHUEkgYmxvY2suCisqIEBwYXJhbVtpbl0gYmFzZQlHUEkgYmFzZSBhZGRyZXNzCisqLwordm9pZCBncGlfZW5hYmxlKHZvaWQgKmJhc2UpCit7CisJd3JpdGVsIChDT1JFX0VOQUJMRSwgYmFzZSArIEdQSV9DVFJMKTsKK30KKworLyoqIERpc2FibGVzIGEgR1BJIGJsb2NrLgorKiBAcGFyYW1baW5dIGJhc2UJR1BJIGJhc2UgYWRkcmVzcworKi8KK3ZvaWQgZ3BpX2Rpc2FibGUodm9pZCAqYmFzZSkKK3sKKwl3cml0ZWwgKENPUkVfRElTQUJMRSwgYmFzZSArIEdQSV9DVFJMKTsKK30KKworCisvKiogU2V0cyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIEdQSSBibG9jay4KKyogQHBhcmFtW2luXSBiYXNlCUdQSSBiYXNlIGFkZHJlc3MKKyogQHBhcmFtW2luXSBjZmcJR1BJIGNvbmZpZ3VyYXRpb24KKyovCit2b2lkIGdwaV9zZXRfY29uZmlnKHZvaWQgKmJhc2UsIEdQSV9DRkcgKmNmZykKK3sgIAorCXdyaXRlbCAoQ0JVU19WSVJUX1RPX1BGRShCTVUxX0JBU0VfQUREUiArIEJNVV9BTExPQ19DVFJMKSwJYmFzZSArIEdQSV9MTUVNX0FMTE9DX0FERFIpOworCXdyaXRlbCAoQ0JVU19WSVJUX1RPX1BGRShCTVUxX0JBU0VfQUREUiArIEJNVV9GUkVFX0NUUkwpLAliYXNlICsgR1BJX0xNRU1fRlJFRV9BRERSKTsKKwl3cml0ZWwgKENCVVNfVklSVF9UT19QRkUoQk1VMl9CQVNFX0FERFIgKyBCTVVfQUxMT0NfQ1RSTCksCWJhc2UgKyBHUElfRERSX0FMTE9DX0FERFIpOworCXdyaXRlbCAoQ0JVU19WSVJUX1RPX1BGRShCTVUyX0JBU0VfQUREUiArIEJNVV9GUkVFX0NUUkwpLAliYXNlICsgR1BJX0REUl9GUkVFX0FERFIpOworCXdyaXRlbCAoQ0JVU19WSVJUX1RPX1BGRShDTEFTU19JTlFfUEtUUFRSKSwJCQliYXNlICsgR1BJX0NMQVNTX0FERFIpOworIAl3cml0ZWwgKEREUl9IRFJfU0laRSwJCQkJCQliYXNlICsgR1BJX0REUl9EQVRBX09GRlNFVCk7CisJd3JpdGVsIChMTUVNX0hEUl9TSVpFLAkJCQkJCWJhc2UgKyBHUElfTE1FTV9EQVRBX09GRlNFVCk7CisJd3JpdGVsICgwLAkJCQkJCQliYXNlICsgR1BJX0xNRU1fU0VDX0JVRl9EQVRBX09GRlNFVCk7CisJd3JpdGVsICgwLAkJCQkJCQliYXNlICsgR1BJX0REUl9TRUNfQlVGX0RBVEFfT0ZGU0VUKTsKKwl3cml0ZWwgKChERFJfSERSX1NJWkUgPDwgMTYpIHwgTE1FTV9IRFJfU0laRSwJCQliYXNlICsgR1BJX0hEUl9TSVpFKTsKKwl3cml0ZWwgKChERFJfQlVGX1NJWkUgPDwgMTYpIHwgTE1FTV9CVUZfU0laRSwJCQliYXNlICsgR1BJX0JVRl9TSVpFKTsKKwkKKwl3cml0ZWwgKCgoY2ZnLT5sbWVtX3J0cnlfY250IDw8IDE2KSB8IChHUElfRERSX0JVRl9FTiA8PCAxKSB8IEdQSV9MTUVNX0JVRl9FTiksCWJhc2UgKyBHUElfUlhfQ09ORklHKTsKKwl3cml0ZWwgKGNmZy0+dG1sZl90eHRocmVzLAkJCQkJYmFzZSArIEdQSV9UTUxGX1RYKTsKKwl3cml0ZWwgKGNmZy0+YXNlcV9sZW4sCQkJCQkJYmFzZSArIEdQSV9EVFhfQVNFUSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIENMQVNTSUZJRVIgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogSW5pdGlhbGl6ZXMgQ0xBU1NJRklFUiBibG9jay4KKyogQHBhcmFtW2luXSBjZmcJQ0xBU1NJRklFUiBjb25maWd1cmF0aW9uCisqLwordm9pZCBjbGFzc19pbml0KENMQVNTX0NGRyAqY2ZnKQoreworCWNsYXNzX3Jlc2V0KCk7CisJCisJY2xhc3NfZGlzYWJsZSgpOworCQorCWNsYXNzX3NldF9jb25maWcoY2ZnKTsKK30KKworLyoqIFJlc2V0cyBDTEFTU0lGSUVSIGJsb2NrLgorKgorKi8KK3ZvaWQgY2xhc3NfcmVzZXQodm9pZCkKK3sKKwl3cml0ZWwoQ09SRV9TV19SRVNFVCwgQ0xBU1NfVFhfQ1RSTCk7Cit9CisKKy8qKiBFbmFibGVzIGFsbCBDTEFTUy1QRSdzIGNvcmVzLgorKgorKi8KK3ZvaWQgY2xhc3NfZW5hYmxlKHZvaWQpCit7CisJd3JpdGVsKENPUkVfRU5BQkxFLCBDTEFTU19UWF9DVFJMKTsKK30KKworLyoqIERpc2FibGVzIGFsbCBDTEFTUy1QRSdzIGNvcmVzLgorKgorKi8KK3ZvaWQgY2xhc3NfZGlzYWJsZSh2b2lkKQoreworCXdyaXRlbChDT1JFX0RJU0FCTEUsIENMQVNTX1RYX0NUUkwpOyAKK30KKworLyoqIFNldHMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIENMQVNTSUZJRVIgYmxvY2suCisqIEBwYXJhbVtpbl0gY2ZnCUNMQVNTSUZJRVIgY29uZmlndXJhdGlvbgorKi8KK3ZvaWQgY2xhc3Nfc2V0X2NvbmZpZyhDTEFTU19DRkcgKmNmZykKK3sKKwlpZiAoUExMX0NMS19FTiA9PSAwKQorCQl3cml0ZWwoMHgwLCAgICAgQ0xBU1NfUEVfU1lTX0NMS19SQVRJTyk7ICAgICAgICAvLyBDbG9jayByYXRpbzogZm9yIDE6MSB0aGUgdmFsdWUgaXMgMAorCWVsc2UKKwkJd3JpdGVsKDB4MSwgICAgIENMQVNTX1BFX1NZU19DTEtfUkFUSU8pOyAgICAgICAgLy8gQ2xvY2sgcmF0aW86IGZvciAxOjIgdGhlIHZhbHVlIGlzIDEKKworCXdyaXRlbCgoRERSX0hEUl9TSVpFIDw8IDE2KSB8IExNRU1fSERSX1NJWkUsCUNMQVNTX0hEUl9TSVpFKTsKKwl3cml0ZWwoTE1FTV9CVUZfU0laRSwJCQkJQ0xBU1NfTE1FTV9CVUZfU0laRSk7CisJd3JpdGVsKENMQVNTX1JPVVRFX0VOVFJZX1NJWkUoQ0xBU1NfUk9VVEVfU0laRSkgfCBDTEFTU19ST1VURV9IQVNIX1NJWkUoY2ZnLT5yb3V0ZV90YWJsZV9oYXNoX2JpdHMpLAlDTEFTU19ST1VURV9IQVNIX0VOVFJZX1NJWkUpOworCXdyaXRlbChIQVNIX0NSQ19QT1JUX0lQIHwgUUIyQlVTX0xFLCBDTEFTU19ST1VURV9NVUxUSSk7CisKKwl3cml0ZWwoY2ZnLT5yb3V0ZV90YWJsZV9iYXNlYWRkciwJCUNMQVNTX1JPVVRFX1RBQkxFX0JBU0UpOworCW1lbXNldChjZmctPnJvdXRlX3RhYmxlX2Jhc2VhZGRyLCAwLCBST1VURV9UQUJMRV9TSVpFKTsKKworCXdyaXRlbChDTEFTU19QRTBfUk9fRE1fQUREUjBfVkFMLAkJQ0xBU1NfUEUwX1JPX0RNX0FERFIwKTsKKwl3cml0ZWwoQ0xBU1NfUEUwX1JPX0RNX0FERFIxX1ZBTCwJCUNMQVNTX1BFMF9ST19ETV9BRERSMSk7CisJd3JpdGVsKENMQVNTX1BFMF9RQl9ETV9BRERSMF9WQUwsCQlDTEFTU19QRTBfUUJfRE1fQUREUjApOworCXdyaXRlbChDTEFTU19QRTBfUUJfRE1fQUREUjFfVkFMLAkJQ0xBU1NfUEUwX1FCX0RNX0FERFIxKTsKKwl3cml0ZWwoQ0JVU19WSVJUX1RPX1BGRShUTVVfUEhZX0lOUV9QS1RQVFIpLAlDTEFTU19UTV9JTlFfQUREUik7CisKKwl3cml0ZWwoMzEsIENMQVNTX0FGVUxMX1RIUkVTKTsKKwl3cml0ZWwoMzEsIENMQVNTX1RTUV9GSUZPX1RIUkVTKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogVE1VICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIEluaXRpYWxpemVzIFRNVSBibG9jay4KKyogQHBhcmFtW2luXSBjZmcJVE1VIGNvbmZpZ3VyYXRpb24KKyovCit2b2lkIHRtdV9pbml0KFRNVV9DRkcgKmNmZykKK3sKKwlpbnQgcSwgcGh5bm87CisJd3JpdGVsKDB4MywJCQkJCQlUTVVfU1lTX0dFTkVSSUNfQ09OVFJPTCk7CisJd3JpdGVsKDc1MCwJCQkJCQlUTVVfSU5RX1dBVEVSTUFSSyk7CisJd3JpdGVsKENCVVNfVklSVF9UT19QRkUoRUdQSTFfQkFTRV9BRERSICsgR1BJX0lOUV9QS1RQVFIpLAlUTVVfUEhZMF9JTlFfQUREUik7CisJd3JpdGVsKENCVVNfVklSVF9UT19QRkUoRUdQSTJfQkFTRV9BRERSICsgR1BJX0lOUV9QS1RQVFIpLAlUTVVfUEhZMV9JTlFfQUREUik7CisJd3JpdGVsKENCVVNfVklSVF9UT19QRkUoRUdQSTNfQkFTRV9BRERSICsgR1BJX0lOUV9QS1RQVFIpLAlUTVVfUEhZMl9JTlFfQUREUik7CisJd3JpdGVsKENCVVNfVklSVF9UT19QRkUoSEdQSV9CQVNFX0FERFIgKyBHUElfSU5RX1BLVFBUUiksCVRNVV9QSFkzX0lOUV9BRERSKTsKKwl3cml0ZWwoQ0JVU19WSVJUX1RPX1BGRShISUZfTk9DUFlfUlhfSU5RMF9QS1RQVFIpLAkJVE1VX1BIWTRfSU5RX0FERFIpOworCXdyaXRlbChDQlVTX1ZJUlRfVE9fUEZFKFVUSUxfSU5RX1BLVFBUUiksCQkJVE1VX1BIWTVfSU5RX0FERFIpOworCXdyaXRlbChDQlVTX1ZJUlRfVE9fUEZFKEJNVTJfQkFTRV9BRERSICsgQk1VX0ZSRUVfQ1RSTCksIAlUTVVfQk1VX0lOUV9BRERSKTsKKworCXdyaXRlbCgweDNGRiwJVE1VX1REUTBfU0NIX0NUUkwpOwkvLyBlbmFibGluZyBhbGwgMTAgc2NoZWR1bGVycyBbOTowXSBvZiBlYWNoIFREUSAKKwl3cml0ZWwoMHgzRkYsCVRNVV9URFExX1NDSF9DVFJMKTsKKwl3cml0ZWwoMHgzRkYsCVRNVV9URFEyX1NDSF9DVFJMKTsKKwl3cml0ZWwoMHgzRkYsCVRNVV9URFEzX1NDSF9DVFJMKTsKKwkKKwlpZiAoUExMX0NMS19FTiA9PSAwKQorCQl3cml0ZWwoMHgwLAlUTVVfUEVfU1lTX0NMS19SQVRJTyk7CS8vIENsb2NrIHJhdGlvOiBmb3IgMToxIHRoZSB2YWx1ZSBpcyAwCisJZWxzZQorCQl3cml0ZWwoMHgxLAlUTVVfUEVfU1lTX0NMS19SQVRJTyk7CS8vIENsb2NrIHJhdGlvOiBmb3IgMToyIHRoZSB2YWx1ZSBpcyAxCisJCisJd3JpdGVsKGNmZy0+bGxtX2Jhc2VfYWRkciwJVE1VX0xMTV9CQVNFX0FERFIpOwkvLyBFeHRyYSBwYWNrZXQgcG9pbnRlcnMgd2lsbCBiZSBzdG9yZWQgZnJvbSB0aGlzIGFkZHJlc3Mgb253YXJkcworCQorCXdyaXRlbChjZmctPmxsbV9xdWV1ZV9sZW4sCVRNVV9MTE1fUVVFX0xFTik7CisJd3JpdGVsKDB4MTAwLAkJCVRNVV9DVFJMKTsKKwl3cml0ZWwoNSwJCQlUTVVfVERRX0lJRkdfQ0ZHKTsKKwl3cml0ZWwoRERSX0JVRl9TSVpFLAkJVE1VX0JNVV9CVUZfU0laRSk7CisKKwkvLyBzZXQgdXAgZWFjaCBxdWV1ZSBmb3IgdGFpbCBkcm9wCisJZm9yIChwaHlubyA9IDA7IHBoeW5vIDwgNDsgcGh5bm8rKykKKwl7CisJCWZvciAocSA9IDA7IHEgPCAxNjsgcSsrKQorCQl7CisJCQl1MzIgcW1heDsKKwkJCXdyaXRlbCgocGh5bm8gPDwgOCkgfCBxLCBUTVVfVEVRX0NUUkwpOworCQkJd3JpdGVsKDEgPDwgMjIsIFRNVV9URVFfUUNGRyk7CisJCQlxbWF4ID0gKChwaHlubyA9PSAzKSB8fCAocSA8IDgpKSA/IDI1NSA6IDEyNzsKKwkJCXdyaXRlbChxbWF4IDw8IDE4LCBUTVVfVEVRX0hXX1BST0JfQ0ZHMik7CisJCQl3cml0ZWwocW1heCA+PiAxNCwgVE1VX1RFUV9IV19QUk9CX0NGRzMpOworCQl9CisJfQorCXdyaXRlbCgweDA1LCBUTVVfVEVRX0RJU0FCTEVfRFJPUENISyk7Cit9CisKKy8qKiBFbmFibGVzIFRNVS1QRSBjb3Jlcy4KKyogQHBhcmFtW2luXSBwZV9tYXNrCVRNVSBQRSBtYXNrCisqLwordm9pZCB0bXVfZW5hYmxlKHUzMiBwZV9tYXNrKQoreworCXdyaXRlbChyZWFkbChUTVVfVFhfQ1RSTCkgfCAocGVfbWFzayAmIDB4RiksIFRNVV9UWF9DVFJMKTsKK30KKworLyoqIERpc2FibGVzIFRNVSBjb3Jlcy4KKyogQHBhcmFtW2luXSBwZV9tYXNrCVRNVSBQRSBtYXNrCisqLwordm9pZCB0bXVfZGlzYWJsZSh1MzIgcGVfbWFzaykKK3sKKwl3cml0ZWwocmVhZGwoVE1VX1RYX0NUUkwpICYgKCh+cGVfbWFzaykgJiAweEYpLCBUTVVfVFhfQ1RSTCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVUSUwgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiogUmVzZXRzIFVUSUwgYmxvY2suCisqLwordm9pZCB1dGlsX3Jlc2V0KHZvaWQpCit7CisJd3JpdGVsKENPUkVfU1dfUkVTRVQsIFVUSUxfVFhfQ1RSTCk7Cit9CisKKy8qKiBJbml0aWFsaXplcyBVVElMIGJsb2NrLgorKiBAcGFyYW1baW5dIGNmZwlVVElMIGNvbmZpZ3VyYXRpb24KKyovCit2b2lkIHV0aWxfaW5pdChVVElMX0NGRyAqY2ZnKQoreworCisJaWYgKFBMTF9DTEtfRU4gPT0gMCkKKwkJd3JpdGVsKDB4MCwgICAgIFVUSUxfUEVfU1lTX0NMS19SQVRJTyk7ICAgICAgICAvLyBDbG9jayByYXRpbzogZm9yIDE6MSB0aGUgdmFsdWUgaXMgMAorCWVsc2UKKwkJd3JpdGVsKDB4MSwgICAgIFVUSUxfUEVfU1lTX0NMS19SQVRJTyk7ICAgICAgICAvLyBDbG9jayByYXRpbzogZm9yIDE6MiB0aGUgdmFsdWUgaXMgMQorfQorCisvKiogRW5hYmxlcyBVVElMLVBFIGNvcmUuCisqCisqLwordm9pZCB1dGlsX2VuYWJsZSh2b2lkKQoreworCXdyaXRlbChDT1JFX0VOQUJMRSwgVVRJTF9UWF9DVFJMKTsKK30KKworLyoqIERpc2FibGVzIFVUSUwtUEUgY29yZS4KKyoKKyovCit2b2lkIHV0aWxfZGlzYWJsZSh2b2lkKQoreworCXdyaXRlbChDT1JFX0RJU0FCTEUsIFVUSUxfVFhfQ1RSTCk7Cit9CisKKy8qKiBHRU1BQyBQSFkgU3RhdGlzdGljcyAtIFRoaXMgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHN0YXRpc3RpY3MgcmVnaXN0ZXIKKyogQHBhcmFtW2luXQliYXNlCUdFTUFDIGJhc2UgYWRkcmVzcyAKKyovCit1bnNpZ25lZCBpbnQgKiBnZW1hY19nZXRfc3RhdHModm9pZCAqYmFzZSkKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGludCAqKShiYXNlICsgRU1BQ19PQ1RfVFhfQk9UKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogSElGICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqIEluaXRpYWxpemVzIEhJRiBubyBjb3B5IGJsb2NrLgorKgorKi8KK3ZvaWQgaGlmX25vY3B5X2luaXQodm9pZCkKK3sKKwl3cml0ZWwoNCwJCQkJCQkJSElGX05PQ1BZX1RYX1BPUlRfTk8pOworCXdyaXRlbChDQlVTX1ZJUlRfVE9fUEZFKEJNVTFfQkFTRV9BRERSICsgQk1VX0FMTE9DX0NUUkwpLAkJSElGX05PQ1BZX0xNRU1fQUxMT0NfQUREUik7CisJd3JpdGVsKENCVVNfVklSVF9UT19QRkUoQ0xBU1NfSU5RX1BLVFBUUiksCUhJRl9OT0NQWV9DTEFTU19BRERSKTsKKwl3cml0ZWwoQ0JVU19WSVJUX1RPX1BGRShUTVVfUEhZX0lOUV9QS1RQVFIpLAlISUZfTk9DUFlfVE1VX1BPUlQwX0FERFIpOworfQorCisvKiogSW5pdGlhbGl6ZXMgSElGIGNvcHkgYmxvY2suCisqCisqLwordm9pZCBoaWZfaW5pdCh2b2lkKQoreworCS8qSW5pdGlhbGl6ZSBISUYgcmVnaXN0ZXJzKi8KKwl3cml0ZWwoSElGX1JYX1BPTExfQ1RSTF9DWUNMRTw8MTZ8SElGX1RYX1BPTExfQ1RSTF9DWUNMRSwgSElGX1BPTExfQ1RSTCk7IAorfQorCisvKiogRW5hYmxlIGhpZiB0eCBETUEgYW5kIGludGVycnVwdAorKgorKi8KK3ZvaWQgaGlmX3R4X2VuYWJsZSh2b2lkKQoreworCS8qVE9ETyBub3Qgc3VyZSBwb2xsX2NudHJsX2VuIGlzIHJlcXVpcmVkIG9yIG5vdCAqLworCXdyaXRlbCggSElGX0NUUkxfRE1BX0VOLCBISUZfVFhfQ1RSTCk7CisJLy93cml0ZWwoKHJlYWRsKEhJRl9JTlRfRU5BQkxFKSB8IEhJRl9JTlRfRU4gfCBISUZfVFhQS1RfSU5UX0VOKSwgSElGX0lOVF9FTkFCTEUpOworfQorCisvKiogRGlzYWJsZSBoaWYgdHggRE1BIGFuZCBpbnRlcnJ1cHQKKyoKKyovCit2b2lkIGhpZl90eF9kaXNhYmxlKHZvaWQpCit7CisJdTMyCWhpZl9pbnQ7CisKKwl3cml0ZWwoMCwgSElGX1RYX0NUUkwpOworCisJaGlmX2ludCA9IHJlYWRsKEhJRl9JTlRfRU5BQkxFKTsKKwloaWZfaW50ICY9IEhJRl9UWFBLVF9JTlRfRU47CisJd3JpdGVsKGhpZl9pbnQsIEhJRl9JTlRfRU5BQkxFKTsKK30KKworLyoqIEVuYWJsZSBoaWYgcnggRE1BIGFuZCBpbnRlcnJ1cHQKKyoKKyovCit2b2lkIGhpZl9yeF9lbmFibGUodm9pZCkKK3sKKwkvKlRPRE8gbm90IHN1cmUgcG9sbF9jbnRybF9lbiBpcyByZXF1aXJlZCBvciBub3QgKi8KKwl3cml0ZWwoKEhJRl9DVFJMX0RNQV9FTiB8IEhJRl9DVFJMX0JEUF9DSF9TVEFSVF9XU1RCKSwgSElGX1JYX0NUUkwpOworCS8vd3JpdGVsKChyZWFkbChISUZfSU5UX0VOQUJMRSkgfCBISUZfSU5UX0VOIHwgSElGX1RYUEtUX0lOVF9FTiksIEhJRl9JTlRfRU5BQkxFKTsKK30KKworLyoqIERpc2FibGUgaGlmIHJ4IERNQSBhbmQgaW50ZXJydXB0CisqCisqLwordm9pZCBoaWZfcnhfZGlzYWJsZSh2b2lkKQoreworCXUzMgloaWZfaW50OworCisJd3JpdGVsKDAsIEhJRl9SWF9DVFJMKTsKKworCWhpZl9pbnQgPSByZWFkbChISUZfSU5UX0VOQUJMRSk7CisJaGlmX2ludCAmPSBISUZfUlhQS1RfSU5UX0VOOworCXdyaXRlbChoaWZfaW50LCBISUZfSU5UX0VOQUJMRSk7CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2J1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTJlZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2J1cy5oCkBAIC0wLDAgKzEsNzIgQEAKKyNpZm5kZWYgX0NCVVNfSF8KKyNkZWZpbmUgX0NCVVNfSF8KKworI2RlZmluZSBFTUFDMV9CQVNFX0FERFIJCShDQlVTX0JBU0VfQUREUiArIDB4MjAwMDAwKQorI2RlZmluZSBFR1BJMV9CQVNFX0FERFIJCShDQlVTX0JBU0VfQUREUiArIDB4MjEwMDAwKQorI2RlZmluZSBFTUFDMl9CQVNFX0FERFIJCShDQlVTX0JBU0VfQUREUiArIDB4MjIwMDAwKQorI2RlZmluZSBFR1BJMl9CQVNFX0FERFIJCShDQlVTX0JBU0VfQUREUiArIDB4MjMwMDAwKQorI2RlZmluZSBCTVUxX0JBU0VfQUREUgkJKENCVVNfQkFTRV9BRERSICsgMHgyNDAwMDApCisjZGVmaW5lIEJNVTJfQkFTRV9BRERSCQkoQ0JVU19CQVNFX0FERFIgKyAweDI1MDAwMCkKKyNkZWZpbmUgQVJCX0JBU0VfQUREUgkJKENCVVNfQkFTRV9BRERSICsgMHgyNjAwMDApIC8qIEZJWE1FIG5vdCBkb2N1bWVudGVkICovCisjZGVmaW5lIEREUl9DT05GSUdfQkFTRV9BRERSCShDQlVTX0JBU0VfQUREUiArIDB4MjcwMDAwKSAvKiBGSVhNRSBub3QgZG9jdW1lbnRlZCAqLworI2RlZmluZSBISUZfQkFTRV9BRERSCQkoQ0JVU19CQVNFX0FERFIgKyAweDI4MDAwMCkKKyNkZWZpbmUgSEdQSV9CQVNFX0FERFIJCShDQlVTX0JBU0VfQUREUiArIDB4MjkwMDAwKQorI2RlZmluZSBMTUVNX0JBU0VfQUREUgkJKENCVVNfQkFTRV9BRERSICsgMHgzMDAwMDApCisjZGVmaW5lIExNRU1fU0laRQkJMHgxMDAwMAorI2RlZmluZSBMTUVNX0VORAkJKExNRU1fQkFTRV9BRERSICsgTE1FTV9TSVpFKQorI2RlZmluZSBUTVVfQ1NSX0JBU0VfQUREUgkoQ0JVU19CQVNFX0FERFIgKyAweDMxMDAwMCkKKyNkZWZpbmUgQ0xBU1NfQ1NSX0JBU0VfQUREUgkoQ0JVU19CQVNFX0FERFIgKyAweDMyMDAwMCkKKyNkZWZpbmUgRU1BQzNfQkFTRV9BRERSCQkoQ0JVU19CQVNFX0FERFIgKyAweDMzMDAwMCkKKyNkZWZpbmUgRUdQSTNfQkFTRV9BRERSCQkoQ0JVU19CQVNFX0FERFIgKyAweDM0MDAwMCkKKyNkZWZpbmUgSElGX05PQ1BZX0JBU0VfQUREUgkoQ0JVU19CQVNFX0FERFIgKyAweDM1MDAwMCkKKyNkZWZpbmUgVVRJTF9DU1JfQkFTRV9BRERSCShDQlVTX0JBU0VfQUREUiArIDB4MzYwMDAwKQorI2RlZmluZSBDQlVTX0dQVF9CQVNFX0FERFIJKENCVVNfQkFTRV9BRERSICsgMHgzNzAwMDApCisKKyNkZWZpbmUgSVNfTE1FTShhZGRyLCBsZW4pCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpID49IExNRU1fQkFTRV9BRERSKSAmJiAoKCh1bnNpZ25lZCBsb25nKShhZGRyKSArIChsZW4pKSA8PSBMTUVNX0VORCkpCisKKy8qKiAKKyogXGRlZmdyb3VwIFhYWF9NRU1fQUNDRVNTX0FERFIgUEUgbWVtb3J5IGFjY2VzcyB0aHJvdWdoIENTUiAKKyogWFhYX01FTV9BQ0NFU1NfQUREUiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMuIAorKiBAeworKi8KKyNkZWZpbmUgUEVfTUVNX0FDQ0VTU19XUklURQkJKDE8PDMxKQkJCS8qKjwgSW50ZXJuYWwgTWVtb3J5IFdyaXRlLiAqLworI2RlZmluZSBQRV9NRU1fQUNDRVNTX1JFQUQJCSgwPDwzMSkJCQkvKio8IEludGVybmFsIE1lbW9yeSBSZWFkLiAqLworI2RlZmluZSBQRV9NRU1fQUNDRVNTX0lNRU0JCSgxPDwxNSkKKyNkZWZpbmUgUEVfTUVNX0FDQ0VTU19ETUVNCQkoMTw8MTYpCisjZGVmaW5lIFBFX01FTV9BQ0NFU1NfQllURV9FTkFCTEUob2Zmc2V0LHNpemUpCSgoKCgoMSA8PCAoc2l6ZSkpIC0gMSkgPDwgKDQgLSAob2Zmc2V0KSAtIChzaXplKSkpICYgMHhmKSA8PCAyNCkJLyoqPCBCeXRlIEVuYWJsZXMgb2YgdGhlIEludGVybmFsIG1lbW9yeSBhY2Nlc3MuIFRoZXNlIGFyZSBpbnRlcnByZWQgaW4gQkUgKi8KKy8vIEB9CisjaW5jbHVkZSAiY2J1cy9lbWFjLmgiCisjaW5jbHVkZSAiY2J1cy9ncGkuaCIKKyNpbmNsdWRlICJjYnVzL2JtdS5oIgorI2luY2x1ZGUgImNidXMvaGlmLmgiCisjaW5jbHVkZSAiY2J1cy90bXVfY3NyLmgiCisjaW5jbHVkZSAiY2J1cy9jbGFzc19jc3IuaCIKKyNpbmNsdWRlICJjYnVzL2hpZl9ub2NweS5oIgorI2luY2x1ZGUgImNidXMvdXRpbF9jc3IuaCIKKyNpbmNsdWRlICJjYnVzL2dwdC5oIgorCisKKy8qIFBGRSBjb3JlcyBzdGF0ZXMgKi8KKyNkZWZpbmUgQ09SRV9ESVNBQkxFCTB4MDAwMDAwMDAgCisjZGVmaW5lIENPUkVfRU5BQkxFCTB4MDAwMDAwMDEKKyNkZWZpbmUgQ09SRV9TV19SRVNFVAkweDAwMDAwMDAyCisKKy8qIExNRU0gZGVmaW5lcyAqLworI2RlZmluZSBMTUVNX0hEUl9TSVpFCQkweDAwMTAKKyNkZWZpbmUgTE1FTV9CVUZfU0laRV9MTjIJMHg3CisjZGVmaW5lIExNRU1fQlVGX1NJWkUJCSgxIDw8IExNRU1fQlVGX1NJWkVfTE4yKQorCisvKiBERFIgZGVmaW5lcyAqLworI2RlZmluZSBERFJfSERSX1NJWkUJCTB4MDEwMAorI2RlZmluZSBERFJfQlVGX1NJWkVfTE4yCTB4YgorI2RlZmluZSBERFJfQlVGX1NJWkUJCSgxIDw8IEREUl9CVUZfU0laRV9MTjIpCisKKworLyogQ2xvY2sgZ2VuZXJhdGlvbiB0aHJvdWdoIFBMTCAqLworI2lmIGRlZmluZWQoQ09ORklHX1BMQVRGT1JNX1BDSSkKKyNkZWZpbmUgUExMX0NMS19FTgkwCisjZWxzZQorI2RlZmluZSBQTExfQ0xLX0VOCTEKKyNlbmRpZgorCisjZW5kaWYgLyogX0NCVVNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL2JtdS5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvYm11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlNWU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL2JtdS5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgX0JNVV9IXworI2RlZmluZSBfQk1VX0hfCisKKyNkZWZpbmUgQk1VX1ZFUlNJT04JCTB4MDAwCisjZGVmaW5lIEJNVV9DVFJMCQkweDAwNAorI2RlZmluZSBCTVVfVUNBU1RfQ09ORklHCTB4MDA4CisjZGVmaW5lIEJNVV9VQ0FTVF9CQVNFX0FERFIJMHgwMGMKKyNkZWZpbmUgQk1VX0JVRl9TSVpFCQkweDAxMAorI2RlZmluZSBCTVVfQlVGX0NOVAkJMHgwMTQKKyNkZWZpbmUgQk1VX1RIUkVTCQkweDAxOAorI2RlZmluZSBCTVVfSU5UX1NSQwkJMHgwMjAKKyNkZWZpbmUgQk1VX0lOVF9FTkFCTEUJCTB4MDI0CisjZGVmaW5lIEJNVV9BTExPQ19DVFJMCQkweDAzMAorI2RlZmluZSBCTVVfRlJFRV9DVFJMCQkweDAzNAorI2RlZmluZSBCTVVfRlJFRV9FUlJfQUREUgkweDAzOAorI2RlZmluZSBCTVVfQ1VSUl9CVUZfQ05UCTB4MDNjCisjZGVmaW5lIEJNVV9NQ0FTVF9DTlQJCTB4MDQwCisjZGVmaW5lIEJNVV9NQ0FTVF9BTExPQ19DVFJMCTB4MDQ0CisjZGVmaW5lIEJNVV9SRU1fQlVGX0NOVAkJMHgwNDgKKyNkZWZpbmUgQk1VX0xPV19XQVRFUk1BUksJMHgwNTAKKyNkZWZpbmUgQk1VX0hJR0hfV0FURVJNQVJLCTB4MDU0CisjZGVmaW5lIEJNVV9JTlRfTUVNX0FDQ0VTUwkweDEwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIGJhc2VhZGRyOworCXUzMiBjb3VudDsKKwl1MzIgc2l6ZTsKK30gQk1VX0NGRzsKKworCisjZGVmaW5lIEJNVTFfQlVGX1NJWkUJTE1FTV9CVUZfU0laRV9MTjIKKyNkZWZpbmUgQk1VMl9CVUZfU0laRQlERFJfQlVGX1NJWkVfTE4yCisKKyNkZWZpbmUgQk1VMl9NQ0FTVF9BTExPQ19DVFJMCUJNVTJfQkFTRV9BRERSICsgQk1VX01DQVNUX0FMTE9DX0NUUkwKKworI2VuZGlmIC8qIF9CTVVfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvY2xhc3NfY3NyLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2J1cy9jbGFzc19jc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE1MWVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvY2xhc3NfY3NyLmgKQEAgLTAsMCArMSwyMDYgQEAKKyNpZm5kZWYgX0NMQVNTX0NTUl9IXworI2RlZmluZSBfQ0xBU1NfQ1NSX0hfCisKKy8qKiBAZmlsZSBjbGFzc19jc3IuaC4KKyAqIGNsYXNzX2NzciAtIGJsb2NrIGNvbnRhaW5pbmcgYWxsIHRoZSBjbGFzc2lmaWVyIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3Rlci4gTWFwcGVkIG9uIENCVVMgYW5kIGFjY2Vzc2libGUgZnJvbSBhbGwgUEUncyBhbmQgQVJNLgorICovCisKKworI2RlZmluZSBDTEFTU19WRVJTSU9OCQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDAwMCkKKyNkZWZpbmUgQ0xBU1NfVFhfQ1RSTAkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgwMDQpCisjZGVmaW5lIENMQVNTX0lOUV9QS1RQVFIJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgwMTApCisjZGVmaW5lIENMQVNTX0hEUl9TSVpFCQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDAxNCkJLyoqPCAoZGRyX2hkcl9zaXplWzI0OjE2XSwgbG1lbV9oZHJfc2l6ZVs1OjBdKSAqLworI2RlZmluZSBDTEFTU19IRFJfU0laRV9MTUVNKG9mZikJKChvZmYpICYgMHgzZikJCQkvKio8IExNRU0gaGVhZGVyIHNpemUgZm9yIHRoZSBDbGFzc2lmaWVyIGJsb2NrLlwgRGF0YSBpbiB0aGUgTE1FTSBpcyB3cml0dGVuIGZyb20gdGhpcyBvZmZzZXQuICovCisjZGVmaW5lIENMQVNTX0hEUl9TSVpFX0REUihvZmYpCQkoKChvZmYpICYgMHgxZmYpIDw8IDE2KQkJLyoqPCBERFIgaGVhZGVyIHNpemUgZm9yIHRoZSBDbGFzc2lmaWVyIGJsb2NrLlwgRGF0YSBpbiB0aGUgRERSIGlzIHdyaXR0ZW4gZnJvbSB0aGlzIG9mZnNldC4gKi8KKworI2RlZmluZSBDTEFTU19QRTBfUUJfRE1fQUREUjAJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgwMjApCS8qKjwgRE1FTSBhZGRyZXNzIG9mIGZpcnN0IFsxNTowXSBhbmQgc2Vjb25kIFszMToxNl0gYnVmZmVycyBvbiBRQiBzaWRlLiAqLworI2RlZmluZSBDTEFTU19QRTBfUUJfRE1fQUREUjEJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgwMjQpCS8qKjwgRE1FTSBhZGRyZXNzIG9mIHRoaXJkIFsxNTowXSBhbmQgZm91cnRoIFszMToxNl0gYnVmZmVycyBvbiBRQiBzaWRlLiAqLworCisjZGVmaW5lIENMQVNTX1BFMF9ST19ETV9BRERSMAkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDA2MCkJLyoqPCBETUVNIGFkZHJlc3Mgb2YgZmlyc3QgWzE1OjBdIGFuZCBzZWNvbmQgWzMxOjE2XSBidWZmZXJzIG9uIFJPIHNpZGUuICovCisjZGVmaW5lIENMQVNTX1BFMF9ST19ETV9BRERSMQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDA2NCkJLyoqPCBETUVNIGFkZHJlc3Mgb2YgdGhpcmQgWzE1OjBdIGFuZCBmb3VydGggWzMxOjE2XSBidWZmZXJzIG9uIFJPIHNpZGUuICovCisKKy8qKiBAbmFtZSBDbGFzcyBQRSBtZW1vcnkgYWNjZXNzLiBBbGxvd3MgZXh0ZXJuYWwgUEUncyBhbmQgSE9TVCB0byByZWFkL3dyaXRlIFBNRU0vRE1FTSBtZW1vcnkgcmFuZ2VzIGZvciBlYWNoIGNsYXNzaWZpZXIgUEUuCisgKi8KKy8vQHsKKyNkZWZpbmUgQ0xBU1NfTUVNX0FDQ0VTU19BRERSCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTAwKQkvKio8IHtzcl9wZV9tZW1fY21kWzMxXSwgY3NyX3BlX21lbV93cmVuWzI3OjI0XSwgY3NyX3BlX21lbV9hZGRyWzIzOjBdfSwgU2VlIFxyZWYgWFhYX01FTV9BQ0NFU1NfQUREUiBmb3IgZGV0YWlscy4gKi8gCisjZGVmaW5lIENMQVNTX01FTV9BQ0NFU1NfV0RBVEEJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxMDQpCS8qKjwgSW50ZXJuYWwgTWVtb3J5IEFjY2VzcyBXcml0ZSBEYXRhIFszMTowXSAqLworI2RlZmluZSBDTEFTU19NRU1fQUNDRVNTX1JEQVRBCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTA4KQkvKio8IEludGVybmFsIE1lbW9yeSBBY2Nlc3MgUmVhZCBEYXRhIFszMTowXSAqLworLy9AfQorI2RlZmluZSBDTEFTU19UTV9JTlFfQUREUgkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDExNCkKKyNkZWZpbmUgQ0xBU1NfUEVfU1RBVFVTCQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDExOCkKKworI2RlZmluZSBDTEFTU19QSFkxX1JYX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxMWMpCisjZGVmaW5lIENMQVNTX1BIWTFfVFhfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDEyMCkKKyNkZWZpbmUgQ0xBU1NfUEhZMV9MUF9GQUlMX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxMjQpCisjZGVmaW5lIENMQVNTX1BIWTFfSU5URl9GQUlMX1BLVFMJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDEyOCkKKyNkZWZpbmUgQ0xBU1NfUEhZMV9JTlRGX01BVENIX1BLVFMJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDEyYykKKyNkZWZpbmUgQ0xBU1NfUEhZMV9MM19GQUlMX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxMzApCisjZGVmaW5lIENMQVNTX1BIWTFfVjRfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDEzNCkKKyNkZWZpbmUgQ0xBU1NfUEhZMV9WNl9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTM4KQorI2RlZmluZSBDTEFTU19QSFkxX0NIS1NVTV9FUlJfUEtUUwkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTNjKQorI2RlZmluZSBDTEFTU19QSFkxX1RUTF9FUlJfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDE0MCkKKyNkZWZpbmUgQ0xBU1NfUEhZMl9SWF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTQ0KQorI2RlZmluZSBDTEFTU19QSFkyX1RYX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxNDgpCisjZGVmaW5lIENMQVNTX1BIWTJfTFBfRkFJTF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTRjKQorI2RlZmluZSBDTEFTU19QSFkyX0lOVEZfRkFJTF9QS1RTCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxNTApCisjZGVmaW5lIENMQVNTX1BIWTJfSU5URl9NQVRDSF9QS1RTCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxNTQpCisjZGVmaW5lIENMQVNTX1BIWTJfTDNfRkFJTF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTU4KQorI2RlZmluZSBDTEFTU19QSFkyX1Y0X1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxNWMpCisjZGVmaW5lIENMQVNTX1BIWTJfVjZfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDE2MCkKKyNkZWZpbmUgQ0xBU1NfUEhZMl9DSEtTVU1fRVJSX1BLVFMJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDE2NCkKKyNkZWZpbmUgQ0xBU1NfUEhZMl9UVExfRVJSX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxNjgpCisjZGVmaW5lIENMQVNTX1BIWTNfUlhfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDE2YykKKyNkZWZpbmUgQ0xBU1NfUEhZM19UWF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTcwKQorI2RlZmluZSBDTEFTU19QSFkzX0xQX0ZBSUxfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDE3NCkKKyNkZWZpbmUgQ0xBU1NfUEhZM19JTlRGX0ZBSUxfUEtUUwkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTc4KQorI2RlZmluZSBDTEFTU19QSFkzX0lOVEZfTUFUQ0hfUEtUUwkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTdjKQorI2RlZmluZSBDTEFTU19QSFkzX0wzX0ZBSUxfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDE4MCkKKyNkZWZpbmUgQ0xBU1NfUEhZM19WNF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTg0KQorI2RlZmluZSBDTEFTU19QSFkzX1Y2X1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxODgpCisjZGVmaW5lIENMQVNTX1BIWTNfQ0hLU1VNX0VSUl9QS1RTCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxOGMpCisjZGVmaW5lIENMQVNTX1BIWTNfVFRMX0VSUl9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MTkwKQorI2RlZmluZSBDTEFTU19QSFkxX0lDTVBfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDE5NCkKKyNkZWZpbmUgQ0xBU1NfUEhZMV9JR01QX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxOTgpCisjZGVmaW5lIENMQVNTX1BIWTFfVENQX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxOWMpCisjZGVmaW5lIENMQVNTX1BIWTFfVURQX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxYTApCisjZGVmaW5lIENMQVNTX1BIWTJfSUNNUF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MWE0KQorI2RlZmluZSBDTEFTU19QSFkyX0lHTVBfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDFhOCkKKyNkZWZpbmUgQ0xBU1NfUEhZMl9UQ1BfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDFhYykKKyNkZWZpbmUgQ0xBU1NfUEhZMl9VRFBfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDFiMCkKKyNkZWZpbmUgQ0xBU1NfUEhZM19JQ01QX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxYjQpCisjZGVmaW5lIENMQVNTX1BIWTNfSUdNUF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MWI4KQorI2RlZmluZSBDTEFTU19QSFkzX1RDUF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MWJjKQorI2RlZmluZSBDTEFTU19QSFkzX1VEUF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MWMwKQorI2RlZmluZSBDTEFTU19QSFk0X0lDTVBfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDFjNCkKKyNkZWZpbmUgQ0xBU1NfUEhZNF9JR01QX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxYzgpCisjZGVmaW5lIENMQVNTX1BIWTRfVENQX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxY2MpCisjZGVmaW5lIENMQVNTX1BIWTRfVURQX1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxZDApCisjZGVmaW5lIENMQVNTX1BIWTRfUlhfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDFkNCkKKyNkZWZpbmUgQ0xBU1NfUEhZNF9UWF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MWQ4KQorI2RlZmluZSBDTEFTU19QSFk0X0xQX0ZBSUxfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDFkYykKKyNkZWZpbmUgQ0xBU1NfUEhZNF9JTlRGX0ZBSUxfUEtUUwkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MWUwKQorI2RlZmluZSBDTEFTU19QSFk0X0lOVEZfTUFUQ0hfUEtUUwkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MWU0KQorI2RlZmluZSBDTEFTU19QSFk0X0wzX0ZBSUxfUEtUUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDFlOCkKKyNkZWZpbmUgQ0xBU1NfUEhZNF9WNF9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MWVjKQorI2RlZmluZSBDTEFTU19QSFk0X1Y2X1BLVFMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxZjApCisjZGVmaW5lIENMQVNTX1BIWTRfQ0hLU1VNX0VSUl9QS1RTCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgxZjQpCisjZGVmaW5lIENMQVNTX1BIWTRfVFRMX0VSUl9QS1RTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MWY4KQorCisjZGVmaW5lIENMQVNTX1BFX1NZU19DTEtfUkFUSU8JCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyMDApCisjZGVmaW5lIENMQVNTX0FGVUxMX1RIUkVTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjA0KQorI2RlZmluZSBDTEFTU19HQVBfQkVUV0VFTl9SRUFEUwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDIwOCkKKyNkZWZpbmUgQ0xBU1NfTUFYX0JVRl9DTlQJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyMGMpCisjZGVmaW5lIENMQVNTX1RTUV9GSUZPX1RIUkVTCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjEwKQorI2RlZmluZSBDTEFTU19UU1FfTUFYX0NOVAkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDIxNCkKKyNkZWZpbmUgQ0xBU1NfSVJBTV9EQVRBXzAJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyMTgpCisjZGVmaW5lIENMQVNTX0lSQU1fREFUQV8xCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjFjKQorI2RlZmluZSBDTEFTU19JUkFNX0RBVEFfMgkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDIyMCkKKyNkZWZpbmUgQ0xBU1NfSVJBTV9EQVRBXzMJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyMjQpCisKKyNkZWZpbmUgQ0xBU1NfQlVTX0FDQ0VTU19BRERSCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjI4KQorI2RlZmluZSBDTEFTU19CVVNfQUNDRVNTX0FERFJfTUFTSwkoMHgwMDAxRkZGRikJLy9iaXQgMjM6MCBvZiBQRSBwZXJpcGhlcmFsIGFkZHJlc3MgYXJlIHN0b3JlZCBpbiBDTEFTU19CVVNfQUNDRVNTX0FERFIKKworI2RlZmluZSBDTEFTU19CVVNfQUNDRVNTX1dEQVRBCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjJjKQorI2RlZmluZSBDTEFTU19CVVNfQUNDRVNTX1JEQVRBCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjMwKQorCisjZGVmaW5lIENMQVNTX1JPVVRFX0hBU0hfRU5UUllfU0laRQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjM0KQkJLyoqPCAocm91dGVfZW50cnlfc2l6ZVs5OjBdLCByb3V0ZV9oYXNoX3NpemVbMjM6MTZdICh0aGlzIGlzIGFjdHVhbGx5IGxuMihzaXplKSkpICovCisjZGVmaW5lIENMQVNTX1JPVVRFX0VOVFJZX1NJWkUoc2l6ZSkJICgoc2l6ZSkgJiAweDFmZikKKyNkZWZpbmUgQ0xBU1NfUk9VVEVfSEFTSF9TSVpFKGhhc2hfYml0cykgKCgoaGFzaF9iaXRzKSAmIDB4ZmYpIDw8IDE2KQorCisjZGVmaW5lIENMQVNTX1JPVVRFX1RBQkxFX0JBU0UJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyMzgpCisKKyNkZWZpbmUgQ0xBU1NfUk9VVEVfTVVMVEkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyM2MpCisjZGVmaW5lIENMQVNTX1NNRU1fT0ZGU0VUCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjQwKQorI2RlZmluZSBDTEFTU19MTUVNX0JVRl9TSVpFCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjQ0KQorI2RlZmluZSBDTEFTU19WTEFOX0lECQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI0OCkKKyNkZWZpbmUgQ0xBU1NfQk1VMV9CVUZfRlJFRQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI0YykKKyNkZWZpbmUgQ0xBU1NfVVNFX1RNVV9JTlEJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyNTApCisjZGVmaW5lIENMQVNTX1ZMQU5fSUQxCQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI1NCkKKworI2RlZmluZSBDTEFTU19CVVNfQUNDRVNTX0JBU0UJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyNTgpCisjZGVmaW5lIENMQVNTX0JVU19BQ0NFU1NfQkFTRV9NQVNLCSgweEZGMDAwMDAwKQkvL2JpdCAzMToyNCBvZiBQRSBwZXJpcGhlcmFsIGFkZHJlc3MgYXJlIHN0b3JlZCBpbiBDTEFTU19CVVNfQUNDRVNTX0JBU0UKKworI2RlZmluZSBDTEFTU19ISUZfUEFSU0UJCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjVjKQorCisjZGVmaW5lIENMQVNTX0hPU1RfUEUwX0dQCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjYwKQorI2RlZmluZSBDTEFTU19QRTBfR1AJCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjY0KQorI2RlZmluZSBDTEFTU19IT1NUX1BFMV9HUAkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI2OCkKKyNkZWZpbmUgQ0xBU1NfUEUxX0dQCQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI2YykKKyNkZWZpbmUgQ0xBU1NfSE9TVF9QRTJfR1AJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyNzApCisjZGVmaW5lIENMQVNTX1BFMl9HUAkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyNzQpCisjZGVmaW5lIENMQVNTX0hPU1RfUEUzX0dQCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4Mjc4KQorI2RlZmluZSBDTEFTU19QRTNfR1AJCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjdjKQorI2RlZmluZSBDTEFTU19IT1NUX1BFNF9HUAkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI4MCkKKyNkZWZpbmUgQ0xBU1NfUEU0X0dQCQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI4NCkKKyNkZWZpbmUgQ0xBU1NfSE9TVF9QRTVfR1AJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyODgpCisjZGVmaW5lIENMQVNTX1BFNV9HUAkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyOGMpCisKKyNkZWZpbmUgQ0xBU1NfUEVfSU5UX1NSQwkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI5MCkKKyNkZWZpbmUgQ0xBU1NfUEVfSU5UX0VOQUJMRQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI5NCkKKworI2RlZmluZSBDTEFTU19UUElEMF9UUElEMQkJKENMQVNTX0NTUl9CQVNFX0FERFIgKyAweDI5OCkKKyNkZWZpbmUgQ0xBU1NfVFBJRDIJCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MjljKQorCisjZGVmaW5lIENMQVNTX0w0X0NIS1NVTV9BRERSCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MmEwKQorCisjZGVmaW5lIENMQVNTX1BFMF9ERUJVRwkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyYTQpCisjZGVmaW5lIENMQVNTX1BFMV9ERUJVRwkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyYTgpCisjZGVmaW5lIENMQVNTX1BFMl9ERUJVRwkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyYWMpCisjZGVmaW5lIENMQVNTX1BFM19ERUJVRwkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyYjApCisjZGVmaW5lIENMQVNTX1BFNF9ERUJVRwkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyYjQpCisjZGVmaW5lIENMQVNTX1BFNV9ERUJVRwkJCShDTEFTU19DU1JfQkFTRV9BRERSICsgMHgyYjgpCisKKyNkZWZpbmUgQ0xBU1NfU1RBVEUJCQkoQ0xBU1NfQ1NSX0JBU0VfQUREUiArIDB4MmJjKQorCisvKiBDTEFTUyBkZWZpbmVzICovCisjZGVmaW5lIENMQVNTX1BCVUZfU0laRQkJCTB4MTAwCS8qIEZpeGVkIGJ5IGhhcmR3YXJlICovCisjZGVmaW5lIENMQVNTX1BCVUZfSEVBREVSX09GRlNFVAkweDgwCS8qIENhbiBiZSBjb25maWd1cmVkICovCisKKyNkZWZpbmUgQ0xBU1NfUEJVRjBfQkFTRV9BRERSCQkweDAwMAkJCQkJCS8qIENhbiBiZSBjb25maWd1cmVkICovCisjZGVmaW5lIENMQVNTX1BCVUYxX0JBU0VfQUREUgkJKENMQVNTX1BCVUYwX0JBU0VfQUREUiArIENMQVNTX1BCVUZfU0laRSkJLyogQ2FuIGJlIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUgQ0xBU1NfUEJVRjJfQkFTRV9BRERSCQkoQ0xBU1NfUEJVRjFfQkFTRV9BRERSICsgQ0xBU1NfUEJVRl9TSVpFKQkvKiBDYW4gYmUgY29uZmlndXJlZCAqLworI2RlZmluZSBDTEFTU19QQlVGM19CQVNFX0FERFIJCShDTEFTU19QQlVGMl9CQVNFX0FERFIgKyBDTEFTU19QQlVGX1NJWkUpCS8qIENhbiBiZSBjb25maWd1cmVkICovCisKKyNkZWZpbmUgQ0xBU1NfUEJVRjBfSEVBREVSX0JBU0VfQUREUgkoQ0xBU1NfUEJVRjBfQkFTRV9BRERSICsgQ0xBU1NfUEJVRl9IRUFERVJfT0ZGU0VUKQorI2RlZmluZSBDTEFTU19QQlVGMV9IRUFERVJfQkFTRV9BRERSCShDTEFTU19QQlVGMV9CQVNFX0FERFIgKyBDTEFTU19QQlVGX0hFQURFUl9PRkZTRVQpCisjZGVmaW5lIENMQVNTX1BCVUYyX0hFQURFUl9CQVNFX0FERFIJKENMQVNTX1BCVUYyX0JBU0VfQUREUiArIENMQVNTX1BCVUZfSEVBREVSX09GRlNFVCkKKyNkZWZpbmUgQ0xBU1NfUEJVRjNfSEVBREVSX0JBU0VfQUREUgkoQ0xBU1NfUEJVRjNfQkFTRV9BRERSICsgQ0xBU1NfUEJVRl9IRUFERVJfT0ZGU0VUKQorCisjZGVmaW5lIENMQVNTX1BFMF9ST19ETV9BRERSMF9WQUwJKChDTEFTU19QQlVGMV9CQVNFX0FERFIgPDwgMTYpIHwgQ0xBU1NfUEJVRjBfQkFTRV9BRERSKQorI2RlZmluZSBDTEFTU19QRTBfUk9fRE1fQUREUjFfVkFMCSgoQ0xBU1NfUEJVRjNfQkFTRV9BRERSIDw8IDE2KSB8IENMQVNTX1BCVUYyX0JBU0VfQUREUikKKworI2RlZmluZSBDTEFTU19QRTBfUUJfRE1fQUREUjBfVkFMCSgoQ0xBU1NfUEJVRjFfSEVBREVSX0JBU0VfQUREUiA8PCAxNikgfCBDTEFTU19QQlVGMF9IRUFERVJfQkFTRV9BRERSKQorI2RlZmluZSBDTEFTU19QRTBfUUJfRE1fQUREUjFfVkFMCSgoQ0xBU1NfUEJVRjNfSEVBREVSX0JBU0VfQUREUiA8PCAxNikgfCBDTEFTU19QQlVGMl9IRUFERVJfQkFTRV9BRERSKQorCisjZGVmaW5lIENMQVNTX1JPVVRFX1NJWkUJCTEyOAorI2RlZmluZSBDTEFTU19ST1VURV9IQVNIX0JJVFMJCTIwCisjZGVmaW5lIENMQVNTX1JPVVRFX0hBU0hfTUFTSwkJKCgxIDw8IENMQVNTX1JPVVRFX0hBU0hfQklUUykgLSAxKQorCisjZGVmaW5lCUNMQVNTX1JPVVRFMF9CQVNFX0FERFIJMHg0MDAJCQkJCQkvKiBDYW4gYmUgY29uZmlndXJlZCAqLworI2RlZmluZSBDTEFTU19ST1VURTFfQkFTRV9BRERSCShDTEFTU19ST1VURTBfQkFTRV9BRERSICsgQ0xBU1NfUk9VVEVfU0laRSkJLyogQ2FuIGJlIGNvbmZpZ3VyZWQgKi8KKyNkZWZpbmUgQ0xBU1NfUk9VVEUyX0JBU0VfQUREUgkoQ0xBU1NfUk9VVEUxX0JBU0VfQUREUiArIENMQVNTX1JPVVRFX1NJWkUpCS8qIENhbiBiZSBjb25maWd1cmVkICovCisjZGVmaW5lIENMQVNTX1JPVVRFM19CQVNFX0FERFIJKENMQVNTX1JPVVRFMl9CQVNFX0FERFIgKyBDTEFTU19ST1VURV9TSVpFKQkvKiBDYW4gYmUgY29uZmlndXJlZCAqLworCisjZGVmaW5lIFRXT19MRVZFTF9ST1VURQkJKDEgPDwgMCkKKyNkZWZpbmUgUEhZTk9fSU5fSEFTSAkJKDEgPDwgMSkKKyNkZWZpbmUgSFdfUk9VVEVfRkVUQ0gJCSgxIDw8IDMpCisjZGVmaW5lIEhXX0JSSURHRV9GRVRDSAkJKDEgPDwgNSkKKyNkZWZpbmUgSVBfQUxJR05FRAkJKDEgPDwgNikKKyNkZWZpbmUgQVJDX0hJVF9DSEVDS19FTgkoMSA8PCA3KQorI2RlZmluZSBDTEFTU19UT0UJCSgxIDw8IDExKQorI2RlZmluZSBIQVNIX05PUk1BTAkJKDAgPDwgMTIpCisjZGVmaW5lIEhBU0hfQ1JDX1BPUlQJCSgxIDw8IDEyKQorI2RlZmluZSBIQVNIX0NSQ19JUAkJKDIgPDwgMTIpCisjZGVmaW5lIEhBU0hfQ1JDX1BPUlRfSVAJKDMgPDwgMTIpCisjZGVmaW5lIFFCMkJVU19MRQkJKDEgPDwgMTUpCisKKyNkZWZpbmUJVENQX0NIS1NVTV9EUk9QCQkoMSA8PCAwKQorI2RlZmluZQlVRFBfQ0hLU1VNX0RST1AJCSgxIDw8IDEpCisjZGVmaW5lCUlQVjRfQ0hLU1VNX0RST1AJKDEgPDwgOSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiByb3V0ZV90YWJsZV9iYXNlYWRkcjsKKwl1MzIgcm91dGVfdGFibGVfaGFzaF9iaXRzOworfSBDTEFTU19DRkc7CisKKyNlbmRpZiAvKiBfQ0xBU1NfQ1NSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2J1cy9lbWFjLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2J1cy9lbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMwY2FhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL2VtYWMuaApAQCAtMCwwICsxLDI0NiBAQAorI2lmbmRlZiBfRU1BQ19IXworI2RlZmluZSBfRU1BQ19IXworCisjZGVmaW5lIEVNQUNfTkVUV09SS19DT05UUk9MCQkweDAwMAorI2RlZmluZSBFTUFDX05FVFdPUktfQ09ORklHCQkweDAwNAorI2RlZmluZSBFTUFDX05FVFdPUktfU1RBVFVTCQkweDAwOAorCisjZGVmaW5lIEVNQUNfUEhZX01BTkFHRU1FTlQJCTB4MDM0CisKKyNkZWZpbmUgRU1BQ19TUEVDMV9BRERfQk9UCQkweDA4OAorI2RlZmluZSBFTUFDX1NQRUMxX0FERF9UT1AJCTB4MDhjCisjZGVmaW5lIEVNQUNfU1BFQzJfQUREX0JPVAkJMHgwOTAKKyNkZWZpbmUgRU1BQ19TUEVDMl9BRERfVE9QCQkweDA5NAorI2RlZmluZSBFTUFDX1NQRUMzX0FERF9CT1QJCTB4MDk4CisjZGVmaW5lIEVNQUNfU1BFQzNfQUREX1RPUAkJMHgwOWMKKyNkZWZpbmUgRU1BQ19TUEVDNF9BRERfQk9UCQkweDBhMAorI2RlZmluZSBFTUFDX1NQRUM0X0FERF9UT1AJCTB4MGE0CisKKyNkZWZpbmUgRU1BQ19TUEVDMV9BRERfTUFTS19CT1QJCTB4MGM4CisjZGVmaW5lIEVNQUNfU1BFQzFfQUREX01BU0tfVE9QCQkweDBjYworCisjZGVmaW5lIEVNQUNfT0NUX1RYX0JPVAkJCTB4MTAwCisjZGVmaW5lIEVNQUNfT0NUX1RYX1RPUAkJCTB4MTA0CisjZGVmaW5lIEVNQUNfU1RBVFNfRlJBTUVTX1RYCQkweDEwOAorI2RlZmluZSBFTUFDX0JST0FEQ0FTVF9UWAkJMHgxMEMKKyNkZWZpbmUgRU1BQ19NVUxUSUNBU1RfVFgJCTB4MTEwCisjZGVmaW5lIEVNQUNfU1RBVFNfUEFVU0VfVFgJCTB4MTE0CisjZGVmaW5lIEVNQUNfRlJBTUU2NF9UWAkJCTB4MTE4CisjZGVmaW5lIEVNQUNfRlJBTUU2NV9UWAkJCTB4MTFDCisjZGVmaW5lIEVNQUNfRlJBTUUxMjhfVFgJCTB4MTIwCisjZGVmaW5lIEVNQUNfRlJBTUUyNTZfVFgJCTB4MTI0CisjZGVmaW5lIEVNQUNfRlJBTUU1MTJfVFgJCTB4MTI4CisjZGVmaW5lIEVNQUNfRlJBTUUxMDI0X1RYCQkweDEyQworI2RlZmluZSBFTUFDX0ZSQU1FMTUxOV9UWAkJMHgxMzAKKyNkZWZpbmUgRU1BQ19TVEFUU19UWF9VUlVOCQkweDEzNAorI2RlZmluZSBFTUFDX1NUQVRTX1NJTkdMRV9DT0wJCTB4MTM4CisjZGVmaW5lIEVNQUNfU1RBVFNfTVVMVElfQ09MCQkweDEzQworI2RlZmluZSBFTUFDX1NUQVRTX0VYQ0VTU19DT0wJCTB4MTQwCisjZGVmaW5lIEVNQUNfU1RBVFNfTEFURV9DT0wJCTB4MTQ0CisjZGVmaW5lIEVNQUNfU1RBVFNfREVGX1RYCQkweDE0OAorI2RlZmluZSBFTUFDX1NUQVRTX0NSU19FUlJPUlMJCTB4MTRDCisjZGVmaW5lIEVNQUNfT0NUX1JYX0JPVAkJCTB4MTUwCisjZGVmaW5lIEVNQUNfT0NUX1JYX1RPUAkJCTB4MTU0CisjZGVmaW5lIEVNQUNfU1RBVFNfRlJBTUVTX1JYCQkweDE1OAorI2RlZmluZSBFTUFDX0JST0FEQ0FTVF9SWAkJMHgxNUMKKyNkZWZpbmUgRU1BQ19NVUxUSUNBU1RfUlgJCTB4MTYwCisjZGVmaW5lIEVNQUNfU1RBVFNfUEFVU0VfUlgJCTB4MTY0CisjZGVmaW5lIEVNQUNfRlJBTUU2NF9SWAkJCTB4MTY4CisjZGVmaW5lIEVNQUNfRlJBTUU2NV9SWAkJCTB4MTZDCisjZGVmaW5lIEVNQUNfRlJBTUUxMjhfUlgJCTB4MTcwCisjZGVmaW5lIEVNQUNfRlJBTUUyNTZfUlgJCTB4MTc0CisjZGVmaW5lIEVNQUNfRlJBTUU1MTJfUlgJCTB4MTc4CisjZGVmaW5lIEVNQUNfRlJBTUUxMDI0X1JYCQkweDE3QworI2RlZmluZSBFTUFDX0ZSQU1FMTUxOV9SWAkJMHgxODAKKyNkZWZpbmUgRU1BQ19TVEFUU19VU0laRV9GUkFNRVMJCTB4MTg0CisjZGVmaW5lIEVNQUNfU1RBVFNfRVhDRVNTX0xFTgkJMHgxODgKKyNkZWZpbmUgRU1BQ19TVEFUU19KQUJCRVJTCQkweDE4QworI2RlZmluZSBFTUFDX1NUQVRTX0ZDU19FUlJPUlMJCTB4MTkwCisjZGVmaW5lIEVNQUNfU1RBVFNfTEVOR1RIX0VSUk9SUwkweDE5NAorI2RlZmluZSBFTUFDX1NUQVRTX1JYX1NZTV9FUlIJCTB4MTk4CisjZGVmaW5lIEVNQUNfU1RBVFNfQUxJR05fRVJST1JTCQkweDE5QworI2RlZmluZSBFTUFDX1NUQVRTX1JYX1JFU19FUlIJCTB4MWEwCisjZGVmaW5lIEVNQUNfU1RBVFNfUlhfT1JVTgkJMHgxYTQKKworI2RlZmluZSBFTUFDX1NQRUM1X0FERF9CT1QJCTB4MzAwCisjZGVmaW5lIEVNQUNfU1BFQzVfQUREX1RPUAkJMHgzMDQKKyNkZWZpbmUgRU1BQ19TUEVDNl9BRERfQk9UCQkweDMwOAorI2RlZmluZSBFTUFDX1NQRUM2X0FERF9UT1AJCTB4MzBjCisjZGVmaW5lIEVNQUNfU1BFQzdfQUREX0JPVAkJMHgzMTAKKyNkZWZpbmUgRU1BQ19TUEVDN19BRERfVE9QCQkweDMxNAorI2RlZmluZSBFTUFDX1NQRUM4X0FERF9CT1QJCTB4MzE4CisjZGVmaW5lIEVNQUNfU1BFQzhfQUREX1RPUAkJMHgzMWMKKyNkZWZpbmUgRU1BQ19TUEVDOV9BRERfQk9UCQkweDMyMAorI2RlZmluZSBFTUFDX1NQRUM5X0FERF9UT1AJCTB4MzI0CisjZGVmaW5lIEVNQUNfU1BFQzEwX0FERF9CT1QJCTB4MzI4CisjZGVmaW5lIEVNQUNfU1BFQzEwX0FERF9UT1AJCTB4MzJjCisjZGVmaW5lIEVNQUNfU1BFQzExX0FERF9CT1QJCTB4MzMwCisjZGVmaW5lIEVNQUNfU1BFQzExX0FERF9UT1AJCTB4MzM0CisjZGVmaW5lIEVNQUNfU1BFQzEyX0FERF9CT1QJCTB4MzM4CisjZGVmaW5lIEVNQUNfU1BFQzEyX0FERF9UT1AJCTB4MzNjCisjZGVmaW5lIEVNQUNfU1BFQzEzX0FERF9CT1QJCTB4MzQwCisjZGVmaW5lIEVNQUNfU1BFQzEzX0FERF9UT1AJCTB4MzQ0CisjZGVmaW5lIEVNQUNfU1BFQzE0X0FERF9CT1QJCTB4MzQ4CisjZGVmaW5lIEVNQUNfU1BFQzE0X0FERF9UT1AJCTB4MzRjCisjZGVmaW5lIEVNQUNfU1BFQzE1X0FERF9CT1QJCTB4MzUwCisjZGVmaW5lIEVNQUNfU1BFQzE1X0FERF9UT1AJCTB4MzU0CisjZGVmaW5lIEVNQUNfU1BFQzE2X0FERF9CT1QJCTB4MzU4CisjZGVmaW5lIEVNQUNfU1BFQzE2X0FERF9UT1AJCTB4MzVjCisjZGVmaW5lIEVNQUNfU1BFQzE3X0FERF9CT1QJCTB4MzYwCisjZGVmaW5lIEVNQUNfU1BFQzE3X0FERF9UT1AJCTB4MzY0CisjZGVmaW5lIEVNQUNfU1BFQzE4X0FERF9CT1QJCTB4MzY4CisjZGVmaW5lIEVNQUNfU1BFQzE4X0FERF9UT1AJCTB4MzZjCisjZGVmaW5lIEVNQUNfU1BFQzE5X0FERF9CT1QJCTB4MzcwCisjZGVmaW5lIEVNQUNfU1BFQzE5X0FERF9UT1AJCTB4Mzc0CisjZGVmaW5lIEVNQUNfU1BFQzIwX0FERF9CT1QJCTB4Mzc4CisjZGVmaW5lIEVNQUNfU1BFQzIwX0FERF9UT1AJCTB4MzdjCisjZGVmaW5lIEVNQUNfU1BFQzIxX0FERF9CT1QJCTB4MzgwCisjZGVmaW5lIEVNQUNfU1BFQzIxX0FERF9UT1AJCTB4Mzg0CisjZGVmaW5lIEVNQUNfU1BFQzIyX0FERF9CT1QJCTB4Mzg4CisjZGVmaW5lIEVNQUNfU1BFQzIyX0FERF9UT1AJCTB4MzhjCisjZGVmaW5lIEVNQUNfU1BFQzIzX0FERF9CT1QJCTB4MzkwCisjZGVmaW5lIEVNQUNfU1BFQzIzX0FERF9UT1AJCTB4Mzk0CisjZGVmaW5lIEVNQUNfU1BFQzI0X0FERF9CT1QJCTB4Mzk4CisjZGVmaW5lIEVNQUNfU1BFQzI0X0FERF9UT1AJCTB4MzljCisjZGVmaW5lIEVNQUNfU1BFQzI1X0FERF9CT1QJCTB4M2EwCisjZGVmaW5lIEVNQUNfU1BFQzI1X0FERF9UT1AJCTB4M2E0CisjZGVmaW5lIEVNQUNfU1BFQzI2X0FERF9CT1QJCTB4M2E4CisjZGVmaW5lIEVNQUNfU1BFQzI2X0FERF9UT1AJCTB4M2FjCisjZGVmaW5lIEVNQUNfU1BFQzI3X0FERF9CT1QJCTB4M2IwCisjZGVmaW5lIEVNQUNfU1BFQzI3X0FERF9UT1AJCTB4M2I0CisjZGVmaW5lIEVNQUNfU1BFQzI4X0FERF9CT1QJCTB4M2I4CisjZGVmaW5lIEVNQUNfU1BFQzI4X0FERF9UT1AJCTB4M2JjCisjZGVmaW5lIEVNQUNfU1BFQzI5X0FERF9CT1QJCTB4M2MwCisjZGVmaW5lIEVNQUNfU1BFQzI5X0FERF9UT1AJCTB4M2M0CisjZGVmaW5lIEVNQUNfU1BFQzMwX0FERF9CT1QJCTB4M2M4CisjZGVmaW5lIEVNQUNfU1BFQzMwX0FERF9UT1AJCTB4M2NjCisjZGVmaW5lIEVNQUNfU1BFQzMxX0FERF9CT1QJCTB4M2QwCisjZGVmaW5lIEVNQUNfU1BFQzMxX0FERF9UT1AJCTB4M2Q0CisjZGVmaW5lIEVNQUNfU1BFQzMyX0FERF9CT1QJCTB4M2Q4CisjZGVmaW5lIEVNQUNfU1BFQzMyX0FERF9UT1AJCTB4M2RjCisKKyNkZWZpbmUgRU1BQ19DT05UUk9MCQkJMHg3YTAKKworCisvKiBHRU1BQyBkZWZpbml0aW9ucyBhbmQgc2V0dGluZ3MgKi8KKworI2RlZmluZSBFTUFDX1BPUlRfMAkJCTAKKyNkZWZpbmUgRU1BQ19QT1JUXzEJCQkxCisjZGVmaW5lIEVNQUNfUE9SVF8yCQkJMgorCisvKiBUaGUgcG9zc2libGUgb3BlcmF0aW5nIHNwZWVkcyBvZiB0aGUgTUFDLCBjdXJyZW50bHkgc3VwcG9ydGluZyAxMCwgMTAwIGFuZAorICogMTAwME1iIG1vZGVzLgorICovCit0eXBlZGVmIGVudW0ge1NQRUVEXzEwTSwgU1BFRURfMTAwTSwgU1BFRURfMTAwME0sIFNQRUVEXzEwMDBNX1BDU30gTUFDX1NQRUVEOworCisjZGVmaW5lIEdNSUkJMQorI2RlZmluZSBNSUkJMgorI2RlZmluZSBSTUlJCTMKKyNkZWZpbmUgUkdNSUkJNAorI2RlZmluZSBTR01JSQk1CisKKyNkZWZpbmUgRFVQTEVYX0hBTEYJMHgwMAorI2RlZmluZSBEVVBMRVhfRlVMTAkweDAxCisKKy8qIEVNQUNfTkVUV09SS19DT05UUk9MIGJpdHMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBFTUFDX1JYX0VOQUJMRQkJCSgxIDw8IDIpCisjZGVmaW5lIEVNQUNfVFhfRU5BQkxFCQkJKDEgPDwgMykKKyNkZWZpbmUgRU1BQ19NRElPX0VOICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorCisKKy8qIEVNQUNfTkVUV09SS19DT05GSUcgYml0cyBkZWZpbml0aW9uICovCisjZGVmaW5lIEVNQUNfU1BFRURfMTAwCQkoMSA8PCAwKQorI2RlZmluZSBFTUFDX0hBTEZfRFVQCQkoMCA8PCAxKQorI2RlZmluZSBFTUFDX0ZVTExfRFVQCQkoMSA8PCAxKQorI2RlZmluZSBFTUFDX0RVUExFWF9NQVNLCSgxIDw8IDEpCisjZGVmaW5lIEVNQUNfRU5BQkxFX0pVTUJPX0ZSQU1FICgxIDw8IDMpCisjZGVmaW5lIEVNQUNfRU5BQkxFX0NPUFlfQUxMCSgxIDw8IDQpCQorI2RlZmluZSBFTUFDX05PX0JST0FEQ0FTVAkoMSA8PCA1KQorI2RlZmluZSBFTUFDX0VOQUJMRV9NVUxUSUNBU1QJKDEgPDwgNikKKyNkZWZpbmUgRU1BQ19FTkFCTEVfVU5JQ0FTVAkoMSA8PCA3KQorI2RlZmluZSBFTUFDX0VOQUJMRV8xNTM2X1JYCSgxIDw8IDgpCisjZGVmaW5lIEVNQUNfU1BFRURfMTAwMAkJKDEgPDwgMTApCisjZGVmaW5lIEVNQUNfUENTX0VOQUJMRQkJKDEgPDwgMTEpCisjZGVmaW5lIEVNQUNfRU5BQkxFX1BBVVNFX1JYCSgxIDw8IDEzKQorI2RlZmluZSBFTUFDX1JFTU9WRV9GQ1MJCSgxIDw8IDE3KQorI2RlZmluZSBFTUFDX0VOQUJMRV9DSEtTVU1fUlgJKDEgPDwgMjQpCisjZGVmaW5lIEVNQUNfRU5BQkxFX0ZDU19SWAkoMSA8PCAyNikKKyNkZWZpbmUgRU1BQ19TR01JSV9NT0RFX0VOQUJMRQkoMSA8PCAyNykKKyNkZWZpbmUgRU1BQ19EQVRBX0JVU19XSURUSF9TSElGVAkyMQorI2RlZmluZSBFTUFDX0RBVEFfQlVTX1dJRFRIX01BU0sgKDB4MyA8PCBFTUFDX0RBVEFfQlVTX1dJRFRIX1NISUZUKQorI2RlZmluZSBFTUFDX0RBVEFfQlVTX1dJRFRIXzMyCSgweDAwIDw8IEVNQUNfREFUQV9CVVNfV0lEVEhfU0hJRlQpCisjZGVmaW5lIEVNQUNfREFUQV9CVVNfV0lEVEhfNjQJKDB4MDEgPDwgRU1BQ19EQVRBX0JVU19XSURUSF9TSElGVCkKKyNkZWZpbmUgRU1BQ19EQVRBX0JVU19XSURUSF8xMjgJKDB4MTAgPDwgRU1BQ19EQVRBX0JVU19XSURUSF9TSElGVCkKKworI2RlZmluZSBFTUFDX1NQRUVEX01BU0sJCShFTUFDX1NQRUVEXzEwMCB8IEVNQUNfU1BFRURfMTAwMCkKKworLyogRU1BQ19DT05UUk9MIGJpdHMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBFTUFDX1RXT19CWVRFU19JUF9BTElHTgkJKDEgPDwgMCkgLy8gdHdvIGJ5dGVzIElQIGFsaWduZW1lbnQKKworLy9STUlJIGVuYWJsZSDigJMgYml0IDEgLyBSR01JSSBlbmFibGUg4oCTIGJpdCAyCisjZGVmaW5lIEVNQUNfUk1JSV9NT0RFX0VOQUJMRQkJKCgxIDw8IDEpIHwgKDAgPDwgMikpCisjZGVmaW5lIEVNQUNfUk1JSV9NT0RFX0RJU0FCTEUJCSgwIDw8IDEpCisjZGVmaW5lIEVNQUNfUkdNSUlfTU9ERV9FTkFCTEUJCSgoMCA8PCAxKSB8ICgxIDw8IDIpKQorI2RlZmluZSBFTUFDX1JHTUlJX01PREVfRElTQUJMRQkJKDAgPDwgMikKKyNkZWZpbmUgRU1BQ19NSUlfTU9ERV9FTkFCTEUJCShFTUFDX1JNSUlfTU9ERV9ESVNBQkxFIHwgRU1BQ19SR01JSV9NT0RFX0RJU0FCTEUpCisjZGVmaW5lIEVNQUNfR01JSV9NT0RFX0VOQUJMRQkJKEVNQUNfUk1JSV9NT0RFX0RJU0FCTEUgfCBFTUFDX1JHTUlJX01PREVfRElTQUJMRSkKKyNkZWZpbmUgRU1BQ19NT0RFX01BU0sJCQkoMHgzIDw8IDEpCisKKy8qIERlZmF1bHQgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBFTUFDMF9ERUZBVUxUX0RVUExFWF9NT0RFCUZVTExEVVBMRVggCisjZGVmaW5lIEVNQUMwX0RFRkFVTFRfRU1BQ19NT0RFCQlSR01JSSAgICAgIAorI2RlZmluZSBFTUFDMF9ERUZBVUxUX0VNQUNfU1BFRUQJU1BFRURfMTAwME0gICAKKworI2RlZmluZSBFTUFDMV9ERUZBVUxUX0RVUExFWF9NT0RFCUZVTExEVVBMRVggCisjZGVmaW5lIEVNQUMxX0RFRkFVTFRfRU1BQ19NT0RFCQlSR01JSSAgICAgIAorI2RlZmluZSBFTUFDMV9ERUZBVUxUX0VNQUNfU1BFRUQJU1BFRURfMTAwME0gICAKKworI2RlZmluZSBFTUFDMl9ERUZBVUxUX0RVUExFWF9NT0RFCUZVTExEVVBMRVggCisjZGVmaW5lIEVNQUMyX0RFRkFVTFRfRU1BQ19NT0RFCQlSR01JSSAgICAgIAorI2RlZmluZSBFTUFDMl9ERUZBVUxUX0VNQUNfU1BFRUQJU1BFRURfMTAwME0gICAKKworLyogVGhlIHBvc3NpYmxlIE1EQyBjbG9jayBkaXZpc2lvbiBvZiB0aGUgTUFDLCBjdXJyZW50bHkgc3VwcG9ydGluZyA4LCAxNiAsIDMyLAorICogNDgsIDY0LCA5NiwgMTI4LCAyMjQuCisgKi8KK3R5cGVkZWYgZW51bSB7IE1EQ19ESVZfOCwgTURDX0RJVl8xNiwgTURDX0RJVl8zMiwgTURDX0RJVl80OCwgTURDX0RJVl82NCwKKyAgICAgICAgTURDX0RJVl85NiwgTURDX0RJVl8xMjgsIE1EQ19ESVZfMjI0Cit9IE1BQ19NRENfRElWOworCisjZGVmaW5lIE1EQ19ESVZfTUFTSyAgICAweDcKKyNkZWZpbmUgTURDX0RJVl9TSElGVCAgIDE4CisKKy8qIFRoZSBBZGRyZXNzIG9yZ2FuaXNhdGlvbiBmb3IgdGhlIE1BQyBkZXZpY2UuICBBbGwgYWRkcmVzc2VzIGFyZSBzcGxpdCBpbnRvCisgKiB0d28gMzItYml0IHJlZ2lzdGVyIGZpZWxkcy4gIFRoZSBmaXJzdCBvbmUgKGJvdHRvbSkgaXMgdGhlIGxvd2VyIDMyLWJpdHMgb2YKKyAqIHRoZSBhZGRyZXNzIGFuZCB0aGUgb3RoZXIgZmllbGQgYXJlIHRoZSBoaWdoIG9yZGVyIGJpdHMgLSB0aGlzIG1heSBiZSAxNi1iaXRzCisgKiBpbiB0aGUgY2FzZSBvZiBNQUMgYWRkcmVzc2VzLCBvciAzMi1iaXRzIGZvciB0aGUgaGFzaCBhZGRyZXNzLgorICogSW4gdGVybXMgb2YgbWVtb3J5IHN0b3JhZ2UsIHRoZSBmaXJzdCBpdGVtIChib3R0b20pIGlzIGFzc3VtZWQgdG8gYmUgYXQgYQorICogbG93ZXIgYWRkcmVzcyBsb2NhdGlvbiB0aGFuICd0b3AnLiBpLmUuIHRvcCBzaG91bGQgYmUgYXQgYWRkcmVzcyBsb2NhdGlvbiBvZgorICogJ2JvdHRvbScgKyA0IGJ5dGVzLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIGJvdHRvbTsgICAgIC8qIExvd2VyIDMyLWJpdHMgb2YgYWRkcmVzcy4gKi8KKwl1MzIgdG9wOyAgICAgICAgLyogVXBwZXIgMzItYml0cyBvZiBhZGRyZXNzLiAqLworfSBNQUNfQUREUjsKKworCisvKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBvcmdhbmlzYXRpb24gb2YgdGhlIGFkZHJlc3MgZmlsdGVycyBzZWN0aW9uIG9mIHRoZSBNQUMKKyAqIHJlZ2lzdGVycy4gIFRoZSBDYWRlbmNlIE1BQyBjb250YWlucyBmb3VyIHBvc3NpYmxlIHNwZWNpZmljIGFkZHJlc3MgbWF0Y2gKKyAqIGFkZHJlc3NlcywgaWYgYW4gaW5jb21pbmcgZnJhbWUgY29ycmVzcG9uZHMgdG8gYW55IG9uZSBvZiB0aGVzZSBmb3VyCisgKiBhZGRyZXNzZXMgdGhlbiB0aGUgZnJhbWUgd2lsbCBiZSBjb3BpZWQgdG8gbWVtb3J5LgorICogSXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgYWxsIGZvdXIgb2YgdGhlIGFkZHJlc3MgbWF0Y2ggcmVnaXN0ZXJzIHRvIGJlCisgKiBwcm9ncmFtbWVkLCB0aGlzIGlzIGFwcGxpY2F0aW9uIGRlcGVuZGFudC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCU1BQ19BRERSIG9uZTsgICAgICAgIC8qIFNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXIgMS4gKi8KKwlNQUNfQUREUiB0d287ICAgICAgICAvKiBTcGVjaWZpYyBhZGRyZXNzIHJlZ2lzdGVyIDIuICovCisJTUFDX0FERFIgdGhyZWU7ICAgICAgLyogU3BlY2lmaWMgYWRkcmVzcyByZWdpc3RlciAzLiAqLworCU1BQ19BRERSIGZvdXI7ICAgICAgIC8qIFNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXIgNC4gKi8KK30gU1BFQ19BRERSOworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIG1vZGU7IAorCXUzMiBzcGVlZDsKKwl1MzIgZHVwbGV4OworfSBHRU1BQ19DRkc7CisKKyNlbmRpZiAvKiBfRU1BQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvZ3BpLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2J1cy9ncGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTdkYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvZ3BpLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBfR1BJX0hfCisjZGVmaW5lIF9HUElfSF8KKworI2RlZmluZSBHUElfVkVSU0lPTgkJCTB4MDAKKyNkZWZpbmUgR1BJX0NUUkwJCQkweDA0CisjZGVmaW5lIEdQSV9SWF9DT05GSUcJCQkweDA4CisjZGVmaW5lIEdQSV9IRFJfU0laRQkJCTB4MGMKKyNkZWZpbmUgR1BJX0JVRl9TSVpFCQkJMHgxMAorI2RlZmluZSBHUElfTE1FTV9BTExPQ19BRERSCQkweDE0CisjZGVmaW5lIEdQSV9MTUVNX0ZSRUVfQUREUgkJMHgxOAorI2RlZmluZSBHUElfRERSX0FMTE9DX0FERFIJCTB4MWMKKyNkZWZpbmUgR1BJX0REUl9GUkVFX0FERFIJCTB4MjAKKyNkZWZpbmUgR1BJX0NMQVNTX0FERFIJCQkweDI0CisjZGVmaW5lIEdQSV9EUlhfRklGTwkJCTB4MjgKKyNkZWZpbmUgR1BJX1RSWF9GSUZPCQkJMHgyYworI2RlZmluZSBHUElfSU5RX1BLVFBUUgkJCTB4MzAKKyNkZWZpbmUgR1BJX0REUl9EQVRBX09GRlNFVAkJMHgzNAorI2RlZmluZSBHUElfTE1FTV9EQVRBX09GRlNFVAkJMHgzOAorI2RlZmluZSBHUElfVE1MRl9UWAkJCTB4NGMKKyNkZWZpbmUgR1BJX0RUWF9BU0VRCQkJMHg1MAorI2RlZmluZSBHUElfRklGT19TVEFUVVNfQUREUgkJMHg1NAorI2RlZmluZSBHUElfRklGT19ERUJVRwkJCTB4NTgKKyNkZWZpbmUgR1BJX1RYX1BBVVNFX1RJTUUJCTB4NWMKKyNkZWZpbmUgR1BJX0xNRU1fU0VDX0JVRl9EQVRBX09GRlNFVAkweDYwCisjZGVmaW5lIEdQSV9ERFJfU0VDX0JVRl9EQVRBX09GRlNFVAkweDY0CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgbG1lbV9ydHJ5X2NudDsKKwl1MzIgdG1sZl90eHRocmVzOworCXUzMiBhc2VxX2xlbjsKK30gR1BJX0NGRzsKKworCisvKiBHUEkgY29tbW9ucyBkZWZpbmVzICovIAorI2RlZmluZSBHUElfTE1FTV9CVUZfRU4JCTB4MQorI2RlZmluZSBHUElfRERSX0JVRl9FTgkJMHgxCisKKy8qIEVHUEkgMSBkZWZpbmVzICovIAorI2RlZmluZSBFR1BJMV9MTUVNX1JUUllfQ05UCTB4NDAKKyNkZWZpbmUgRUdQSTFfVE1MRl9UWFRIUkVTCTB4QkMKKyNkZWZpbmUgRUdQSTFfQVNFUV9MRU4JCTB4NTAKKworLyogRUdQSSAyIGRlZmluZXMgKi8gCisjZGVmaW5lIEVHUEkyX0xNRU1fUlRSWV9DTlQJMHg0MAorI2RlZmluZSBFR1BJMl9UTUxGX1RYVEhSRVMJMHhCQworI2RlZmluZSBFR1BJMl9BU0VRX0xFTgkJMHg0MAorCisvKiBFR1BJIDMgZGVmaW5lcyAqLyAKKyNkZWZpbmUgRUdQSTNfTE1FTV9SVFJZX0NOVAkweDQwCisjZGVmaW5lIEVHUEkzX1RNTEZfVFhUSFJFUwkweEJDCisjZGVmaW5lIEVHUEkzX0FTRVFfTEVOCQkweDQwCisKKy8qIEhHUEkgZGVmaW5lcyAqLyAKKyNkZWZpbmUgSEdQSV9MTUVNX1JUUllfQ05UCTB4NDAKKyNkZWZpbmUgSEdQSV9UTUxGX1RYVEhSRVMJMHhCQworI2RlZmluZSBIR1BJX0FTRVFfTEVOCQkweDQwCisKKyNlbmRpZiAvKiBfR1BJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2J1cy9ncHQuaCBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL2dwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YzExNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2J1cy9ncHQuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9DQlVTX0dQVF9IXworI2RlZmluZSBfQ0JVU19HUFRfSF8KKworI2RlZmluZSBDQlVTX0dQVF9WRVJTSU9OCSAoQ0JVU19HUFRfQkFTRV9BRERSICsgMHgwMCkKKyNkZWZpbmUgQ0JVU19HUFRfU1RBVFVTCQkgKENCVVNfR1BUX0JBU0VfQUREUiArIDB4MDQpCisjZGVmaW5lIENCVVNfR1BUX0NPTkZJRwkJIChDQlVTX0dQVF9CQVNFX0FERFIgKyAweDA4KQorI2RlZmluZSBDQlVTX0dQVF9DT1VOVEVSCSAoQ0JVU19HUFRfQkFTRV9BRERSICsgMHgwYykKKyNkZWZpbmUgQ0JVU19HUFRfUEVSSU9ECQkgKENCVVNfR1BUX0JBU0VfQUREUiArIDB4MTApCisjZGVmaW5lIENCVVNfR1BUX1dJRFRICQkgKENCVVNfR1BUX0JBU0VfQUREUiArIDB4MTQpCisKKyNlbmRpZiAvKiBfQ0JVU19HUFRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL2hpZi5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvaGlmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkZDdjMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL2hpZi5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgX0hJRl9IXworI2RlZmluZSBfSElGX0hfCisKKy8qKiBAZmlsZSBoaWYuaC4KKyAqIGhpZiAtIFBGRSBoaWYgYmxvY2sgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyLiBNYXBwZWQgb24gQ0JVUyBhbmQgYWNjZXNzaWJsZSBmcm9tIGFsbCBQRSdzIGFuZCBBUk0uCisgKi8KKyNkZWZpbmUgSElGX1ZFUlNJT04JCShISUZfQkFTRV9BRERSICsgMHgwMCkKKyNkZWZpbmUgSElGX1RYX0NUUkwJCShISUZfQkFTRV9BRERSICsgMHgwNCkKKyNkZWZpbmUgSElGX1RYX0NVUlJfQkRfQUREUgkoSElGX0JBU0VfQUREUiArIDB4MDgpCisjZGVmaW5lIEhJRl9UWF9BTExPQwkJKEhJRl9CQVNFX0FERFIgKyAweDBjKQorI2RlZmluZSBISUZfVFhfQkRQX0FERFIJCShISUZfQkFTRV9BRERSICsgMHgxMCkKKyNkZWZpbmUgSElGX1RYX1NUQVRVUwkJKEhJRl9CQVNFX0FERFIgKyAweDE0KQorI2RlZmluZSBISUZfUlhfQ1RSTAkJKEhJRl9CQVNFX0FERFIgKyAweDIwKQorI2RlZmluZSBISUZfUlhfQkRQX0FERFIJCShISUZfQkFTRV9BRERSICsgMHgyNCkKKyNkZWZpbmUgSElGX1JYX1NUQVRVUwkJKEhJRl9CQVNFX0FERFIgKyAweDMwKQorI2RlZmluZSBISUZfSU5UX1NSQwkJKEhJRl9CQVNFX0FERFIgKyAweDM0KQorI2RlZmluZSBISUZfSU5UX0VOQUJMRQkJKEhJRl9CQVNFX0FERFIgKyAweDM4KQorI2RlZmluZSBISUZfUE9MTF9DVFJMCQkoSElGX0JBU0VfQUREUiArIDB4M2MpCisjZGVmaW5lIEhJRl9SWF9DVVJSX0JEX0FERFIJKEhJRl9CQVNFX0FERFIgKyAweDQwKQorI2RlZmluZSBISUZfUlhfQUxMT0MJCShISUZfQkFTRV9BRERSICsgMHg0NCkKKyNkZWZpbmUgSElGX1RYX0RNQV9TVEFUVVMJKEhJRl9CQVNFX0FERFIgKyAweDQ4KQorI2RlZmluZSBISUZfUlhfRE1BX1NUQVRVUwkoSElGX0JBU0VfQUREUiArIDB4NGMpCisjZGVmaW5lIEhJRl9JTlRfQ09BTAkJKEhJRl9CQVNFX0FERFIgKyAweDUwKQorCisvKkhJRl9JTlRfU1JDLyBISUZfSU5UX0VOQUJMRSBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgSElGX0lOVCAgICAgICAgCQkoMSA8PCAwKQorI2RlZmluZSBISUZfUlhCRF9JTlQgICAJCSgxIDw8IDEpCisjZGVmaW5lIEhJRl9SWFBLVF9JTlQgIAkJKDEgPDwgMikKKyNkZWZpbmUgSElGX1RYQkRfSU5UICAgCQkoMSA8PCAzKQorI2RlZmluZSBISUZfVFhQS1RfSU5UICAJCSgxIDw8IDQpCisKKy8qSElGX1RYX0NUUkwgYml0cyAqLworI2RlZmluZSBISUZfQ1RSTF9ETUFfRU4JCQkoMTw8MCkKKyNkZWZpbmUgSElGX0NUUkxfQkRQX1BPTExfQ1RSTF9FTgkoMTw8MSkKKyNkZWZpbmUgSElGX0NUUkxfQkRQX0NIX1NUQVJUX1dTVEIJKDE8PDIpCisKKy8qSElGX0lOVF9FTkFCTEUgYml0cyAqLworI2RlZmluZSBISUZfSU5UX0VOCQkoMSA8PCAwKQorI2RlZmluZSBISUZfUlhCRF9JTlRfRU4JCSgxIDw8IDEpCisjZGVmaW5lIEhJRl9SWFBLVF9JTlRfRU4JKDEgPDwgMikKKyNkZWZpbmUgSElGX1RYQkRfSU5UX0VOCQkoMSA8PCAzKQorI2RlZmluZSBISUZfVFhQS1RfSU5UX0VOCSgxIDw8IDQpCisKKy8qSElGX1BPTExfQ1RSTCBiaXRzKi8KKyNkZWZpbmUgSElGX1JYX1BPTExfQ1RSTF9DWUNMRQkweDA0MDAKKyNkZWZpbmUgSElGX1RYX1BPTExfQ1RSTF9DWUNMRQkweDA0MDAKKworLypCdWZmZXIgZGVzY3JpcHRvciBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgQkRfQ1RSTF9CVUZMRU5fTUFTSwkoMHhmZmZmKQorI2RlZmluZSBCRF9CVUZfTEVOKHgpCQkoeCAmIEJEX0NUUkxfQlVGTEVOX01BU0spCisjZGVmaW5lIEJEX0NUUkxfQ0JEX0lOVF9FTgkoMSA8PCAxNikKKyNkZWZpbmUgQkRfQ1RSTF9QS1RfSU5UX0VOCSgxIDw8IDE3KQorI2RlZmluZSBCRF9DVFJMX0xJRk0JCSgxIDw8IDE4KQorI2RlZmluZSBCRF9DVFJMX0xBU1RfQkQJCSgxIDw8IDE5KQorI2RlZmluZSBCRF9DVFJMX0RJUgkJKDEgPDwgMjApCisjZGVmaW5lIEJEX0NUUkxfUEtUX1hGRVIJKDEgPDwgMjQpCisjZGVmaW5lIEJEX0NUUkxfREVTQ19FTgkJKDEgPDwgMzEpCisjZGVmaW5lIEJEX0NUUkxfUEFSU0VfRElTQUJMRQkoMSA8PCAyNSkKKyNkZWZpbmUgQkRfQ1RSTF9CUkZFVENIX0RJU0FCTEUJKDEgPDwgMjYpCisjZGVmaW5lIEJEX0NUUkxfUlRGRVRDSF9ESVNBQkxFCSgxIDw8IDI3KQorCisjZW5kaWYgLyogX0hJRl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvaGlmX25vY3B5LmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2J1cy9oaWZfbm9jcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2NiOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvaGlmX25vY3B5LmgKQEAgLTAsMCArMSwzMyBAQAorI2lmbmRlZiBfSElGX05PQ1BZX0hfCisjZGVmaW5lIF9ISUZfTk9DUFlfSF8KKworI2RlZmluZSBISUZfTk9DUFlfVkVSU0lPTgkJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDAwKQorI2RlZmluZSBISUZfTk9DUFlfVFhfQ1RSTAkJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDA0KQorI2RlZmluZSBISUZfTk9DUFlfVFhfQ1VSUl9CRF9BRERSCShISUZfTk9DUFlfQkFTRV9BRERSICsgMHgwOCkKKyNkZWZpbmUgSElGX05PQ1BZX1RYX0FMTE9DCQkoSElGX05PQ1BZX0JBU0VfQUREUiArIDB4MGMpCisjZGVmaW5lIEhJRl9OT0NQWV9UWF9CRFBfQUREUgkJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDEwKQorI2RlZmluZSBISUZfTk9DUFlfVFhfU1RBVFVTCQkoSElGX05PQ1BZX0JBU0VfQUREUiArIDB4MTQpCisjZGVmaW5lIEhJRl9OT0NQWV9SWF9DVFJMCQkoSElGX05PQ1BZX0JBU0VfQUREUiArIDB4MjApCisjZGVmaW5lIEhJRl9OT0NQWV9SWF9CRFBfQUREUgkJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDI0KQorI2RlZmluZSBISUZfTk9DUFlfUlhfU1RBVFVTCQkoSElGX05PQ1BZX0JBU0VfQUREUiArIDB4MzApCisjZGVmaW5lIEhJRl9OT0NQWV9JTlRfU1JDCQkoSElGX05PQ1BZX0JBU0VfQUREUiArIDB4MzQpCisjZGVmaW5lIEhJRl9OT0NQWV9JTlRfRU5BQkxFCQkoSElGX05PQ1BZX0JBU0VfQUREUiArIDB4MzgpCisjZGVmaW5lIEhJRl9OT0NQWV9QT0xMX0NUUkwJCShISUZfTk9DUFlfQkFTRV9BRERSICsgMHgzYykKKyNkZWZpbmUgSElGX05PQ1BZX1JYX0NVUlJfQkRfQUREUgkoSElGX05PQ1BZX0JBU0VfQUREUiArIDB4NDApCisjZGVmaW5lIEhJRl9OT0NQWV9SWF9BTExPQwkJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDQ0KQorI2RlZmluZSBISUZfTk9DUFlfVFhfRE1BX1NUQVRVUwkJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDQ4KQorI2RlZmluZSBISUZfTk9DUFlfUlhfRE1BX1NUQVRVUwkJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDRjKQorI2RlZmluZSBISUZfTk9DUFlfUlhfSU5RMF9QS1RQVFIJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDUwKQorI2RlZmluZSBISUZfTk9DUFlfUlhfSU5RMV9QS1RQVFIJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDU0KQorI2RlZmluZSBISUZfTk9DUFlfVFhfUE9SVF9OTwkJKEhJRl9OT0NQWV9CQVNFX0FERFIgKyAweDYwKQorI2RlZmluZSBISUZfTk9DUFlfTE1FTV9BTExPQ19BRERSCShISUZfTk9DUFlfQkFTRV9BRERSICsgMHg2NCkKKyNkZWZpbmUgSElGX05PQ1BZX0NMQVNTX0FERFIJCShISUZfTk9DUFlfQkFTRV9BRERSICsgMHg2OCkKKyNkZWZpbmUgSElGX05PQ1BZX1RNVV9QT1JUMF9BRERSCShISUZfTk9DUFlfQkFTRV9BRERSICsgMHg3MCkKKyNkZWZpbmUgSElGX05PQ1BZX1RNVV9QT1JUMV9BRERSCShISUZfTk9DUFlfQkFTRV9BRERSICsgMHg3NCkKKyNkZWZpbmUgSElGX05PQ1BZX1RNVV9QT1JUMl9BRERSCShISUZfTk9DUFlfQkFTRV9BRERSICsgMHg3YykKKyNkZWZpbmUgSElGX05PQ1BZX1RNVV9QT1JUM19BRERSCShISUZfTk9DUFlfQkFTRV9BRERSICsgMHg4MCkKKyNkZWZpbmUgSElGX05PQ1BZX1RNVV9QT1JUNF9BRERSCShISUZfTk9DUFlfQkFTRV9BRERSICsgMHg4NCkKKyNkZWZpbmUgSElGX05PQ1BZX0lOVF9DT0FMCQkoSElGX05PQ1BZX0JBU0VfQUREUiArIDB4OTApCisKKworI2VuZGlmIC8qIF9ISUZfTk9DUFlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL3RtdV9jc3IuaCBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL3RtdV9jc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDFkN2JlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvdG11X2Nzci5oCkBAIC0wLDAgKzEsOTMgQEAKKyNpZm5kZWYgX1RNVV9DU1JfSF8KKyNkZWZpbmUgX1RNVV9DU1JfSF8KKworI2RlZmluZSBUTVVfVkVSU0lPTgkJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDAwKQorI2RlZmluZSBUTVVfSU5RX1dBVEVSTUFSSwkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwMDQpCisjZGVmaW5lIFRNVV9QSFlfSU5RX1BLVFBUUgkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwMDgpCisjZGVmaW5lIFRNVV9QSFlfSU5RX1BLVElORk8JCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDBjKQorI2RlZmluZSBUTVVfUEhZX0lOUV9GSUZPX0NOVAkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwMTApCisjZGVmaW5lIFRNVV9TWVNfR0VORVJJQ19DT05UUk9MCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDAxNCkKKyNkZWZpbmUgVE1VX1NZU19HRU5FUklDX1NUQVRVUwkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwMTgpCisjZGVmaW5lIFRNVV9TWVNfR0VOX0NPTjAJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDFjKQorI2RlZmluZSBUTVVfU1lTX0dFTl9DT04xCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDAyMCkKKyNkZWZpbmUgVE1VX1NZU19HRU5fQ09OMgkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwMjQpCisjZGVmaW5lIFRNVV9TWVNfR0VOX0NPTjMJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDI4KQorI2RlZmluZSBUTVVfU1lTX0dFTl9DT040CQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDAyYykKKyNkZWZpbmUgVE1VX1RFUV9ESVNBQkxFX0RST1BDSEsJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDMwKQorI2RlZmluZSBUTVVfVEVRX0NUUkwJCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDAzNCkKKyNkZWZpbmUgVE1VX1RFUV9RQ0ZHCQkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwMzgpCisjZGVmaW5lIFRNVV9URVFfUUNVUgkJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDNjKQorI2RlZmluZSBUTVVfVEVRX1FBVkcJCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDA0MCkKKyNkZWZpbmUgVE1VX1RFUV9XUkVHX1BST0IJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDQ0KQorI2RlZmluZSBUTVVfVEVRX1FBVkdfV0dUCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDA0OCkKKyNkZWZpbmUgVE1VX1RFUV9IV19QUk9CX0NGRzAJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDRjKQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMQkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwNTApCisjZGVmaW5lIFRNVV9URVFfSFdfUFJPQl9DRkcyCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDA1NCkKKyNkZWZpbmUgVE1VX1RFUV9IV19QUk9CX0NGRzMJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDU4KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHNAkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwNWMpCisjZGVmaW5lIFRNVV9URVFfSFdfUFJPQl9DRkc1CQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDA2MCkKKyNkZWZpbmUgVE1VX1RFUV9IV19QUk9CX0NGRzYJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDY0KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHNwkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwNjgpCisjZGVmaW5lIFRNVV9URVFfSFdfUFJPQl9DRkc4CQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDA2YykKKyNkZWZpbmUgVE1VX1RFUV9IV19QUk9CX0NGRzkJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDcwKQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTAJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDc0KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTEJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDc4KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTIJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDdjKQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTMJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDgwKQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTQJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDg0KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTUJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDg4KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTYJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDhjKQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTcJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDkwKQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTgJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDk0KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMTkJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDk4KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMjAJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MDljKQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMjEJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGEwKQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMjIJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGE0KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMjMJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGE4KQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMjQJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGFjKQorI2RlZmluZSBUTVVfVEVRX0hXX1BST0JfQ0ZHMjUJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGIwKQorI2RlZmluZSBUTVVfVERRX0lJRkdfQ0ZHCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBiNCkKKyNkZWZpbmUgVE1VX1REUTBfU0NIX0NUUkwJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGI4KQkvKio8IFs5OjBdIFNjaGVkdWxlciBFbmFibGUgZm9yIGVhY2ggb2YgdGhlIHNjaGVkdWxlciBpbiB0aGUgVERRLiBUaGlzIGlzIGEgZ2xvYmFsIEVuYWJsZSBmb3IgYWxsIHNjaGVkdWxlcnMgaW4gUEhZMCAqLworI2RlZmluZSBUTVVfTExNX0NUUkwJCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBiYykKKyNkZWZpbmUgVE1VX0xMTV9CQVNFX0FERFIJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGMwKQorI2RlZmluZSBUTVVfTExNX1FVRV9MRU4JCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBjNCkKKyNkZWZpbmUgVE1VX0xMTV9RVUVfSEVBRFBUUgkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwYzgpCisjZGVmaW5lIFRNVV9MTE1fUVVFX1RBSUxQVFIJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGNjKQorI2RlZmluZSBUTVVfTExNX1FVRV9EUk9QQ05UCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBkMCkKKyNkZWZpbmUgVE1VX0lOVF9FTgkJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGQ0KQorI2RlZmluZSBUTVVfSU5UX1NSQwkJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGQ4KQorI2RlZmluZSBUTVVfSU5RX1NUQVQJCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBkYykKKyNkZWZpbmUgVE1VX0NUUkwJCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBlMCkKKworI2RlZmluZSBUTVVfTUVNX0FDQ0VTU19BRERSCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBlNCkJLyoqPCBbMzFdIE1lbSBBY2Nlc3MgQ29tbWFuZC4gMCA9IEludGVybmFsIE1lbW9yeSBSZWFkLCAxID0gSW50ZXJuYWwgbWVtb3J5IFdyaXRlIFsyNzoyNF0gQnl0ZSBFbmFibGVzIG9mIHRoZSBJbnRlcm5hbCBtZW1vcnkgYWNjZXNzIFsyMzowXSBBZGRyZXNzIG9mIHRoZSBpbnRlcm5hbCBtZW1vcnkuIFRoaXMgYWRkcmVzcyBpcyB1c2VkIHRvIGFjY2VzcyBib3RoIHRoZSBQTSBhbmQgRE0gb2YgYWxsIHRoZSBQRSdzICovCisjZGVmaW5lIFRNVV9NRU1fQUNDRVNTX1dEQVRBCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBlOCkJLyoqPCBJbnRlcm5hbCBNZW1vcnkgQWNjZXNzIFdyaXRlIERhdGEgKi8KKyNkZWZpbmUgVE1VX01FTV9BQ0NFU1NfUkRBVEEJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGVjKQkvKio8IEludGVybmFsIE1lbW9yeSBBY2Nlc3MgUmVhZCBEYXRhLiBUaGUgY29tbWFuZHMgYXJlIGJsb2NrZWQgYXQgdGhlIG1lbV9hY2Nlc3Mgb25seSAqLworCisjZGVmaW5lIFRNVV9QSFkwX0lOUV9BRERSCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBmMCkJLyoqPCBbMzE6MF0gUEhZMCBpbiBxdWV1ZSBhZGRyZXNzIChtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggb25lIG9mIHRoZSB4eHhfSU5RX1BLVFBUUiBjYnVzIGFkZHJlc3NlcykgKi8KKyNkZWZpbmUgVE1VX1BIWTFfSU5RX0FERFIJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MGY0KQkvKio8IFszMTowXSBQSFkxIGluIHF1ZXVlIGFkZHJlc3MgKG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBvbmUgb2YgdGhlIHh4eF9JTlFfUEtUUFRSIGNidXMgYWRkcmVzc2VzKSAqLworI2RlZmluZSBUTVVfUEhZMl9JTlFfQUREUgkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgwZjgpCS8qKjwgWzMxOjBdIFBIWTIgaW4gcXVldWUgYWRkcmVzcyAobXVzdCBiZSBpbml0aWFsaXplZCB3aXRoIG9uZSBvZiB0aGUgeHh4X0lOUV9QS1RQVFIgY2J1cyBhZGRyZXNzZXMpICovCisjZGVmaW5lIFRNVV9QSFkzX0lOUV9BRERSCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDBmYykJLyoqPCBbMzE6MF0gUEhZMyBpbiBxdWV1ZSBhZGRyZXNzIChtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggb25lIG9mIHRoZSB4eHhfSU5RX1BLVFBUUiBjYnVzIGFkZHJlc3NlcykgKi8KKyNkZWZpbmUgVE1VX0JNVV9JTlFfQUREUgkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgxMDApCisjZGVmaW5lIFRNVV9UWF9DVFJMCQkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgxMDQpCisKKyNkZWZpbmUgVE1VX0JVU19BQ0NFU1NfV0RBVEEJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MTA4KQorI2RlZmluZSBUTVVfQlVTX0FDQ0VTUwkJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MTBjKQorI2RlZmluZSBUTVVfQlVTX0FDQ0VTU19SREFUQQkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgxMTApCisKKyNkZWZpbmUgVE1VX1BFX1NZU19DTEtfUkFUSU8JCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MTE0KQorI2RlZmluZSBUTVVfUEVfU1RBVFVTCQkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgxMTgpCisjZGVmaW5lIFRNVV9URVFfTUFYX1RIUkVTSE9MRAkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgxMWMpCisjZGVmaW5lIFRNVV9QSFk0X0lOUV9BRERSCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDEzNCkJLyoqPCBbMzE6MF0gUEhZNCBpbiBxdWV1ZSBhZGRyZXNzIChtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggb25lIG9mIHRoZSB4eHhfSU5RX1BLVFBUUiBjYnVzIGFkZHJlc3NlcykgKi8KKyNkZWZpbmUgVE1VX1REUTFfU0NIX0NUUkwJCShUTVVfQ1NSX0JBU0VfQUREUiArIDB4MTM4KQkvKio8IFs5OjBdIFNjaGVkdWxlciBFbmFibGUgZm9yIGVhY2ggb2YgdGhlIHNjaGVkdWxlciBpbiB0aGUgVERRLiBUaGlzIGlzIGEgZ2xvYmFsIEVuYWJsZSBmb3IgYWxsIHNjaGVkdWxlcnMgaW4gUEhZMSAqLworI2RlZmluZSBUTVVfVERRMl9TQ0hfQ1RSTAkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgxM2MpCS8qKjwgWzk6MF0gU2NoZWR1bGVyIEVuYWJsZSBmb3IgZWFjaCBvZiB0aGUgc2NoZWR1bGVyIGluIHRoZSBURFEuIFRoaXMgaXMgYSBnbG9iYWwgRW5hYmxlIGZvciBhbGwgc2NoZWR1bGVycyBpbiBQSFkyICovCisjZGVmaW5lIFRNVV9URFEzX1NDSF9DVFJMCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDE0MCkJLyoqPCBbOTowXSBTY2hlZHVsZXIgRW5hYmxlIGZvciBlYWNoIG9mIHRoZSBzY2hlZHVsZXIgaW4gdGhlIFREUS4gVGhpcyBpcyBhIGdsb2JhbCBFbmFibGUgZm9yIGFsbCBzY2hlZHVsZXJzIGluIFBIWTMgKi8KKyNkZWZpbmUgVE1VX0JNVV9CVUZfU0laRQkJKFRNVV9DU1JfQkFTRV9BRERSICsgMHgxNDQpCisjZGVmaW5lIFRNVV9QSFk1X0lOUV9BRERSCQkoVE1VX0NTUl9CQVNFX0FERFIgKyAweDE0OCkJLyoqPCBbMzE6MF0gUEhZNSBpbiBxdWV1ZSBhZGRyZXNzIChtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggb25lIG9mIHRoZSB4eHhfSU5RX1BLVFBUUiBjYnVzIGFkZHJlc3NlcykgKi8KKworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIGxsbV9iYXNlX2FkZHI7CisJdTMyIGxsbV9xdWV1ZV9sZW47Cit9IFRNVV9DRkc7CisKKyNlbmRpZiAvKiBfVE1VX0NTUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NidXMvdXRpbF9jc3IuaCBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL3V0aWxfY3NyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwZjc3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jYnVzL3V0aWxfY3NyLmgKQEAgLTAsMCArMSw0MiBAQAorI2lmbmRlZiBfVVRJTF9DU1JfSF8KKyNkZWZpbmUgX1VUSUxfQ1NSX0hfCisKKyNkZWZpbmUgVVRJTF9WRVJTSU9OCQkJKFVUSUxfQ1NSX0JBU0VfQUREUiArIDB4MDAwKQorI2RlZmluZSBVVElMX1RYX0NUUkwJCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgwMDQpCisjZGVmaW5lIFVUSUxfSU5RX1BLVFBUUgkJCShVVElMX0NTUl9CQVNFX0FERFIgKyAweDAxMCkKKworI2RlZmluZSBVVElMX0hEUl9TSVpFCQkJKFVUSUxfQ1NSX0JBU0VfQUREUiArIDB4MDE0KQorCisjZGVmaW5lIFVUSUxfUEUwX1FCX0RNX0FERFIwCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgwMjApCisjZGVmaW5lIFVUSUxfUEUwX1FCX0RNX0FERFIxCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgwMjQpCisjZGVmaW5lIFVUSUxfUEUwX1JPX0RNX0FERFIwCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgwNjApCisjZGVmaW5lIFVUSUxfUEUwX1JPX0RNX0FERFIxCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgwNjQpCisKKyNkZWZpbmUgVVRJTF9NRU1fQUNDRVNTX0FERFIJCShVVElMX0NTUl9CQVNFX0FERFIgKyAweDEwMCkKKyNkZWZpbmUgVVRJTF9NRU1fQUNDRVNTX1dEQVRBCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgxMDQpCisjZGVmaW5lIFVUSUxfTUVNX0FDQ0VTU19SREFUQQkJKFVUSUxfQ1NSX0JBU0VfQUREUiArIDB4MTA4KQorCisjZGVmaW5lIFVUSUxfVE1fSU5RX0FERFIJCShVVElMX0NTUl9CQVNFX0FERFIgKyAweDExNCkKKyNkZWZpbmUgVVRJTF9QRV9TVEFUVVMJCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgxMTgpCisKKyNkZWZpbmUgVVRJTF9QRV9TWVNfQ0xLX1JBVElPCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgyMDApCisjZGVmaW5lIFVUSUxfQUZVTExfVEhSRVMJCShVVElMX0NTUl9CQVNFX0FERFIgKyAweDIwNCkKKyNkZWZpbmUgVVRJTF9HQVBfQkVUV0VFTl9SRUFEUwkJKFVUSUxfQ1NSX0JBU0VfQUREUiArIDB4MjA4KQorI2RlZmluZSBVVElMX01BWF9CVUZfQ05UCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgyMGMpCisjZGVmaW5lIFVUSUxfVFNRX0ZJRk9fVEhSRVMJCShVVElMX0NTUl9CQVNFX0FERFIgKyAweDIxMCkKKyNkZWZpbmUgVVRJTF9UU1FfTUFYX0NOVAkJKFVUSUxfQ1NSX0JBU0VfQUREUiArIDB4MjE0KQorI2RlZmluZSBVVElMX0lSQU1fREFUQV8wCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgyMTgpCisjZGVmaW5lIFVUSUxfSVJBTV9EQVRBXzEJCShVVElMX0NTUl9CQVNFX0FERFIgKyAweDIxYykKKyNkZWZpbmUgVVRJTF9JUkFNX0RBVEFfMgkJKFVUSUxfQ1NSX0JBU0VfQUREUiArIDB4MjIwKQorI2RlZmluZSBVVElMX0lSQU1fREFUQV8zCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgyMjQpCisKKyNkZWZpbmUgVVRJTF9CVVNfQUNDRVNTX0FERFIJCShVVElMX0NTUl9CQVNFX0FERFIgKyAweDIyOCkKKyNkZWZpbmUgVVRJTF9CVVNfQUNDRVNTX1dEQVRBCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgyMmMpCisjZGVmaW5lIFVUSUxfQlVTX0FDQ0VTU19SREFUQQkJKFVUSUxfQ1NSX0JBU0VfQUREUiArIDB4MjMwKQorCisjZGVmaW5lIFVUSUxfSU5RX0FGVUxMX1RIUkVTCQkoVVRJTF9DU1JfQkFTRV9BRERSICsgMHgyMzQpCisKK3R5cGVkZWYgc3RydWN0IHsKK30gVVRJTF9DRkc7CisKKyNlbmRpZiAvKiBfVVRJTF9DU1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jbGFzcy5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NsYXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNhZDgyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jbGFzcy5oCkBAIC0wLDAgKzEsMTQyIEBACisjaWZuZGVmIF9DTEFTU19IXworI2RlZmluZSBfQ0xBU1NfSF8KKworI2RlZmluZSBDTEFTU19ETUVNX0JBU0VfQUREUgkweDAwMDAwMDAwCisjZGVmaW5lIENMQVNTX0RNRU1fU0laRQkJMHgyMDAwCisjZGVmaW5lIENMQVNTX0RNRU1fRU5ECQkoQ0xBU1NfRE1FTV9CQVNFX0FERFIgKyBDTEFTU19ETUVNX1NJWkUpCisjZGVmaW5lIENMQVNTX1BNRU1fQkFTRV9BRERSCTB4MDAwMTAwMDAKKworI2RlZmluZSBDQlVTX0JBU0VfQUREUgkJMHhjMDAwMDAwMAorI2RlZmluZSBDTEFTU19BUEJfQkFTRV9BRERSCTB4YzEwMDAwMDAKKyNkZWZpbmUgQ0xBU1NfQUhCMV9CQVNFX0FERFIJMHhjMjAwMDAwMAorI2RlZmluZSBDTEFTU19BSEIyX0JBU0VfQUREUgkweGMzMDAwMDAwCisKKyNpbmNsdWRlICJjYnVzLmgiCisKKyNkZWZpbmUgR1BUX0JBU0VfQUREUgkJKENMQVNTX0FQQl9CQVNFX0FERFIgKyAweDAwMDAwKQorI2RlZmluZSBVQVJUX0JBU0VfQUREUgkJKENMQVNTX0FQQl9CQVNFX0FERFIgKyAweDEwMDAwKQorI2RlZmluZSBQRVJHX0JBU0VfQUREUgkJKENMQVNTX0FQQl9CQVNFX0FERFIgKyAweDIwMDAwKQorI2RlZmluZSBFRkVUX0JBU0VfQUREUgkJKENMQVNTX0FQQl9CQVNFX0FERFIgKyAweDQwMDAwKQorCisjZGVmaW5lIE1BQ19IQVNIX0JBU0VfQUREUgkoQ0xBU1NfQUhCMV9CQVNFX0FERFIgKyAweDMwMDAwKQorI2RlZmluZSBWTEFOX0hBU0hfQkFTRV9BRERSCShDTEFTU19BSEIxX0JBU0VfQUREUiArIDB4NTAwMDApCisKKyNkZWZpbmUgUEVfTE1FTV9CQVNFX0FERFIJKENMQVNTX0FIQjJfQkFTRV9BRERSICsgMHgxMDAwMCkKKyNkZWZpbmUgUEVfTE1FTV9TSVpFCQkweDgwMDAKKyNkZWZpbmUgUEVfTE1FTV9FTkQJCShQRV9MTUVNX0JBU0VfQUREUiArIFBFX0xNRU1fU0laRSkKKyNkZWZpbmUgQ0NVX0JBU0VfQUREUgkJKENMQVNTX0FIQjJfQkFTRV9BRERSICsgMHgyMDAwMCkKKworI2RlZmluZSBJU19ETUVNKGFkZHIsIGxlbikJKCgodW5zaWduZWQgbG9uZykoYWRkcikgPj0gQ0xBU1NfRE1FTV9CQVNFX0FERFIpICYmICgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpICsgKGxlbikpIDw9IENMQVNTX0RNRU1fRU5EKSkKKyNkZWZpbmUgSVNfUEVfTE1FTShhZGRyLCBsZW4pCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpID49IFBFX0xNRU1fQkFTRV9BRERSKSAmJiAoKCh1bnNpZ25lZCBsb25nKShhZGRyKSArIChsZW4pKSA8PSBQRV9MTUVNX0VORCkpCisKKworI2luY2x1ZGUgImdwdC5oIgorI2luY2x1ZGUgInVhcnQuaCIKKyNpbmNsdWRlICJjbGFzcy9wZXJnLmgiCisjaW5jbHVkZSAiY2xhc3MvZWZldC5oIgorI2luY2x1ZGUgImNsYXNzL21hY19oYXNoLmgiCisjaW5jbHVkZSAiY2xhc3Mvdmxhbl9oYXNoLmgiCisjaW5jbHVkZSAiY2xhc3MvY2N1LmgiCisKKworI2RlZmluZSBDTEFTU19NQVhfUEJVRkZFUlMJNAorCisjZGVmaW5lIFBCVUZfSFdQQVJTRV9PRkZTRVQJMHgxMAkvKiBGaXhlZCBieSBoYXJkd2FyZSAqLworCisjZGVmaW5lIFBBWUxPQURfRE1FTV9NQVhfU0laRQkoQ0xBU1NfUEJVRl9TSVpFIC0gQ0xBU1NfUEJVRl9IRUFERVJfT0ZGU0VUIC0gc2l6ZW9mKGNsYXNzX3J4X2hkcl90KSkKKworI2RlZmluZSBQSFlQT1JUXzAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgUEhZUE9SVF8xICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIEhPU1RfUE9SVF9OTwkJMHgzCisKKyNkZWZpbmUgICBBQ1RfU1JDX01BQ19SRVBMQUNFIAkoMSA8PCAoNCswKSkKKyNkZWZpbmUgICBBQ1RfVkxBTl9SRVBMQUNFCQkoMSA8PCAoNCszKSkKKyNkZWZpbmUgICBBQ1RfVENQQ0hLU1VNX1JFUExBQ0UJKDEgPDwgKDQrMikpCisjZGVmaW5lICAgQUNUX1ZMQU5fQURECQkJKDEgPDwgKDQrMSkpCisKKyNkZWZpbmUgTUlOX1BLVF9TSVpFCQk1NgorCisjZGVmaW5lIFBBUlNFX0VUSF9UWVBFCQkoMSA8PCAwKQorI2RlZmluZSBQQVJTRV9WTEFOX1RZUEUJCSgxIDw8IDEpCisjZGVmaW5lIFBBUlNFX1BQUE9FX1RZUEUJKDEgPDwgMikKKyNkZWZpbmUgUEFSU0VfQVJQX1RZUEUJCSgxIDw8IDMpCisjZGVmaW5lIFBBUlNFX01DQVNUX1RZUEUJKDEgPDwgNCkKKyNkZWZpbmUgUEFSU0VfSVBfVFlQRQkJKDEgPDwgNSkKKyNkZWZpbmUgUEFSU0VfSVBWNl9UWVBFCQkoMSA8PCA2KQorI2RlZmluZSBQQVJTRV9JUFY0X1RZUEUJCSgxIDw8IDcpCisKKyNkZWZpbmUgUEFSU0VfSVBYX1RZUEUJCSgxIDw8IDkpCisKKyNkZWZpbmUgUEFSU0VfVURQX0ZMT1cJCSgxIDw8IDExKQorI2RlZmluZSBQQVJTRV9UQ1BfRkxPVwkJKDEgPDwgMTIpCisjZGVmaW5lIFBBUlNFX0lDTVBfRkxPVwkJKDEgPDwgMTMpCisjZGVmaW5lIFBBUlNFX0lHTVBfRkxPVwkJKDEgPDwgMTQpCisjZGVmaW5lIFBBUlNFX0ZSQUdfRkxPVwkJKDEgPDwgMTUpCisKKyNkZWZpbmUgUEFSU0VfSElGX1BLVAkJKDEgPDwgMjMpCisjZGVmaW5lIFBBUlNFX0FSQ19ISVQJCSgxIDw8IDI0KQorI2RlZmluZSBQQVJTRV9QS1RfT1ZFUkZMT1cJKDEgPDwgMjUpCisKKyNkZWZpbmUgUEFSU0VfUFJPVE9fTUlTTUFUQ0gJKDEgPDwgMjgpCisjZGVmaW5lIFBBUlNFX0wzX01JU01BVENICSgxIDw8IDI5KQorI2RlZmluZSBQQVJTRV9MMl9NSVNNQVRDSAkoMSA8PCAzMCkKKyNkZWZpbmUgUEFSU0VfSU5DT01QTEVURQkoMSA8PCAzMSkKKworCit0eXBlZGVmIHN0cnVjdCBfaHdwYXJzZV90IHsKKwl1MTYJc2lkOworCXUxNgljb25uaWQ7CisJdTgJdG9ldmVjOworCXU4CXBMYXllcjJIZHI7CisJdTgJcExheWVyM0hkcjsKKwl1OAlwTGF5ZXI0SGRyOworCXUxNgl2bGFuaWQ7CisJdTE2CWlmUGFyc2VGbGFnczsKKwl1MzIJcGFyc2VGbGFnczsKKwl1MTYJc3JjcG9ydDsKKwl1MTYJZHN0cG9ydDsKKwl1MzIJcHJvdG86ODsKKwl1MzIJcG9ydDo0OworCXUzMgloYXNoOjIwOworCXU2NAlydGVfcmVzX3ZhbGlkOjE7CisJdTY0CXZsYW5fcmVzX3ZhbGlkOjE7CisJdTY0CWRzdF9yZXNfdmFsaWQ6MTsKKwl1NjQJc3JjX3Jlc192YWxpZDoxOworCXU2NAl2bGFuX2xvb2t1cDoyMDsKKwl1NjQJZHN0X2xvb2t1cDoyMDsKKwl1NjQJc3JjX2xvb2t1cDoyMDsKK30gaHdwYXJzZV90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIJbmV4dF9wdHI7CS8qIHB0ciB0byB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IEREUiBidWZmZXIgKi8KKwl1MTYJbGVuZ3RoOwkJLyogdG90YWwgcGFja2V0IGxlbmd0aCAqLworCXUxNglwaHlubzsJCS8qIGlucHV0IHBoeXNpY2FsIHBvcnQgbnVtYmVyICovCisJdTMyCXN0YXR1czsJCS8qIGdlbWFjIHN0YXR1cyBiaXRzICovCisJdTMyCXJlczsJCS8qIHJlc2VydmVkIGZvciBzb2Z0d2FyZSB1c2FnZSAqLworfSBjbGFzc19yeF9oZHJfdDsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdTgJbnVtX2NweTsJLyogbm8gb2YgY29waWVzIHRvIHNlbmQgb3V0IGZyb20gUk8gYmxvY2ssIGZvciBlYWNoIHRoZXJlIG11c3QgYmUgYSBjb3JyZXNwb25kaW5nIHR4IHByZS1oZWFkZXIgKi8KKwl1OAlkbWFfbGVuOwkvKiBsZW4gdG8gYmUgRE1BZWQgdG8gRERSIG1lbSwgaW5jbHVkaW5nIGFsbCB0eCBwcmUtaGVhZGVycyAqLworCXUxNglzcmNfYWRkcjsJLyogY2xhc3MgZG1lbSBzb3VyY2UgYWRkcmVzcywgcG9pbnRpbmcgdG8gZmlyc3QgdHggcHJlLWhlYWRlciAqLworCXUzMglkc3RfYWRkcjsJLyogRERSIG1lbW9yeSBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIGZpcnN0IHR4IHByZS1oZWFkZXIsIG11c3QgYmUgc28gcGFja2V0IGRhdGEgaXMgY29udGludW91cyBpbiBERFIgKi8KKwl1MzIJcmVzMTsJCS8qIHJlc2VydmVkIGZvciBzb2Z0d2FyZSB1c2FnZSAtIHF1ZXVlIG51bWJlcj8gKi8KKwl1MTYJcmVzMjsJCS8qIHJlc2VydmVkIGZvciBzb2Z0d2FyZSB1c2FnZSAqLworCXUxNgl0c3Y7CQkvKiB0aW1lIHN0YW1wIHZhbCAqLworfSBjbGFzc190eF9kZXNjX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXU4CXN0YXJ0X2RhdGFfb2ZmOwkJLyogcGFja2V0IGRhdGEgc3RhcnQgb2Zmc2V0LCByZWxhdGl2ZSB0byBzdGFydCBvZiB0aGlzIHR4IHByZS1oZWFkZXIgKi8KKwl1OAlzdGFydF9idWZfb2ZmOwkJLyogdGhpcyB0eCBwcmUtaGVhZGVyIHN0YXJ0IG9mZnNldCwgcmVsYXRpdmUgdG8gc3RhcnQgb2YgRERSIGJ1ZmZlciAqLworCXUxNglwa3RfbGVuZ3RoOwkJLyogdG90YWwgcGFja2V0IGxlbmdodCAqLworCXU4CWFjdF9waHlubzsJCS8qIGFjdGlvbiBwaHkgbnVtYmVyICovCisJdTgJcXVldWVubzsJCS8qIHF1ZXVlbm8gKi8KKwl1MTYJc3JjX21hY19tc2I7CQkvKiBpbmRpY2F0ZXMgc3JjX21hYyA0NzozMiAqLworCXUzMglzcmNfbWFjX2xzYjsJCS8qIGluZGljYXRlcyBzcmNfbWFjIDMxOjAgKi8KKwl1MzIJdmxhbmlkOwkJCS8qIHZsYW5pZCAqLworfSBjbGFzc190eF9oZHJfdDsKKworI2VuZGlmIC8qIF9DTEFTU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NsYXNzL2NjdS5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NsYXNzL2NjdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDNkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2xhc3MvY2N1LmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfQ0NVX0hfCisjZGVmaW5lIF9DQ1VfSF8KKworI2RlZmluZSBDQ1VfQUREUgkoQ0NVX0JBU0VfQUREUiArIDB4MDApCisjZGVmaW5lIENDVV9DTlQJCShDQ1VfQkFTRV9BRERSICsgMHgwNCkKKyNkZWZpbmUgQ0NVX1NUQVRVUwkoQ0NVX0JBU0VfQUREUiArIDB4MDgpCisjZGVmaW5lIENDVV9WQUwJCShDQ1VfQkFTRV9BRERSICsgMHgwYykKKworI2VuZGlmIC8qIF9DQ1VfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NsYXNzL2VmZXQuaCBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jbGFzcy9lZmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYzY2MyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jbGFzcy9lZmV0LmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfQ0xBU1NfRUZFVF9IXworI2RlZmluZSBfQ0xBU1NfRUZFVF9IXworCisjZGVmaW5lIENMQVNTX0VGRVRfRU5UUllfQUREUgkJKEVGRVRfQkFTRV9BRERSICsgMHgwMCkKKyNkZWZpbmUgQ0xBU1NfRUZFVF9FTlRSWV9TSVpFCQkoRUZFVF9CQVNFX0FERFIgKyAweDA0KQorI2RlZmluZSBDTEFTU19FRkVUX0VOVFJZX0RNRU1fQUREUgkoRUZFVF9CQVNFX0FERFIgKyAweDA4KQorI2RlZmluZSBDTEFTU19FRkVUX0VOVFJZX1NUQVRVUwkJKEVGRVRfQkFTRV9BRERSICsgMHgwYykKKyNkZWZpbmUgQ0xBU1NfRUZFVF9FTlRSWV9FTkRJQU4JCShFRkVUX0JBU0VfQUREUiArIDB4MTApCisKKyNkZWZpbmUgQ0JVUzJETUVNCTAKKyNkZWZpbmUgRE1FTTJDQlVTCTEKKworI2RlZmluZSBFRkVUMkJVU19MRSAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUEUyQlVTX0xFCSgxIDw8IDEpCisKK3ZvaWQgY2xhc3NfZWZldCh1MzIgY2J1c19hZGRyLCB1MzIgZG1lbV9hZGRyLCB1MzIgbGVuLCB1MzIgZGlyKTsKK3ZvaWQgY2xhc3NfZWZldF93YWl0KHZvaWQpOwordm9pZCBjbGFzc19lZmV0X3N5bmModTMyIGNidXNfYWRkciwgdTMyIGRtZW1fYWRkciwgdTMyIGxlbiwgdTMyIGRpcik7CisKKyNlbmRpZiAvKiBfQ0xBU1NfRUZFVF9IXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2xhc3MvbWFjX2hhc2guaCBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jbGFzcy9tYWNfaGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDIzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2xhc3MvbWFjX2hhc2guaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9NQUNfSEFTSF9IXworI2RlZmluZSBfTUFDX0hBU0hfSF8KKworI2RlZmluZSBNQUNfSEFTSF9SRVExX0JBU0VfQUREUgkJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MDAwKQorI2RlZmluZSBNQUNfSEFTSF9SRVEyX0JBU0VfQUREUgkJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MDIwKQorI2RlZmluZSBNQUNfSEFTSF9SRVEzX0JBU0VfQUREUgkJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MDQwKQorI2RlZmluZSBNQUNfSEFTSF9SRVE0X0JBU0VfQUREUgkJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MDYwKQorI2RlZmluZSBNQUNfSEFTSF9SRVE1X0JBU0VfQUREUgkJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MDgwKQorI2RlZmluZSBNQUNfSEFTSF9SRVE2X0JBU0VfQUREUgkJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MGEwKQorI2RlZmluZSBNQUNfSEFTSF9SRVE3X0JBU0VfQUREUgkJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MGMwKQorI2RlZmluZSBNQUNfSEFTSF9SRVE4X0JBU0VfQUREUgkJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MGUwKQorCisjZGVmaW5lIE1BQ19IQVNIX1JFUV9DTUQoaSkJCShNQUNfSEFTSF9SRVEjI2kjI19CQVNFX0FERFIgKyAweDAwMCkKKyNkZWZpbmUgTUFDX0hBU0hfUkVRX01BQzFfQUREUihpKQkoTUFDX0hBU0hfUkVRIyNpIyNfQkFTRV9BRERSICsgMHgwMDQpCisjZGVmaW5lIE1BQ19IQVNIX1JFUV9NQUMyX0FERFIoaSkJKE1BQ19IQVNIX1JFUSMjaSMjX0JBU0VfQUREUiArIDB4MDA4KQorI2RlZmluZSBNQUNfSEFTSF9SRVFfTUFTSzFfQUREUihpKQkoTUFDX0hBU0hfUkVRIyNpIyNfQkFTRV9BRERSICsgMHgwMGMpCisjZGVmaW5lIE1BQ19IQVNIX1JFUV9NQVNLMl9BRERSKGkpCShNQUNfSEFTSF9SRVEjI2kjI19CQVNFX0FERFIgKyAweDAxMCkKKyNkZWZpbmUgTUFDX0hBU0hfUkVRX0VOVFJZKGkpCQkoTUFDX0hBU0hfUkVRIyNpIyNfQkFTRV9BRERSICsgMHgwMTQpCisjZGVmaW5lIE1BQ19IQVNIX1JFUV9TVEFUVVMoaSkJCShNQUNfSEFTSF9SRVEjI2kjI19CQVNFX0FERFIgKyAweDAxOCkKKyNkZWZpbmUgTUFDX0hBU0hfUkVRX0VOVFJZX01BWUNIKGkpCShNQUNfSEFTSF9SRVEjI2kjI19CQVNFX0FERFIgKyAweDAxYykKKworCisjZGVmaW5lIE1BQ19IQVNIX0ZSRUVMSVNUX1BUUl9IRUFECShNQUNfSEFTSF9CQVNFX0FERFIgKyAweDEwMCkKKyNkZWZpbmUgTUFDX0hBU0hfRlJFRUxJU1RfUFRSX1RBSUwJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MTA0KQorI2RlZmluZSBNQUNfSEFTSF9GUkVFTElTVF9FTlRSSUVTX0FERFIJKE1BQ19IQVNIX0JBU0VfQUREUiArIDB4MTA4KQorCisjZW5kaWYgLyogX01BQ19IQVNIX0hfICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jbGFzcy9wZXJnLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2xhc3MvcGVyZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOTcxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvY2xhc3MvcGVyZy5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX1BFUkdfSF8KKyNkZWZpbmUgX1BFUkdfSF8KKworI2RlZmluZSBQRVJHX1FCX0JVRl9TVEFUVVMJCShQRVJHX0JBU0VfQUREUiArIDB4MDApCisjZGVmaW5lIFBFUkdfUk9fQlVGX1NUQVRVUwkJKFBFUkdfQkFTRV9BRERSICsgMHgwNCkKKyNkZWZpbmUgUEVSR19DTFJfUUJfQlVGX1NUQVRVUwkJKFBFUkdfQkFTRV9BRERSICsgMHgwOCkKKyNkZWZpbmUgUEVSR19TRVRfUk9fQlVGX1NUQVRVUwkJKFBFUkdfQkFTRV9BRERSICsgMHgwYykKKyNkZWZpbmUgUEVSR19DTFJfUk9fRVJSX1BLVAkJKFBFUkdfQkFTRV9BRERSICsgMHgxMCkKKyNkZWZpbmUgUEVSR19DTFJfQk1VMl9FUlJfUEtUCQkoUEVSR19CQVNFX0FERFIgKyAweDE0KQorCisjZGVmaW5lIFBFUkdfSUQJCQkJKFBFUkdfQkFTRV9BRERSICsgMHgxOCkKKyNkZWZpbmUgUEVSR19USU1FUjEJCQkoUEVSR19CQVNFX0FERFIgKyAweDFjKQorI2RlZmluZSBQRVJHX1RJTUVSMgkJCShQRVJHX0JBU0VfQUREUiArIDB4MjApCisjZGVmaW5lIFBFUkdfQlVGMQkJCShQRVJHX0JBU0VfQUREUiArIDB4MjQpCisjZGVmaW5lIFBFUkdfQlVGMgkJCShQRVJHX0JBU0VfQUREUiArIDB4MjgpCisjZGVmaW5lIFBFUkdfSE9TVF9HUAkJCShQRVJHX0JBU0VfQUREUiArIDB4MmMpCisjZGVmaW5lIFBFUkdfUEVfR1AJCQkoUEVSR19CQVNFX0FERFIgKyAweDMwKQorI2RlZmluZSBQRVJHX0lOVF9FTkFCTEUJCQkoUEVSR19CQVNFX0FERFIgKyAweDM0KQorI2RlZmluZSBQRVJHX0lOVF9TUkMJCQkoUEVSR19CQVNFX0FERFIgKyAweDM4KQorCisjZW5kaWYgLyogX1BFUkdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jbGFzcy92bGFuX2hhc2guaCBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9jbGFzcy92bGFuX2hhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTRhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2NsYXNzL3ZsYW5faGFzaC5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX1ZMQU5fSEFTSF9IXworI2RlZmluZSBfVkxBTl9IQVNIX0hfCisKKyNkZWZpbmUgVkxBTl9IQVNIX1JFUTFfQkFTRV9BRERSCShWTEFOX0hBU0hfQkFTRV9BRERSICsgMHgwMDApCisjZGVmaW5lIFZMQU5fSEFTSF9SRVEyX0JBU0VfQUREUgkoVkxBTl9IQVNIX0JBU0VfQUREUiArIDB4MDIwKQorI2RlZmluZSBWTEFOX0hBU0hfUkVRM19CQVNFX0FERFIJKFZMQU5fSEFTSF9CQVNFX0FERFIgKyAweDA0MCkKKyNkZWZpbmUgVkxBTl9IQVNIX1JFUTRfQkFTRV9BRERSCShWTEFOX0hBU0hfQkFTRV9BRERSICsgMHgwNjApCisjZGVmaW5lIFZMQU5fSEFTSF9SRVE1X0JBU0VfQUREUgkoVkxBTl9IQVNIX0JBU0VfQUREUiArIDB4MDgwKQorI2RlZmluZSBWTEFOX0hBU0hfUkVRNl9CQVNFX0FERFIJKFZMQU5fSEFTSF9CQVNFX0FERFIgKyAweDBhMCkKKyNkZWZpbmUgVkxBTl9IQVNIX1JFUTdfQkFTRV9BRERSCShWTEFOX0hBU0hfQkFTRV9BRERSICsgMHgwYzApCisjZGVmaW5lIFZMQU5fSEFTSF9SRVE4X0JBU0VfQUREUgkoVkxBTl9IQVNIX0JBU0VfQUREUiArIDB4MGUwKQorCisjZGVmaW5lIFZMQU5fSEFTSF9SRVFfQ01EKGkpCQkoVkxBTl9IQVNIX1JFUSMjaSMjX0JBU0VfQUREUiArIDB4MDAwKQorI2RlZmluZSBWTEFOX0hBU0hfUkVRX01BQzFfQUREUihpKQkoVkxBTl9IQVNIX1JFUSMjaSMjX0JBU0VfQUREUiArIDB4MDA0KQorI2RlZmluZSBWTEFOX0hBU0hfUkVRX01BQzJfQUREUihpKQkoVkxBTl9IQVNIX1JFUSMjaSMjX0JBU0VfQUREUiArIDB4MDA4KQorI2RlZmluZSBWTEFOX0hBU0hfUkVRX01BU0sxX0FERFIoaSkJKFZMQU5fSEFTSF9SRVEjI2kjI19CQVNFX0FERFIgKyAweDAwYykKKyNkZWZpbmUgVkxBTl9IQVNIX1JFUV9NQVNLMl9BRERSKGkpCShWTEFOX0hBU0hfUkVRIyNpIyNfQkFTRV9BRERSICsgMHgwMTApCisjZGVmaW5lIFZMQU5fSEFTSF9SRVFfRU5UUlkoaSkJCShWTEFOX0hBU0hfUkVRIyNpIyNfQkFTRV9BRERSICsgMHgwMTQpCisjZGVmaW5lIFZMQU5fSEFTSF9SRVFfU1RBVFVTKGkpCQkoVkxBTl9IQVNIX1JFUSMjaSMjX0JBU0VfQUREUiArIDB4MDE4KQorI2RlZmluZSBWTEFOX0hBU0hfUkVRX0VOVFJZX01BWUNIKGkpCShWTEFOX0hBU0hfUkVRIyNpIyNfQkFTRV9BRERSICsgMHgwMWMpCisKKworI2RlZmluZSBWTEFOX0hBU0hfRlJFRUxJU1RfUFRSX0hFQUQJKFZMQU5fSEFTSF9CQVNFX0FERFIgKyAweDEwMCkKKyNkZWZpbmUgVkxBTl9IQVNIX0ZSRUVMSVNUX1BUUl9UQUlMCShWTEFOX0hBU0hfQkFTRV9BRERSICsgMHgxMDQpCisjZGVmaW5lIFZMQU5fSEFTSF9GUkVFTElTVF9FTlRSSUVTX0FERFIJKFZMQU5fSEFTSF9CQVNFX0FERFIgKyAweDEwOCkKKworI2VuZGlmIC8qIF9WTEFOX0hBU0hfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2dwdC5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL2dwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MjAyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvZ3B0LmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfR1BUX0hfCisjZGVmaW5lIF9HUFRfSF8KKworI2RlZmluZSBHUFRfVkVSU0lPTgkJIChHUFRfQkFTRV9BRERSICsgMHgwMCkKKyNkZWZpbmUgR1BUX1NUQVRVUwkJIChHUFRfQkFTRV9BRERSICsgMHgwNCkKKyNkZWZpbmUgR1BUX0NPTkZJRwkJIChHUFRfQkFTRV9BRERSICsgMHgwOCkKKyNkZWZpbmUgR1BUX0NPVU5URVIJCSAoR1BUX0JBU0VfQUREUiArIDB4MGMpCisjZGVmaW5lIEdQVF9QRVJJT0QJCSAoR1BUX0JBU0VfQUREUiArIDB4MTApCisjZGVmaW5lIEdQVF9XSURUSAkJIChHUFRfQkFTRV9BRERSICsgMHgxNCkKKworI2VuZGlmIC8qIF9HUFRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9wZS5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3BlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4MzhmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS9wZS5oCkBAIC0wLDAgKzEsMTQ3IEBACisjaWZuZGVmIF9QRV9IXworI2RlZmluZSBfUEVfSF8KKworI2luY2x1ZGUgImhhbC5oIgorCisjZGVmaW5lIEREUl9CQVNFX0FERFIJCTB4MDAwMjAwMDAKKyNkZWZpbmUgRERSX0VORAkJCTB4ODYwMDAwMDAgLyogVGhpcyBpbmNsdWRlcyBBQ1AgYW5kIElSQU0gYXJlYXMgKi8KKyNkZWZpbmUgSVJBTV9CQVNFX0FERFIJCTB4ODMwMDAwMDAKKworI2RlZmluZSBJU19ERFIoYWRkciwgbGVuKQkoKCh1bnNpZ25lZCBsb25nKShhZGRyKSA+PSBERFJfQkFTRV9BRERSKSAmJiAoKCh1bnNpZ25lZCBsb25nKShhZGRyKSArIChsZW4pKSA8PSBERFJfRU5EKSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCit9IGRkcl9yeF9oZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCit9IGxtZW1fcnhfaGRyX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworCit9IHRtdV9yeF9oZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCit9IHRtdV90eF9oZHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCit9IHV0aWxfcnhfaGRyX3Q7CisKKworc3RydWN0IHBlX3N5bmNfbWFpbGJveAoreworCXUzMiBzdG9wOworCXUzMiBzdG9wcGVkOworfTsKKworc3RydWN0IHBlX21zZ19tYWlsYm94Cit7CisJdTMyIGRzdDsKKwl1MzIgc3JjOworCXUzMiBsZW47CisJdTMyIHJlcXVlc3Q7Cit9OworCisvKiogQmFzaWMgYnVzeSBsb29wIGRlbGF5IGZ1bmN0aW9uCisqCisqIEBwYXJhbSBjeWNsZXMJCU51bWJlciBvZiBjeWNsZXMgdG8gZGVsYXkgKGFjdHVhbCBjcHUgY3ljbGVzIHNob3VsZCBiZSBjbG9zZSB0byAzIHggY3ljbGVzKQorKgorKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSh1MzIgY3ljbGVzKQoreworCXZvbGF0aWxlIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGN5Y2xlczsgaSsrKTsKK30KKworCisvKiogUmVhZCBQRSBpZAorKgorKiBAcmV0dXJuCVBFIGlkICgwIC0gNSBmb3IgQ0xBU1MtUEUncywgNiAtIDkgZm9yIFRNVS1QRSdzLCAxMCBmb3IgVVRJTC1QRSkKKyoKKyovCitzdGF0aWMgaW5saW5lIHUzMiBlc2lfZ2V0X21waWQodm9pZCkKK3sKKwl1MzIgbXBpZDsKKworCWFzbSAoInJjc3IgJTAsIENvbmZpZ3VyYXRpb24sIE1QSUQiIDogIj1kIiAobXBpZCkpOworCisJcmV0dXJuIG1waWQ7Cit9CisKKy8qKiA2NGJpdCBhbGlnbmVkIG1lbW9yeSBjb3B5IHVzaW5nIGVmZXQuCisqIEVpdGhlciB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIGFkZHJlc3MgbXVzdCBiZSBpbiBETUVNLCB0aGUgb3RoZXIgYWRkcmVzcyBjYW4gYmUgaW4gTE1FTSBvciBERFIuCisqIFNvdXJjZSwgZGVzdGluYXRpb24gYWRkcmVzc2VzIGFuZCBsZW4gbXVzdCBhbGwgYmUgNjRiaXQgYWxpZ25lZC4KKyogVXNlcyBlZmV0IHN5bmNocm9ub3VzIGludGVyZmFjZSB0byBjb3B5IHRoZSBkYXRhLgorKgorKiBAcGFyYW0gZHN0CURlc3RpbmF0aW9uIGFkZHJlc3MgdG8gd3JpdGUgdG8gKG11c3QgYmUgNjRiaXQgYWxpZ25lZCkKKyogQHBhcmFtIHNyYwlTb3VyY2UgYWRkcmVzcyB0byByZWFkIGZyb20gKG11c3QgYmUgNjRiaXQgYWxpZ25lZCkKKyogQHBhcmFtIGxlbglOdW1iZXIgb2YgYnl0ZXMgdG8gY29weSAobXVzdCBiZSA2NGJpdCBhbGlnbmVkKQorKgorKi8KK3ZvaWQgZWZldF9tZW1jcHk2NCh2b2lkICpkc3QsIHZvaWQgKnNyYywgdW5zaWduZWQgaW50IGxlbik7CisKKworLyoqIEFsaWduZWQgbWVtb3J5IGNvcHkgdXNpbmcgZWZldC4KKyogRWl0aGVyIHRoZSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gYWRkcmVzcyBtdXN0IGJlIGluIERNRU0sIHRoZSBvdGhlciBhZGRyZXNzIGNhbiBiZSBpbiBMTUVNIG9yIEREUi4KKyogQm90aCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IGhhdmUgdGhlIHNhbWUgNjRiaXQgYWxpZ25tZW50LCB0aGVyZSBpcyBubyByZXN0cmljdGlvbiBvbiBsZW5ndGguCisqCisqIEBwYXJhbSBkc3QJRGVzdGluYXRpb24gYWRkcmVzcyB0byB3cml0ZSB0byAobXVzdCBoYXZlIHRoZSBzYW1lIDY0Yml0IGFsaWdubWVudCBhcyBzcmMpCisqIEBwYXJhbSBzcmMJU291cmNlIGFkZHJlc3MgdG8gcmVhZCBmcm9tIChtdXN0IGhhdmUgdGhlIHNhbWUgNjRiaXQgYWxpZ25tZW50IGFzIGRzdCkKKyogQHBhcmFtIGxlbglOdW1iZXIgb2YgYnl0ZXMgdG8gY29weQorKgorKi8KK3ZvaWQgZWZldF9tZW1jcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBsZW4pOworCisKKy8qKiAzMmJpdCBhbGlnbmVkIG1lbW9yeSBjb3B5LgorKiBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBtdXN0IGJlIDMyYml0IGFsaWduZWQsIHRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uIG9uIHRoZSBsZW5ndGguCisqCisqIEBwYXJhbSBkc3QJCURlc3RpbmF0aW9uIGFkZHJlc3MgKG11c3QgYmUgMzJiaXQgYWxpZ25lZCkKKyogQHBhcmFtIHNyYwkJU291cmNlIGFkZHJlc3MgKG11c3QgYmUgMzJiaXQgYWxpZ25lZCkKKyogQHBhcmFtIGxlbgkJTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyoKKyovCit2b2lkIG1lbWNweV9hbGlnbmVkMzIodm9pZCAqZHN0LCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBsZW4pOworCisvKiogQWxpZ25lZCBtZW1vcnkgY29weS4KKyogU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgbXVzdCBoYXZlIHRoZSBzYW1lIGFsaWdubWVudAorKiByZWxhdGl2ZSB0byAzMmJpdCBib3VuZGFyaWVzIChidXQgb3RoZXJ3c2llIG1heSBoYXZlIGFueSBhbGlnbm1lbnQpLAorKiB0aGVyZSBpcyBubyByZXN0cmljdGlvbiBvbiB0aGUgbGVuZ3RoLgorKgorKiBAcGFyYW0gZHN0CQlEZXN0aW5hdGlvbiBhZGRyZXNzCisqIEBwYXJhbSBzcmMJCVNvdXJjZSBhZGRyZXNzIChtdXN0IGhhdmUgc2FtZSAzMmJpdCBhbGlnbm1lbnQgYXMgZHN0KQorKiBAcGFyYW0gbGVuCQlOdW1iZXIgb2YgYnl0ZXMgdG8gY29weQorKgorKi8KK3ZvaWQgbWVtY3B5X2FsaWduZWQodm9pZCAqZHN0LCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBsZW4pOworCisKKy8qKiBHZW5lcmljIG1lbW9yeSBzZXQuCisqIEltcGxlbWVudHMgYSBnZW5lcmljIG1lbW9yeSBzZXQuIE5vdCB2ZXJ5IG9wdGltYWwgKHVzZXMgYnl0ZSB3cml0ZXMgZm9yIHRoZSBlbnRpcmUgcmFuZ2UpCisqCisqCisqIEBwYXJhbSBkc3QJCURlc3RpbmF0aW9uIGFkZHJlc3MKKyogQHBhcmFtIHZhbAkJVmFsdWUgdG8gc2V0IG1lbW9yeSB0bworKiBAcGFyYW0gbGVuCQlOdW1iZXIgb2YgYnl0ZXMgdG8gc2V0CisqCisqLwordm9pZCBtZW1zZXQodm9pZCAqZHN0LCB1OCB2YWwsIHVuc2lnbmVkIGludCBsZW4pOworCisvKiogR2VuZXJpYyBtZW1vcnkgY29weS4KKyogSW1wbGVtZW50cyBnZW5lcmljIG1lbW9yeSBjb3B5LiBJZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGhhdmUgdGhlIHNhbWUKKyogYWxpZ25tZW50IG1lbWNweV9hbGlnbmVkKCkgaXMgdXNlZCwgb3RoZXJ3aXNlLCB3ZSBmaXJzdCBhbGlnbiB0aGUgZGVzdGluYXRpb24KKyogdG8gYSAzMmJpdCBib3VuZGFyeSAodXNpbmcgYnl0ZSBjb3BpZXMpIHRoZW4gdGhlIHNyYywgYW5kIGZpbmFsbHkgdXNlIGEgbG9vcAorKiBvZiByZWFkLCBzaGlmdCwgd3JpdGUKKyoKKyogQHBhcmFtIGRzdAkJRGVzdGluYXRpb24gYWRkcmVzcworKiBAcGFyYW0gc3JjCQlTb3VyY2UgYWRkcmVzcworKiBAcGFyYW0gbGVuCQlOdW1iZXIgb2YgYnl0ZXMgdG8gY29weQorKgorKi8KK3ZvaWQgbWVtY3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworI2VuZGlmIC8qIF9QRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3BmZS5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3BmZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0M2ZlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvcGZlLmgKQEAgLTAsMCArMSwyNTggQEAKKyNpZm5kZWYgX1BGRV9IXworI2RlZmluZSBfUEZFX0hfCisKKyNkZWZpbmUgQ0xBU1NfRE1FTV9CQVNFX0FERFIoaSkJKDB4MDAwMDAwMDAgfCAoKGkpIDw8IDIwKSkKKyNkZWZpbmUgQ0xBU1NfSU1FTV9CQVNFX0FERFIoaSkJKDB4MDAwMDAwMDAgfCAoKGkpIDw8IDIwKSkgLyogT25seSB2YWxpZCBmb3IgbWVtIGFjY2VzcyByZWdpc3RlciBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgQ0xBU1NfRE1FTV9TSVpFCQkweDAwMDAyMDAwCisjZGVmaW5lIENMQVNTX0lNRU1fU0laRQkJMHgwMDAwODAwMAorCisjZGVmaW5lIFRNVV9ETUVNX0JBU0VfQUREUihpKQkoMHgwMDAwMDAwMCArICgoaSkgPDwgMjApKQorI2RlZmluZSBUTVVfSU1FTV9CQVNFX0FERFIoaSkJKDB4MDAwMDAwMDAgKyAoKGkpIDw8IDIwKSkgLyogT25seSB2YWxpZCBmb3IgbWVtIGFjY2VzcyByZWdpc3RlciBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgVE1VX0RNRU1fU0laRQkJMHgwMDAwMDgwMAorI2RlZmluZSBUTVVfSU1FTV9TSVpFCQkweDAwMDAyMDAwCisKKyNkZWZpbmUgVVRJTF9ETUVNX0JBU0VfQUREUgkweDAwMDAwMDAwCisjZGVmaW5lIFVUSUxfRE1FTV9TSVpFCQkweDAwMDAyMDAwCisKKyNkZWZpbmUgUEVfTE1FTV9CQVNFX0FERFIJMHhjMzAxMDAwMAorI2RlZmluZSBQRV9MTUVNX1NJWkUJCTB4ODAwMAorI2RlZmluZSBQRV9MTUVNX0VORAkJKFBFX0xNRU1fQkFTRV9BRERSICsgUEVfTE1FTV9TSVpFKQorCisjZGVmaW5lIERNRU1fQkFTRV9BRERSCQkweDAwMDAwMDAwCisjZGVmaW5lIERNRU1fU0laRQkJMHgyMDAwCQkvKio8IFRNVSBoYXMgbGVzcy4uLiAqLworI2RlZmluZSBETUVNX0VORAkJKERNRU1fQkFTRV9BRERSICsgRE1FTV9TSVpFKQorCisjZGVmaW5lIFBNRU1fQkFTRV9BRERSCQkweDAwMDEwMDAwCisjZGVmaW5lIFBNRU1fU0laRQkJMHg4MDAwCQkvKio8IFRNVSBoYXMgbGVzcy4uLiAqLworI2RlZmluZSBQTUVNX0VORAkJKFBNRU1fQkFTRV9BRERSICsgUE1FTV9TSVpFKQorCisKKy8qIFRoZXNlIGNoZWNrIG1lbW9yeSByYW5nZXMgZnJvbSBQRSBwb2ludCBvZiB2aWV3L21lbW9yeSBtYXAgKi8KKyNkZWZpbmUgSVNfRE1FTShhZGRyLCBsZW4pCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpID49IERNRU1fQkFTRV9BRERSKSAmJiAoKCh1bnNpZ25lZCBsb25nKShhZGRyKSArIChsZW4pKSA8PSBETUVNX0VORCkpCisjZGVmaW5lIElTX1BNRU0oYWRkciwgbGVuKQkoKCh1bnNpZ25lZCBsb25nKShhZGRyKSA+PSBQTUVNX0JBU0VfQUREUikgJiYgKCgodW5zaWduZWQgbG9uZykoYWRkcikgKyAobGVuKSkgPD0gUE1FTV9FTkQpKQorI2RlZmluZSBJU19QRV9MTUVNKGFkZHIsIGxlbikJKCgodW5zaWduZWQgbG9uZykoYWRkcikgPj0gUEVfTE1FTV9CQVNFX0FERFIpICYmICgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpICsgKGxlbikpIDw9IFBFX0xNRU1fRU5EKSkKKworI2RlZmluZSBJU19QRkVfTE1FTShhZGRyLCBsZW4pCSgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpID49IENCVVNfVklSVF9UT19QRkUoTE1FTV9CQVNFX0FERFIpKSAmJiAoKCh1bnNpZ25lZCBsb25nKShhZGRyKSArIChsZW4pKSA8PSBDQlVTX1ZJUlRfVE9fUEZFKExNRU1fRU5EKSkpCisjZGVmaW5lIElTX1BIWVNfRERSKGFkZHIsIGxlbikJKCgodW5zaWduZWQgbG9uZykoYWRkcikgPj0gRERSX1BIWVNfQkFTRV9BRERSKSAmJiAoKCh1bnNpZ25lZCBsb25nKShhZGRyKSArIChsZW4pKSA8PSBERFJfUEhZU19FTkQpKQorCisvKiBJZiB1c2luZyBhIHJ1bi10aW1lIHZpcnR1YWwgYWRkcmVzcyBmb3IgdGhlIGNidXMgYmFzZSBhZGRyZXNzIHVzZSB0aGlzIGNvZGUgKi8KK2V4dGVybiB2b2lkICpjYnVzX2Jhc2VfYWRkcjsKK2V4dGVybiB2b2lkICpkZHJfYmFzZV9hZGRyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGRyX3BoeXNfYmFzZV9hZGRyOworCisjaWYgMAorLyogSWYgdXNpbmcgYSBydW4tdGltZSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHRoZSBjYnVzIGJhc2UgYWRkcmVzcyB1c2UgdGhpcyBjb2RlICovCitleHRlcm4gdm9pZCAqY2J1c19iYXNlX2FkZHI7CisjZGVmaW5lIENCVVNfQkFTRV9BRERSCQljYnVzX2Jhc2VfYWRkcgorI2Vsc2UKKyNkZWZpbmUgQ0JVU19CQVNFX0FERFIJCTB4OWMwMDAwMDAKKyNlbmRpZgorCisjZGVmaW5lIEREUl9QSFlTX0JBU0VfQUREUglkZHJfcGh5c19iYXNlX2FkZHIKKyNkZWZpbmUgRERSX0JBU0VfQUREUgkJZGRyX2Jhc2VfYWRkcgorCisjZGVmaW5lIEREUl9TSVpFCTB4QzAwMDAwCisjZGVmaW5lIEREUl9QSFlTX0VORAkoRERSX1BIWVNfQkFTRV9BRERSICsgRERSX1NJWkUpCisKKyNkZWZpbmUgUEZFX0NCVVNfUEhZU19CQVNFX0FERFIJMHhjMDAwMDAwMAkvKio8IENCVVMgcGh5c2ljYWwgYmFzZSBhZGRyZXNzIGFzIHNlZW4gYnkgUEUncy4gKi8KKworCisvLyNkZWZpbmUgQ0JVU19QSFlTX1RPX1ZJUlQocCkJKCgocCkgLSBDQlVTX1BIWVNfQkFTRV9BRERSKSArIENCVVNfQkFTRV9BRERSKQorLy8jZGVmaW5lIENCVVNfVklSVF9UT19QSFlTKHYpCSgoKHYpIC0gQ0JVU19CQVNFX0FERFIpICsgQ0JVU19QSFlTX0JBU0VfQUREUikKKworI2RlZmluZSBERFJfUEhZU19UT19WSVJUKHApCSgoKHApIC0gRERSX1BIWVNfQkFTRV9BRERSKSArIEREUl9CQVNFX0FERFIpCisjZGVmaW5lIEREUl9WSVJUX1RPX1BIWVModikJKCgodikgLSBERFJfQkFTRV9BRERSKSArIEREUl9QSFlTX0JBU0VfQUREUikKKworI2RlZmluZSBDQlVTX1ZJUlRfVE9fUEZFKHYpCSgoKHYpIC0gQ0JVU19CQVNFX0FERFIpICsgUEZFX0NCVVNfUEhZU19CQVNFX0FERFIpCisjZGVmaW5lIENCVVNfUEZFX1RPX1ZJUlQocCkJKCgocCkgLSBQRkVfQ0JVU19QSFlTX0JBU0VfQUREUikgKyBDQlVTX0JBU0VfQUREUikKKworI2luY2x1ZGUgImNidXMuaCIKKworZW51bSB7CisJQ0xBU1MwX0lEID0gMCwKKwlDTEFTUzFfSUQsCisJQ0xBU1MyX0lELAorCUNMQVNTM19JRCwKKyNpZiAhZGVmaW5lZChDT05GSUdfUExBVEZPUk1fUENJKQorCUNMQVNTNF9JRCwKKwlDTEFTUzVfSUQsCisjZW5kaWYKKyNpZiAhZGVmaW5lZChDT05GSUdfVE1VX0RVTU1ZKQorCVRNVTBfSUQsCisJVE1VMV9JRCwKKwlUTVUyX0lELAorCVRNVTNfSUQsCisjZWxzZQorCVRNVTBfSUQsCisjZW5kaWYKKyNpZiAhZGVmaW5lZChDT05GSUdfVVRJTF9QRV9ESVNBQkxFRCkKKwlVVElMX0lELAorI2VuZGlmCisJTUFYX1BFCit9OworCisjaWYgIWRlZmluZWQoQ09ORklHX1BMQVRGT1JNX1BDSSkKKyNkZWZpbmUgQ0xBU1NfTUFTSwkoKDEgPDwgQ0xBU1MwX0lEKSB8ICgxIDw8IENMQVNTMV9JRCkgfCAoMSA8PCBDTEFTUzJfSUQpIHwgKDEgPDwgQ0xBU1MzX0lEKSB8ICgxIDw8IENMQVNTNF9JRCkgfCAoMSA8PCBDTEFTUzVfSUQpKQorI2RlZmluZSBDTEFTU19NQVhfSUQJQ0xBU1M1X0lECisjZWxzZQorI2RlZmluZSBDTEFTU19NQVNLICAgICAgKCgxIDw8IENMQVNTMF9JRCkgfCAoMSA8PCBDTEFTUzFfSUQpIHwgKDEgPDwgQ0xBU1MyX0lEKSB8ICgxIDw8IENMQVNTM19JRCkpCisjZGVmaW5lIENMQVNTX01BWF9JRAlDTEFTUzNfSUQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX1RNVV9EVU1NWSkKKyNkZWZpbmUgVE1VX01BU0sJKCgxIDw8IFRNVTBfSUQpIHwgKDEgPDwgVE1VMV9JRCkgfCAoMSA8PCBUTVUyX0lEKSB8ICgxIDw8IFRNVTNfSUQpKQorI2RlZmluZSBUTVVfTUFYX0lECVRNVTNfSUQKKyNlbHNlCisjZGVmaW5lIFRNVV9NQVNLCSgxIDw8IFRNVTBfSUQpIAorI2RlZmluZSBUTVVfTUFYX0lECVRNVTBfSUQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX1VUSUxfUEVfRElTQUJMRUQpCisjZGVmaW5lIFVUSUxfTUFTSwkoMSA8PCBVVElMX0lEKQorI2VuZGlmCisKK3N0cnVjdCBwZV9zeW5jX21haWxib3gKK3sKKwl1MzIgc3RvcDsKKwl1MzIgc3RvcHBlZDsKK307CisKK3N0cnVjdCBwZV9tc2dfbWFpbGJveAoreworCXUzMiBkc3Q7CisJdTMyIHNyYzsKKwl1MzIgbGVuOworCXUzMiByZXF1ZXN0OworfTsKKworLyoqIFBFIGluZm9ybWF0aW9uLgorICogU3RydWN0dXJlIGNvbnRhaW5pbmcgUEUncyBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gSXQgaXMgdXNlZCB0byBjcmVhdGUKKyAqIGdlbmVyaWMgQyBmdW5jdGlvbnMgY29tbW9uIHRvIGFsbCBQRSdzLgorICogQmVmb3JlIHVzaW5nIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucyB0aGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBpbml0aWFsaXplZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVnaXN0ZXJzIHZpcnR1YWwgYWRkcmVzc2VzCisgKiAoYWNjb3JkaW5nIHRvIHRoZSBBUk0gTU1VIG1tYXBpbmcpLiBUaGUgZGVmYXVsdCBpbml0aWFsaXphdGlvbiBzdXBwb3J0cyBhIHZpcnR1YWwgPT0gcGh5c2ljYWwgbWFwcGluZy4KKyAqCisgKi8KK3N0cnVjdCBwZV9pbmZvCit7CisJdTMyIGRtZW1fYmFzZV9hZGRyOwkJLyoqPCBQRSdzIGRtZW0gYmFzZSBhZGRyZXNzICovCisJdTMyIHBtZW1fYmFzZV9hZGRyOwkJLyoqPCBQRSdzIHBtZW0gYmFzZSBhZGRyZXNzICovCisJdTMyIHBtZW1fc2l6ZTsJCQkvKio8IFBFJ3MgcG1lbSBzaXplICovCisKKwl2b2lkICptZW1fYWNjZXNzX3dkYXRhOwkJLyoqPCBQRSdzIF9NRU1fQUNDRVNTX1dEQVRBIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwl2b2lkICptZW1fYWNjZXNzX2FkZHI7CQkvKio8IFBFJ3MgX01FTV9BQ0NFU1NfQUREUiByZWdpc3RlciBhZGRyZXNzICovCisJdm9pZCAqbWVtX2FjY2Vzc19yZGF0YTsJCS8qKjwgUEUncyBfTUVNX0FDQ0VTU19SREFUQSByZWdpc3RlciBhZGRyZXNzICovCit9OworCisKK3ZvaWQgcGVfbG1lbV9yZWFkKHUzMiAqZHN0LCB1MzIgbGVuLCB1MzIgb2Zmc2V0KTsKK3ZvaWQgcGVfbG1lbV93cml0ZSh1MzIgKnNyYywgdTMyIGxlbiwgdTMyIG9mZnNldCk7CisKK3ZvaWQgcGVfZG1lbV9tZW1jcHlfdG8zMihpbnQgaWQsIHUzMiBkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IGxlbik7Cit2b2lkIHBlX3BtZW1fbWVtY3B5X3RvMzIoaW50IGlkLCB1MzIgZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBsZW4pOworCit1MzIgcGVfcG1lbV9yZWFkKGludCBpZCwgdTMyIGFkZHIsIHU4IHNpemUpOworCit2b2lkIHBlX2RtZW1fd3JpdGUoaW50IGlkLCB1MzIgdmFsLCB1MzIgYWRkciwgdTggc2l6ZSk7Cit1MzIgcGVfZG1lbV9yZWFkKGludCBpZCwgdTMyIGFkZHIsIHU4IHNpemUpOwordm9pZCBjbGFzc19idXNfd3JpdGUodTMyIHZhbCwgdTMyIGFkZHIsIHU4IHNpemUpOwordTMyIGNsYXNzX2J1c19yZWFkKHUzMiBhZGRyLCB1OCBzaXplKTsKK3ZvaWQgdXRpbF9idXNfd3JpdGUodTMyIHZhbCwgdTMyIGFkZHIsIHU4IHNpemUpOwordTMyIHV0aWxfYnVzX3JlYWQodTMyIGFkZHIsIHU4IHNpemUpOworCisjZGVmaW5lIGNsYXNzX2J1c19yZWFkbChhZGRyKQkJCWNsYXNzX2J1c19yZWFkKGFkZHIsIDQpCisjZGVmaW5lIGNsYXNzX2J1c19yZWFkdyhhZGRyKQkJCWNsYXNzX2J1c19yZWFkKGFkZHIsIDIpCisjZGVmaW5lIGNsYXNzX2J1c19yZWFkYihhZGRyKQkJCWNsYXNzX2J1c19yZWFkKGFkZHIsIDEpCisKKyNkZWZpbmUgY2xhc3NfYnVzX3dyaXRlbCh2YWwsIGFkZHIpCQljbGFzc19idXNfd3JpdGUodmFsLCBhZGRyLCA0KQorI2RlZmluZSBjbGFzc19idXNfd3JpdGV3KHZhbCwgYWRkcikJCWNsYXNzX2J1c193cml0ZSh2YWwsIGFkZHIsIDIpCisjZGVmaW5lIGNsYXNzX2J1c193cml0ZWIodmFsLCBhZGRyKQkJY2xhc3NfYnVzX3dyaXRlKHZhbCwgYWRkciwgMSkKKworI2RlZmluZSBwZV9tZW1fcmVhZGwoaWQsIGFkZHIpCQkJcGVfbWVtX3JlYWQoaWQsIGFkZHIsIDQpCisjZGVmaW5lIHBlX21lbV9yZWFkdyhpZCwgYWRkcikJCQlwZV9tZW1fcmVhZChpZCwgYWRkciwgMikKKyNkZWZpbmUgcGVfbWVtX3JlYWRiKGlkLCBhZGRyKQkJCXBlX21lbV9yZWFkKGlkLCBhZGRyLCAxKQorCisjZGVmaW5lIHBlX21lbV93cml0ZWwoaWQsIHZhbCwgYWRkcikJCXBlX21lbV93cml0ZShpZCwgdmFsLCBhZGRyLCA0KQorI2RlZmluZSBwZV9tZW1fd3JpdGV3KGlkLCB2YWwsIGFkZHIpCQlwZV9tZW1fd3JpdGUoaWQsIHZhbCwgYWRkciwgMikKKyNkZWZpbmUgcGVfbWVtX3dyaXRlYihpZCwgdmFsLCBhZGRyKQkJcGVfbWVtX3dyaXRlKGlkLCB2YWwsIGFkZHIsIDEpCisKK2ludCBwZV9sb2FkX2VsZl9zZWN0aW9uKGludCBpZCwgY29uc3Qgdm9pZCAqZGF0YSwgRWxmMzJfU2hkciAqc2hkcik7CisKK3ZvaWQgcGZlX2xpYl9pbml0KHZvaWQgKmNidXNfYmFzZSwgdm9pZCAqZGRyX2Jhc2UsIHVuc2lnbmVkIGxvbmcgZGRyX3BoeXNfYmFzZSk7Cit2b2lkIGJtdV9pbml0KHZvaWQgKmJhc2UsIEJNVV9DRkcgKmNmZyk7Cit2b2lkIGJtdV9yZXNldCh2b2lkICpiYXNlKTsKK3ZvaWQgYm11X2VuYWJsZSh2b2lkICpiYXNlKTsKK3ZvaWQgYm11X2Rpc2FibGUodm9pZCAqYmFzZSk7Cit2b2lkIGJtdV9zZXRfY29uZmlnKHZvaWQgKmJhc2UsIEJNVV9DRkcgKmNmZyk7CisKK3ZvaWQgZ2VtYWNfaW5pdCh2b2lkICpiYXNlLCB2b2lkICpjb25maWcpOwordm9pZCBnZW1hY19zZXRfc3BlZWQodm9pZCAqYmFzZSwgTUFDX1NQRUVEIGdlbV9zcGVlZCk7Cit2b2lkIGdlbWFjX3NldF9kdXBsZXgodm9pZCAqYmFzZSwgaW50IGR1cGxleCk7Cit2b2lkIGdlbWFjX3NldF9tb2RlKHZvaWQgKmJhc2UsIGludCBtb2RlKTsKK3ZvaWQgZ2VtYWNfZW5hYmxlX21kaW8odm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX2Rpc2FibGVfbWRpbyh2b2lkICpiYXNlKTsKK3ZvaWQgZ2VtYWNfc2V0X21kY19kaXYodm9pZCAqYmFzZSwgTUFDX01EQ19ESVYgZ2VtX21kY2Rpdik7Cit2b2lkIGdlbWFjX2VuYWJsZSh2b2lkICpiYXNlKTsKK3ZvaWQgZ2VtYWNfZGlzYWJsZSh2b2lkICpiYXNlKTsKK3ZvaWQgZ2VtYWNfZW5hYmxlX21kaW8odm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX2Rpc2FibGVfbWRpbyh2b2lkICpiYXNlKTsKK3ZvaWQgZ2VtYWNfcmVzZXQodm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX3NldF9hZGRyZXNzKHZvaWQgKmJhc2UsIFNQRUNfQUREUiAqYWRkcik7CitTUEVDX0FERFIgZ2VtYWNfZ2V0X2FkZHJlc3Modm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX3NldF9sYWRkcjEodm9pZCAqYmFzZSwgTUFDX0FERFIgKmFkZHJlc3MpOwordm9pZCBnZW1hY19zZXRfbGFkZHIyKHZvaWQgKmJhc2UsIE1BQ19BRERSICphZGRyZXNzKTsKK3ZvaWQgZ2VtYWNfc2V0X2xhZGRyMyh2b2lkICpiYXNlLCBNQUNfQUREUiAqYWRkcmVzcyk7Cit2b2lkIGdlbWFjX3NldF9sYWRkcjQodm9pZCAqYmFzZSwgTUFDX0FERFIgKmFkZHJlc3MpOwordm9pZCBnZW1hY19zZXRfbGFkZHJOKHZvaWQgKmJhc2UsIE1BQ19BRERSICphZGRyZXNzLCB1bnNpZ25lZCBpbnQgZW50cnlfaW5kZXgpOworTUFDX0FERFIgZ2VtX2dldF9sYWRkcjEodm9pZCAqYmFzZSk7CitNQUNfQUREUiBnZW1fZ2V0X2xhZGRyMih2b2lkICpiYXNlKTsKK01BQ19BRERSIGdlbV9nZXRfbGFkZHIzKHZvaWQgKmJhc2UpOworTUFDX0FERFIgZ2VtX2dldF9sYWRkcjQodm9pZCAqYmFzZSk7CitNQUNfQUREUiBnZW1fZ2V0X2xhZGRyTih2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgZW50cnlfaW5kZXgpOwordm9pZCBnZW1hY19zZXRfY29uZmlnKHZvaWQgKmJhc2UsIEdFTUFDX0NGRyAqY2ZnKTsKK3ZvaWQgZ2VtYWNfZW5hYmxlX2NvcHlfYWxsKHZvaWQgKmJhc2UpOwordm9pZCBnZW1hY19kaXNhYmxlX2NvcHlfYWxsKHZvaWQgKmJhc2UpOwordm9pZCBnZW1hY19hbGxvd19icm9hZGNhc3Qodm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX25vX2Jyb2FkY2FzdCh2b2lkICpiYXNlKTsKK3ZvaWQgZ2VtYWNfZW5hYmxlX3VuaWNhc3Qodm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX2Rpc2FibGVfdW5pY2FzdCh2b2lkICpiYXNlKTsKK3ZvaWQgZ2VtYWNfZW5hYmxlX211bHRpY2FzdCh2b2lkICpiYXNlKTsKK3ZvaWQgZ2VtYWNfZGlzYWJsZV9tdWx0aWNhc3Qodm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX2VuYWJsZV9mY3Nfcngodm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX2Rpc2FibGVfZmNzX3J4KHZvaWQgKmJhc2UpOwordm9pZCBnZW1hY19lbmFibGVfMTUzNl9yeCh2b2lkICpiYXNlKTsKK3ZvaWQgZ2VtYWNfZGlzYWJsZV8xNTM2X3J4KHZvaWQgKmJhc2UpOwordm9pZCBnZW1hY19lbmFibGVfcGF1c2Vfcngodm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX2Rpc2FibGVfcGF1c2Vfcngodm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX2VuYWJsZV9yeF9jaGVja3N1bV9vZmZsb2FkKHZvaWQgKmJhc2UpOwordm9pZCBnZW1hY19kaXNhYmxlX3J4X2NoZWNrc3VtX29mZmxvYWQodm9pZCAqYmFzZSk7Cit1bnNpZ25lZCBpbnQgKiBnZW1hY19nZXRfc3RhdHModm9pZCAqYmFzZSk7Cit2b2lkIGdlbWFjX3NldF9idXNfd2lkdGgodm9pZCAqYmFzZSwgaW50IHdpZHRoKTsKKwordm9pZCBncGlfaW5pdCh2b2lkICpiYXNlLCBHUElfQ0ZHICpjZmcpOwordm9pZCBncGlfcmVzZXQodm9pZCAqYmFzZSk7Cit2b2lkIGdwaV9lbmFibGUodm9pZCAqYmFzZSk7Cit2b2lkIGdwaV9kaXNhYmxlKHZvaWQgKmJhc2UpOwordm9pZCBncGlfc2V0X2NvbmZpZyh2b2lkICpiYXNlLCBHUElfQ0ZHICpjZmcpOworCit2b2lkIGNsYXNzX2luaXQoQ0xBU1NfQ0ZHICpjZmcpOwordm9pZCBjbGFzc19yZXNldCh2b2lkKTsKK3ZvaWQgY2xhc3NfZW5hYmxlKHZvaWQpOwordm9pZCBjbGFzc19kaXNhYmxlKHZvaWQpOwordm9pZCBjbGFzc19zZXRfY29uZmlnKENMQVNTX0NGRyAqY2ZnKTsKKwordm9pZCB0bXVfaW5pdChUTVVfQ0ZHICpjZmcpOwordm9pZCB0bXVfZW5hYmxlKHUzMiBwZV9tYXNrKTsKK3ZvaWQgdG11X2Rpc2FibGUodTMyIHBlX21hc2spOworCit2b2lkIHV0aWxfaW5pdChVVElMX0NGRyAqY2ZnKTsKK3ZvaWQgdXRpbF9yZXNldCh2b2lkKTsKK3ZvaWQgdXRpbF9lbmFibGUodm9pZCk7Cit2b2lkIHV0aWxfZGlzYWJsZSh2b2lkKTsKKwordm9pZCBoaWZfaW5pdCh2b2lkKTsKK3ZvaWQgaGlmX3R4X2VuYWJsZSh2b2lkKTsKK3ZvaWQgaGlmX3R4X2Rpc2FibGUodm9pZCk7Cit2b2lkIGhpZl9yeF9lbmFibGUodm9pZCk7Cit2b2lkIGhpZl9yeF9kaXNhYmxlKHZvaWQpOworCisjZW5kaWYgLyogX1BGRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3RtdS5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3RtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZWFmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdG11LmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfVE1VX0hfCisjZGVmaW5lIF9UTVVfSF8KKworI2RlZmluZSBUTVVfRE1FTV9CQVNFX0FERFIJMHgwMDAwMDAwMAorI2RlZmluZSBUTVVfUE1FTV9CQVNFX0FERFIJMHgwMDAxMDAwMAorCisKKyNkZWZpbmUgQ0JVU19CQVNFX0FERFIJCTB4YzAwMDAwMDAKKyNkZWZpbmUgVE1VX0FQQl9CQVNFX0FERFIJMHhjMTAwMDAwMAorCisjaW5jbHVkZSAiY2J1cy5oIgorCisjZGVmaW5lIEdQVF9CQVNFX0FERFIJCShUTVVfQVBCX0JBU0VfQUREUiArIDB4MDAwMDApCisjZGVmaW5lIFVBUlRfQkFTRV9BRERSCQkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDEwMDAwKQorCisKKyNkZWZpbmUgU0hBUEVSMF9CQVNFX0FERFIJKFRNVV9BUEJfQkFTRV9BRERSICsgMHgwMjAwMDApCisjZGVmaW5lIFNIQVBFUjFfQkFTRV9BRERSCShUTVVfQVBCX0JBU0VfQUREUiArIDB4MDMwMDAwKQorI2RlZmluZSBTSEFQRVIyX0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDA0MDAwMCkKKyNkZWZpbmUgU0hBUEVSM19CQVNFX0FERFIJKFRNVV9BUEJfQkFTRV9BRERSICsgMHgwNTAwMDApCisjZGVmaW5lIFNIQVBFUjRfQkFTRV9BRERSCShUTVVfQVBCX0JBU0VfQUREUiArIDB4MDYwMDAwKQorI2RlZmluZSBTSEFQRVI1X0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDA3MDAwMCkKKyNkZWZpbmUgU0hBUEVSNl9CQVNFX0FERFIJKFRNVV9BUEJfQkFTRV9BRERSICsgMHgwODAwMDApCisjZGVmaW5lIFNIQVBFUjdfQkFTRV9BRERSCShUTVVfQVBCX0JBU0VfQUREUiArIDB4MDkwMDAwKQorI2RlZmluZSBTSEFQRVI4X0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDBhMDAwMCkKKyNkZWZpbmUgU0hBUEVSOV9CQVNFX0FERFIJKFRNVV9BUEJfQkFTRV9BRERSICsgMHgwYjAwMDApCisKKyNkZWZpbmUgU0NIRUQwX0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDFjMDAwMCkKKyNkZWZpbmUgU0NIRUQxX0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDFkMDAwMCkKKyNkZWZpbmUgU0NIRUQyX0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDFlMDAwMCkKKyNkZWZpbmUgU0NIRUQzX0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDFmMDAwMCkKKyNkZWZpbmUgU0NIRUQ0X0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDIwMDAwMCkKKyNkZWZpbmUgU0NIRUQ1X0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDIxMDAwMCkKKyNkZWZpbmUgU0NIRUQ2X0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDIyMDAwMCkKKyNkZWZpbmUgU0NIRUQ3X0JBU0VfQUREUgkoVE1VX0FQQl9CQVNFX0FERFIgKyAweDIzMDAwMCkKKworCisjZGVmaW5lIFBIWV9RVUVVRV9CQVNFX0FERFIJKFRNVV9BUEJfQkFTRV9BRERSICsgMHgyNjAwMDApCisjZGVmaW5lIFNIQVBFUl9TVEFUVVMJCShUTVVfQVBCX0JBU0VfQUREUiArIDB4MjcwMDAwKSAvKio8IFs5OjBdIGJpdG1hc2sgb2Ygc2hhcGVycyB0aGF0IGhhdmUgcG9zaXRpdmUgY3JlZGl0ICovCisKKworI2luY2x1ZGUgImdwdC5oIgorI2luY2x1ZGUgInVhcnQuaCIKKyNpbmNsdWRlICJ0bXUvc2hhcGVyLmgiCisjaW5jbHVkZSAidG11L3NjaGVkLmgiCisjaW5jbHVkZSAidG11L3BoeV9xdWV1ZS5oIgorCisjZW5kaWYgLyogX1RNVV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3RtdS9waHlfcXVldWUuaCBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS90bXUvcGh5X3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlZjlhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS90bXUvcGh5X3F1ZXVlLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfUEhZX1FVRVVFX0hfCisjZGVmaW5lIF9QSFlfUVVFVUVfSF8KKworI2RlZmluZSBQSFlfUVVFVUVfU0hBUEVSX1NUQVRVUwkoUEhZX1FVRVVFX0JBU0VfQUREUiArIDB4MDApCS8qKjwgWzI4OjE5XSBzYW1lIGFzIFNIQVBFUl9TVEFUVVMsIFsxODozXSBzYW1lIGFzIFFVRVVFX1NUQVRVUywgWzI6MF0gbXVzdCBiZSB6ZXJvIGJlZm9yZSBhIG5ldyBwYWNrZXQgbWF5IGJlIGRlcXVldWVkICovCisjZGVmaW5lIFFVRVVFX1NUQVRVUwkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDA0KQkvKio8IFsxNTowXSBiaXQgbWFzayBvZiBpbnB1dCBxdWV1ZXMgd2l0aCBwZW5kaW5nIHBhY2tldHMgKi8KKworI2RlZmluZSBRVUVVRTBfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDA4KQorI2RlZmluZSBRVUVVRTFfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDBjKQorI2RlZmluZSBRVUVVRTJfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDEwKQorI2RlZmluZSBRVUVVRTNfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDE0KQorI2RlZmluZSBRVUVVRTRfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDE4KQorI2RlZmluZSBRVUVVRTVfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDFjKQorI2RlZmluZSBRVUVVRTZfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDIwKQorI2RlZmluZSBRVUVVRTdfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDI0KQorI2RlZmluZSBRVUVVRThfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDI4KQorI2RlZmluZSBRVUVVRTlfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDJjKQorI2RlZmluZSBRVUVVRTEwX1BLVF9MRU4JCShQSFlfUVVFVUVfQkFTRV9BRERSICsgMHgzMCkKKyNkZWZpbmUgUVVFVUUxMV9QS1RfTEVOCQkoUEhZX1FVRVVFX0JBU0VfQUREUiArIDB4MzQpCisjZGVmaW5lIFFVRVVFMTJfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDM4KQorI2RlZmluZSBRVUVVRTEzX1BLVF9MRU4JCShQSFlfUVVFVUVfQkFTRV9BRERSICsgMHgzYykKKyNkZWZpbmUgUVVFVUUxNF9QS1RfTEVOCQkoUEhZX1FVRVVFX0JBU0VfQUREUiArIDB4NDApCisjZGVmaW5lIFFVRVVFMTVfUEtUX0xFTgkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDQ0KQorI2RlZmluZSBRVUVVRV9SRVNVTFQwCQkoUEhZX1FVRVVFX0JBU0VfQUREUiArIDB4NDgpCS8qKjwgWzddIHNldCB0byBvbmUgdG8gaW5kaWNhdGUgb3V0cHV0IFBIWSAoVE1VMC0+UEhZMCwgVE1VMS0+UEhZMSwgVE1VMi0+UEhZMiwgVE1VMy0+UEhZMyksIFs2OjBdIHdpbm5lciBpbnB1dCBxdWV1ZSBudW1iZXIgKi8KKyNkZWZpbmUgUVVFVUVfUkVTVUxUMQkJKFBIWV9RVUVVRV9CQVNFX0FERFIgKyAweDRjKQkvKio8IFs3XSBzZXQgdG8gb25lIHRvIGluZGljYXRlIG91dHB1dCBQSFkgKFRNVTAtPlBIWTAsIFRNVTEtPlBIWTEsIFRNVTItPlBIWTIsIFRNVTMtPlBIWTQpLCBbNjowXSB3aW5uZXIgaW5wdXQgcXVldWUgbnVtYmVyICovCisjZGVmaW5lIFFVRVVFX1JFU1VMVDIJCShQSFlfUVVFVUVfQkFTRV9BRERSICsgMHg1MCkJLyoqPCBbN10gc2V0IHRvIG9uZSB0byBpbmRpY2F0ZSBvdXRwdXQgUEhZIChUTVUwLT5QSFkwLCBUTVUxLT5QSFkxLCBUTVUyLT5QSFkyLCBUTVUzLT5QSFk1KSwgWzY6MF0gd2lubmVyIGlucHV0IHF1ZXVlIG51bWJlciAqLworI2RlZmluZSBRVUVVRV9HQkxfUEtUTEVOCShQSFlfUVVFVUVfQkFTRV9BRERSICsgMHg1YykKKyNkZWZpbmUgUVVFVUVfR0JMX1BLVExFTl9NQVNLCShQSFlfUVVFVUVfQkFTRV9BRERSICsgMHg2MCkKKworCisKKyNlbmRpZiAvKiBfUEhZX1FVRVVFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdG11L3NjaGVkLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdG11L3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3NDFjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS90bXUvc2NoZWQuaApAQCAtMCwwICsxLDQ3IEBACisjaWZuZGVmIF9TQ0hFRF9IXworI2RlZmluZSBfU0NIRURfSF8KKworLyogT2Zmc2V0cyBmcm9tIFNDSEVEeF9CQVNFX0FERFIgKi8KKyNkZWZpbmUgU0NIRURfQ1RSTAkJCTB4MDAKKyNkZWZpbmUgU0NIRURfU0xPVF9USU1FCQkJMHgwNAorI2RlZmluZSBTQ0hFRF9SRVMJCQkweDA4CisjZGVmaW5lIFNDSEVEX1FVRVVFX0FMTE9DMAkJMHgwYworI2RlZmluZSBTQ0hFRF9RVUVVRV9BTExPQzEJCTB4MTAKKyNkZWZpbmUgU0NIRURfQlcJCQkweDE0CisjZGVmaW5lIFNDSEVEX0dVUl9ERUZfQ1RSCQkweDE4CisjZGVmaW5lIFNDSEVEX0FWTF9DVFIJCQkweDFjCisjZGVmaW5lIFNDSEVEX1FVMF9XR0hUCQkJMHgyMAorI2RlZmluZSBTQ0hFRF9RVTFfV0dIVAkJCTB4MjQKKyNkZWZpbmUgU0NIRURfUVUyX1dHSFQJCQkweDI4CisjZGVmaW5lIFNDSEVEX1FVM19XR0hUCQkJMHgyYworI2RlZmluZSBTQ0hFRF9RVTRfV0dIVAkJCTB4MzAKKyNkZWZpbmUgU0NIRURfUVU1X1dHSFQJCQkweDM0CisjZGVmaW5lIFNDSEVEX1FVNl9XR0hUCQkJMHgzOAorI2RlZmluZSBTQ0hFRF9RVTdfV0dIVAkJCTB4M2MKKyNkZWZpbmUgU0NIRURfUVVFMF9ERUZJQ0lUX0NOVAkJMHg0MAorI2RlZmluZSBTQ0hFRF9RVUUxX0RFRklDSVRfQ05UCQkweDQ0CisjZGVmaW5lIFNDSEVEX1FVRTJfREVGSUNJVF9DTlQJCTB4NDgKKyNkZWZpbmUgU0NIRURfUVVFM19ERUZJQ0lUX0NOVAkJMHg0YworI2RlZmluZSBTQ0hFRF9RVUU0X0RFRklDSVRfQ05UCQkweDUwCisjZGVmaW5lIFNDSEVEX1FVRTVfREVGSUNJVF9DTlQJCTB4NTQKKyNkZWZpbmUgU0NIRURfUVVFNl9ERUZJQ0lUX0NOVAkJMHg1OAorI2RlZmluZSBTQ0hFRF9RVUU3X0RFRklDSVRfQ05UCQkweDVjCisjZGVmaW5lIFNDSEVEX1BLVF9MRU4JCQkweDYwCisKKyNkZWZpbmUgU0NIRURfQ1RSTF9BTEdPVFlQRSh4KSAJCSgoKHgpICYgMHhmKSA8PCAwKQorI2RlZmluZSBTQ0hFRF9DVFJMX0NBTFFVT1RBKHgpIAkJKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lIFNDSEVEX0NUUkxfQUNUSVZFX1EoeCkgCQkoKCh4KSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFNDSEVEX0NUUkxfU0hBUkVfQlcoeCkgCQkoKCh4KSAmIDB4ZmYpIDw8IDE2KQorI2RlZmluZSBTQ0hFRF9DVFJMX0JBUlJPV19CVyh4KSAJKCgoeCkgJiAweGZmKSA8PCAyNCkKKworI2RlZmluZSBTQ0hFRF9RVUVVRV9BTExPQzBfUVVFVUVBKHgpCSgoKHgpICYgMHgxZikgPDwgMCkKKyNkZWZpbmUgU0NIRURfUVVFVUVfQUxMT0MwX1FVRVVFQih4KQkoKCh4KSAmIDB4MWYpIDw8IDgpCisjZGVmaW5lIFNDSEVEX1FVRVVFX0FMTE9DMF9RVUVVRUMoeCkJKCgoeCkgJiAweDFmKSA8PCAxNikKKyNkZWZpbmUgU0NIRURfUVVFVUVfQUxMT0MwX1FVRVVFRCh4KQkoKCh4KSAmIDB4MWYpIDw8IDI0KQorCisjZGVmaW5lIFNDSEVEX1FVRVVFX0FMTE9DMF9SRVMwKHgpCSgoKHgpICYgMHg3KSA8PCA1KQorI2RlZmluZSBTQ0hFRF9RVUVVRV9BTExPQzBfUkVTMSh4KQkoKCh4KSAmIDB4NykgPDwgMTMpCisjZGVmaW5lIFNDSEVEX1FVRVVFX0FMTE9DMF9SRVMyKHgpCSgoKHgpICYgMHg3KSA8PCAyMSkKKyNkZWZpbmUgU0NIRURfUVVFVUVfQUxMT0MwX1JFUzMoeCkJKCgoeCkgJiAweDcpIDw8IDI5KQorCisjZW5kaWYgLyogX1NDSEVEX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdG11L3NoYXBlci5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3RtdS9zaGFwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjMxNWYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3RtdS9zaGFwZXIuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9TSEFQRVJfSF8KKyNkZWZpbmUgX1NIQVBFUl9IXworCisvKiBPZmZzZXRzIGZyb20gU0hBUFBFUnhfQkFTRV9BRERSICovCisjZGVmaW5lIFNIQVBFUl9DVFJMCQkweDAwCisjZGVmaW5lIFNIQVBFUl9XRUlHSFQJCTB4MDQKKyNkZWZpbmUgU0hBUEVSX1BLVF9MRU4JCTB4MDgKKworI2RlZmluZSBTSEFQRVJfQ1RSTF9FTkFCTEUoeCkgCSgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSBTSEFQRVJfQ1RSTF9RTk8oeCkgCSgoKHgpICYgMHgzZikgPDwgMSkKKyNkZWZpbmUgU0hBUEVSX0NUUkxfQ0xLRElWKHgpIAkoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCisKKyNkZWZpbmUgU0hBUEVSX1dFSUdIVF9GUkFDV1QoeCkgCSgoKHgpICYgMHhmZikgPDwgMCkKKyNkZWZpbmUgU0hBUEVSX1dFSUdIVF9JTlRXVCh4KSAJCSgoKHgpICYgMHgzKSA8PCA4KQorI2RlZmluZSBTSEFQRVJfV0VJR0hUX01BWENSRURJVCh4KSAJKCgoeCkgJiAweDNmZmZmZikgPDwgMTApCisKKyNkZWZpbmUgUE9SVF9TSEFQRVJfTUFTSyAoMSA8PCAwKQorCisjZW5kaWYgLyogX1NIQVBFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3VhcnQuaCBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS91YXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzZDQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS91YXJ0LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfVUFSVF9IXworI2RlZmluZSBfVUFSVF9IXworCisjZGVmaW5lIFVBUlRfVEhSCShVQVJUX0JBU0VfQUREUiArIDB4MDApCisjZGVmaW5lIFVBUlRfSUVSCShVQVJUX0JBU0VfQUREUiArIDB4MDQpCisjZGVmaW5lIFVBUlRfSUlSCShVQVJUX0JBU0VfQUREUiArIDB4MDgpCisjZGVmaW5lIFVBUlRfTENSCShVQVJUX0JBU0VfQUREUiArIDB4MGMpCisjZGVmaW5lIFVBUlRfTUNSCShVQVJUX0JBU0VfQUREUiArIDB4MTApCisjZGVmaW5lIFVBUlRfTFNSCShVQVJUX0JBU0VfQUREUiArIDB4MTQpCisjZGVmaW5lIFVBUlRfTURSCShVQVJUX0JBU0VfQUREUiArIDB4MTgpCisjZGVmaW5lIFVBUlRfU0NSQVRDSAkoVUFSVF9CQVNFX0FERFIgKyAweDFjKQorCisjZW5kaWYgLyogX1VBUlRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS91dGlsLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMjQxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdXRpbC5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX1VUSUxfSF8KKyNkZWZpbmUgX1VUSUxfSF8KKworI2RlZmluZSBVVElMX0RNRU1fQkFTRV9BRERSCTB4MDAwMDAwMDAKKyNkZWZpbmUgVVRJTF9ETUVNX1NJWkUJCTB4MDAwMDIwMDAKKyNkZWZpbmUgVVRJTF9ETUVNX0VORAkJKFVUSUxfRE1FTV9CQVNFX0FERFIgKyBVVElMX0RNRU1fU0laRSkKKworI2RlZmluZSBJU19ETUVNKGFkZHIsIGxlbikJKCgodW5zaWduZWQgbG9uZykoYWRkcikgPj0gVVRJTF9ETUVNX0JBU0VfQUREUikgJiYgKCgodW5zaWduZWQgbG9uZykoYWRkcikgKyAobGVuKSkgPD0gVVRJTF9ETUVNX0VORCkpCisKKyNkZWZpbmUgQ0JVU19CQVNFX0FERFIJCTB4YzAwMDAwMDAKKyNkZWZpbmUgVVRJTF9BUEJfQkFTRV9BRERSCTB4YzEwMDAwMDAKKworI2luY2x1ZGUgImNidXMuaCIKKworI2RlZmluZSBHUFRfQkFTRV9BRERSCQkoVVRJTF9BUEJfQkFTRV9BRERSICsgMHgwMDAwMCkKKyNkZWZpbmUgVUFSVF9CQVNFX0FERFIJCShVVElMX0FQQl9CQVNFX0FERFIgKyAweDEwMDAwKQorI2RlZmluZSBFQVBFX0JBU0VfQUREUgkJKFVUSUxfQVBCX0JBU0VfQUREUiArIDB4MjAwMDApCisjZGVmaW5lIElOUV9CQVNFX0FERFIJCShVVElMX0FQQl9CQVNFX0FERFIgKyAweDMwMDAwKQorI2RlZmluZSBFRkVUMV9CQVNFX0FERFIJCShVVElMX0FQQl9CQVNFX0FERFIgKyAweDQwMDAwKQorI2RlZmluZSBFRkVUMl9CQVNFX0FERFIJCShVVElMX0FQQl9CQVNFX0FERFIgKyAweDUwMDAwKQorI2RlZmluZSBFRkVUM19CQVNFX0FERFIJCShVVElMX0FQQl9CQVNFX0FERFIgKyAweDYwMDAwKQorCisKKyNpbmNsdWRlICJncHQuaCIKKyNpbmNsdWRlICJ1YXJ0LmgiCisjaW5jbHVkZSAidXRpbC9lYXBlLmgiCisjaW5jbHVkZSAidXRpbC9pbnEuaCIKKyNpbmNsdWRlICJ1dGlsL2VmZXQuaCIKKworI2VuZGlmIC8qIF9VVElMX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdXRpbC9lYXBlLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdXRpbC9lYXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczNDRkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS91dGlsL2VhcGUuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIF9FQVBFX0hfCisjZGVmaW5lIF9FQVBFX0hfCisKKyNkZWZpbmUgRUFQRV9TVEFUVVMJCShFQVBFX0JBU0VfQUREUiArIDB4MCkKKyNkZWZpbmUgRUFQRV9JTlRfRU5BQkxFCQkoRUFQRV9CQVNFX0FERFIgKyAweDQpCisjZGVmaW5lIEVBUEVfSU5UX1NSQwkJKEVBUEVfQkFTRV9BRERSICsgMHg4KQorI2RlZmluZSBFQVBFX0hPU1RfSU5UX0VOQUJMRQkoRUFQRV9CQVNFX0FERFIgKyAweGMpCisKKworI2VuZGlmIC8qIF9FQVBFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdXRpbC9lZmV0LmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdXRpbC9lZmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkMDMxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZS91dGlsL2VmZXQuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIF9VVElMX0VGRVRfSF8KKyNkZWZpbmUgX1VUSUxfRUZFVF9IXworCisjZGVmaW5lIEVGRVRfRU5UUllfQUREUgkJMHgwMAorI2RlZmluZSBFRkVUX0VOVFJZX1NJWkUJCTB4MDQKKyNkZWZpbmUgRUZFVF9FTlRSWV9ETUVNX0FERFIJMHgwOAorI2RlZmluZSBFRkVUX0VOVFJZX1NUQVRVUwkweDBjCisjZGVmaW5lIEVGRVRfRU5UUllfRU5ESUFOCTB4MTAKKworI2RlZmluZSBDQlVTMkRNRU0JMAorI2RlZmluZSBETUVNMkNCVVMJMQorCisjZGVmaW5lIEVGRVQyQlVTX0xFICAgICAoMSA8PCAwKQorCit2b2lkIHV0aWxfZWZldChpbnQgaSwgdTMyIGNidXNfYWRkciwgdTMyIGRtZW1fYWRkciwgdTMyIGxlbiwgdTggZGlyKTsKK3ZvaWQgdXRpbF9lZmV0X3dhaXQoaW50IGkpOwordm9pZCB1dGlsX2VmZXRfc3luYyhpbnQgaSwgdTMyIGNidXNfYWRkciwgdTMyIGRtZW1fYWRkciwgdTMyIGxlbiwgdTggZGlyKTsKKworI2VuZGlmIC8qIF9VVElMX0VGRVRfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3V0aWwvaW5xLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmUvdXRpbC9pbnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2QxYWNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlL3V0aWwvaW5xLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfSU5RX0hfCisjZGVmaW5lIF9JTlFfSF8KKworI2RlZmluZSBJTlFfSE9TVF9HUAkoSU5RX0JBU0VfQUREUiArIDB4MDApIC8qIEZJWE1FIHdoYXQgYXJlIHRoZXNlIGZvciA/ICovCisjZGVmaW5lIElOUV9VUEVfR1AJKElOUV9CQVNFX0FERFIgKyAweDA0KSAvKiBGSVhNRSB3aGF0IGFyZSB0aGVzZSBmb3IgPyAqLworCisjZGVmaW5lIElOUV9RQl9QS1RQVFIJKElOUV9CQVNFX0FERFIgKyAweDA4KQorI2RlZmluZSBJTlFfRklGT19DTlQJKElOUV9CQVNFX0FERFIgKyAweDBjKQorCisjZW5kaWYgLyogX0lOUV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlX2RyaXZlci5jIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlX2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNjVlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmVfZHJpdmVyLmMKQEAgLTAsMCArMSw2ODcgQEAKKy8qCisgKiAgKEMpIENvcHlyaWdodCAyMDExCisgKiAgQXV0aG9yIDogTWluZHNwZWVkIFRlY2hub2xvZ2VzCisgKgorICogIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiAgcHJvamVjdC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICovCisKKworI2luY2x1ZGUgImhhbC5oIgorI2luY2x1ZGUgInBmZS9wZmUuaCIKKyNpbmNsdWRlICJwZmVfZHJpdmVyLmgiCisjaW5jbHVkZSAicGZlX2Zpcm13YXJlLmgiCisKKworc3RhdGljIHN0cnVjdCB0eF9kZXNjX3MgKmdfdHhfZGVzYyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHJ4X2Rlc2NfcyAqZ19yeF9kZXNjID0gTlVMTDsKKworCisvKiogSElGIFJ4IGludGVyZmFjZSBmdW5jdGlvbgorICogUmVhZHMgdGhlIHJ4IGRlc2NyaXB0b3IgZnJvbSB0aGUgY3VycmVudCBsb2NhdGlvbiAocnhUb1JlYWQpLgorICogLSBJZiB0aGUgZGVzY3JpcHRvciBoYXMgYSB2YWxpZCBkYXRhL3BrdCwgdGhlbiBnZXQgdGhlIGRhdGEgcG9pbnRlcgorICogLSBjaGVjayBmb3IgdGhlIGlucHV0IHJ4IHBoeSBudW1iZXIKKyAqIC0gaW5jcmVtZW50cyB0aGUgcnggZGF0YSBwb2ludGVyIGJ5IHBrdF9oZWFkX3Jvb21fc2l6ZQorICogLSBkZWNyZW1lbnRzIHRoZSBkYXRhIGxlbmd0aCBieSBwa3RfaGVhZF9yb29tX3NpemUKKyAqIC0gaGFuZG92ZXIgdGhlIHBhY2tldCB0byBjYWxsZXIuCisgKgorICogQHBhcmFtW291dF0JcGt0X3B0cglQb2ludGVyIHRvIHN0b3JlIHJ4IHBhY2tldCBwb2ludGVyCisgKiBAcGFyYW1bb3V0XSBwaHlfcG9ydCBQb2ludGVyIHRvIHN0b3JlIHJlY3YgcGh5IHBvcnQKKyAqCisgKiBAcmV0dXJuCS0xIGlmIG5vIHBhY2tldCwgZWxzZSByZXR1cm5zIGxlbmd0aCBvZiBwYWNrZXQuCisgKi8KK2ludCBwZmVfcmVjdih1bnNpZ25lZCBpbnQgKnBrdF9wdHIsIGludCAqcGh5X3BvcnQpCit7CisJc3RydWN0IHJ4X2Rlc2NfcyAqcnhfZGVzYyA9IGdfcnhfZGVzYzsKKwlzdHJ1Y3QgYnVmRGVzYyAqYmQ7CisJaW50IGxlbiA9IC0xOworCXZvbGF0aWxlIHUzMiBjdHJsOworCXN0cnVjdCBoaWZfaGVhZGVyX3MgKmhpZl9oZWFkZXI7CisKKwliZCA9IHJ4X2Rlc2MtPnJ4QmFzZSArIHJ4X2Rlc2MtPnJ4VG9SZWFkOworCisJaWYgKGJkLT5jdHJsICYgQkRfQ1RSTF9ERVNDX0VOKQorCQlyZXR1cm4gbGVuOyAvL05vIHBlbmRpbmcgUnggcGFja2V0CisKKwkvKiB0aGlzIGxlbiBpbmNsdWRlIGhpZl9oZWFkZXIoOGJ5dGVzKSAqLworCWxlbiA9IGJkLT5jdHJsICYgMHhGRkZGOworCisJaGlmX2hlYWRlciA9IChzdHJ1Y3QgaGlmX2hlYWRlcl9zICopRERSX1BIWVNfVE9fVklSVChiZC0+ZGF0YSk7CisKKworCS8qIEdldCB0aGUgcmVjaXZlIHBvcnQgaW5mbyBmcm9tIHRoZSBwYWNrZXQgKi8KKwlkcHJpbnQoIlBrdCByZWN2J2Q6IFBrdCBwdHIoJXApLCBsZW4oJWQpLCBnZW1hY19wb3J0KCVkKSBzdGF0dXMoJTA4eClcbiIsCisJCQkJaGlmX2hlYWRlciwgbGVuLCBoaWZfaGVhZGVyLT5wb3J0X25vLCBiZC0+c3RhdHVzKTsKKworI2lmIDAKKwl7CisJCWludCBpOworCQl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKiloaWZfaGVhZGVyOworCQlmb3IoaT0wOyBpIDwgbGVuOyBpKyspIHsKKwkJCWlmKCEoaSAlIDE2KSkKKwkJCQlwcmludGYoIlxuIik7CisJCQlwcmludGYoIiAlMDJ4IiwgcFtpXSk7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCX0KKyNlbmRpZgorCisJKnBrdF9wdHIgPSAodW5zaWduZWQgaW50ICkoaGlmX2hlYWRlciArIDEpOworCSpwaHlfcG9ydCA9IGhpZl9oZWFkZXItPnBvcnRfbm87CisJbGVuIC09IHNpemVvZihzdHJ1Y3QgaGlmX2hlYWRlcl9zKTsKKworCS8qIHJlc2V0IGJkIGNvbnRyb2wgZmllbGQgKi8KKwljdHJsID0gKE1BWF9GUkFNRV9TSVpFIHwgQkRfQ1RSTF9ERVNDX0VOIHwgQkRfQ1RSTF9ESVIpOworCWJkLT5jdHJsID0gY3RybDsKKwliZC0+c3RhdHVzID0gMDsKKworCXJ4X2Rlc2MtPnJ4VG9SZWFkID0gKHJ4X2Rlc2MtPnJ4VG9SZWFkICsgMSkgJiAocnhfZGVzYy0+cnhSaW5nU2l6ZSAtIDEpOworCisJLyogR2l2ZSBTVEFSVF9TVFJPQkUgdG8gQkRQIHRvIGZldGNoIHRoZSBkZXNjcmlwdG9yIF9fTk9XX18sCisJICogQkRQIG5lZWQgbm90IHRvIHdhaXQgZm9yIHJ4X3BvbGxfY3ljbGUgdGltZSB0byBmZXRjaCB0aGUgZGVzY3JpcHRvciwKKwkgKiBJbiBpZGxlIHN0YXRlIChpZS4sIG5vIHJ4IHBrdCksIEJEUCB3aWxsIG5vdCBmZXRjaAorCSAqIHRoZSBkZXNjcmlwdG9yIGV2ZW4gaWYgc3Ryb2JlIGlzIGdpdmVuKEkgdGhpbmspICovCisJd3JpdGVsKChyZWFkbChISUZfUlhfQ1RSTCkgfCBISUZfQ1RSTF9CRFBfQ0hfU1RBUlRfV1NUQiksIEhJRl9SWF9DVFJMKTsKKworCXJldHVybiBsZW47Cit9CisKKworLyoqIEhJRiBUeCBpbnRlcmZhY2UgZnVuY3Rpb24KKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBzaW5nbGUgcGFja2V0IHRvIFBGRSBmcm9tIEhJRiBpbnRlcmZhY2UuCisgKiAtIE5vIGludGVycnVwdCBpbmRpY2F0aW9uIG9uIHR4IGNvbXBsZXRpb24uCisgKiAtIEFmdGVyIHR4IGRlc2NyaXB0b3IgaXMgdXBkYXRlZCBhbmQgVFggRE1BIGlzIGVuYWJsZWQuCisgKiAtIFRvIHN1cHBvcnQgYm90aCBjaGlwaXQgYW5kIHJlYWQgYzJrIGVudmlyb25tZW50LCBkYXRhIGlzIGNvcGllZCB0bworICogICB0eCBidWZmZXJzLiBBZnRlciB2ZXJpZmljYXRpb24gdGhpcyBjb3BpZWQgY2FuIGJlIGF2b2lkZWQuCisgKgorICogQHBhcmFtW2luXSBwaHlfcG9ydAlQaHkgcG9ydCBudW1iZXIgdG8gc2VuZCBvdXQgdGhpcyBwYWNrZXQKKyAqIEBwYXJhbVtpbl0gZGF0YQlQb2ludGVyIHRvIHRoZSBkYXRhCisgKiBAcGFyYW1baW5dIGxlbmd0aAlMZW5ndGggb2YgdGhlIGV0aGVybmV0IHBhY2tldCB0byBiZSB0cmFuc2ZlcmVkLgorICoKKyAqIEByZXR1cm4gLTEgaWYgdHggUSBpcyBmdWxsLCBlbHNlIHJldHVybnMgdGhlIHR4IGxvY2F0aW9uIHdoZXJlIHRoZSBwa3QgaXMgcGxhY2VkLgorICovCitpbnQgcGZlX3NlbmQoaW50IHBoeV9wb3J0LCB2b2lkICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCB0eF9kZXNjX3MgKnR4X2Rlc2MgPSBnX3R4X2Rlc2M7CisJc3RydWN0IGJ1ZkRlc2MgKmJkOworCXN0cnVjdCBoaWZfaGVhZGVyX3MgaGlmX2hlYWRlcjsKKwl1OCAqdHhfYnVmX3ZhOworCXZvbGF0aWxlIHUzMiBjdHJsX3dvcmQ7CisKKwlkcHJpbnQoIiVzOnBrdDogJXAsIGxlbjogJWQsIHR4QmFzZTogJXAsIHR4VG9TZW5kOiAlZFxuIiwgX19mdW5jX18sCisJCQlkYXRhLCBsZW5ndGgsIHR4X2Rlc2MtPnR4QmFzZSwgdHhfZGVzYy0+dHhUb1NlbmQpOworCisJYmQgPSB0eF9kZXNjLT50eEJhc2UgKyB0eF9kZXNjLT50eFRvU2VuZDsKKworCS8qIGNoZWNrIHF1ZXVlLWZ1bGwgY29uZGl0aW9uICovCisJaWYgKGJkLT5jdHJsICYgQkRfQ1RSTF9ERVNDX0VOKSB7CisJCXByaW50ZigiVHggcXVldWUgZnVsbFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBQRkUgY2hlY2tzIGZvciBtaW4gcGt0IHNpemUgKi8KKwlpZiAobGVuZ3RoIDwgTUlOX1BLVF9TSVpFKSB7CisJCWxlbmd0aCA9IE1JTl9QS1RfU0laRTsKKwl9CisKKwl0eF9idWZfdmEgPSAodTggKilERFJfUEhZU19UT19WSVJUKGJkLT5kYXRhKTsKKwlkcHJpbnQoIiVzOiB0eF9idWZfdmE6ICVwLCB0eF9idWZfcGE6ICUwOHhcbiIsIF9fZnVuY19fLCB0eF9idWZfdmEsIGJkLT5kYXRhKTsKKworCS8qIEZpbGwgdGhlIGdlbWFjL3BoeSBwb3J0IG51bWJlciB0byBzZW5kIHRoaXMgcGFja2V0IG91dCAqLworCW1lbXNldCgmaGlmX2hlYWRlciwgMCAsICBzaXplb2Yoc3RydWN0IGhpZl9oZWFkZXJfcykpOworCWhpZl9oZWFkZXIucG9ydF9ubyA9IHBoeV9wb3J0OworCisJbWVtY3B5KHR4X2J1Zl92YSwgKHU4ICopJmhpZl9oZWFkZXIsIHNpemVvZihzdHJ1Y3QgaGlmX2hlYWRlcl9zKSk7CisJbWVtY3B5KHR4X2J1Zl92YSArIHNpemVvZihzdHJ1Y3QgaGlmX2hlYWRlcl9zKSwgZGF0YSwgbGVuZ3RoKTsKKwlsZW5ndGggKz0gc2l6ZW9mKHN0cnVjdCBoaWZfaGVhZGVyX3MpOworCisjaWYgMAorCXsKKwkJaW50IGk7CisJCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKXR4X2J1Zl92YTsKKwkJZm9yKGk9MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCQlpZiAoIShpICUgMTYpKSBwcmludGYoIlxuIik7CisJCQlwcmludGYoIiUwMnggIiwgcFtpXSk7CisJCX0KKwl9CisjZW5kaWYKKworCWRwcmludCgiYmVmb3JlMDogVHggRG9uZSwgc3RhdHVzOiAlMDh4LCBjdHJsOiAlMDh4XG4iLCBiZC0+c3RhdHVzLCBiZC0+Y3RybCk7CisKKwkvKiBmaWxsIHRoZSB0eCBkZXNjICovCisJY3RybF93b3JkID0gKHUzMikoQkRfQ1RSTF9ERVNDX0VOIHwgQkRfQ1RSTF9MSUZNIHwgKGxlbmd0aCAmIDB4RkZGRikpOworCWJkLT5jdHJsID0gY3RybF93b3JkOworCWJkLT5zdGF0dXMgPSAwOworCisJLyogTk9URTogVGhpcyBjb2RlIGNhbiBiZSByZW1vdmVkIGFmdGVyIHZlcmlmaWNhdGlvbiAqLworI2lmIDEgLy9TUkFNX1JFVEVOVElPTl9CVUcKKwljdHJsX3dvcmQgPSAwOworCWJkLT5zdGF0dXMgPSAweEYwOworCWN0cmxfd29yZCA9IGJkLT5jdHJsOworCS8vcHJpbnRmKCIwOiBjb250cmwgd29yZDogJTA4eFxuIiwgY3RybF93b3JkKTsKKyNlbmRpZgorCisJLyogSW5kaWNhdGUgVHggRE1BIHRvIHN0YXJ0IGZldGNoaW5nIHRoZSBUeCBEZXNjcmlwdG9yLAorICAgIAkgKiBzZXQgU1RBUlRfU1RPQkUgKi8KKwkvL3dyaXRlbCgocmVhZGwoSElGX1RYX0NUUkwpIHwgSElGX1RYX0JEUF9DSF9TVEFSVF9XU1RCKSwgSElGX1RYX0NUUkwpOworCS8vd3JpdGVsKChyZWFkbChISUZfVFhfQ1RSTCkgfCAoSElGX1RYX0RNQV9FTiB8IEhJRl9UWF9CRFBfQ0hfU1RBUlRfV1NUQikpLCBISUZfVFhfQ1RSTCk7CisJd3JpdGVsKChISUZfQ1RSTF9ETUFfRU4gfCBISUZfQ1RSTF9CRFBfQ0hfU1RBUlRfV1NUQiksIEhJRl9UWF9DVFJMKTsKKworCXVkZWxheSgxMDApOworCisJcmV0dXJuIHR4X2Rlc2MtPnR4VG9TZW5kOworfQorCisvKiogSElGIHRvIGNoZWNrIHRoZSBUeCBkb25lCisgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGNoY2VjayB0aGUgdHggZG9uZSBpbmRpY2F0aW9uIG9mIHRoZSBjdXJyZW50IHR4VG9TZW5kIGxvY2F0aW9ucworICogIGlmIHN1Y2Nlc3MsIG1vdmVzIHRoZSB0eFRvU2VuZCB0byBuZXh0IGxvY2F0aW9uLgorICoKKyAqIEByZXR1cm4gLTEgaWYgVFggb3duZXJzaGlwIGJpdCBpcyBub3QgY2xlYXJlZCBieSBody4KKwkJCSAgZWxzZSBvbiBzdWNjZXNzICh0eCBkb25lIGNvcGxldGlvbikgcmV0dXJucyB6ZXJvLgorICovCitpbnQgcGZlX3R4X2RvbmUodm9pZCkKK3sKKwlzdHJ1Y3QgdHhfZGVzY19zICp0eF9kZXNjID0gZ190eF9kZXNjOworCXN0cnVjdCBidWZEZXNjICpiZDsKKwl2b2xhdGlsZSB1MzIgY3RybF93b3JkOworCisJZHByaW50KCIlczp0eEJhc2U6ICVwLCB0eFRvU2VuZDogJWRcbiIsIF9fZnVuY19fLCB0eF9kZXNjLT50eEJhc2UsIHR4X2Rlc2MtPnR4VG9TZW5kKTsKKworCWJkID0gdHhfZGVzYy0+dHhCYXNlICsgdHhfZGVzYy0+dHhUb1NlbmQ7CisKKwkvKiBjaGVjayBxdWV1ZS1mdWxsIGNvbmRpdGlvbiAqLworCWN0cmxfd29yZCA9IGJkLT5jdHJsOworCWlmIChjdHJsX3dvcmQgJiBCRF9DVFJMX0RFU0NfRU4pCisJCXJldHVybiAtMTsKKworCS8qIHJlc2V0IHRoZSBjb250cm9sIGZpZWxkICovCisJYmQtPmN0cmwgPSAwOworCS8vYmQtPmRhdGEgPSAodTMyKU5VTEw7CisJYmQtPnN0YXR1cyA9IDA7CisKKwlkcHJpbnQoIlR4IERvbmUgOiBzdGF0dXM6ICUwOHgsIGN0cmw6ICUwOHhcbiIsIGJkLT5zdGF0dXMsIGJkLT5jdHJsKTsKKworCS8qIGluY3JlbWVudCB0aGUgdHh0b3NlbmQgaW5kZXggdG8gbmV4dCBsb2NhdGlvbiAqLworCXR4X2Rlc2MtPnR4VG9TZW5kID0gKHR4X2Rlc2MtPnR4VG9TZW5kICsgMSkgJiAodHhfZGVzYy0+dHhSaW5nU2l6ZSAtIDEpOworCisJZHByaW50KCJUeCBuZXh0IHBrdCBsb2NhdGlvbjogJWRcbiIsIHR4X2Rlc2MtPnR4VG9TZW5kKTsKKworCXJldHVybiAwOworfQorCisvKiogR0VNQUMgaW5pdGlhbGl6YXRpb24KKyAqIEluaXRpYWxpemVzIHRoZSBHRU1BQyByZWdpc3RlcnMuCisgKgorICogQHBhcmFtW2luXSBnZW1hY19iYXNlICAgUG9pbnRlciB0byBHRU1BQyByZWcgYmFzZQorICogQHBhcmFtW2luXSBtb2RlIEdFTUFDIG1vZGUgdG8gY29uZmlndXJlIChNSUkgY29uZmlnKQorICogQHBhcmFtW2luXSBzcGVlZCBHRU1BQyBzcGVlZAorICogQHBhcmFtW2luXSBkdXBsZXgKKyAqLwordm9pZCBwZmVfZ2VtYWNfaW5pdCh2b2lkICpnZW1hY19iYXNlLCB1MzIgbW9kZSwgdTMyIHNwZWVkLCB1MzIgZHVwbGV4KQoreworCUdFTUFDX0NGRyBnZW1hY19jZmcgID0geworCQkubW9kZSA9IG1vZGUsCisJCS5zcGVlZCA9IHNwZWVkLAorCQkuZHVwbGV4ID0gZHVwbGV4LAorCX07CisKKwlkcHJpbnQoIiVzOiBnZW1hY19iYXNlPSVwXG4iLCBfX2Z1bmNfXywgZ2VtYWNfYmFzZSk7CisKKwlnZW1hY19pbml0KGdlbWFjX2Jhc2UsICZnZW1hY19jZmcpOworCisJLy9nZW1hY19zZXRfbG9vcChnZW1hY19iYXNlLCBMQl9OT05FKTsKKwkvL2dlbWFjX2Rpc2FibGVfY29weV9hbGwoZ2VtYWNfYmFzZSk7CisJLy9nZW1hY19kaXNhYmxlX3J4X2NoZWNrc3VtX29mZmxvYWQoZ2VtYWNfYmFzZSk7CisKKwlnZW1hY19hbGxvd19icm9hZGNhc3QoZ2VtYWNfYmFzZSk7CisJZ2VtYWNfZGlzYWJsZV91bmljYXN0KGdlbWFjX2Jhc2UpOyAvKiB1bmljYXN0IGhhc2ggZGlzYWJsZWQgICovCisJZ2VtYWNfZGlzYWJsZV9tdWx0aWNhc3QoZ2VtYWNfYmFzZSk7IC8qIG11bHRpY2FzdCBoYXNoIGRpc2FibGVkICovCisJZ2VtYWNfZGlzYWJsZV9mY3NfcngoZ2VtYWNfYmFzZSk7CisJZ2VtYWNfZGlzYWJsZV8xNTM2X3J4KGdlbWFjX2Jhc2UpOworCWdlbWFjX2VuYWJsZV9wYXVzZV9yeChnZW1hY19iYXNlKTsKKwlnZW1hY19lbmFibGVfcnhfY2hlY2tzdW1fb2ZmbG9hZChnZW1hY19iYXNlKTsKK30KKworLyoqIEhlbHBlciBmdW5jdGlvbiB0byBkdW1wIFJ4IGRlc2NyaXB0b3JzLgorICovCit2b2lkIGhpZl9yeF9kZXNjX2R1bXAodm9pZCkKK3sKKwlzdHJ1Y3QgYnVmRGVzYyAqYmRfdmE7CisJaW50IGk7CisJc3RydWN0IHJ4X2Rlc2NfcyAqcnhfZGVzYzsKKworCWlmIChnX3J4X2Rlc2MgPT0gTlVMTCkgeworCQlwcmludGYoIiVzOiBISUYgUnggZGVzYyBubyBpbml0IFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJcnhfZGVzYyA9IGdfcnhfZGVzYzsKKwliZF92YSA9IHJ4X2Rlc2MtPnJ4QmFzZTsKKworCXByaW50ZigiSElGIHJ4IGRlc2M6IGJhc2VfdmE6ICVwLCBiYXNlX3BhOiAlMDh4XG4iLCByeF9kZXNjLT5yeEJhc2UsIHJ4X2Rlc2MtPnJ4QmFzZV9wYSk7CisJZm9yIChpPTA7IGkgPCByeF9kZXNjLT5yeFJpbmdTaXplOyBpKyspIHsKKy8vCQlwcmludGYoInN0YXR1czogJTA4eCwgY3RybDogJTA4eCwgZGF0YTogJTA4eCwgbmV4dDogJXBcbiIsCisvLwkJCWJkX3ZhLT5zdGF0dXMsIGJkX3ZhLT5jdHJsLCBiZF92YS0+ZGF0YSwgYmRfdmEtPm5leHQpOworCQliZF92YSsrOworCX0KK30KKworLyoqIEhJRiBSeCBEZXNjIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGhpZl9yeF9kZXNjX2luaXQoc3RydWN0IHBmZSAqcGZlKQoreworCXUzMiBjdHJsOworCXN0cnVjdCBidWZEZXNjICpiZF92YTsKKwlzdHJ1Y3QgYnVmRGVzYyAqYmRfcGE7CisJc3RydWN0IHJ4X2Rlc2NfcyAqcnhfZGVzYzsKKwl1MzIgcnhfYnVmX3ZhOworCXUzMiByeF9idWZfcGE7CisJaW50IGk7CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoZ19yeF9kZXNjKSB7CisJCXByaW50ZigiJXM6IEhJRiBSeCBkZXNjIHJlLWluaXQgcmVxdWVzdFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlyeF9kZXNjID0gKHN0cnVjdCByeF9kZXNjX3MgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCByeF9kZXNjX3MpKTsKKwlpZiAocnhfZGVzYyA9PSBOVUxMKSB7CisJCXByaW50ZigiJXM6JWQ6TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQocnhfZGVzYywgMCAsIHNpemVvZihzdHJ1Y3QgcnhfZGVzY19zKSk7CisKKwkvKiBpbml0OiBSeCByaW5nIGJ1ZmZlciAqLworCXJ4X2Rlc2MtPnJ4UmluZ1NpemUgPSBISUZfUlhfREVTQ19OVDsKKworCS8qIE5PVEU6IG11c3QgYmUgNjRiaXQgYWxpZ25lZCAgKi8KKwliZF92YSA9IChzdHJ1Y3QgYnVmRGVzYyAqKShwZmUtPmRkcl9iYXNlYWRkciArIFJYX0JEX0JBU0VBRERSKTsKKwliZF9wYSA9IChzdHJ1Y3QgYnVmRGVzYyAqKShwZmUtPmRkcl9waHlzX2Jhc2VhZGRyICsgUlhfQkRfQkFTRUFERFIpOworCisJcnhfZGVzYy0+cnhCYXNlID0gYmRfdmE7CisJcnhfZGVzYy0+cnhCYXNlX3BhID0gKHVuc2lnbmVkIGxvbmcpYmRfcGE7CisKKwlyeF9idWZfdmEgPSAodTMyKShwZmUtPmRkcl9iYXNlYWRkciArIEhJRl9SWF9QS1RfRERSX0JBU0VBRERSKTsKKwlyeF9idWZfcGEgPSBwZmUtPmRkcl9waHlzX2Jhc2VhZGRyICsgSElGX1JYX1BLVF9ERFJfQkFTRUFERFI7CisKKworCWRwcmludCgiJXM6IFJ4IGRlc2MgYmFzZTogJXAsIGJhc2VfcGE6ICUwOHgsIGRlc2NfY291bnQ6ICVkXG4iLAorCQlfX2Z1bmNfXywgcnhfZGVzYy0+cnhCYXNlLCByeF9kZXNjLT5yeEJhc2VfcGEsIHJ4X2Rlc2MtPnJ4UmluZ1NpemUpOworCisJbWVtc2V0KGJkX3ZhLCAwLCBzaXplb2Yoc3RydWN0IGJ1ZkRlc2MpICogcnhfZGVzYy0+cnhSaW5nU2l6ZSk7CisKKwljdHJsID0gKE1BWF9GUkFNRV9TSVpFIHwgQkRfQ1RSTF9ERVNDX0VOIHwgQkRfQ1RSTF9ESVIgfCBCRF9DVFJMX0xJRk0pOworCWZvciAoaT0wOyBpIDwgcnhfZGVzYy0+cnhSaW5nU2l6ZTsgaSsrKSB7CisJCWJkX3ZhLT5uZXh0ID0gYmRfcGEgKyAxOworCQliZF92YS0+Y3RybCA9IGN0cmw7CisJCWJkX3ZhLT5kYXRhID0gcnhfYnVmX3BhICsgKGkgKiBNQVhfRlJBTUVfU0laRSk7CisvLwkJcHJpbnRmKCJzdGF0dXM6ICUwOHgsIGN0cmw6ICUwOHgsIGRhdGE6ICUwOHgsIG5leHQ6ICVwXG4iLAorLy8JCQliZF92YS0+c3RhdHVzLCBiZF92YS0+Y3RybCwgYmRfdmEtPmRhdGEsIGJkX3ZhLT5uZXh0KTsKKwkJYmRfdmErKzsKKwkJYmRfcGErKzsKKwl9CisJLS1iZF92YTsKKwliZF92YS0+bmV4dCA9IChzdHJ1Y3QgYnVmRGVzYyAqKXJ4X2Rlc2MtPnJ4QmFzZV9wYTsKKworCS8qICEhISBUaGlzIGlzIGEgcmVkdW5kZW50IGluZm9ybWF0aW9uIGZvciBoL3cgYXMgd2UgYXJlIGFsc28KKwkJbWFpbnRhaW5pbmcgbmV4dCBhZGRyZXNzIGluIHRoZSBidWZmZXIgZGVzY3JpcHRvcgorCQlQb3NlZGdlOiByZWZlcmVuY2UgY29kZSBkb2VzIG5vdCB1c2luZyB0aGlzIGJpdCB0byBnbyBiYWNrIHRvIGJhc2UgYWRkcmVzcyAqLworCS8vYmQtPmN0cmwgfD0gQkRfQ1RSTF9MQVNUX0JEOworCisJd3JpdGVsKHJ4X2Rlc2MtPnJ4QmFzZV9wYSwgSElGX1JYX0JEUF9BRERSKTsKKwl3cml0ZWwoKHJlYWRsKEhJRl9SWF9DVFJMKSB8IEhJRl9DVFJMX0JEUF9DSF9TVEFSVF9XU1RCKSwgSElGX1JYX0NUUkwpOworCisJZ19yeF9kZXNjID0gcnhfZGVzYzsKKworCXJldHVybiAwOworfQorCisvKiogSGVscGVyIGZ1bmN0aW9uIHRvIGR1bXAgVHggRGVzY3JpcHRvcnMuCisgKi8KK3ZvaWQgaGlmX3R4X2Rlc2NfZHVtcCh2b2lkKQoreworCXN0cnVjdCB0eF9kZXNjX3MgKnR4X2Rlc2M7CisJaW50IGk7CisJc3RydWN0IGJ1ZkRlc2MgKmJkX3ZhOworCisJaWYgKGdfdHhfZGVzYyA9PSBOVUxMKSB7CisJCXByaW50ZigiJXM6IEhJRiBUeCBkZXNjIG5vIGluaXQgXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwl0eF9kZXNjID0gZ190eF9kZXNjOworCWJkX3ZhID0gdHhfZGVzYy0+dHhCYXNlOworCisJcHJpbnRmKCJISUYgdHggZGVzYzogYmFzZV92YTogJXAsIGJhc2VfcGE6ICUwOHhcbiIsIHR4X2Rlc2MtPnR4QmFzZSwgdHhfZGVzYy0+dHhCYXNlX3BhKTsKKwlmb3IgKGk9MDsgaSA8IHR4X2Rlc2MtPnR4UmluZ1NpemU7IGkrKykgeworLy8JCXByaW50Zigic3RhdHVzOiAlMDh4LCBjdHJsOiAlMDh4LCBkYXRhOiAlMDh4LCBuZXh0OiAlcFxuIiwKKy8vCQkJYmRfdmEtPnN0YXR1cywgYmRfdmEtPmN0cmwsIGJkX3ZhLT5kYXRhLCBiZF92YS0+bmV4dCk7CisJCWJkX3ZhKys7CisJfQorfQorCisvKiogSElGIFR4IGRlc2NyaXB0b3IgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgaGlmX3R4X2Rlc2NfaW5pdChzdHJ1Y3QgcGZlICpwZmUpCit7CisJc3RydWN0IGJ1ZkRlc2MgKmJkX3ZhOworCXN0cnVjdCBidWZEZXNjICpiZF9wYTsKKwlpbnQgaTsKKwlzdHJ1Y3QgdHhfZGVzY19zICp0eF9kZXNjOworCXUzMiB0eF9idWZfcGE7CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoZ190eF9kZXNjKSB7CisJCXByaW50ZigiJXM6IEhJRiBUeCBkZXNjIHJlLWluaXQgcmVxdWVzdFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwl0eF9kZXNjID0gKHN0cnVjdCB0eF9kZXNjX3MgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCB0eF9kZXNjX3MpKTsKKwlpZiAodHhfZGVzYyA9PSBOVUxMKSB7CisJCXByaW50ZigiJXM6JWQ6TWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1zZXQodHhfZGVzYywgMCAsIHNpemVvZihzdHJ1Y3QgdHhfZGVzY19zKSk7CisKKwkvKiBpbml0OiBUeCByaW5nIGJ1ZmZlciAqLworCXR4X2Rlc2MtPnR4UmluZ1NpemUgPSBISUZfVFhfREVTQ19OVDsKKwkvKiBOT1RFOiBtdXN0IGJlIDY0Yml0IGFsaWduZWQgICovCisJYmRfdmEgPSAoc3RydWN0IGJ1ZkRlc2MgKikocGZlLT5kZHJfYmFzZWFkZHIgKyBUWF9CRF9CQVNFQUREUik7CisJYmRfcGEgPSAoc3RydWN0IGJ1ZkRlc2MgKikocGZlLT5kZHJfcGh5c19iYXNlYWRkciArIFRYX0JEX0JBU0VBRERSKTsKKworCXR4X2Rlc2MtPnR4QmFzZV9wYSA9ICh1bnNpZ25lZCBsb25nKWJkX3BhOworCXR4X2Rlc2MtPnR4QmFzZSA9IGJkX3ZhOworCisJZHByaW50KCIlczogVHggZGVzY19iYXNlOiAlcCwgYmFzZV9wYTogJTA4eCwgZGVzY19jb3VudDogJWRcbiIsCisJCQlfX2Z1bmNfXywgdHhfZGVzYy0+dHhCYXNlLCB0eF9kZXNjLT50eEJhc2VfcGEsIHR4X2Rlc2MtPnR4UmluZ1NpemUpOworCisJbWVtc2V0KGJkX3ZhLCAwLCBzaXplb2Yoc3RydWN0IGJ1ZkRlc2MpICogdHhfZGVzYy0+dHhSaW5nU2l6ZSk7CisKKwl0eF9idWZfcGEgPSBwZmUtPmRkcl9waHlzX2Jhc2VhZGRyICsgSElGX1RYX1BLVF9ERFJfQkFTRUFERFI7CisKKwlmb3IgKGk9MDsgaSA8IHR4X2Rlc2MtPnR4UmluZ1NpemU7IGkrKykgeworCQliZF92YS0+bmV4dCA9IGJkX3BhICsgMTsKKwkJYmRfdmEtPmRhdGEgPSB0eF9idWZfcGEgKyAoaSAqIE1BWF9GUkFNRV9TSVpFKTsKKy8vCQlwcmludGYoInN0YXR1czogJTA4eCwgY3RybDogJTA4eCwgZGF0YTogJTA4eCwgbmV4dDogJXBcbiIsCisvLwkJCWJkX3ZhLT5zdGF0dXMsIGJkX3ZhLT5jdHJsLCBiZF92YS0+ZGF0YSwgYmRfdmEtPm5leHQpOworCQliZF92YSsrOworCQliZF9wYSsrOworCX0KKwktLWJkX3ZhOworCWJkX3ZhLT5uZXh0ID0gKHN0cnVjdCBidWZEZXNjICopdHhfZGVzYy0+dHhCYXNlX3BhOworLy8JcHJpbnRmKCJzdGF0dXM6ICUwOHgsIGN0cmw6ICUwOHgsIGRhdGE6ICUwOHgsIG5leHQ6ICVwXG4iLAorLy8JCWJkX3ZhLT5zdGF0dXMsIGJkX3ZhLT5jdHJsLCBiZF92YS0+ZGF0YSwgYmRfdmEtPm5leHQpOworCisJLyogISEhIFRoaXMgaXMgYSByZWR1bmRlbnQgaW5mb3JtYXRpb24gZm9yIGgvdyBhcyB3ZSBhcmUgYWxzbworCQltYWludGFpbmluZyBuZXh0IGFkZHJlc3MgaW4gdGhlIGJ1ZmZlciBkZXNjcmlwdG9yLAorCQlQb3NlZGdlOiByZWZlcmVuY2UgY29kZSBkb2VzIG5vdCB1c2luZyBMQVNUX0JEIGZvciBtb3ZpbmcgYmFjayB0byBiYXNlIGFkZHJlc3MgKi8KKwkvL2JkLT5jdHJsIHw9IEJEX0NUUkxfTEFTVF9CRDsKKworCXdyaXRlbCh0eF9kZXNjLT50eEJhc2VfcGEsIEhJRl9UWF9CRFBfQUREUik7CisKKwlnX3R4X2Rlc2MgPSB0eF9kZXNjOworCisJcmV0dXJuIDA7Cit9CisKKy8qKiBQRkUvQ2xhc3MgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHBmZV9jbGFzc19pbml0KHN0cnVjdCBwZmUgKnBmZSkKK3sKKwlDTEFTU19DRkcgY2xhc3NfY2ZnID0geworCQkucm91dGVfdGFibGVfYmFzZWFkZHIgPSBwZmUtPmRkcl9waHlzX2Jhc2VhZGRyICsgUk9VVEVfVEFCTEVfQkFTRUFERFIsCisJCS5yb3V0ZV90YWJsZV9oYXNoX2JpdHMgPSBST1VURV9UQUJMRV9IQVNIX0JJVFMsCisJfTsKKworCWNsYXNzX2luaXQoJmNsYXNzX2NmZyk7CisJcHJpbnRmKCJjbGFzcyBpbml0IGNvbXBsZXRlXG4iKTsKK30KKworLyoqIFBGRS9UTVUgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHBmZV90bXVfaW5pdChzdHJ1Y3QgcGZlICpwZmUpCit7CisJVE1VX0NGRyB0bXVfY2ZnID0geworCQkubGxtX2Jhc2VfYWRkciA9IHBmZS0+ZGRyX3BoeXNfYmFzZWFkZHIgKyBUTVVfTExNX0JBU0VBRERSLAorCQkubGxtX3F1ZXVlX2xlbiA9IFRNVV9MTE1fUVVFVUVfTEVOLAorCX07CisKKwl0bXVfaW5pdCgmdG11X2NmZyk7CisJcHJpbnRmKCJ0bXUgaW5pdCBjb21wbGV0ZVxuIik7Cit9CisKKy8qKiBQRkUvQk1VIChib3RoIEJNVTEgJiBCTVUyKSBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQgcGZlX2JtdV9pbml0KHN0cnVjdCBwZmUgKnBmZSkKK3sKKwlCTVVfQ0ZHIGJtdTFfY2ZnID0geworCQkuYmFzZWFkZHIgPSBDQlVTX1ZJUlRfVE9fUEZFKExNRU1fQkFTRV9BRERSICsgQk1VMV9MTUVNX0JBU0VBRERSKSwKKwkJLmNvdW50ID0gQk1VMV9CVUZfQ09VTlQsCisJCS5zaXplID0gQk1VMV9CVUZfU0laRSwKKwl9OworCisJQk1VX0NGRyBibXUyX2NmZyA9IHsKKwkJLmJhc2VhZGRyID0gcGZlLT5kZHJfcGh5c19iYXNlYWRkciArIEJNVTJfRERSX0JBU0VBRERSLAorCQkuY291bnQgPSBCTVUyX0JVRl9DT1VOVCwKKwkJLnNpemUgPSBCTVUyX0JVRl9TSVpFLAorCX07CisKKwlibXVfaW5pdChCTVUxX0JBU0VfQUREUiwgJmJtdTFfY2ZnKTsKKwlwcmludGYoImJtdTEgaW5pdDogZG9uZVxuIik7CisKKwlibXVfaW5pdChCTVUyX0JBU0VfQUREUiwgJmJtdTJfY2ZnKTsKKwlwcmludGYoImJtdTIgaW5pdDogZG9uZVxuIik7Cit9CisKKyNpZiAhZGVmaW5lZChDT05GSUdfVVRJTF9QRV9ESVNBQkxFRCkKKy8qKiBQRkUvVXRpbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KKyAqLworc3RhdGljIHZvaWQgcGZlX3V0aWxfaW5pdChzdHJ1Y3QgcGZlICpwZmUpCit7CisJVVRJTF9DRkcgdXRpbF9jZmcgPSB7IH07CisKKwl1dGlsX2luaXQoJnV0aWxfY2ZnKTsKKwlwcmludGYoInV0aWwgaW5pdCBjb21wbGV0ZVxuIik7Cit9CisjZW5kaWYKKworLyoqIFBGRS9HUEkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCisgKiAgLSBlZ3BpMSwgZWdwaTIsIGVncGkzLCBoZ3BpCisgKi8KK3N0YXRpYyB2b2lkIHBmZV9ncGlfaW5pdChzdHJ1Y3QgcGZlICpwZmUpCit7CisJR1BJX0NGRyBlZ3BpMV9jZmcgPSB7CisJCS5sbWVtX3J0cnlfY250ID0gRUdQSTFfTE1FTV9SVFJZX0NOVCwKKwkJLnRtbGZfdHh0aHJlcyA9IEVHUEkxX1RNTEZfVFhUSFJFUywKKwkJLmFzZXFfbGVuID0gRUdQSTFfQVNFUV9MRU4sCisJfTsKKworCUdQSV9DRkcgZWdwaTJfY2ZnID0geworCQkubG1lbV9ydHJ5X2NudCA9IEVHUEkyX0xNRU1fUlRSWV9DTlQsCisJCS50bWxmX3R4dGhyZXMgPSBFR1BJMl9UTUxGX1RYVEhSRVMsCisJCS5hc2VxX2xlbiA9IEVHUEkyX0FTRVFfTEVOLAorCX07CisKKyNpZiAwCisJR1BJX0NGRyBlZ3BpM19jZmcgPSB7CisJCS5sbWVtX3J0cnlfY250ID0gRUdQSTNfTE1FTV9SVFJZX0NOVCwKKwkJLnRtbGZfdHh0aHJlcyA9IEVHUEkzX1RNTEZfVFhUSFJFUywKKwkJLmFzZXFfbGVuID0gRUdQSTNfQVNFUV9MRU4sCisJfTsKKyNlbmRpZgorCisJR1BJX0NGRyBoZ3BpX2NmZyA9IHsKKwkJLmxtZW1fcnRyeV9jbnQgPSBIR1BJX0xNRU1fUlRSWV9DTlQsCisJCS50bWxmX3R4dGhyZXMgPSBIR1BJX1RNTEZfVFhUSFJFUywKKwkJLmFzZXFfbGVuID0gSEdQSV9BU0VRX0xFTiwKKwl9OworCisJZ3BpX2luaXQoRUdQSTFfQkFTRV9BRERSLCAmZWdwaTFfY2ZnKTsKKwlwcmludGYoIkdQSTEgaW5pdCBjb21wbGV0ZVxuIik7CisKKyAgIGdwaV9pbml0KEVHUEkyX0JBU0VfQUREUiwgJmVncGkyX2NmZyk7CisJcHJpbnRmKCJHUEkyIGluaXQgY29tcGxldGVcbiIpOworCisjaWYgMAorICAgZ3BpX2luaXQoRUdQSTNfQkFTRV9BRERSLCAmZWdwaTNfY2ZnKTsKKyNlbmRpZgorCisgICBncGlfaW5pdChIR1BJX0JBU0VfQUREUiwgJmhncGlfY2ZnKTsKKwlwcmludGYoIkhHUEkgaW5pdCBjb21wbGV0ZVxuIik7Cit9CisKKy8qKiBIZWxwZXIgZnVuY3Rpb24gZm9yIFBDSSBpbml0IHNlcXVlbmNlLgorICovCit2b2lkIHBmZV9nZW1fZW5hYmxlX2FsbCh2b2lkKQoreworCWdwaV9lbmFibGUoRUdQSTFfQkFTRV9BRERSKTsKKwlnZW1hY19lbmFibGUoRU1BQzFfQkFTRV9BRERSKTsKKworCWdwaV9lbmFibGUoRUdQSTJfQkFTRV9BRERSKTsKKwlnZW1hY19lbmFibGUoRU1BQzJfQkFTRV9BRERSKTsKKworI2lmIDAKKwlncGlfZW5hYmxlKEVHUEkzX0JBU0VfQUREUik7CisJZ2VtYWNfZW5hYmxlKEVNQUMzX0JBU0VfQUREUik7CisjZW5kaWYKK30KKworLyoqIFBGRS9ISUYgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIHBmZV9oaWZfaW5pdChzdHJ1Y3QgcGZlICpwZmUpCit7CisJaGlmX3R4X2Rpc2FibGUoKTsKKwloaWZfcnhfZGlzYWJsZSgpOworCisJaGlmX3R4X2Rlc2NfaW5pdChwZmUpOworCWhpZl9yeF9kZXNjX2luaXQocGZlKTsKKworCWhpZl9pbml0KCk7CisKKwloaWZfdHhfZW5hYmxlKCk7CisJaGlmX3J4X2VuYWJsZSgpOworCisJaGlmX3J4X2Rlc2NfZHVtcCgpOworCWhpZl90eF9kZXNjX2R1bXAoKTsKKworCXByaW50ZigiSElGIGluaXQgY29tcGxldGVcbiIpOworfQorCisvKiogUEZFIGluaXRpYWxpemF0aW9uCisgKiAtIEZpcm13YXJlIGxvYWRpbmcgKENMQVNTLVBFIGFuZCBUTVUtUEUpCisgKiAtIEJNVTEgYW5kIEJNVTIgaW5pdAorICogLSBHRU1BQyBpbml0CisgKiAtIEdQSSBpbml0CisgKiAtIENMQVNTLVBFIGluaXQKKyAqIC0gVE1VLVBFIGluaXQKKyAqIC0gSElGIHR4IGFuZCByeCBkZXNjcmlwdG9ycyBpbml0CisgKgorICogQHBhcmFtW2luXQllZGV2CVBvaW50ZXIgdG8gZXRoIGRldmljZSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiAwLCBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IHBmZV9od19pbml0KHN0cnVjdCBwZmUgKnBmZSkKK3sKKworCWRwcmludCgiJXM6IHN0YXJ0IFxuIiwgX19mdW5jX18pOworCisJcGZlX2NsYXNzX2luaXQocGZlKTsKKworCXBmZV90bXVfaW5pdChwZmUpOworCisJcGZlX2JtdV9pbml0KHBmZSk7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfVVRJTF9QRV9ESVNBQkxFRCkKKwlwZmVfdXRpbF9pbml0KHBmZSk7CisjZW5kaWYKKworCXBmZV9ncGlfaW5pdChwZmUpOworCisJcGZlX2hpZl9pbml0KHBmZSk7CisKKwlibXVfZW5hYmxlKEJNVTFfQkFTRV9BRERSKTsKKwlwcmludGYoImJtdTEgZW5hYmxlZFxuIik7CisKKwlibXVfZW5hYmxlKEJNVTJfQkFTRV9BRERSKTsKKwlwcmludGYoImJtdTIgZW5hYmxlZFxuIik7CisKKwlwcmludGYoIiVzOiBkb25lXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBOT1RFOiBMb2FkIFBFIHNwZWNpZmljIGRhdGEgKGlmIGFueSkgKi8KKworCXJldHVybiAwOworfQorCisKKy8qKiBQRkUgcHJvYmUgZnVuY3Rpb24uCisgKiAtIEluaXRpYWxpemVzIHBmZV9saWIKKyAqIC0gcGZlIGh3IGluaXQKKyAqIC0gZncgbG9hZGluZyBhbmQgZW5hYmxlcyBQRXMKKyAqIC0gc2hvdWxkIGJlIGV4ZWN1dGVkIG9uY2UuCisgKgorICogQHBhcmFtW2luXSBwZmUgIFBvaW50ZXIgdGhlIHBmZSBjb250cm9sIGJsb2NrCisgKi8KK2ludCBwZmVfcHJvYmUoc3RydWN0IHBmZSAqcGZlKQoreworCXN0YXRpYyBpbnQgaW5pdF9kb25lID0gMDsKKworCWlmIChpbml0X2RvbmUpCisJCXJldHVybiAwOworCisJcHJpbnRmKCJjYnVzX2Jhc2VhZGRyOiAlcCwgZGRyX2Jhc2VhZGRyOiAlcCwgZGRyX3BoeXNfYmFzZWFkZHI6ICUwOHhcbiIsCisJICAgICAgICAgICAgIHBmZS0+Y2J1c19iYXNlYWRkciwgcGZlLT5kZHJfYmFzZWFkZHIsICh1MzIpcGZlLT5kZHJfcGh5c19iYXNlYWRkcik7CisKKwlwZmVfbGliX2luaXQocGZlLT5jYnVzX2Jhc2VhZGRyLCBwZmUtPmRkcl9iYXNlYWRkciwgcGZlLT5kZHJfcGh5c19iYXNlYWRkcik7CisKKworCXBmZV9od19pbml0KHBmZSk7CisKKwkvKiBMb2FkIHRoZSBjbGFzcyxUTSwgVXRpbCBmdworICAgICogYnkgbm93IHBmZSBpcywKKyAgICAqIC0gb3V0IG9mIHJlc2V0ICsgZGlzYWJsZWQgKyBjb25maWd1cmVkLAorICAgICogRncgbG9hZGluZyBzaG91bGQgYmUgZG9uZSBhZnRlciBwZmVfaHdfaW5pdCgpICovCisJcGZlX2Zpcm13YXJlX2luaXQoKTsKKworCWluaXRfZG9uZSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiogUEZFIHJlbW92ZSBmdW5jdGlvbgorICogIC0gc3RvcGVzIFBFcworICogIC0gZnJlZXMgdHgvcnggZGVzY3JpcHRvciByZXNvdXJjZXMKKyAqICAtIHNob3VsZCBiZSBjYWxsZWQgb25jZS4KKyAqCisgKiBAcGFyYW1baW5dIHBmZSBQb2ludGVyIHRvIHBmZSBjb250cm9sIGJsb2NrLgorICovCitpbnQgcGZlX3JlbW92ZShzdHJ1Y3QgcGZlICpwZmUpCit7CisJaWYgKGdfdHhfZGVzYykgeworCQlmcmVlKGdfdHhfZGVzYyk7CisJfQorCisJaWYgKGdfcnhfZGVzYykgeworCQlmcmVlKGdfcnhfZGVzYyk7CisJfQorCisJcGZlX2Zpcm13YXJlX2V4aXQoKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmVfZHJpdmVyLmggYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmVfZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3MjU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZV9kcml2ZXIuaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqICAoQykgQ29weXJpZ2h0IDIwMTEKKyAqICBBdXRob3IgOiBNaW5kc3BlZWQgVGVjaG5vbG9nZXMKKyAqICAKKyAqICBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogIHByb2plY3QuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqICAKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqICBNQSAwMjExMS0xMzA3IFVTQQorICogKi8KKworI2lmbmRlZiBfX1BGRV9EUklWRVJfSF9fCisjZGVmaW5lIF9fUEZFX0RSSVZFUl9IX18KKworI2luY2x1ZGUgImhhbC5oIgorCisjaW5jbHVkZSAicGZlL3BmZS5oIgorI2luY2x1ZGUgInBmZS9jYnVzLmgiCisjaW5jbHVkZSAicGZlL2NidXMvYm11LmgiCisKKworCit0eXBlZGVmIHN0cnVjdCBidWZEZXNjIHsKKwkJICB1MzIgY3RybDsKKwkJICB1MzIgc3RhdHVzOworCQkgIHUzMiBkYXRhOworCQkgIHN0cnVjdCBidWZEZXNjICpuZXh0OworfWJ1ZkRlc2NfdDsKKworI2lmIGRlZmluZWQoQ09ORklHX1BMQVRGT1JNX1BDSSkKKyNkZWZpbmUgSElGX1JYX0RFU0NfTlQJCTQKKyNkZWZpbmUJSElGX1RYX0RFU0NfTlQJCTQKKyNlbHNlCisjZGVmaW5lIEhJRl9SWF9ERVNDX05UCQk2NAorI2RlZmluZQlISUZfVFhfREVTQ19OVAkJNjQKKyNlbmRpZgorI2RlZmluZSBSWF9CRF9CQVNFQUREUgkJKEhJRl9ERVNDX0JBU0VBRERSKQorI2RlZmluZSBUWF9CRF9CQVNFQUREUgkJKEhJRl9ERVNDX0JBU0VBRERSICsgSElGX1RYX0RFU0NfU0laRSkKKworI2RlZmluZSBNSU5fUEtUX1NJWkUgICAJCTU2CisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFICAgICAyMDQ4CisKKwordHlwZWRlZiBzdHJ1Y3QgaGlmX2hlYWRlcl9zIHsKKwl1OAlwb3J0X25vOyAvL0NhcnJpZXMgaW5wdXQgcG9ydCBubyBmb3IgaG9zdCByeCBwYWNrZXRzIGFuZCBvdXRwdXQgcG9ydCBubyBmb3IgdHggcGt0cworCXU4IHJlc2VydmVkMDsKKwl1MzIgcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBoaWZfaGVhZGVyX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgcnhfZGVzY19zIHsKKwlzdHJ1Y3QgYnVmRGVzYyAqcnhCYXNlOworCXVuc2lnbmVkIGludCByeEJhc2VfcGE7CisJaW50IHJ4VG9SZWFkOworCWludCByeFJpbmdTaXplOworfXJ4X2Rlc2NfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdHhfZGVzY19zIHsKKwlzdHJ1Y3QgYnVmRGVzYyAqdHhCYXNlOworCXVuc2lnbmVkIGludCB0eEJhc2VfcGE7CisJaW50IHR4VG9TZW5kOworCWludCB0eFJpbmdTaXplOworfXR4X2Rlc2NfdDsKKworCisvKiBUaGUgc2V0IG9mIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIGltcGxlbWVudGVkIGluIHRoZSBDYWRlbmNlIE1BQy4KKyAqIFRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyBpbXBsZW1lbnRlZCBhcmUgYSBzdWJzZXQgb2YgYWxsIHRoZSBzdGF0aXN0aWNzCisgKiBhdmFpbGFibGUsIGJ1dCBjb250YWlucyBhbGwgdGhlIGNvbXB1bHNvcnkgb25lcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZ2VtX3N0YXRzeworICAgIHUzMiBvY3RldHNfdHhfYm90OyAgICAgIC8qIExvd2VyIDMyLWJpdHMgZm9yIG51bWJlciBvZiBvY3RldHMgdHgnZCAqLworICAgIHUzMiBvY3RldHNfdHhfdG9wOyAgICAgIC8qIFVwcGVyIDE2LWJpdHMgZm9yIG51bWJlciBvZiBvY3RldHMgdHgnZCAqLworICAgIHUzMiBmcmFtZXNfdHg7ICAgICAgICAgIC8qIE51bWJlciBvZiBmcmFtZXMgdHJhbnNtaXR0ZWQgT0sgKi8KKyAgICB1MzIgYnJvYWRjYXN0X3R4OyAgICAgICAvKiBOdW1iZXIgb2YgYnJvYWRjYXN0IGZyYW1lcyB0cmFuc21pdHRlZCAqLworICAgIHUzMiBtdWx0aWNhc3RfdHg7ICAgICAgIC8qIE51bWJlciBvZiBtdWx0aWNhc3QgZnJhbWVzIHRyYW5zbWl0dGVkICovCisgICAgdTMyIHBhdXNlX3R4OyAgICAgICAgICAgLyogTnVtYmVyIG9mIHBhdXNlIGZyYW1lcyB0cmFuc21pdHRlZC4gKi8KKyAgICB1MzIgZnJhbWU2NF90eDsgICAgICAgICAvKiBOdW1iZXIgb2YgNjRieXRlIGZyYW1lcyB0cmFuc21pdHRlZCAqLworICAgIHUzMiBmcmFtZTY1XzEyN190eDsgICAgIC8qIE51bWJlciBvZiA2NS0xMjcgYnl0ZSBmcmFtZXMgdHJhbnNtaXR0ZWQgKi8KKyAgICB1MzIgZnJhbWUxMjhfMjU1X3R4OyAgICAvKiBOdW1iZXIgb2YgMTI4LTI1NSBieXRlIGZyYW1lcyB0cmFuc21pdHRlZCAqLworICAgIHUzMiBmcmFtZTI1Nl81MTFfdHg7ICAgIC8qIE51bWJlciBvZiAyNTYtNTExIGJ5dGUgZnJhbWVzIHRyYW5zbWl0dGVkICovCisgICAgdTMyIGZyYW1lNTEyXzEwMjNfdHg7ICAgLyogTnVtYmVyIG9mIDUxMi0xMDIzIGJ5dGUgZnJhbWVzIHRyYW5zbWl0dGVkICovCisgICAgdTMyIGZyYW1lMTAyNF8xNTE4X3R4OyAgLyogTnVtYmVyIG9mIDEwMjQtMTUxOCBieXRlIGZyYW1lcyB0cmFuc21pdHRlZCovCisgICAgdTMyIGZyYW1lMTUxOV90eDsgICAgICAgLyogTnVtYmVyIG9mIGZyYW1lcyBncmVhdGVyIHRoYW4gMTUxOCBieXRlcyB0eCovCisgICAgdTMyIHR4X3VydW47ICAgICAgICAgICAgLyogVHJhbnNtaXQgdW5kZXJydW4gZXJyb3JzIGR1ZSB0byBETUEgKi8KKyAgICB1MzIgc2luZ2xlX2NvbDsgICAgICAgICAvKiBOdW1iZXIgb2Ygc2luZ2xlIGNvbGxpc2lvbiBmcmFtZXMgKi8KKyAgICB1MzIgbXVsdGlfY29sOyAgICAgICAgICAvKiBOdW1iZXIgb2YgbXVsdGkgY29sbGlzaW9uIGZyYW1lcyAqLworICAgIHUzMiBleGNlc3NfY29sOyAgICAgICAgIC8qIE51bWJlciBvZiBleGNlc3NpdmUgY29sbGlzaW9uIGZyYW1lcy4gKi8KKyAgICB1MzIgbGF0ZV9jb2w7ICAgICAgICAgICAvKiBDb2xsaXNpb25zIG9jY3VyaW5nIGFmdGVyIHNsb3QgdGltZSAqLworICAgIHUzMiBkZWZfdHg7ICAgICAgICAgICAgIC8qIEZyYW1lcyBkZWZlcnJlZCBkdWUgdG8gY3JzICovCisgICAgdTMyIGNyc19lcnJvcnM7ICAgICAgICAgLyogRXJyb3JzIGNhdXNlZCBieSBjcnMgbm90IGJlaW5nIGFzc2VydGVkLiAqLworICAgIHUzMiBvY3RldHNfcnhfYm90OyAgICAgIC8qIExvd2VyIDMyLWJpdHMgZm9yIG51bWJlciBvZiBvY3RldHMgcngnZCAqLworICAgIHUzMiBvY3RldHNfcnhfdG9wOyAgICAgIC8qIFVwcGVyIDE2LWJpdHMgZm9yIG51bWJlciBvZiBvY3RldHMgcngnZCAqLworICAgIHUzMiBmcmFtZXNfcng7ICAgICAgICAgIC8qIE51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgT0sgKi8KKyAgICB1MzIgYnJvYWRjYXN0X3J4OyAgICAgICAvKiBOdW1iZXIgb2YgYnJvYWRjYXN0IGZyYW1lcyByZWNlaXZlZCAqLworICAgIHUzMiBtdWx0aWNhc3Rfcng7ICAgICAgIC8qIE51bWJlciBvZiBtdWx0aWNhc3QgZnJhbWVzIHJlY2VpdmVkICovCisgICAgdTMyIHBhdXNlX3J4OyAgICAgICAgICAgLyogTnVtYmVyIG9mIHBhdXNlIGZyYW1lcyByZWNlaXZlZC4gKi8KKyAgICB1MzIgZnJhbWU2NF9yeDsgICAgICAgICAvKiBOdW1iZXIgb2YgNjRieXRlIGZyYW1lcyByZWNlaXZlZCAqLworICAgIHUzMiBmcmFtZTY1XzEyN19yeDsgICAgIC8qIE51bWJlciBvZiA2NS0xMjcgYnl0ZSBmcmFtZXMgcmVjZWl2ZWQgKi8KKyAgICB1MzIgZnJhbWUxMjhfMjU1X3J4OyAgICAvKiBOdW1iZXIgb2YgMTI4LTI1NSBieXRlIGZyYW1lcyByZWNlaXZlZCAqLworICAgIHUzMiBmcmFtZTI1Nl81MTFfcng7ICAgIC8qIE51bWJlciBvZiAyNTYtNTExIGJ5dGUgZnJhbWVzIHJlY2VpdmVkICovCisgICAgdTMyIGZyYW1lNTEyXzEwMjNfcng7ICAgLyogTnVtYmVyIG9mIDUxMi0xMDIzIGJ5dGUgZnJhbWVzIHJlY2VpdmVkICovCisgICAgdTMyIGZyYW1lMTAyNF8xNTE4X3J4OyAgLyogTnVtYmVyIG9mIDEwMjQtMTUxOCBieXRlIGZyYW1lcyByZWNlaXZlZCovCisgICAgdTMyIGZyYW1lMTUxOV9yeDsgICAgICAgLyogTnVtYmVyIG9mIGZyYW1lcyBncmVhdGVyIHRoYW4gMTUxOCBieXRlcyByeCovCisgICAgdTMyIHVzaXplX2ZyYW1lczsgICAgICAgLyogRnJhbWVzIHJlY2VpdmVkIGxlc3MgdGhhbiBtaW4gb2YgNjQgYnl0ZXMgKi8KKyAgICB1MzIgZXhjZXNzX2xlbmd0aDsgICAgICAvKiBOdW1iZXIgb2YgZXhjZXNzaXZlIGxlbmd0aCBmcmFtZXMgcnggKi8KKyAgICB1MzIgamFiYmVyczsgICAgICAgICAgICAvKiBFeGNlc3NpdmUgbGVuZ3RoICsgY3JjIG9yIGFsaWduIGVycm9ycy4gKi8KKyAgICB1MzIgZmNzX2Vycm9yczsgICAgICAgICAvKiBOdW1iZXIgb2YgZnJhbWVzIHJlY2VpdmVkIHdpdGggY3JjIGVycm9ycyAqLworICAgIHUzMiBsZW5ndGhfY2hlY2tfZXJyb3JzOy8qIE51bWJlciBvZiBmcmFtZXMgd2l0aCBpbmNvcnJlY3QgbGVuZ3RoICovCisgICAgdTMyIHJ4X3N5bWJvbF9lcnJvcnM7ICAgLyogTnVtYmVyIG9mIHRpbWVzIHJ4X2VyIGFzc2VydGVkIGR1cmluZyByeCAqLworICAgIHUzMiBhbGlnbl9lcnJvcnM7ICAgICAgIC8qIEZyYW1lcyByZWNlaXZlZCB3aXRob3V0IGludGVnZXIgbm8uIGJ5dGVzICovCisgICAgdTMyIHJ4X3Jlc19lcnJvcnM7ICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGJ1ZmZlcnMgcmFuIG91dCBkdXJpbmcgcnggKi8KKyAgICB1MzIgcnhfb3J1bjsgICAgICAgICAgICAvKiBSZWNlaXZlIG92ZXJydW4gZXJyb3JzIGR1ZSB0byBETUEgKi8KKyAgICB1MzIgaXBfY2tzdW07ICAgICAgICAgICAvKiBJUCBoZWFkZXIgY2hlY2tzdW0gZXJyb3JzICovCisgICAgdTMyIHRjcF9ja3N1bTsgICAgICAgICAgIC8qIFRDUCBjaGVja3N1bSBlcnJvcnMgKi8KKyAgICB1MzIgdWRwX2Nrc3VtOyAgICAgICAgICAgLyogVURQIGNoZWNrc3VtIGVycm9ycyAqLworfSB2b2xhdGlsZSBHRU1fU1RBVFM7CisKKworaW50IHBmZV9zZW5kKGludCBwaHlfcG9ydCwgdm9pZCAqZGF0YSwgaW50IGxlbmd0aCk7CitpbnQgcGZlX3JlY3YodW5zaWduZWQgaW50ICpwa3RfcHRyLCBpbnQgKnBoeV9wb3J0KTsKK2ludCBwZmVfdHhfZG9uZSh2b2lkKTsKK3ZvaWQgcGZlX2dlbV9lbmFibGVfYWxsKHZvaWQpOwordm9pZCBwZmVfZ2VtYWNfaW5pdCh2b2lkICpnZW1hY19iYXNlLCB1MzIgbW9kZSwgdTMyIHNwZWVkLCB1MzIgZHVwbGV4KTsKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlX2Zpcm13YXJlLmMgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmVfZmlybXdhcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDI2NDdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlX2Zpcm13YXJlLmMKQEAgLTAsMCArMSwxNzMgQEAKKworCisvKiogQGZpbGUKKyAqICBDb250YWlucyBhbGwgdGhlIGZ1bmN0aW9ucyB0byBoYW5kbGUgcGFyc2luZyBhbmQgbG9hZGluZyBvZiBQRSBmaXJtd2FyZSBmaWxlcy4KKyAqLworCisjaW5jbHVkZSAiaGFsLmgiCisjaW5jbHVkZSAicGZlX2Zpcm13YXJlLmgiCisjaW5jbHVkZSAicGZlL3BmZS5oIgorCisKKy8qIENMQVNTLVBFIEVMRiBmaWxlIGNvbnRlbnQgKi8KK3Vuc2lnbmVkIGNoYXIgY2xhc3NfZndfZGF0YVtdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGludCkpKSkgPSB7CisjaW5jbHVkZSBDTEFTU19GSVJNV0FSRV9GSUxFTkFNRQorfTsKKworLyogVE1VLVBFIEVMRiBmaWxlIGNvbnRlbnQgKi8KK3Vuc2lnbmVkIGNoYXIgdG11X2Z3X2RhdGFbXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihpbnQpKSkpID0geworI2luY2x1ZGUgVE1VX0ZJUk1XQVJFX0ZJTEVOQU1FCit9OworCisjaWYgIWRlZmluZWQoQ09ORklHX1VUSUxfUEVfRElTQUJMRUQpCit1bnNpZ25lZCBjaGFyIHV0aWxfZndfZGF0YVtdID0geworI2luY2x1ZGUgVVRJTF9GSVJNV0FSRV9GSUxFTkFNRQorfTsKKyNlbmRpZgorCisvKiogUEZFIGVsZiBmaXJtd2FyZSBsb2FkZXIuCisqIExvYWRzIGFuIGVsZiBmaXJtd2FyZSBpbWFnZSBpbnRvIGEgbGlzdCBvZiBQRSdzIChzcGVjaWZpZWQgdXNpbmcgYSBiaXRtYXNrKQorKgorKiBAcGFyYW0gcGVfbWFzawlNYXNrIG9mIFBFIGlkJ3MgdG8gbG9hZCBmaXJtd2FyZSB0bworKiBAcGFyYW0gZncJCVBvaW50ZXIgdG8gdGhlIGZpcm13YXJlIGltYWdlCisqCisqIEByZXR1cm4JCTAgb24gc3VjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yCisqCisqLworaW50IHBmZV9sb2FkX2VsZihpbnQgcGVfbWFzaywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlFbGYzMl9FaGRyICplbGZfaGRyID0gKEVsZjMyX0VoZHIgKilmdy0+ZGF0YTsKKwlFbGYzMl9IYWxmIHNlY3Rpb25zID0gYmUxNl90b19jcHUoZWxmX2hkci0+ZV9zaG51bSk7CisJRWxmMzJfU2hkciAqc2hkciA9IChFbGYzMl9TaGRyICopIChmdy0+ZGF0YSArIGJlMzJfdG9fY3B1KGVsZl9oZHItPmVfc2hvZmYpKTsKKwlpbnQgaWQsIHNlY3Rpb247CisJaW50IHJjOworCisJcHJpbnRmKCIlc1xuIiwgX19mdW5jX18pOworCisJcHJpbnRmKCIlcyBubyBvZiBzZWN0aW9uczogJWRcbiIsIF9fZnVuY19fLCBzZWN0aW9ucyk7CisKKwkvKiBTb21lIHNhbml0eSBjaGVja3MgKi8KKwlpZiAoc3RybmNtcCgmZWxmX2hkci0+ZV9pZGVudFtFSV9NQUcwXSwgRUxGTUFHLCBTRUxGTUFHKSkKKwl7CisJCXByaW50ZigiJXM6IGluY29ycmVjdCBlbGYgbWFnaWMgbnVtYmVyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZWxmX2hkci0+ZV9pZGVudFtFSV9DTEFTU10gIT0gRUxGQ0xBU1MzMikKKwl7CisJCXByaW50ZigiJXM6IGluY29ycmVjdCBlbGYgY2xhc3MoJXgpXG4iLCBfX2Z1bmNfXywgZWxmX2hkci0+ZV9pZGVudFtFSV9DTEFTU10pOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGVsZl9oZHItPmVfaWRlbnRbRUlfREFUQV0gIT0gRUxGREFUQTJNU0IpCisJeworCQlwcmludGYoIiVzOiBpbmNvcnJlY3QgZWxmIGRhdGEoJXgpXG4iLCBfX2Z1bmNfXywgZWxmX2hkci0+ZV9pZGVudFtFSV9EQVRBXSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYmUxNl90b19jcHUoZWxmX2hkci0+ZV90eXBlKSAhPSBFVF9FWEVDKQorCXsKKwkJcHJpbnRmKCIlczogaW5jb3JyZWN0IGVsZiBmaWxlIHR5cGUoJXgpXG4iLCBfX2Z1bmNfXywgYmUxNl90b19jcHUoZWxmX2hkci0+ZV90eXBlKSk7CisJCXJldHVybiAtMTsKKwl9CQorCisJZm9yIChzZWN0aW9uID0gMDsgc2VjdGlvbiA8IHNlY3Rpb25zOyBzZWN0aW9uKyssIHNoZHIrKykKKwl7CisJCWlmICghKGJlMzJfdG9fY3B1KHNoZHItPnNoX2ZsYWdzKSAmIChTSEZfV1JJVEUgfCBTSEZfQUxMT0MgfCBTSEZfRVhFQ0lOU1RSKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkJCisJCWZvciAoaWQgPSAwOyBpZCA8IE1BWF9QRTsgaWQrKykKKwkJCWlmIChwZV9tYXNrICYgKDEgPDwgaWQpKQorCQkJeworCQkJCXJjID0gcGVfbG9hZF9lbGZfc2VjdGlvbihpZCwgZnctPmRhdGEsIHNoZHIpOworCQkJCWlmIChyYyA8IDApCisJCQkJCWdvdG8gZXJyOworCQkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIHJjOworfQorCisvKiogUEZFIGZpcm13YXJlIGluaXRpYWxpemF0aW9uLgorKiBMb2FkcyBkaWZmZXJlbnQgZmlybXdhcmUgZmlsZXMgZnJvbSBmaWxlc3lzdGVtLgorKiBJbml0aWFsaXplcyBQRSBJTUVNL0RNRU0gYW5kIFVUSUwtUEUgRERSCisqIEluaXRpYWxpemVzIGNvbnRyb2wgcGF0aCBzeW1ib2wgYWRkcmVzc2VzIChieSBsb29raW5nIHRoZW0gdXAgaW4gdGhlIGVsZiBmaXJtd2FyZSBmaWxlcworKiBUYWtlcyBQRSdzIG91dCBvZiByZXNldAorKgorKiBAcmV0dXJuCTAgb24gc3VjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yCisqCisqLworaW50IHBmZV9maXJtd2FyZV9pbml0KHZvaWQpCit7CisJc3RydWN0IGZpcm13YXJlIGNsYXNzX2Z3LCB0bXVfZnc7CisjaWYgIWRlZmluZWQoQ09ORklHX1VUSUxfUEVfRElTQUJMRUQpCisgCXN0cnVjdCBmaXJtd2FyZSB1dGlsX2Z3OworI2VuZGlmCisJaW50IHJjID0gMDsKKworCXByaW50ZigiJXNcbiIsIF9fZnVuY19fKTsKKworCWNsYXNzX2Z3LmRhdGEgPSBjbGFzc19md19kYXRhOworCXRtdV9mdy5kYXRhID0gdG11X2Z3X2RhdGE7CisjaWYgIWRlZmluZWQoQ09ORklHX1VUSUxfUEVfRElTQUJMRUQpCisJdXRpbF9mdy5kYXRhID0gdXRpbF9md19kYXRhOworI2VuZGlmCisJCisJcmMgPSBwZmVfbG9hZF9lbGYoQ0xBU1NfTUFTSywgJmNsYXNzX2Z3KTsKKwlpZiAocmMgPCAwKSB7CisJCXByaW50ZigiJXM6IGNsYXNzIGZpcm13YXJlIGxvYWQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyMzsKKwl9CisKKwlwcmludGYoIiVzOiBjbGFzcyBmaXJtd2FyZSBsb2FkZWRcbiIsIF9fZnVuY19fKTsKKworCXJjID0gcGZlX2xvYWRfZWxmKFRNVV9NQVNLLCAmdG11X2Z3KTsKKwlpZiAocmMgPCAwKSB7CisJCXByaW50ZigiJXM6IHRtdSBmaXJtd2FyZSBsb2FkIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycjM7CisJfQorCisJcHJpbnRmKCIlczogdG11IGZpcm13YXJlIGxvYWRlZFxuIiwgX19mdW5jX18pOworCisjaWYgIWRlZmluZWQoQ09ORklHX1VUSUxfUEVfRElTQUJMRUQpCisJcmMgPSBwZmVfbG9hZF9lbGYoVVRJTF9NQVNLLCAmdXRpbF9mdyk7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGYoIiVzOiB1dGlsIGZpcm13YXJlIGxvYWQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyMzsKKwl9CisKKwlwcmludGYoIiVzOiB1dGlsIGZpcm13YXJlIGxvYWRlZFxuIiwgX19mdW5jX18pOworCisJdXRpbF9lbmFibGUoKTsKKyNlbmRpZgorCisJdG11X2VuYWJsZSgweGYpOworCWNsYXNzX2VuYWJsZSgpOworCisJZ3BpX2VuYWJsZShIR1BJX0JBU0VfQUREUik7CisKKworZXJyMzoKKwlyZXR1cm4gcmM7Cit9CisKKy8qKiBQRkUgZmlybXdhcmUgY2xlYW51cAorKiBQdXRzIFBFJ3MgaW4gcmVzZXQKKyoKKyoKKyovCit2b2lkIHBmZV9maXJtd2FyZV9leGl0KHZvaWQpCit7CisJcHJpbnRmKCIlc1xuIiwgX19mdW5jX18pOworCisJY2xhc3NfZGlzYWJsZSgpOworCXRtdV9kaXNhYmxlKDB4Zik7CisjaWYgIWRlZmluZWQoQ09ORklHX1VUSUxfUEVfRElTQUJMRUQpCisJdXRpbF9kaXNhYmxlKCk7CisjZW5kaWYKKwloaWZfdHhfZGlzYWJsZSgpOworCWhpZl9yeF9kaXNhYmxlKCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC9wZmVfZmlybXdhcmUuaCBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZV9maXJtd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZTJlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmVfZmlybXdhcmUuaApAQCAtMCwwICsxLDIwIEBACisKKworLyoqIEBmaWxlCisgKiAgQ29udGFpbnMgYWxsIHRoZSBkZWZpbmVzIHRvIGhhbmRsZSBwYXJzaW5nIGFuZCBsb2FkaW5nIG9mIFBFIGZpcm13YXJlIGZpbGVzLgorICovCisKKyNpZm5kZWYgX19QRkVfRklSTVdBUkVfSF9fCisjZGVmaW5lIF9fUEZFX0ZJUk1XQVJFX0hfXworCisKKyNkZWZpbmUgQ0xBU1NfRklSTVdBUkVfRklMRU5BTUUJCSJjbGFzc19zYmxfYzIwMDBfZWxmLmZ3IgorI2RlZmluZSBUTVVfRklSTVdBUkVfRklMRU5BTUUJCSAgICJ0bXVfc2JsX2MyMDAwX2VsZi5mdyIKKyNkZWZpbmUgVVRJTF9GSVJNV0FSRV9GSUxFTkFNRQkJInV0aWxfYzIwMDBfZWxmLmZ3IiAKKworCitpbnQgcGZlX2Zpcm13YXJlX2luaXQodm9pZCk7Cit2b2lkIHBmZV9maXJtd2FyZV9leGl0KHZvaWQpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlX21vZC5oIGIvZHJpdmVycy9jMjAwMF9ldGgvcGZlX21vZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MzZiNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC9wZmVfbW9kLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiAgKEMpIENvcHlyaWdodCAyMDExCisgKiAgQXV0aG9yIDogTWluZHNwZWVkIFRlY2hub2xvZ2VzCisgKiAgCisgKiAgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqICBwcm9qZWN0LgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIAorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAgCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICovCisKKworI2lmbmRlZiBfUEZFX01PRF9IXworI2RlZmluZSBfUEZFX01PRF9IXworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJwZmUvcGZlLmgiCisjaW5jbHVkZSAicGZlL2NidXMuaCIKKyNpbmNsdWRlICJwZmUvY2J1cy9ibXUuaCIKKworI2luY2x1ZGUgInBmZV9kcml2ZXIuaCIKKworc3RydWN0IHBmZTsKKworCitzdHJ1Y3QgcGZlIHsKKwl1bnNpZ25lZCBsb25nIGRkcl9waHlzX2Jhc2VhZGRyOworCXZvaWQgKmRkcl9iYXNlYWRkcjsKKwl2b2lkICpjYnVzX2Jhc2VhZGRyOworCXZvaWQgKmFwYl9iYXNlYWRkcjsKKwl2b2lkICppcmFtX2Jhc2VhZGRyOworCWludCBoaWZfaXJxOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworI2lmIDAKKwlzdHJ1Y3QgcGZlX2N0cmwgY3RybDsKKwlzdHJ1Y3QgcGZlX2hpZiBoaWY7CisJc3RydWN0IHBmZV9ldGggZXRoOworI2VuZGlmCit9OworCitleHRlcm4gc3RydWN0IHBmZSAqcGZlOworCitpbnQgcGZlX3Byb2JlKHN0cnVjdCBwZmUgKnBmZSk7CitpbnQgcGZlX3JlbW92ZShzdHJ1Y3QgcGZlICpwZmUpOworCisjaWZuZGVmIFNaXzFLCisjZGVmaW5lIFNaXzFLIDEwMjQKKyNlbmRpZgorCisjaWZuZGVmIFNaXzFNCisjZGVmaW5lIFNaXzFNICgxMDI0ICogMTAyNCkKKyNlbmRpZgorCisvKiBERFIgTWFwcGluZyAqLworI2lmICFkZWZpbmVkKENPTkZJR19QTEFURk9STV9QQ0kpCisjZGVmaW5lIFVUSUxfQ09ERV9CQVNFQUREUgkwCisjZGVmaW5lIFVUSUxfQ09ERV9TSVpFCQkoMTI4ICogU1pfMUspCisjZGVmaW5lIFVUSUxfRERSX0RBVEFfQkFTRUFERFIJKFVUSUxfQ09ERV9CQVNFQUREUiArIFVUSUxfQ09ERV9TSVpFKQorI2RlZmluZSBVVElMX0REUl9EQVRBX1NJWkUJKDY0ICogU1pfMUspCisjZGVmaW5lIENMQVNTX0REUl9EQVRBX0JBU0VBRERSCShVVElMX0REUl9EQVRBX0JBU0VBRERSICsgVVRJTF9ERFJfREFUQV9TSVpFKQorI2RlZmluZSBDTEFTU19ERFJfREFUQV9TSVpFCSgzMiAqIFNaXzFLKQorI2RlZmluZSBUTVVfRERSX0RBVEFfQkFTRUFERFIJKENMQVNTX0REUl9EQVRBX0JBU0VBRERSICsgQ0xBU1NfRERSX0RBVEFfU0laRSkKKyNkZWZpbmUgVE1VX0REUl9EQVRBX1NJWkUJKDMyICogU1pfMUspCisjZGVmaW5lIFJPVVRFX1RBQkxFX0JBU0VBRERSCShUTVVfRERSX0RBVEFfQkFTRUFERFIgKyBUTVVfRERSX0RBVEFfU0laRSkKKyNkZWZpbmUgUk9VVEVfVEFCTEVfSEFTSF9CSVRTCTE1CS8qKjwgMzJLIGVudHJpZXMgKi8KKyNkZWZpbmUgUk9VVEVfVEFCTEVfU0laRQkoKDEgPDwgUk9VVEVfVEFCTEVfSEFTSF9CSVRTKSAqIENMQVNTX1JPVVRFX1NJWkUpCisjZGVmaW5lIEJNVTJfRERSX0JBU0VBRERSCShST1VURV9UQUJMRV9CQVNFQUREUiArIFJPVVRFX1RBQkxFX1NJWkUpCisjZGVmaW5lIEJNVTJfQlVGX0NPVU5UCQkoNDA5NiAtIDI1NikJCQkvKio8IFRoaXMgaXMgdG8gZ2V0IGEgdG90YWwgRERSIHNpemUgb2YgMTJNaUIgKi8KKyNkZWZpbmUgQk1VMl9ERFJfU0laRQkJKEREUl9CVUZfU0laRSAqIEJNVTJfQlVGX0NPVU5UKQorI2RlZmluZSBUTVVfTExNX0JBU0VBRERSCShCTVUyX0REUl9CQVNFQUREUiArIEJNVTJfRERSX1NJWkUpCisjZGVmaW5lIFRNVV9MTE1fUVVFVUVfTEVOCSgxNiAqIDI1NikJCQkvKio8IE11c3QgYmUgcG93ZXIgb2YgdHdvIGFuZCBhdCBsZWFzdCAxNiAqIDggPSAxMjggYnl0ZXMgKi8KKyNkZWZpbmUgVE1VX0xMTV9TSVpFCQkoNCAqIDE2ICogVE1VX0xMTV9RVUVVRV9MRU4pCS8qKjwgKDQgVE1VJ3MgeCAxNiBxdWV1ZXMgeCBxdWV1ZV9sZW4pICovCisKKyNpZiAoVE1VX0xMTV9CQVNFQUREUiArIFRNVV9MTE1fU0laRSkgPiAweEMwMDAwMAorI2Vycm9yIEREUiBtYXBwaW5nIGFib3ZlIDEyTWlCCisjZW5kaWYKKworI2Vsc2UKKworI2RlZmluZSBVVElMX0NPREVfQkFTRUFERFIJMAorI2lmIGRlZmluZWQoQ09ORklHX1VUSUxfUEVfRElTQUJMRUQpCisjZGVmaW5lIFVUSUxfQ09ERV9TSVpFCQkoMCAqIFNaXzFLKQorI2Vsc2UKKyNkZWZpbmUgVVRJTF9DT0RFX1NJWkUJCSg4ICogU1pfMUspCisjZW5kaWYKKyNkZWZpbmUgVVRJTF9ERFJfREFUQV9CQVNFQUREUgkoVVRJTF9DT0RFX0JBU0VBRERSICsgVVRJTF9DT0RFX1NJWkUpCisjZGVmaW5lIFVUSUxfRERSX0RBVEFfU0laRQkoMCAqIFNaXzFLKQorI2RlZmluZSBDTEFTU19ERFJfREFUQV9CQVNFQUREUgkoVVRJTF9ERFJfREFUQV9CQVNFQUREUiArIFVUSUxfRERSX0RBVEFfU0laRSkKKyNkZWZpbmUgQ0xBU1NfRERSX0RBVEFfU0laRQkoMCAqIFNaXzFLKQorI2RlZmluZSBUTVVfRERSX0RBVEFfQkFTRUFERFIJKENMQVNTX0REUl9EQVRBX0JBU0VBRERSICsgQ0xBU1NfRERSX0RBVEFfU0laRSkKKyNkZWZpbmUgVE1VX0REUl9EQVRBX1NJWkUJKDAgKiBTWl8xSykKKyNkZWZpbmUgUk9VVEVfVEFCTEVfQkFTRUFERFIJKFRNVV9ERFJfREFUQV9CQVNFQUREUiArIFRNVV9ERFJfREFUQV9TSVpFKQorI2RlZmluZSBST1VURV9UQUJMRV9IQVNIX0JJVFMJNQkvKio8IDMyIGVudHJpZXMgKi8KKyNkZWZpbmUgUk9VVEVfVEFCTEVfU0laRQkoKDEgPDwgUk9VVEVfVEFCTEVfSEFTSF9CSVRTKSAqIENMQVNTX1JPVVRFX1NJWkUpCisjZGVmaW5lIEJNVTJfRERSX0JBU0VBRERSCShST1VURV9UQUJMRV9CQVNFQUREUiArIFJPVVRFX1RBQkxFX1NJWkUpCisjZGVmaW5lIEJNVTJfQlVGX0NPVU5UCQk4CisjZGVmaW5lIEJNVTJfRERSX1NJWkUJCShERFJfQlVGX1NJWkUgKiBCTVUyX0JVRl9DT1VOVCkKKyNkZWZpbmUgVE1VX0xMTV9CQVNFQUREUgkoQk1VMl9ERFJfQkFTRUFERFIgKyBCTVUyX0REUl9TSVpFKQorI2RlZmluZSBUTVVfTExNX1FVRVVFX0xFTgkoMTYgKiA4KQkJCS8qKjwgTXVzdCBiZSBwb3dlciBvZiB0d28gYW5kIGF0IGxlYXN0IDE2ICogOCA9IDEyOCBieXRlcyAqLworI2RlZmluZSBUTVVfTExNX1NJWkUJCSg0ICogMTYgKiBUTVVfTExNX1FVRVVFX0xFTikJLyoqPCAoNCBUTVUncyB4IDE2IHF1ZXVlcyB4IHF1ZXVlX2xlbikgKi8KKyNkZWZpbmUgSElGX0RFU0NfQkFTRUFERFIJKFRNVV9MTE1fQkFTRUFERFIgKyBUTVVfTExNX1NJWkUpCisjZGVmaW5lIEhJRl9SWF9ERVNDX1NJWkUJKDE2KkhJRl9SWF9ERVNDX05UKQorI2RlZmluZSBISUZfVFhfREVTQ19TSVpFCSgxNipISUZfVFhfREVTQ19OVCkKKyNkZWZpbmUgSElGX0RFU0NfU0laRQkJKEhJRl9SWF9ERVNDX1NJWkUgKyBISUZfVFhfREVTQ19TSVpFKQorI2RlZmluZSBISUZfUlhfUEtUX0REUl9CQVNFQUREUgkoSElGX0RFU0NfQkFTRUFERFIgKyBISUZfREVTQ19TSVpFKQorI2RlZmluZSBISUZfUlhfUEtUX0REUl9TSVpFCShISUZfUlhfREVTQ19OVCAqIEREUl9CVUZfU0laRSkKKyNkZWZpbmUgSElGX1RYX1BLVF9ERFJfQkFTRUFERFIJKEhJRl9SWF9QS1RfRERSX0JBU0VBRERSICsgSElGX1JYX1BLVF9ERFJfU0laRSkKKyNkZWZpbmUgSElGX1RYX1BLVF9ERFJfU0laRQkoSElGX1RYX0RFU0NfTlQgKiBERFJfQlVGX1NJWkUpCisjZGVmaW5lIFJPVVRFX0JBU0VBRERSCQkoSElGX1RYX1BLVF9ERFJfQkFTRUFERFIgKyBISUZfVFhfUEtUX0REUl9TSVpFKQorI2RlZmluZSBST1VURV9TSVpFCQkoMiAqIENMQVNTX1JPVVRFX1NJWkUpCisKKyNpZiAoUk9VVEVfQkFTRUFERFIgKyBST1VURV9TSVpFKSA+IDB4MTAwMDAKKyNlcnJvciBERFIgbWFwcGluZyBhYm92ZSA2NEtpQgorI2VuZGlmCisKKyNkZWZpbmUgUEZFX0hPU1RfVE9fUENJKGFkZHIpCSgoKHUzMilhZGRyKS0gKCh1MzIpRERSX0JBU0VfQUREUikpCisjZGVmaW5lIFBGRV9QQ0lfVE9fSE9TVChhZGRyKQkoKCh1MzIpYWRkcikrICgodTMyKUREUl9CQVNFX0FERFIpKQorI2VuZGlmCisKKy8qIExNRU0gTWFwcGluZyAqLworI2RlZmluZSBCTVUxX0xNRU1fQkFTRUFERFIJMAorI2RlZmluZSBCTVUxX0JVRl9DT1VOVAkJMjU2CisjZGVmaW5lIEJNVTFfTE1FTV9TSVpFCQkoTE1FTV9CVUZfU0laRSAqIEJNVTFfQlVGX0NPVU5UKQorCisjZW5kaWYgLyogX1BGRV9NT0RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlX3Byb2MuYyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZV9wcm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxYmE2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZV9wcm9jLmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiAgKEMpIENvcHlyaWdodCAyMDExCisgKiAgQXV0aG9yIDogTWluZHNwZWVkIFRlY2hub2xvZ2VzCisgKiAgCisgKiAgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqICBwcm9qZWN0LgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIAorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAgCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisKKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRpciA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICp1bml0ID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBrdCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkdW1wID0gTlVMTDsKKworCitleHRlcm4gdm9pZCBwZmVfY2xhc3NfcmVhZChpbnQgaWQpOworCitzc2l6ZV90IHBmZV91bml0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlczpcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGJ1ZlsyMF07Citzc2l6ZV90IHBmZV91bml0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaW50IGlkID0gLTE7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczpcbiIsIF9fZnVuY19fKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihsYnVmLCBidWYsY291bnQpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlsYnVmW2NvdW50XSA9IDA7CisKKwlpZCA9IHNpbXBsZV9zdHJ0b3VsKGxidWYsIE5VTEwsIDApOworCXByaW50ayhLRVJOX0lORk8gImlkOiAlZFxuIiwgaWQpOworCisJaWYgKChpZCA+PSAwKSB8fCAoaWQgPCA0KSkKKwkJcGZlX2NsYXNzX3JlYWQoaWQpOworCQorCXJldHVybiBjb3VudDsKK30KKworZXh0ZXJuIHZvaWQgcGZlX3ByaW50X3R4X3N0YXR1cyh2b2lkKTsKK3NzaXplX3QgcGZlX3BrdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XG4iLCBfX2Z1bmNfXyk7CisJcGZlX3ByaW50X3R4X3N0YXR1cygpOworCXJldHVybiAwOworfQorCitleHRlcm4gdm9pZCBwZmVfc2VuZF9wa3QoaW50IGxlbik7CisKK3NzaXplX3QgcGZlX3BrdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCBsZW4gPSAtMTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOlxuIiwgX19mdW5jX18pOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGxidWYsIGJ1Zixjb3VudCkpCisJCXJldHVybiAtRU5PTUVNOworCWxidWZbY291bnRdID0gMDsKKworCWxlbiA9IHNpbXBsZV9zdHJ0b3VsKGxidWYsIE5VTEwsIDApOworCXByaW50ayhLRVJOX0lORk8gImxlbjogJWRcbiIsIGxlbik7CisKKwlwZmVfc2VuZF9wa3QobGVuKTsKKworCXJldHVybiBjb3VudDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitleHRlcm4gdm9pZAloaWZfdHhfZGVzY19kdW1wKHZvaWQpOworZXh0ZXJuIHZvaWQJaGlmX3J4X2Rlc2NfZHVtcCh2b2lkKTsKK2V4dGVybiB2b2lkIGNsYXNzX3BlX2R1bXAodm9pZCk7CisKK3NzaXplX3QgcGZlX2R1bXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXByaW50ayhLRVJOX0lORk8gIiVzOlxuIiwgX19mdW5jX18pOworCWhpZl90eF9kZXNjX2R1bXAoKTsKKwloaWZfcnhfZGVzY19kdW1wKCk7CisgICBjbGFzc19wZV9kdW1wKCk7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkIGNsYXNzX2RtZW1fZHVtcChpbnQgaWQpOworc3NpemVfdCBwZmVfZHVtcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCBpZDsKKwlwcmludGsoS0VSTl9JTkZPICIlczpcbiIsIF9fZnVuY19fKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihsYnVmLCBidWYsY291bnQpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlsYnVmW2NvdW50XSA9IDA7CisKKwlpZCA9IHNpbXBsZV9zdHJ0b3VsKGxidWYsIE5VTEwsIDApOworCXByaW50ayhLRVJOX0lORk8gImlkOiAlZFxuIiwgaWQpOworCisJY2xhc3NfZG1lbV9kdW1wKGlkKTsKKworCXJldHVybiBjb3VudDsKK30KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBmZV91bml0X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSBwZmVfdW5pdF9yZWFkLAorCS53cml0ZSA9IHBmZV91bml0X3dyaXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGZlX3BrdF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkID0gcGZlX3BrdF9yZWFkLAorCS53cml0ZSA9IHBmZV9wa3Rfd3JpdGUsCit9OworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwZmVfZHVtcF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkID0gcGZlX2R1bXBfcmVhZCwKKwkud3JpdGUgPSBwZmVfZHVtcF93cml0ZSwKK307CisKK3ZvaWQgcGZlX3Byb2NfaW5pdCh2b2lkKQoreworCXBkaXIgPSBwcm9jX21rZGlyKCJwZmUiLCBOVUxMKTsJCisJaWYgKHBkaXIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gY3JlYXRlIHByb2MgZGlyIGVudHJ5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwl1bml0ID0gY3JlYXRlX3Byb2NfZW50cnkoInVuaXQiLCBTX0lGUkVHLCBwZGlyKTsKKwlpZiAodW5pdCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBjcmVhdGUgcHJvYyBlbnRyeTogdW5pdFxuIiwgX19mdW5jX18pOworCQlyZW1vdmVfcHJvY19lbnRyeSgicGZlIiwgTlVMTCk7CisJCXJldHVybjsKKwl9CisJdW5pdC0+cHJvY19mb3BzID0gJnBmZV91bml0X2ZvcHM7CisKKwlwa3QgPSBjcmVhdGVfcHJvY19lbnRyeSgicGt0IiwgU19JRlJFRywgcGRpcik7CisJaWYgKHVuaXQgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gY3JlYXRlIHByb2MgZW50cnk6IHBrdFxuIiwgX19mdW5jX18pOworCQlyZW1vdmVfcHJvY19lbnRyeSgidW5pdCIsIHBkaXIpOworCQlyZW1vdmVfcHJvY19lbnRyeSgicGZlIiwgTlVMTCk7CisJCXJldHVybjsKKwl9CisJcGt0LT5wcm9jX2ZvcHMgPSAmcGZlX3BrdF9mb3BzOworCisJZHVtcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkdW1wIiwgU19JRlJFRywgcGRpcik7CisJaWYgKGR1bXAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gY3JlYXRlIHByb2MgZW50cnk6IHBrdFxuIiwgX19mdW5jX18pOworCQlyZW1vdmVfcHJvY19lbnRyeSgidW5pdCIsIHBkaXIpOworCQlyZW1vdmVfcHJvY19lbnRyeSgicGt0IiwgcGRpcik7CisJCXJlbW92ZV9wcm9jX2VudHJ5KCJwZmUiLCBOVUxMKTsKKwkJcmV0dXJuOworCX0KKwlkdW1wLT5wcm9jX2ZvcHMgPSAmcGZlX2R1bXBfZm9wczsKKworCisJCit9CisKK3ZvaWQgcGZlX3Byb2NfZXhpdCh2b2lkKQoreworCWlmICh1bml0KQorCQlyZW1vdmVfcHJvY19lbnRyeSgidW5pdCIsIHBkaXIpOworCWlmIChwa3QpCisJCXJlbW92ZV9wcm9jX2VudHJ5KCJwa3QiLCBwZGlyKTsKKwlpZiAoZHVtcCkKKwkJcmVtb3ZlX3Byb2NfZW50cnkoImR1bXAiLCBwZGlyKTsKKwlpZiAocGRpcikgCisJCXJlbW92ZV9wcm9jX2VudHJ5KCJwZmUiLCBOVUxMKTsKKworCXJldHVybjsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jMjAwMF9ldGgvcGZlX3VuaXQuYyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZV91bml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FkNzc5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3BmZV91bml0LmMKQEAgLTAsMCArMSwzMzQgQEAKKy8qCisgKiAgKEMpIENvcHlyaWdodCAyMDExCisgKiAgQXV0aG9yIDogTWluZHNwZWVkIFRlY2hub2xvZ2VzCisgKiAgCisgKiAgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqICBwcm9qZWN0LgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogIAorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAgCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiAgTUEgMDIxMTEtMTMwNyBVU0EKKyAqICovCisKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAicGZlX2RyaXZlci5oIgorCisKK3ZvaWQgZHVtcF9waHlfcmVnKCk7CisjaWYgMAorI2RlZmluZSBETUVNX1RFU1RfQkFTRV9BRERSCTB4MAkvKiAhISEgRm9yIGNsYXNzIG92ZXJsYXBzIHdpdGggcGFja2V0cyBpbiBkbWVtLCBmb3IgdG11IG92ZXJ3cml0ZXMgZXhjZXB0aW9uIHZlY3RvcnMgISEhICovCisKKyNkZWZpbmUgQlVGX1NJWkUgNgorCitzdGF0aWMgdTMyIHdbQlVGX1NJWkVdID0gezB4MDEyMzQ1NjcsIDB4ODlhYmNkZWYsIDB4MDAxMTIyMzMsIDB4NDQ1NTY2NzcsIDB4ODg5OWFhYmIsIDB4Y2NkZGVlZmZ9Oworc3RhdGljIHUzMiB6ZXJvW0JVRl9TSVpFXSA9IHswLCB9Oworc3RhdGljIHUzMiByW0JVRl9TSVpFXTsKKworc3RhdGljIHZvaWQgZG1lbV9yZWFkNF93cml0ZTQodW5zaWduZWQgaW50IGlkKQoreworCXBlX2RtZW1fd3JpdGUoaWQsIHdbMF0sIERNRU1fVEVTVF9CQVNFX0FERFIsIDQpOworCisJclswXSA9IHBlX2RtZW1fcmVhZChpZCwgRE1FTV9URVNUX0JBU0VfQUREUiwgNCk7CisKKwlpZiAoclswXSAhPSB3WzBdKQorCQlwcmludGsoS0VSTl9FUlIgIlBFICVkOiAlcyBmYWlsZWQ6ICUjeCAlI3hcbiIsIGlkLCBfX2Z1bmNfXywgd1swXSwgclswXSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJQRSAlZDogJXMgd3ItcGFzczogJSN4ICUjeFxuIiwgaWQsIF9fZnVuY19fLCB3WzBdLCByWzBdKTsKK30KKyNlbmRpZgorCisjaWYgMAordm9pZCBwZmVfdW5pdF90ZXN0KHZvaWQpCit7CisJdTMyIGksdmFsLGo7CisKKyNpZiAwCisJZG1lbV9yZWFkNF93cml0ZTQoMCk7CisJZG1lbV9yZWFkNF93cml0ZTQoMSk7CisJZG1lbV9yZWFkNF93cml0ZTQoMik7CisJZG1lbV9yZWFkNF93cml0ZTQoMyk7CisKKwkvL2RtZW1fcmVhZDRfd3JpdGU0KDQpOworCWZvcihpPTA7IGkgPCA0OyBpKyspIHsKKwkJdmFsID0gcGVfZG1lbV9yZWFkKDAsIDB4ODMwICsgKGkgKiA0KSwgNCk7CisJCXByaW50ayhLRVJOX0VSUiAiUEUgJWQ6IGxvYzogJWQsIHJlZ01hc2s6ICUwOHhcbiIsIDAsIGksIHZhbCk7CisJfQorCisJdmFsID0gcGVfZG1lbV9yZWFkKDAsIDB4ODQwLCA0KTsKKwlwcmludGsoS0VSTl9FUlIgIlBFICVkOiAlMDh4XG4iLCAwLCB2YWwpOworCisJdmFsID0gcGVfZG1lbV9yZWFkKDAsIDB4ODQ0LCA0KTsKKwlwcmludGsoS0VSTl9FUlIgIlBFICVkOiAlMDh4XG4iLCAwLCB2YWwpOworCisJdmFsID0gcGVfZG1lbV9yZWFkKDAsIDB4ODQwLCA0KTsKKwlwcmludGsoS0VSTl9FUlIgIlBFICVkOiAlMDh4XG4iLCAwLCB2YWwpOworCisJdmFsID0gcGVfZG1lbV9yZWFkKDAsIDB4ODQ0LCA0KTsKKwlwcmludGsoS0VSTl9FUlIgIlBFICVkOiAlMDh4XG4iLCAwLCB2YWwpOworCisKKwl2YWwgPSBwZV9kbWVtX3JlYWQoMCwgMHg4NDQsIDQpOworCXByaW50ayhLRVJOX0VSUiAiUEUgJWQ6ICUwOHhcbiIsIDAsIHZhbCk7CisKKyNlbmRpZgorCisJZm9yKGk9MDsgaSA8IDQ7IGkrKykgIHsKKwkJLy9wcmludGsoS0VSTl9FUlIgIiVzOiAlI2x4ICUjbHhcbiIsIF9fZnVuY19fLCByZWFkbChDTEFTU19TVEFURSksIHJlYWRsKENMQVNTX1BFMF9ERUJVRykpOwkKKwkJCisJCWZvcihqPTA7IGogPCAxMDsgaisrKSAgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogJSNseFxuIiwgX19mdW5jX18sIHJlYWRsKENMQVNTX1BFMF9ERUJVRykpOwkKKwkJfQorCQl2YWwgPSBwZV9kbWVtX3JlYWQoaSwgMHg4NDAsIDQpOworCQlwcmludGsoS0VSTl9FUlIgIlBFICVkOiAlMDh4XG4iLCBpLCB2YWwpOworCQl2YWwgPSBwZV9kbWVtX3JlYWQoaSwgMHg4NDQsIDQpOworCQlwcmludGsoS0VSTl9FUlIgIlBFICVkOiAlMDh4XG4iLCBpLCB2YWwpOworCX0KKworfQorI2VuZGlmCitzdGF0aWMgY2hhciBzdGF0X3N0cmluZ3NbXVs1MF0gPSB7CisJInR4LSBvY3RldHMgIChMb3dlciAzMi1iaXRzKSIsCisJInR4LSBvY3RldHMgIChVcHBlciAxNi1iaXRzKSIsCisJInR4LSBwYWNrZXRzIiwKKwkidHgtIGJyb2FkY2FzdCIsCisJInR4LSBtdWx0aWNhc3QiLAorCSJ0eC0gcGF1c2UiLAorCSJ0eC0gNjQgYnl0ZXMgcGFja2V0cyIsCisJInR4LSA2NCAtIDEyNyBieXRlcyBwYWNrZXRzIiwKKwkidHgtIDEyOCAtIDI1NSBieXRlcyBwYWNrZXRzIiwKKwkidHgtIDI1NiAtIDUxMSBieXRlcyBwYWNrZXRzIiwKKwkidHgtIDUxMiAtIDEwMjMgYnl0ZXMgcGFja2V0cyIsCisJInR4LSAxMDI0IC0gMTUxOCBieXRlcyBwYWNrZXRzIiwKKwkidHgtID4gMTUxOCBieXRlcyBwYWNrZXRzIiwKKwkidHgtIHVuZGVycnVucyAgLSBlcnJvcnMiLAorCSJ0eC0gc2luZ2xlIGNvbGxpc2lvbiIsCisJInR4LSBtdWx0aSBjb2xsaXNpb24iLAorCSJ0eC0gZXhjZXMuIGNvbGxpc2lvbiAgLSBlcnJvcnMiLAorCSJ0eC0gbGF0ZSBjb2xsaXNpb24gIC0gZXJyb3JzIiwKKwkidHgtIGRlZmVycmVkIiwKKwkidHgtIGNhcnJpZXIgc2Vuc2UgLSBlcnJvcnMiLAorCSJyeC0gb2N0ZXRzIChMb3dlciAzMi1iaXRzKSIsCisJInJ4LSBvY3RldHMgKFVwcGVyIDE2LWJpdHMpIiwKKwkicngtIHBhY2tldHMiLAorCSJyeC0gYnJvYWRjYXN0IiwKKwkicngtIG11bHRpY2FzdCIsCisJInJ4LSBwYXVzZSIsCisJInJ4LSA2NCBieXRlcyBwYWNrZXRzIiwKKwkicngtIDY0IC0gMTI3IGJ5dGVzIHBhY2tldHMiLAorCSJyeC0gMTI4IC0gMjU1IGJ5dGVzIHBhY2tldHMiLAorCSJyeC0gMjU2IC0gNTExIGJ5dGVzIHBhY2tldHMiLAorCSJyeC0gNTEyIC0gMTAyMyBieXRlcyBwYWNrZXRzIiwKKwkicngtIDEwMjQgLSAxNTE4IGJ5dGVzIHBhY2tldHMiLAorCSJyeC0gPiAxNTE4IGJ5dGVzIHBhY2tldHMiLAorCSJyeC0gdW5kZXJzaXplIC1lcnJvcnMiLAorCSJyeC0gb3ZlcnNpemUgIC0gZXJyb3JzICIsCisJInJ4LSBqYWJiZXJzIC0gZXJyb3JzIiwKKwkicngtIGZjcyAtIGVycm9ycyIsCisJInJ4LSBsZW5ndGggLSBlcnJvcnMiLAorCSJyeC0gc3ltYm9sIC0gZXJyb3JzIiwKKwkicngtIGFsaWduIC0gZXJyb3JzIiwKKwkicngtIHJlc3NvdXJjZSAtIGVycm9ycyIsCisJInJ4LSBvdmVycnVuIC0gZXJyb3JzIiwKKwkicngtIElQIGNrc3VtIC0gZXJyb3JzIiwKKwkicngtIFRDUCBja3N1bSAtIGVycm9ycyIsCisJInJ4LSBVRFAgY2tzdW0gLSBlcnJvcnMiIAorfTsKK3N0YXRpYyB2b2lkIGdlbV9wcmludF9zdGF0cyh2b2lkICpiYXNlKQoreworCXUzMiAqcHN0YXQgPSAodTMyKilnZW1hY19nZXRfc3RhdHMoYmFzZSk7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTwoc2l6ZW9mKEdFTV9TVEFUUykvNCk7IGkrKykKKwkJcHJpbnRrKCIlcyA6ICVkXG4iLCBzdGF0X3N0cmluZ3NbaV0sICpwc3RhdCsrKTsKK30KKworCit2b2lkIHBmZV9jbGFzc19yZWFkIChpbnQgaWQpCit7CisJdTMyIHZhbCxqOworCisJZm9yKGo9MDsgaiA8IDIwOyBqKyspICB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICUjbHhcbiIsIF9fZnVuY19fLCByZWFkbChDTEFTU19QRTBfREVCVUcpKTsJCisJfQorCisJdmFsID0gcGVfZG1lbV9yZWFkKGlkLCAweDg0MCwgNCk7CisJcHJpbnRrKEtFUk5fRVJSICJQRSAlZDogJTA4eFxuIiwgaWQsIHZhbCk7CisJdmFsID0gcGVfZG1lbV9yZWFkKGlkLCAweDg0NCwgNCk7CisJcHJpbnRrKEtFUk5fRVJSICJQRSAlZDogJTA4eFxuIiwgaWQsIHZhbCk7CisKKwlyZXR1cm47CisKK30KKwordm9pZCBwZmVfc2VuZF9wa3QoaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpwYnVmOworCWludCBpOworCWludCByY291bnQgPSAwOworCWludCByYyxwaHlwb3J0PTA7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczpcbiIsIF9fZnVuY19fKTsKKworCXBidWYgPSAodW5zaWduZWQgY2hhciAqKWttYWxsb2MoMTAyNCoyLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CisKKwlpZiAoKGxlbiA+PSAwKSB8fCAobGVuIDwgMTAwMCkpICB7CisKKwkJZm9yKGk9MDsgaSA8IGxlbjsgaSsrKQorCQkJcGJ1ZltpXSA9IGk7CisjaWYgMAorCQlpZihsZW4gPT0gMTAwKSBwaHlwb3J0PTA7CisJCWlmKGxlbiA9PSAyMDApIHBoeXBvcnQ9MTsKKwkJaWYobGVuID09IDMwMCkgcGh5cG9ydD0yOworCQlpZihsZW4gPT0gNDAwKSBwaHlwb3J0PTM7CisjZW5kaWYKKworCQlyYyA9IHBmZV9zZW5kKHBoeXBvcnQsICh2b2lkICopKHBidWYpLCBsZW4pOworCisJCWlmIChyYyA8IDApCisJCQlnb3RvIGRvbmU7CisJCQkKKwkJLyogd2FpdCBmb3IgdHggZG9uZS9jb21wbGV0aW9uIGluZGljYXRpb24gKi8KKwkJcmNvdW50ID0gMDsKKwkJd2hpbGUgKDEpIHsKKwkJCXJjID0gcGZlX3R4X2RvbmUoKTsgCisJCQlpZiAocmMgPT0gMCkKKwkJCQlicmVhazsKKwkJCW1kZWxheSgxMDApOworCQkJaWYgKHJjb3VudCA9PSAyMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiVHggc2VuZCBmYWlsXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJjb3VudCsrOworCQl9CisJfQorCitkb25lOgorCWtmcmVlKHBidWYpOworfQorCit2b2lkIHBmZV9wcmludF90eF9zdGF0dXModm9pZCkKK3sKKwl1MzIgdmFsOworCisJZ2VtX3ByaW50X3N0YXRzKEVNQUMxX0JBU0VfQUREUik7CisJLy9nZW1fcHJpbnRfc3RhdHMoRU1BQzJfQkFTRV9BRERSKTsKKworCXZhbCA9IHJlYWRsKEhJRl9UWF9DVFJMKTsKKwlwcmludGsoS0VSTl9JTkZPICJUWF9DVFJMOiAlMDh4XG4iLCB2YWwpOworCisJdmFsID0gcmVhZGwoSElGX1RYX0NVUlJfQkRfQUREUik7CisJcHJpbnRrKEtFUk5fSU5GTyAiVFhfQ1VSUl9CRF9BRERSOiAlMDh4XG4iLCB2YWwpOworCisJdmFsID0gcmVhZGwoSElGX1RYX0JEUF9BRERSKTsKKwlwcmludGsoS0VSTl9JTkZPICJUWF9CRFBfQUREUjogJTA4eFxuIiwgdmFsKTsKKworCXZhbCA9IHJlYWRsKEhJRl9UWF9TVEFUVVMpOworCXByaW50ayhLRVJOX0lORk8gIlRYX1NUQVRVUzogJTA4eFxuIiwgdmFsKTsKKworCXZhbCA9IHJlYWRsKEhJRl9UWF9ETUFfU1RBVFVTKTsKKwlwcmludGsoS0VSTl9JTkZPICJUWF9ETUFfU1RBVFVTOiAlMDh4XG4iLCB2YWwpOworCisJdmFsID0gcmVhZGwoQk1VMl9CQVNFX0FERFIrQk1VX1JFTV9CVUZfQ05UKTsKKwlwcmludGsoS0VSTl9JTkZPICJCTVUyX1JFTV9CVUZfQ05UOiAlMDh4XG4iLCB2YWwpOworCisJdmFsID0gcmVhZGwoQk1VMV9CQVNFX0FERFIrQk1VX1JFTV9CVUZfQ05UKTsKKwlwcmludGsoS0VSTl9JTkZPICJCTVUxX1JFTV9CVUZfQ05UOiAlMDh4XG4iLCB2YWwpOworCit9CisKK3ZvaWQgY2xhc3NfZG1lbV9yZWFkbihpbnQgaWQsIHUzMiBhZGRyLCB1MzIgbGVuKQoreworCXUzMiB2YWwsIGk7CisKKworCWZvcihpPTA7IGkgPCBsZW47IGkgKz0gNCkgIHsKKwkJdmFsID0gcGVfZG1lbV9yZWFkKGlkLCBhZGRyK2ksIDQpOworCQlwcmludGsoS0VSTl9JTkZPICIlMDh4OiAlMDh4XG4iLGFkZHIraSwgdmFsKTsKKwl9Cit9CisKK3ZvaWQgY2xhc3NfcG1lbV9yZWFkbihpbnQgaWQsIHUzMiBhZGRyLCB1MzIgbGVuKQoreworCXUzMiB2YWwsIGk7CisKKwlwcmludGsoS0VSTl9JTkZPICJDbGFzcyBwZTogJWQgUE1FTVxuIiwgaWQpOworCWZvcihpPTA7IGkgPCBsZW47IGkgKz0gNCkgIHsKKwkJdmFsID0gcGVfcG1lbV9yZWFkKGlkLCBhZGRyK2ksIDQpOworCQlwcmludGsoS0VSTl9JTkZPICIlMDh4OiAlMDh4XG4iLGFkZHIraSwgdmFsKTsKKwkJbWRlbGF5KDQwKTsKKwl9Cit9CisKK3ZvaWQgY2xhc3NfcGVfZHVtcCh2b2lkKQoreworCXUzMiB2YWwsaixpZDsKKworI2lmIDAKKwlwcmludGsoS0VSTl9JTkZPICJDbGFzcy1QRSAwOiA9PT09PT09PT09PT5cbiIpOworCWZvcihqPTA7IGogPCAyMDsgaisrKSAgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQzogJSNseFxuIiwgX19mdW5jX18sIHJlYWRsKENMQVNTX1BFMF9ERUJVRykmMHhmZmZmKTsJCisJCW1kZWxheSg0MCk7CisJfQorCXByaW50ayhLRVJOX0lORk8gIkNsYXNzLVBFIDA6IERNRU0gL24iKTsKKwljbGFzc19kbWVtX3JlYWRuKDAsMHg4MTQsMjApOworCS8vY2xhc3NfcG1lbV9yZWFkbigwLDB4MTAwMDAsIDI1Nik7CisjZW5kaWYKKwlwcmludGsoS0VSTl9JTkZPICJDbGFzcy1QRSAxOiA9PT09PT09PT09PT5cbiIpOworCWZvcihqPTA7IGogPCAxMDsgaisrKSAgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQzogJSNseFxuIiwgX19mdW5jX18sIHJlYWRsKENMQVNTX1BFMV9ERUJVRykmMHhmZmZmKTsJCisJCW1kZWxheSg0MCk7CisJfQorCWNsYXNzX2RtZW1fcmVhZG4oMSwweDg1OCw0KTsKKwkvL3ByaW50ayhLRVJOX0lORk8gIkNsYXNzLVBFIDE6IERNRU0gL24iKTsKKwkvL2NsYXNzX2RtZW1fcmVhZG4oMSwweDgxNCwyMCk7CisJLy9jbGFzc19wbWVtX3JlYWRuKDEsMHgxMDAwMCwgMjU2KTsKKworI2lmIDAKKwlwcmludGsoS0VSTl9JTkZPICJDbGFzcy1QRSAyOiA9PT09PT09PT09PT5cbiIpOworCWZvcihqPTA7IGogPCAyMDsgaisrKSAgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQzogJSNseFxuIiwgX19mdW5jX18sIHJlYWRsKENMQVNTX1BFMl9ERUJVRykmMHhmZmZmKTsJCisJCW1kZWxheSg0MCk7CisJfQorCXByaW50ayhLRVJOX0lORk8gIkNsYXNzLVBFIDI6IERNRU0gL24iKTsKKwljbGFzc19kbWVtX3JlYWRuKDIsMHg4MTQsMjApOworCS8vY2xhc3NfcG1lbV9yZWFkbigyLDB4MTAwMDAsIDI1Nik7CisKKworCXByaW50ayhLRVJOX0lORk8gIkNsYXNzLVBFIDM6ID09PT09PT09PT09PlxuIik7CisJZm9yKGo9MDsgaiA8IDIwOyBqKyspICB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDOiAlI2x4XG4iLCBfX2Z1bmNfXywgcmVhZGwoQ0xBU1NfUEUzX0RFQlVHKSYweGZmZmYpOwkKKwkJbWRlbGF5KDQwKTsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiQ2xhc3MtUEUgMzogRE1FTSAvbiIpOworCWNsYXNzX2RtZW1fcmVhZG4oMywweDgxNCwyMCk7CisJLy9jbGFzc19wbWVtX3JlYWRuKDMsMHgxMDAwMCwgMjU2KTsKKyNlbmRpZgorCQorfQorCit2b2lkIGNsYXNzX2RtZW1fZHVtcChpbnQgaWQpCit7CisJdTMyIHZhbCwgaTsKKworCWlmIChpZCA+IDMpCisJCWlkID0gMDsKKworCXByaW50ayhLRVJOX0VSUiAiUEUgJWQ6XG4iLCBpZCk7CisKKwlmb3IoaT0wOyBpIDwgMjU2OyBpICs9IDQpICB7CisJCXZhbCA9IHBlX2RtZW1fcmVhZChpZCwgaSwgNCk7CisJCXByaW50aygiJTA4eDogJTA4eFxuIixpLCB2YWwpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYzIwMDBfZXRoL3RtdV9zYmxfYzIwMDBfZWxmLmZ3IGIvZHJpdmVycy9jMjAwMF9ldGgvdG11X3NibF9jMjAwMF9lbGYuZncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY2ZDMxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYzIwMDBfZXRoL3RtdV9zYmxfYzIwMDBfZWxmLmZ3CkBAIC0wLDAgKzEgQEAKKzB4N2YsMHg0NSwweDRjLDB4NDYsMHgwMSwweDAyLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHg2ZiwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNCwweDAwLDB4MDAsMHgyNSwweDU0LDB4MDAsMHgwNCwweDAwLDB4MDUsMHgwMCwweDM0LDB4MDAsMHgyMCwweDAwLDB4MDQsMHgwMCwweDI4LDB4MDAsMHgwYSwweDAwLDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MTAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDAwLDB4MDAsMHgwMiwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDEyLDB4ODgsMHgwMCwweDAwLDB4MDIsMHg4OCwweDAwLDB4MDAsMHgwMiwweDg4LDB4MDAsMHgwMCwweDAxLDB4ODAsMHgwMCwweDAwLDB4MDEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweGU2LDB4MDAsMHgwMCwweDA0LDB4ZTYsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHgwMCwweDAxLDB4MDAsMHg0MCwweDAwLDB4MDEsMHgwMCwweDQwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHgwMCwweDAxLDB4MDAsMHg0MCwweDAwLDB4MDEsMHgwMCwweDQwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHgwMCwweDAxLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmEsMHgyYSwweDJhLDB4MmEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4NDQsMHg0NSwweDQxLDB4NDQsMHg1MywweDU0LDB4NGYsMHg1MCwweDBjLDB4MDgsMHgwNCwweDAwLDB4YzEsMHgxYywweDAwLDB4MGMsMHgwZCwweDA5LDB4MDUsMHgwMSwweDBlLDB4MGEsMHgwNiwweDAyLDB4MGYsMHgwYiwweDA3LDB4MDMsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGMxLDB4MjYsMHgwMCwweDQ4LDB4YzEsMHgyNiwweDAwLDB4NGMsMHhjMSwweDI2LDB4MDAsMHg1MCwweGMxLDB4MjYsMHgwMCwweDYwLDB4NjksMHg2ZSwweDY5LDB4NzQsMHg3MiwweDc1LDB4NmUsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgxMCwweDgwLDB4MTEsMHgwMCwweDExLDB4ODAsMHgxMiwweDAwLDB4MTIsMHg4MCwweDEzLDB4MDAsMHgxMywweDgwLDB4MTQsMHgwMCwweDE0LDB4ODAsMHgxNSwweDAwLDB4MTUsMHg4MCwweDE2LDB4MDAsMHgxNiwweDgwLDB4MTcsMHgwMCwweDE3LDB4ODAsMHhlYSwweDAwLDB4YzgsMHgwMCwweGUwLDB4MDgsMHhjOCwweDA0LDB4ZWEsMHgwMCwweGNiLDB4ODAsMHhlMCwweDAxLDB4Y2IsMHhhMCwweGUwLDB4NjAsMHgzYywweDAwLDB4Y2MsMHgwMiwweGUwLDB4NjAsMHgzYywweDEwLDB4ZTAsMHgwMCwweGQyLDB4NDUsMHgzYSwweDgwLDB4ZWEsMHgwMCwweGNiLDB4ODAsMHhlMCwweDAwLDB4Y2IsMHhhOCwweGI4LDB4NDcsMHhiOCwweGQ3LDB4YjksMHg2NywweGI5LDB4ZjcsMHhlMCwweDAxLDB4YmEsMHgwNywweGUwLDB4MDEsMHhiYSwweDk3LDB4ZTAsMHgwMSwweGJiLDB4MjcsMHhlMCwweDAxLDB4YmIsMHhiNywweGUwLDB4MDEsMHhiYywweDQ3LDB4ZTAsMHgwMSwweGJjLDB4ZDcsMHhlMCwweDAxLDB4YmQsMHg2NywweGUwLDB4MDEsMHhiZCwweGY3LDB4ZTAsMHgwMiwweGJlLDB4MDcsMHhlMCwweDAyLDB4YmUsMHg5NywweGUwLDB4MDIsMHhiZiwweDI3LDB4ZTAsMHgwMiwweGJmLDB4YjcsMHhlMCwweDYwLDB4M2UsMHgwOSwweGUwLDB4NjAsMHgzZSwweDhhLDB4ZTAsMHg2MCwweDNmLDB4MGIsMHhlMCwweDYwLDB4M2YsMHg4YywweGJlLDB4MDcsMHhiZSwweDk3LDB4YmYsMHgyNywweGJmLDB4YjcsMHhlMCwweDAwLDB4MDAsMHg4MiwweGUwLDB4MDAsMHgxYywweDAzLDB4ZTAsMHgwMCwweDFjLDB4ODQsMHhiYywweDg4LDB4ZTAsMHgwMCwweDFjLDB4ODUsMHhiYywweDg4LDB4M2EsMHg4MCwweDAwLDB4ZmYsMHhlYSwweDAwLDB4N2MsMHg0OCwweGU4LDB4MDAsMHhjNCwweDAwLDB4ZWIsMHg4MiwweGNjLDB4ODIsMHhiYywweDg4LDB4ZWIsMHg4MiwweGNjLDB4ODMsMHhiYywweGE4LDB4ZWIsMHg4MiwweGNjLDB4ODQsMHhiYywweGM4LDB4ZWIsMHg4MiwweGNjLDB4ODUsMHhiYywweGU4LDB4ZWIsMHg4MiwweGNjLDB4ODYsMHhlMCwweDAxLDB4YmMsMHg4OCwweGViLDB4ODIsMHhjYywweDg3LDB4ZTAsMHgwMSwweGJjLDB4YTgsMHhlYiwweDgyLDB4Y2MsMHg4OCwweGUwLDB4MDEsMHhiYywweGM4LDB4ZWIsMHg4MiwweGNjLDB4ODksMHhlMCwweDAxLDB4YmMsMHhlOCwweGViLDB4ODIsMHhjYywweDhhLDB4ZTAsMHgwMiwweGJjLDB4ODgsMHhlYiwweDgyLDB4Y2MsMHg4YiwweGUwLDB4MDIsMHhiYywweGE4LDB4ZWEsMHgwMSwweDdjLDB4OTgsMHhlOCwweDAwLDB4YzQsMHg4MCwweGViLDB4ODIsMHhjZCwweDFjLDB4YmQsMHgwOSwweGViLDB4ODIsMHhjZCwweDFkLDB4YmQsMHg3OSwweGViLDB4ODIsMHhjZCwweDFlLDB4ZTAsMHgwMSwweGJkLDB4NjksMHhlYiwweDgyLDB4Y2QsMHgxZiwweGUwLDB4MDIsMHhiZCwweDU5LDB4ZWIsMHg4MiwweGNkLDB4MjAsMHhlMCwweDAzLDB4YmQsMHg0OSwweGViLDB4ODIsMHhjZCwweDIxLDB4ZTAsMHgwNCwweGJkLDB4MzksMHhlYiwweDgyLDB4Y2QsMHgyMiwweGUwLDB4MDUsMHhiZCwweDI5LDB4ZWIsMHg4MiwweGNkLDB4MjMsMHhlMCwweDA2LDB4YmQsMHgxOSwweDE0LDB4OGYsMHhiYywweGI4LDB4ZTAsMHgwMSwweDE0LDB4ZjAsMHhiYywweGQ4LDB4ZTAsMHgxZSwweDE0LDB4ODAsMHhiYywweGY4LDB4ZTEsMHhlMCwweDE0LDB4ODAsMHhlMCwweDAxLDB4YmMsMHg5OCwweDE1LDB4MDAsMHgxNCwweDgwLDB4ZWEsMHgwMiwweDdmLDB4NzgsMHgxNiwweDgyLDB4ZTAsMHgwYiwweDM0LDB4YzIsMHgzYywweDZhLDB4YzUsMHg4MSwweGUwLDB4YWUsMHhhZCwweGY4LDB4M2QsMHhlOSwweGUyLDB4MDAsMHhjNSwweDgzLDB4YzQsMHg4MSwweGUzLDB4ZmYsMHhjNCwweGZmLDB4YWQsMHg5OCwweGUyLDB4MDAsMHhjYywweDkwLDB4YWUsMHhhOCwweDE2LDB4MDIsMHhjNSwweDAzLDB4MDEsMHhlZSwweGVhLDB4MDEsMHg3YywweDE4LDB4ZTgsMHgwMCwweGM0LDB4MDAsMHgxNSwweDAxLDB4YmQsMHgzOCwweDE1LDB4MjAsMHhiYywweGM4LDB4ZTAsMHgwMiwweDE0LDB4ODAsMHhlMCwweDAxLDB4YmQsMHgzOCwweGUwLDB4MDQsMHgxNSwweDAwLDB4YmMsMHhkOCwweGUwLDB4MjIsMHgxNCwweDkxLDB4ZTAsMHgwMSwweGJkLDB4NDgsMHhlMCwweDQwLDB4MTUsMHgwMCwweGJjLDB4OTgsMHgxNCwweDgyLDB4ZTAsMHgwMSwweGJkLDB4NTgsMHhlMCwweDQ0LDB4MTUsMHgyMiwweGUwLDB4MDEsMHhiYywweGE4LDB4ZTAsMHgyMCwweDE1LDB4ODAsMHhlMCwweDAxLDB4YmQsMHgwOCwweDE1LDB4MDQsMHhlMCwweDA4LDB4YWMsMHg4OCwweGUwLDB4MGIsMHhhYywweGM4LDB4MTQsMHg4OCwweGUwLDB4MDIsMHhiZCwweDE4LDB4ZTAsMHgwMCwweDE1LDB4NDAsMHhlMCwweDAzLDB4YmMsMHg4OCwweGUwLDB4MDEsMHgxNCwweDgwLDB4ZTAsMHgwMiwweGJkLDB4MjgsMHhlMCwweDA4LDB4MTUsMHgwMCwweGUwLDB4MDMsMHhiYywweDk4LDB4ZTAsMHgxMCwweDE0LDB4ODAsMHhlMCwweDAyLDB4YmQsMHgzOCwweGUwLDB4ODAsMHgxNSwweDAwLDB4ZTAsMHgwMywweGJjLDB4YTgsMHhlMSwweDAwLDB4MTQsMHg4MCwweGUwLDB4MDIsMHhiZCwweDQ4LDB4ZTAsMHg4OCwweDE1LDB4NDQsMHhlMCwweDAzLDB4YmMsMHhiOCwweGUxLDB4MTEsMHgxNCwweDg4LDB4ZTAsMHgwMSwweGJkLDB4NzgsMHhlMCwweDAyLDB4YmMsMHhlOCwweGUwLDB4MDAsMHgxZCwweDA2LDB4ZTAsMHgwMCwweDFjLDB4ODcsMHhlMCwweDAxLDB4YWUsMHgwOCwweGJkLDB4ZTgsMHhlMCwweDA0LDB4YWUsMHg0OCwweGJkLDB4MDksMHgwMCwweDAwLDB4MTQsMHg4MCwweGE1LDB4MDgsMHhiYywweGNhLDB4MDAsMHgwMCwweGUwLDB4MDAsMHgxZSwweDA4LDB4YTUsMHg3OCwweGJlLDB4M2EsMHgwMCwweDAwLDB4YTUsMHg3OCwweGJjLDB4Y2EsMHgwMCwweDAwLDB4ZTAsMHgwMCwweDFlLDB4MDksMHhlMCwweDAxLDB4YTUsMHg2OCwweGJlLDB4M2EsMHgwMCwweDAwLDB4ZTAsMHgwMSwweGE1LDB4NjgsMHhiYywweGNhLDB4MDAsMHgwMCwweGUwLDB4MDAsMHgxZSwweDBhLDB4ZTAsMHgwMiwweGE1LDB4NTgsMHhiZSwweDNhLDB4MDAsMHgwMCwweGUwLDB4MDIsMHhhNSwweDU4LDB4YmMsMHhjYSwweDAwLDB4MDAsMHgzZiwweDY4LDB4ZTAsMHgwMCwweGM3LDB4NzAsMHgxNiwweDkyLDB4ZTAsMHgwYSwweDE0LDB4ODAsMHhlMCwweDA0LDB4MTYsMHg1MCwweGUwLDB4MGUsMHgxNSwweDUwLDB4YTcsMHg4OCwweGJlLDB4OGYsMHgwMCwweDAwLDB4YTcsMHg4OCwweGJjLDB4OWYsMHgwMCwweDAwLDB4YTcsMHg4OCwweGUwLDB4MDEsMHhiZSwweDBmLDB4MDAsMHgwMCwweGE3LDB4ODgsMHhlMCwweDAxLDB4YmMsMHg5ZiwweDAwLDB4MDAsMHhhNywweDg4LDB4ZTAsMHgwMSwweGJkLDB4YWYsMHgwMCwweDAwLDB4YTcsMHg4OCwweGUwLDB4MDEsMHhiZCwweDNmLDB4MDAsMHgwMCwweGE3LDB4ODgsMHhlMCwweDAxLDB4YmQsMHhjZiwweDAwLDB4MDAsMHhhNywweDg4LDB4ZTAsMHgwMSwweGJlLDB4NWYsMHgwMCwweDAwLDB4YTcsMHg4OCwweGUwLDB4MDEsMHhiZCwweDZmLDB4MDAsMHgwMCwweGUxLDB4ODAsMHhhNywweGY4LDB4ZTAsMHgwMSwweGJjLDB4ZmYsMHgwMCwweDAwLDB4M2MsMHg3ZSwweDAxLDB4ZDgsMHhlYSwweDAwLDB4N2MsMHg0OCwweGU4LDB4MDAsMHhjNCwweDAwLDB4M2QsMHhlOCwweGUwLDB4MDAsMHgxYywweDhiLDB4YzUsMHhhOCwweDE1LDB4MDEsMHhhNiwweDA4LDB4YmQsMHgwYywweDAwLDB4MDAsMHhlMSwweDgwLDB4YTYsMHgyOCwweGJjLDB4OWMsMHgwMCwweDAwLDB4M2MsMHg3YiwweDAxLDB4ZjgsMHhlYSwweDAzLDB4N2MsMHgyOCwweGUwLDB4MGEsMHgxNiwweDAxLDB4ZTAsMHgxMiwweDE1LDB4ODIsMHhlMCwweDIyLDB4MTUsMHgwNCwweGUwLDB4NDIsMHgxNCwweDg4LDB4YmUsMHgwOCwweGJkLDB4OTgsMHhiZCwweDI4LDB4YmMsMHhiOCwweGJlLDB4NDgsMHhiZCwweGQ4LDB4YmQsMHg2OCwweGJjLDB4ZjgsMHhlMCwweDAxLDB4YmUsMHgwOCwweGUwLDB4MDEsMHhiZCwweDk4LDB4ZTAsMHgwMSwweGJkLDB4MjgsMHhlMCwweDAxLDB4YmMsMHhiOCwweGUwLDB4MDEsMHhiZSwweDQ4LDB4ZTAsMHgwMSwweGJkLDB4ZDgsMHhlMCwweDAxLDB4YmQsMHg2OCwweGUwLDB4MDEsMHhiYywweGY4LDB4MzgsMHg4MiwweGViLDB4ODIsMHhjYywweDI2LDB4YTQsMHg4OCwweDNjLDB4NjksMHhlMiwweDAwLDB4YzQsMHgwNywweGUwLDB4MDEsMHgyYywweDM3LDB4ZTQsMHgwOCwweDM0LDB4YzMsMHgzZSwweGU4LDB4ZTIsMHgwMCwweGM0LDB4MDEsMHhlMiwweDA3LDB4YzYsMHhmZiwweGUwLDB4MDEsMHgyNCwweDJlLDB4MzQsMHhjMywweGVhLDB4MDAsMHg3YywweDU0LDB4ZTMsMHhmZiwweGM0LDB4ZmYsMHhlOCwweDAwLDB4YzQsMHgwMCwweDE1LDB4ODAsMHgxNSwweDAxLDB4ZTAsMHgwYywweDM2LDB4ZGEsMHhlMiwweDAwLDB4YzYsMHgwMSwweDI2LDB4MDMsMHhhNiwweDA4LDB4M2QsMHhjYywweGM1LDB4MDEsMHhlMiwweDAwLDB4Y2QsMHgwNSwweGM0LDB4MDgsMHgwMSwweGY1LDB4M2MsMHhkYiwweGUwLDB4MDEsMHgyNCwweDk2LDB4ZTAsMHgwMCwweDFkLDB4MDMsMHhhNCwweDJhLDB4YzQsMHgwMSwweGJjLDB4MmEsMHhlYSwweDAxLDB4N2MsMHgxOCwweGU4LDB4MDAsMHhjNCwweDAwLDB4ZTAsMHgwMiwweGE1LDB4NjgsMHhlMCwweDBhLDB4M2MsMHhkYSwweDJkLDB4MGUsMHhlMCwweDAxLDB4YTUsMHg3OCwweGUwLDB4MGEsMHgzYywweGRhLDB4MmQsMHgwYiwweGUwLDB4MDEsMHhhNSwweDA4LDB4MTQsMHgwMCwweGUwLDB4MGEsMHgzYywweGRhLDB4MjUsMHgwNiwweDE0LDB4MDEsMHgwMCwweDg0LDB4MTQsMHgwMywweDAwLDB4ODIsMHgxNCwweDAyLDB4ZTAsMHgwYSwweDM0LDB4MjIsMHhlMCwweDBjLDB4MzQsMHgyNSwweDNlLDB4MmEsMHhlYSwweDAxLDB4N2QsMHgxOCwweGU4LDB4MDAsMHhjNSwweDAwLDB4ZTAsMHgwYiwweDNlLDB4MWEsMHhlMCwweDAxLDB4OGUsMHg4YiwweDJlLDB4OWUsMHhhNCwweDliLDB4ZTEsMHhmZiwweDE1LDB4N2YsMHgzYywweGZhLDB4MTQsMHgwMCwweDA1LDB4ODQsMHhlNCwweDA5LDB4MzQsMHhjMCwweDE0LDB4MTAsMHhlMiwweDAxLDB4Y2MsMHhmZiwweDA1LDB4ODMsMHgzNCwweGM4LDB4YzQsMHgwOCwweGUyLDB4MDAsMHhjYywweDhmLDB4MDUsMHg4MywweDM0LDB4YzQsMHhjNCwweDA0LDB4ZTIsMHgwMCwweGNjLDB4ODMsMHgwNSwweDgzLDB4MzQsMHhjMiwweGM0LDB4MDIsMHgxNSwweDAyLDB4ZTEsMHgyOSwweDNjLDB4YWEsMHgzYywweDE5LDB4MDAsMHhhYSwweGE1LDB4OWIsMHhjNiwweDA4LDB4M2MsMHhkYiwweDNlLDB4MWEsMHgxNSwweDgwLDB4MTUsMHgwMCwweDE2LDB4ODEsMHhlMCwweDgwLDB4YTcsMHgxYywweGUwLDB4MGUsMHgzYywweGRlLDB4MjcsMHgwNSwweGUwLDB4MGUsMHgzNiwweGJhLDB4MzcsMHgyOCwweDNkLDB4Y2UsMHhjNSwweDAxLDB4ZTIsMHgwMCwweGNkLDB4MDQsMHgwMSwweGY0LDB4ZTAsMHgwYSwweDM0LDB4MjIsMHhlYSwweDAxLDB4N2MsMHg5OCwweDM0LDB4MjUsMHgzYywweDJhLDB4ZTgsMHgwMCwweGM0LDB4ODAsMHgzYywweDk4LDB4YTQsMHgwOSwweGJkLDB4ODgsMHgwMCwweDAwLDB4YTQsMHg4OSwweGM0LDB4ODgsMHhhNCwweDA5LDB4M2QsMHg2OCwweGUzLDB4MDAsMHhjNSwweDAwLDB4MjUsMHg3YywweGU0LDB4MDgsMHgzNCwweDQ4LDB4M2MsMHhlOCwweGUyLDB4MDAsMHhjYywweDA3LDB4ZTAsMHgwMSwweGNjLDB4ODAsMHgwMiwweDA0LDB4ZTAsMHgwMCwweDFkLDB4MGMsMHgwMCwweDhiLDB4M2QsMHg2OCwweGM1LDB4NzgsMHhlMiwweDAwLDB4Y2QsMHgwMywweDAyLDB4ODQsMHhlMCwweDAwLDB4MWQsMHgwZCwweDAwLDB4ODMsMHhlMCwweDAwLDB4MWQsMHgwZSwweGJjLDB4OGEsMHgwMCwweDAwLDB4ZTAsMHgwMCwweDFkLDB4MDMsMHhhNCwweGJhLDB4YzQsMHg4MSwweGJjLDB4YmEsMHhlYSwweDAzLDB4N2MsMHhhOCwweGUwLDB4MjgsMHhhNCwweGY5LDB4ZTAsMHgwMCwweDFjLDB4MGYsMHhiYywweDg4LDB4MDAsMHgwMCwweDM4LDB4ODIsMHhjMCwweDc4LDB4NzgsMHg4MiwweDdhLDB4MDEsMHhlMCwweDAwLDB4MWMsMHgxMCwweGUwLDB4MDAsMHgxYSwweDAzLDB4YmMsMHgwNCwweGRkLDB4ZWUsMHhlMCwweDAwLDB4MWMsMHgxMSwweGJjLDB4MDQsMHhhNCwweDE0LDB4YzQsMHgwMSwweGJjLDB4MTQsMHhkZiwweDMzLDB4MDAsMHhmYywweDQ3LDB4NDMsMHg0MywweDNhLDB4MjAsMHgyOCwweDQ3LDB4NGUsMHg1NSwweDI5LDB4MjAsMHgzNCwweDJlLDB4MzYsMHgyZSwweDMxLDB4MDAsMHgwMCwweDJlLDB4NzMsMHg2OCwweDczLDB4NzQsMHg3MiwweDc0LDB4NjEsMHg2MiwweDAwLDB4MmUsMHg3MCwweDZkLDB4NjUsMHg2ZCwweDAwLDB4MmUsMHg3NiwweDY1LDB4NjMsMHg3NCwweDZmLDB4NzIsMHgwMCwweDJlLDB4NjQsMHg2ZCwweDY1LDB4NmQsMHg1ZiwweDcwLDB4NjUsMHg3MywweDc0LDB4NjEsMHg3NCwweDc1LDB4NzMsMHgwMCwweDJlLDB4NjQsMHg2ZCwweDY1LDB4NmQsMHg1ZiwweDY3LDB4NmYsMHg3NCwweDAwLDB4MmUsMHg2NCwweDZkLDB4NjUsMHg2ZCwweDVmLDB4NmMsMHg2OSwweDc0LDB4MzQsMHgwMCwweDJlLDB4NjQsMHg2ZCwweDY1LDB4NmQsMHg1ZiwweDYyLDB4NzMsMHg3MywweDAwLDB4MmUsMHg2NCwweDZkLDB4NjUsMHg2ZCwweDVmLDB4NzMsMHg3NCwweDYxLDB4NjMsMHg2YiwweDAwLDB4MmUsMHg2MywweDZmLDB4NmQsMHg2ZCwweDY1LDB4NmUsMHg3NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBiLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwNiwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHhlNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOSwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweGEwLDB4MDAsMHgwMCwweDEwLDB4YTAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MzIsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDEyLDB4MDAsMHgwMCwweDAwLDB4YjAsMHgwMCwweDAwLDB4MTAsMHhiMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgzZCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHhlOCwweDAwLDB4MDAsMHgxMCwweGU4LDB4MDAsMHgwMCwweDAxLDB4YTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ3LDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMiwweDg4LDB4MDAsMHgwMCwweDEyLDB4ODgsMHgwMCwweDAwLDB4MDEsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTMsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHhlNiwweDAwLDB4MDAsMHgwMCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweGY3LDB4MDAsMHgwMCwweDAwLDB4NWMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2MyMDAwX2V0aC91dGlsX2MyMDAwX2VsZi5mdyBiL2RyaXZlcnMvYzIwMDBfZXRoL3V0aWxfYzIwMDBfZWxmLmZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMDdhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2MyMDAwX2V0aC91dGlsX2MyMDAwX2VsZi5mdwpAQCAtMCwwICsxIEBACisweDdmLDB4NDUsMHg0YywweDQ2LDB4MDEsMHgwMiwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4NmYsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAzLDB4ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsMHgwMCwweDAwLDB4NGQsMHg2NCwweDAwLDB4MDQsMHgwMCwweDA1LDB4MDAsMHgzNCwweDAwLDB4MjAsMHgwMCwweDA0LDB4MDAsMHgyOCwweDAwLDB4MGUsMHgwMCwweDBkLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmMCwweDAwLDB4MDAsMHgwYSwweGNjLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDFhLDB4ZTAsMHgwMCwweDAwLDB4MGEsMHhlMCwweDAwLDB4MDAsMHgwYSwweGUwLDB4MDAsMHgwMCwweDA2LDB4YTAsMHgwMCwweDAwLDB4MDYsMHhhMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgyZiwweDgwLDB4MDAsMHgwMCwweDFmLDB4ODAsMHgwMCwweDAwLDB4MWYsMHg4MCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAzLDB4ZjgsMHgwMCwweDAwLDB4MDMsMHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWMsMHhjOCwweDAwLDB4MDAsMHgzOCwweGM4LDB4MDAsMHgwMCwweDAwLDB4MDcsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmEsMHgyYSwweDJhLDB4MmEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGYwLDB4MDAsMHgwMCwweDAwLDB4YjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDRjLDB4MDAsMHgwMCwweDAyLDB4NDgsMHgwMCwweDAwLDB4MGEsMHhlOCwweDAwLDB4MDAsMHgwMiwweDZjLDB4MDAsMHgwMCwweDAzLDB4MzQsMHgwMCwweDAwLDB4MDIsMHhjMCwweDAwLDB4MDAsMHgwMiwweGQwLDB4MDAsMHgwMCwweDAzLDB4NDAsMHgwMCwweDAwLDB4MDEsMHgzOCwweDAwLDB4MDAsMHgwMCwweGY4LDB4MDAsMHgwMCwweDBkLDB4ZjgsMHgwMCwweDAwLDB4MDMsMHg5OCwweDAwLDB4MDAsMHgwMywweDkwLDB4MDAsMHgwMCwweDAzLDB4YzAsMHgwMCwweDAwLDB4MGEsMHgyMSwweDAwLDB4MDAsMHgwYSwweDIwLDB4MDAsMHgwMCwweDA4LDB4ZDQsMHgwMywweGY4LDB4MWMsMHhhYSwweDAzLDB4ZjgsMHgxMCwweDZlLDB4MDAsMHgwMCwweDBhLDB4ZjgsMHgwMCwweDAwLDB4MGEsMHgyNCwweDAwLDB4MDAsMHgwZSwweGY4LDB4MDAsMHgwMCwweDBjLDB4ZjgsMHgwMCwweDAwLDB4MGEsMHhhOCwweDAwLDB4MDAsMHgwYSwweGUwLDB4MDAsMHgwMCwweDBhLDB4YWMsMHgwMCwweDAwLDB4MGEsMHhjOCwweDAwLDB4MDAsMHgwYSwweGE4LDB4MDAsMHgwMCwweDBmLDB4ZjgsMHgwMywweGY4LDB4MGYsMHgyYywweDAwLDB4MDAsMHgwMCwweDAxLDB4YzEsMHgwNCwweDAwLDB4MDAsMHhjMSwweDA1LDB4MDAsMHgwMCwweGMxLDB4MDYsMHgwMCwweDAwLDB4NDksMHg0ZSwweDQ5LDB4NTQsMHg1MiwweDU1LDB4NGUsMHgyMCwweGMwLDB4MmYsMHhmZiwweGZmLDB4YzAsMHgyNSwweDAwLDB4MzQsMHg0NCwweDQ1LDB4NDEsMHg0NCwweGMwLDB4MjQsMHgwMCwweDMwLDB4YzAsMHgzMiwweDAwLDB4MTAsMHhjMSwweDAzLDB4MDAsMHgwYywweGMxLDB4MDMsMHgwMCwweDA4LDB4YzAsMHgyNSwweDAwLDB4MzQsMHgwZSwweDA4LDB4MDAsMHg4NCwweDBlLDB4MDgsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHhmOCwweDAwLDB4MDAsMHgwMywweGY4LDB4MDAsMHg0MCwweDAzLDB4ZjgsMHgwMCwweDQwLDB4MDMsMHhmOCwweDAwLDB4NDAsMHgwMywweGY4LDB4MDAsMHg0MCwweDAzLDB4ZjgsMHgwMCwweDQwLDB4MDMsMHhmOCwweDAwLDB4NDAsMHgwMywweGY4LDB4MDAsMHg0MCwweDAzLDB4ZjgsMHgwMCwweDQwLDB4MDMsMHhmOCwweDAwLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgxMCwweDgwLDB4MTEsMHgwMCwweDExLDB4ODAsMHgxMiwweDAwLDB4MTIsMHg4MCwweDEzLDB4MDAsMHgxMywweDgwLDB4MTQsMHgwMCwweDE0LDB4ODAsMHgxNSwweDAwLDB4MTUsMHg4MCwweDE2LDB4MDAsMHgxNiwweDgwLDB4MTcsMHgwMCwweDE3LDB4ODAsMHhlYSwweDAwLDB4YzgsMHgwMCwweGUwLDB4MjIsMHhjOCwweDdjLDB4ZWEsMHgwMCwweGNiLDB4ODAsMHhlMCwweDAwLDB4Y2IsMHhhMCwweGUwLDB4NjAsMHgzYywweDAwLDB4Y2MsMHgwMiwweGUwLDB4NjAsMHgzYywweDEwLDB4ZTAsMHgwMCwweGQwLDB4NjMsMHgzYSwweDgwLDB4ZWEsMHgwMCwweGNiLDB4ODAsMHhlMCwweDNmLDB4Y2IsMHhhOCwweGI4LDB4NDcsMHhiOCwweGQ3LDB4YjksMHg2NywweGI5LDB4ZjcsMHhlMCwweDAxLDB4YmEsMHgwNywweGUwLDB4MDEsMHhiYSwweDk3LDB4ZTAsMHgwMSwweGJiLDB4MjcsMHhlMCwweDAxLDB4YmIsMHhiNywweGUwLDB4MDEsMHhiYywweDQ3LDB4ZTAsMHgwMSwweGJjLDB4ZDcsMHhlMCwweDAxLDB4YmQsMHg2NywweGUwLDB4MDEsMHhiZCwweGY3LDB4ZTAsMHgwMiwweGJlLDB4MDcsMHhlMCwweDAyLDB4YmUsMHg5NywweGUwLDB4MDIsMHhiZiwweDI3LDB4ZTAsMHgwMiwweGJmLDB4YjcsMHhlMCwweDYwLDB4M2UsMHgwOSwweGUwLDB4NjAsMHgzZSwweDhhLDB4ZTAsMHg2MCwweDNmLDB4MGIsMHhlMCwweDYwLDB4M2YsMHg4YywweGJlLDB4MDcsMHhiZSwweDk3LDB4YmYsMHgyNywweGJmLDB4YjcsMHhlMCwweDA3LDB4MDAsMHg5NywweDM4LDB4ODIsMHgxNCwweDA4LDB4MzgsMHg4MiwweGUwLDB4MDAsMHgxZCwweDEzLDB4MTQsMHg4MCwweDE0LDB4MDAsMHgzZCwweGVhLDB4ZTAsMHgwYywweDM0LDB4MjMsMHhlMSwweDgxLDB4YmMsMHhhYSwweGUwLDB4MDksMHgzNCwweDI1LDB4YzQsMHgwMSwweGUwLDB4MDksMHgzZSwweDE5LDB4ZTIsMHgwMCwweGNjLDB4MjAsMHgzYywweDliLDB4MDEsMHhmNCwweGUwLDB4MDAsMHgxYywweDFkLDB4ZTAsMHgwMCwweDFkLDB4MjEsMHhiYywweDg4LDB4ZWEsMHgwMCwweDdjLDB4ZmMsMHhlYSwweDAwLDB4N2MsMHg3ZSwweGUwLDB4MDAsMHgxZCwweDg3LDB4ZTAsMHgwMCwweDFlLDB4MjAsMHhlOCwweDA3LDB4YzQsMHhmOCwweGU4LDB4MDcsMHhjNCwweDc4LDB4ZTAsMHg4MCwweGJjLDB4OWEsMHhlMCwweDgwLDB4YmMsMHgxYiwweDNkLDB4N2MsMHgwMSwweGZiLDB4ZTAsMHgwMCwweDFjLDB4OTcsMHhlMCwweDAwLDB4MWMsMHgxZiwweGJjLDB4YTgsMHgzOCwweDgyLDB4YzAsMHg2NCwweDc4LDB4ODYsMHg3OSwweDA1LDB4NzksMHg4NCwweDdhLDB4MDMsMHg3YSwweDgyLDB4N2IsMHgwMSwweGUwLDB4MDAsMHgxYywweDA1LDB4ZTAsMHgwMCwweDFjLDB4YTgsMHhlMSwweGZlLDB4YzAsMHg3OCwweGJjLDB4ODgsMHgzOSwweGUwLDB4ZTAsMHgwMCwweDFjLDB4YTksMHhjMSwweDhiLDB4YmMsMHg4OCwweDMxLDB4YzMsMHgzMSwweGEzLDB4ZGYsMHhiYywweGViLDB4MGMsMHhjYiwweDAwLDB4ZTMsMHhmZiwweDExLDB4N2YsMHhlMCwweDAwLDB4MWMsMHg4NSwweGE0LDB4MTksMHhjNCwweDAxLDB4YmMsMHgxOSwweGUwLDB4MDAsMHgxYywweDA4LDB4YTQsMHhiOCwweGUyLDB4MDAsMHhjNCwweDgxLDB4ZTAsMHgwMCwweDI0LDB4ZDMsMHhhNCwweDk4LDB4YTIsMHgwOCwweDNkLDB4ZTksMHgzZCwweDY0LDB4ZTIsMHgwMCwweGM1LDB4ODcsMHhlMiwweDAwLDB4YzUsMHgwNywweGEyLDB4YTgsMHgzZCwweGZhLDB4MTQsMHgwMSwweGUwLDB4MDAsMHgwMSwweGMxLDB4ZTAsMHgwYSwweDNhLDB4OTksMHhlMiwweDQwLDB4Y2QsMHgwMCwweDAyLDB4ODksMHgzYSwweDcyLDB4MTQsMHgwMiwweDA1LDB4YjgsMHhlMCwweDBhLDB4M2EsMHg5NCwweDNkLDB4NzYsMHgwMiwweGI0LDB4MDAsMHg4YiwweDNjLDB4ZjIsMHgxNCwweDAzLDB4MDUsMHhiMCwweDNkLDB4NzYsMHgwMiwweDkxLDB4ZTAsMHgwYSwweDNhLDB4OTQsMHhlMiwweDQwLDB4Y2QsMHgwMCwweDAyLDB4ODMsMHgzYywweDY0LDB4MDAsMHhhMywweGUwLDB4MDAsMHgxZSwweDJhLDB4MTQsMHgwMiwweDNhLDB4N2MsMHgwNSwweGEyLDB4ZWIsMHg4MCwweGNlLDB4MzEsMHgzZCwweDdjLDB4MDAsMHg4ZiwweGUwLDB4MDAsMHgxZSwweDJhLDB4M2MsMHhmYywweDA1LDB4OWEsMHhlYiwweDgwLDB4Y2UsMHgzMSwweDNkLDB4N2MsMHgwMiwweDk2LDB4M2EsMHg3MiwweDE0LDB4MDIsMHgwNSwweDkzLDB4ZTAsMHgwYSwweDNhLDB4OTQsMHgzZCwweDc2LDB4MDIsMHg4ZiwweGUwLDB4MGIsMHgzOSwweDliLDB4M2MsMHg2YiwweDNkLDB4NjUsMHg3ZCwweGE5LDB4ZTAsMHgwMCwweGQzLDB4MmUsMHg2NSwweGE5LDB4M2MsMHg2NCwweDNjLDB4ZWIsMHgzZCwweDY1LDB4ZTAsMHgwMCwweGQzLDB4MjgsMHgxNCwweDAwLDB4ZTAsMHgwMCwweDFjLDB4ODgsMHhlNCwweDA4LDB4MzQsMHgyMCwweGJjLDB4MzksMHhlMCwweDAwLDB4MWMsMHgyMiwweGE0LDB4ODgsMHgyNCwweDg1LDB4MTQsMHg4MSwweGJjLDB4OTgsMHhlNywweGZmLDB4MDAsMHg5ZCwweGJjLDB4OTgsMHhlMCwweDAwLDB4MWEsMHgwZiwweGUwLDB4MDAsMHhkNSwweDg3LDB4ZTAsMHgwMCwweDFhLDB4OWYsMHhlMCwweDAwLDB4MWMsMHgwZSwweGE0LDB4ODQsMHgyNCwweDg1LDB4YTQsMHg4NSwweDdjLDB4MjksMHgzYywweDgxLDB4NjQsMHgyOSwweGMyLDB4MDgsMHgzYSwweDc4LDB4YzIsMHg4NCwweDAxLDB4ZjcsMHhlMCwweDAwLDB4ZDUsMHhjZSwweGU3LDB4ZmYsMHgwMCwweDg2LDB4M2MsMHhlOCwweGUwLDB4ODEsMHhhNSwweDM5LDB4MTQsMHgwMCwweGUzLDB4ZmYsMHhjZCwweDdmLDB4ZTAsMHg2OCwweDM5LDB4YTksMHgzOCwweDgyLDB4M2MsMHhlOCwweGUwLDB4ODIsMHhhNSwweDE5LDB4MTQsMHgwMCwweGUzLDB4ZmYsMHhjZCwweDdmLDB4ZTAsMHg2OCwweDM5LDB4YTksMHgzOCwweDgyLDB4YzAsMHg2MCwweDc4LDB4ODYsMHg3OSwweDA1LDB4NzksMHg4NCwweDdhLDB4MDMsMHg3YSwweDgyLDB4N2IsMHgwMSwweDM5LDB4NmIsMHgzYSwweGU5LDB4M2IsMHg2OCwweGU0LDB4MDksMHgzNSwweDQ5LDB4ZTMsMHhmZiwweGMxLDB4N2YsMHhlMCwweDA4LDB4MzUsMHgyNywweDNjLDB4NDksMHhlMCwweDA5LDB4MzEsMHgyYiwweGUzLDB4ZmYsMHhjNiwweDdmLDB4ZTAsMHgwOCwweDNjLDB4OTgsMHhlNCwweDA5LDB4MzQsMHg0MCwweDNjLDB4MWMsMHgzYywweDE5LDB4ZTAsMHgwOSwweDM0LDB4NDgsMHhlMiwweDA4LDB4M2MsMHhjOCwweGUwLDB4MDAsMHgxYywweDljLDB4ZTIsMHgwMCwweGM0LDB4M2YsMHhlMCwweDI4LDB4YTQsMHhmOSwweDdlLDB4MDcsMHgzYSwweDZhLDB4ZTMsMHhmZiwweGMyLDB4ZmYsMHgxNCwweDAwLDB4MjQsMHg4OSwweGUwLDB4MDAsMHgxYywweDA2LDB4ZTAsMHgwMSwweDE1LDB4NDgsMHhlMCwweDAwLDB4ZDIsMHhjMCwweGUwLDB4MDAsMHgxYywweDA2LDB4MTEsMHg4MCwweDI0LDB4M2IsMHhlMCwweDAxLDB4YTQsMHhhOCwweDNjLDB4ZjQsMHgwMSwweDk3LDB4ZTAsMHgwMSwweDljLDB4ZTgsMHgzYywweGYyLDB4MDEsMHg5MywweGUwLDB4MDMsMHg4YywweGU4LDB4NjUsMHgwNywweDNjLDB4ZmEsMHgwMSwweDhlLDB4ZTAsMHgwMywweDhjLDB4ZjgsMHgyNCwweDhhLDB4ZTAsMHgwMSwweGE0LDB4OTgsMHgzYywweGY2LDB4MDEsMHg4NywweGUwLDB4MDEsMHg5YywweGQ4LDB4M2MsMHhmNSwweDAxLDB4ODMsMHgwMCwweDhmLDB4MzksMHhlOCwweGE0LDB4YTgsMHgyNCwweDhhLDB4ZTAsMHgwMCwweDFjLDB4MDYsMHhlMCwweDAxLDB4MTUsMHg0OCwweGUwLDB4MDAsMHhkMiwweDlhLDB4ZTAsMHgwMCwweDFjLDB4MDYsMHgwMCwweGRjLDB4MjksMHg5MSwweDAwLDB4OTQsMHgzOSwweGU4LDB4MDAsMHg4ZSwweGE0LDB4MTMsMHg3YywweDA4LDB4NjQsMHgwOCwweGE0LDB4MDgsMHhlMiwweDAwLDB4YzQsMHgwNCwweDJjLDB4N2MsMHg2NCwweDg4LDB4M2MsMHg2MywweGUwLDB4MDEsMHgxNSwweDQ4LDB4ZTAsMHgwMCwweGQyLDB4NzIsMHhhNCwweDAzLDB4ZTIsMHgwMCwweGM0LDB4MDQsMHgyYywweDcwLDB4M2MsMHg2MywweDYwLDB4ODYsMHg2MSwweDA1LDB4NjEsMHg4NCwweDYyLDB4MDMsMHg2MiwweDgyLDB4NjMsMHgwMSwweGMwLDB4MjAsMHgzOCwweDgyLDB4YzAsMHg1YywweDc4LDB4ODYsMHg3OSwweDA1LDB4NzksMHg4NCwweDdhLDB4MDMsMHg3YSwweDgyLDB4N2IsMHgwMSwweGUzLDB4ZmYsMHhjNCwweGZmLDB4M2EsMHhlOCwweDljLDB4NmEsMHg3YywweDg4LDB4ZTQsMHgwOCwweDM0LDB4MjAsMHg5YywweGZhLDB4M2IsMHg2YiwweDNjLDB4NDksMHhlNCwweDA5LDB4MzQsMHg0OSwweGUzLDB4ZmYsMHhjMywweDdmLDB4MzQsMHgyNywweDNjLDB4NDksMHhlMCwweDA5LDB4MzMsMHgyYiwweGUzLDB4ZmYsMHhjNiwweDdmLDB4M2MsMHgxOSwweGU0LDB4MDksMHgzNCwweDQwLDB4M2MsMHgxYywweDNjLDB4MTksMHhlMCwweDA5LDB4MzQsMHg0OCwweGUyLDB4MDgsMHgzYywweGM4LDB4ZTAsMHgwMCwweDFjLDB4OTAsMHhlMiwweDAwLDB4YzQsMHgzZiwweDdlLDB4MDcsMHgzYSwweDZhLDB4ZTAsMHgyOCwweGE0LDB4ZjksMHgxMSwweDgwLDB4ZTAsMHgwMSwweDI0LDB4YmYsMHhlMCwweDAwLDB4MWMsMHgwNiwweGUwLDB4MDEsMHgxNSwweDYwLDB4ZTAsMHgwMCwweGQyLDB4NDQsMHhlMCwweDAwLDB4MTksMHgwNiwweGUwLDB4MDMsMHg5YywweGEyLDB4ZTAsMHgwMywweDljLDB4MzIsMHhlNCwweDA5LDB4MzQsMHhhMCwweDNjLDB4YzgsMHg5YywweDA0LDB4OWQsMHgxNCwweGU0LDB4MDgsMHgzNCwweDIwLDB4M2MsMHg0YSwweDNjLDB4ZjgsMHhlMCwweDAxLDB4MDEsMHg4OCwweGUwLDB4MDMsMHg5YywweGMyLDB4ZTAsMHgwMywweDljLDB4NTIsMHhlNCwweDA5LDB4MzQsMHhhMCwweDNjLDB4YzgsMHg5YywweDI0LDB4OWQsMHgzNCwweGU0LDB4MDgsMHgzNCwweDIwLDB4M2MsMHg0YSwweDNjLDB4ZjgsMHhlMCwweDAwLDB4MDEsMHhmOSwweGUwLDB4MDMsMHg5YywweGUyLDB4ZTAsMHgwMywweDljLDB4NzIsMHhlNCwweDA5LDB4MzQsMHhhMCwweDNjLDB4YzgsMHg5YywweDQ0LDB4OWQsMHg1NCwweGU0LDB4MDgsMHgzNCwweDIwLDB4M2MsMHg0YSwweDNjLDB4ZjgsMHhlMCwweDAwLDB4MDEsMHhlYSwweGUwLDB4MDQsMHg5YywweDgyLDB4ZTAsMHgwNCwweDljLDB4MTIsMHhlNCwweDA5LDB4MzQsMHhhMCwweDNjLDB4YzgsMHg5YywweDY0LDB4OWQsMHg3NCwweGU0LDB4MDgsMHgzNCwweDIwLDB4M2MsMHg0YSwweDNjLDB4ZjgsMHhlMCwweDAwLDB4MDEsMHhkYiwweGUwLDB4MDMsMHg4YywweDQyLDB4ZTAsMHgwMywweDhjLDB4ZDIsMHgzNCwweDI4LDB4ZTAsMHgwOCwweDNjLDB4YzgsMHgzYywweDc2LDB4ZTAsMHgwMCwweDAxLDB4ZDEsMHhlMCwweDAzLDB4OGMsMHg2MiwweDY0LDB4ODcsMHgzYywweDc5LDB4ZTAsMHgwMCwweDAxLDB4Y2IsMHhlMCwweDAzLDB4OGMsMHg3MiwweGUwLDB4MDAsMHgyNCwweDQ1LDB4ZTAsMHgwMiwweDljLDB4YTIsMHhlMCwweDAyLDB4OWMsMHgzMiwweGU0LDB4MDksMHgzNCwweGEwLDB4M2MsMHhjOCwweDljLDB4MDUsMHg5ZCwweDE1LDB4ZTQsMHgwOCwweDM0LDB4MjAsMHgzYywweDRhLDB4M2MsMHhmOCwweDAxLDB4YjgsMHhlMCwweDAyLDB4OWMsMHhjMiwweGUwLDB4MDIsMHg5YywweDUyLDB4ZTQsMHgwOSwweDM0LDB4YTAsMHgzYywweGM4LDB4OWMsMHgyNSwweDlkLDB4MzUsMHhlNCwweDA4LDB4MzQsMHgyMCwweDNjLDB4NGEsMHgzYywweGY4LDB4MDEsMHhhYSwweGUwLDB4MDIsMHg5YywweGUyLDB4ZTAsMHgwMiwweDljLDB4NzIsMHhlNCwweDA5LDB4MzQsMHhhMCwweDNjLDB4YzgsMHg5YywweDQ1LDB4OWQsMHg1NSwweGU0LDB4MDgsMHgzNCwweDIwLDB4M2MsMHg0YSwweDNjLDB4ZjgsMHgwMSwweDljLDB4ZTAsMHgwMywweDljLDB4ODIsMHhlMCwweDAzLDB4OWMsMHgxMiwweGU0LDB4MDksMHgzNCwweGEwLDB4M2MsMHhjOCwweDljLDB4NjUsMHg5ZCwweDc1LDB4ZTQsMHgwOCwweDM0LDB4MjAsMHgzYywweDRhLDB4M2MsMHhmOCwweDAxLDB4OGUsMHhlMCwweDAzLDB4OGMsMHgyMiwweGUwLDB4MDMsMHg4YywweGIyLDB4MzQsMHgyOCwweDY1LDB4MDgsMHhlMCwweDA4LDB4M2MsMHhjOCwweDNjLDB4N2EsMHgwMSwweDg0LDB4MDAsMHg4ZiwweGUwLDB4MDAsMHgxOSwweDg2LDB4YTQsMHhhMiwweDI0LDB4ODksMHhlMCwweDAwLDB4MWMsMHgwNiwweGUwLDB4MDEsMHgxNSwweDYwLDB4ZTAsMHgwMCwweGQxLDB4YTUsMHhlNywweGZlLDB4MDAsMHhlMywweDI5LDB4OTIsMHgwMCwweDk1LDB4ZTAsMHgwMCwweDE5LDB4ODYsMHgwMCwweDhlLDB4YTQsMHgxMywweDdjLDB4MDksMHg2NCwweDA5LDB4YTQsMHgwOCwweGUyLDB4MDAsMHhjNCwweDA0LDB4MmMsMHg3YywweDY0LDB4ODksMHgzYywweDYzLDB4ZTAsMHgwMSwweDE1LDB4NjAsMHhlMCwweDAwLDB4ZDEsMHg3ZCwweGE0LDB4MDMsMHhlMiwweDAwLDB4YzQsMHgwNCwweDJjLDB4NzAsMHgzYywweDYzLDB4NjAsMHg4NiwweDYxLDB4MDUsMHg2MSwweDg0LDB4NjIsMHgwMywweDYyLDB4ODIsMHg2MywweDAxLDB4YzAsMHgyNCwweDM4LDB4ODIsMHhjMCwweDcwLDB4NzgsMHg4MywweDdhLDB4MDIsMHg3YSwweDgxLDB4M2EsMHhlOCwweGUzLDB4ZmYsMHhjMiwweGZmLDB4M2MsMHhlNSwweGUwLDB4MDAsMHgxYywweDFiLDB4ZTIsMHgwMCwweGM0LDB4YmYsMHhlMCwweDI5LDB4YTQsMHhmOCwweDEyLDB4MDAsMHgyNCwweGE0LDB4ZTAsMHgwMCwweDFjLDB4MDYsMHhlMCwweDAxLDB4MTUsMHg0OCwweGUwLDB4MDAsMHgxYSwweDA2LDB4ZTAsMHgwMCwweGQxLDB4NmMsMHhlMCwweDAxLDB4OWMsMHgwNCwweDNjLDB4NzUsMHgwMSwweDEyLDB4YTQsMHhiNCwweDI0LDB4OTUsMHgwMCwweGYyLDB4YTQsMHgxNCwweDdjLDB4MDQsMHg2NCwweDA0LDB4YTQsMHgwOCwweGUyLDB4MDAsMHhjNCwweDA0LDB4MmMsMHg3YywweDY0LDB4ODQsMHhlMCwweDAwLDB4MWMsMHgwNiwweGUwLDB4MDEsMHgxNSwweDQ4LDB4ZTAsMHgwMCwweGQxLDB4NDMsMHhhNCwweDA0LDB4ZTIsMHgwMCwweGM0LDB4MDQsMHgyYywweDZmLDB4MDAsMHg4MiwweDEyLDB4MDAsMHgzYywweDY0LDB4NjAsMHg4MywweDYyLDB4MDIsMHg2MiwweDgxLDB4YzAsMHgxMCwweDM4LDB4ODIsMHhjMCwweDc4LDB4NzgsMHg4MiwweDdhLDB4MDEsMHhhNiwweDE4LDB4MTYsMHhmYywweGM2LDB4MDMsMHgzZSwweDVkLDB4MTYsMHg4MiwweGFlLDB4OGMsMHgzYSwweDY4LDB4YWQsMHg0YywweGJkLDB4YWMsMHhlMCwweDAxLDB4OWMsMHg4OSwweGI0LDB4YmMsMHhlMCwweDAwLDB4ZDMsMHg0MywweDNjLDB4NjQsMHhlMCwweDAwLDB4ZDMsMHg1MSwweDYwLDB4ODIsMHg2MiwweDAxLDB4YzAsMHgwOCwweDM4LDB4ODIsMHhjMCwweDdjLDB4NzgsMHg4MSwweGE2LDB4MTgsMHgxNiwweGZjLDB4YzYsMHgwMywweDNlLDB4NWQsMHgxNiwweDgyLDB4YWUsMHg4YywweGFkLDB4NGMsMHhiZCwweGFjLDB4ZTAsMHgwMSwweDljLDB4ODksMHhiNCwweGJjLDB4ZTAsMHgwMCwweGQzLDB4M2UsMHg2MCwweDgxLDB4YzAsMHgwNCwweDM4LDB4ODIsMHhhNCwweGE4LDB4MjQsMHg4YSwweGU3LDB4ZjAsMHgxNSwweDAwLDB4M2MsMHhkYSwweGUwLDB4MDAsMHgxZCwweDJiLDB4YmMsMHg4YSwweDAwLDB4MDAsMHgxNCwweDgwLDB4YmMsMHhhOCwweGUwLDB4MDAsMHgxYywweDlkLDB4YTUsMHgwOSwweGJkLDB4MDgsMHhiYywweDA5LDB4MzgsMHg4MiwweGUwLDB4MDgsMHg4ZSwweDA4LDB4ZTAsMHgwMCwweDJlLDB4NDQsMHhlMCwweDAxLDB4YTYsMHhkOCwweDNjLDB4ZmQsMHgwMSwweGJmLDB4ZTAsMHgwMywweDljLDB4YzgsMHgxNiwweDA2LDB4ZTAsMHgwZCwweDNkLDB4MjksMHhlMywweGZmLDB4YzYsMHhmZiwweGUwLDB4MDAsMHgyNiwweGU0LDB4ZTIsMHgxNywweGNlLDB4YjcsMHgwMiwweDk5LDB4MTYsMHgwMSwweGUwLDB4MDAsMHgyZCwweGRlLDB4ZTAsMHgwMiwweDlkLDB4YjgsMHgyZCwweDg1LDB4M2QsMHg3OSwweGUwLDB4MDAsMHgwMywweGQ4LDB4MDAsMHg4NywweDNjLDB4ZmIsMHhlMCwweDAwLDB4MDMsMHhkNCwweDNkLDB4N2IsMHhlMCwweDAwLDB4MDQsMHhkMSwweGUwLDB4MDIsMHhhNCwweDk4LDB4ZTgsMHgwMCwweGM0LDB4ODEsMHhlMCwweDAyLDB4YmMsMHg5OCwweGUwLDB4MDAsMHgwMCwweGM5LDB4ZTEsMHhmZSwweDE1LDB4ODAsMHgzZSwweGZiLDB4MDUsMHg4ZCwweGUwLDB4MDQsMHg4NCwweDc4LDB4MTYsMHgwMiwweDNkLDB4MjgsMHhlMCwweDQzLDB4M2QsMHgwYSwweGUyLDB4MDAsMHhjZCwweDAwLDB4MDIsMHgzYiwweDE2LDB4MDUsMHgxNCwweDA2LDB4MDAsMHhiNiwweDE2LDB4MDMsMHgyNCwweGI2LDB4YzQsMHg4MSwweDNkLDB4NzksMHgxNiwweDA0LDB4MDEsMHgzMiwweGUwLDB4MDIsMHhiNSwweDM4LDB4MTYsMHgwMywweDAwLDB4YWUsMHhlMCwweDAyLDB4OGQsMHg5OCwweGUyLDB4MDAsMHhjZCwweDgxLDB4MDEsMHg4ZSwweDE1LDB4ODAsMHhlMCwweDAyLDB4YjUsMHgzOCwweDE2LDB4MDAsMHhlMCwweDA4LDB4YWQsMHg4OCwweGUwLDB4MDEsMHhiYywweGQ4LDB4ZTAsMHgwMywweGI1LDB4NDgsMHhlMCwweDAyLDB4YWQsMHg5OCwweDAwLDB4OWMsMHhlMCwweDAzLDB4OWQsMHhjOCwweGM1LDB4ODEsMHgzZCwweDdiLDB4ZTAsMHgwMSwweGE1LDB4NTgsMHgwMSwweDkwLDB4M2QsMHg3OSwweDAxLDB4OGUsMHgyNiwweDA0LDB4YzYsMHg3ZiwweGUwLDB4MDgsMHhhZSwweDA4LDB4ZTAsMHgwOCwweDhjLDB4MDgsMHgxNiwweDA0LDB4ZTIsMHgwMCwweGNjLDB4MDAsMHgxNCwweDA4LDB4ZTAsMHg2YywweDM5LDB4YTgsMHgwMCwweDg2LDB4MTYsMHgwNywweDNkLDB4NzksMHgxNCwweDAzLDB4ZTAsMHg2YywweDM5LDB4MjgsMHgzYywweDZjLDB4MzgsMHg4MiwweGMwLDB4N2MsMHg3OCwweDgxLDB4ZTAsMHgwMCwweGQzLDB4MDIsMHg2MCwweDgxLDB4YzAsMHgwNCwweDM4LDB4ODIsMHhjMCwweDc4LDB4NzgsMHg4MiwweDdhLDB4MDEsMHgzYSwweDY4LDB4ZTMsMHhmZiwweGMyLDB4N2YsMHhlMCwweDA4LDB4MzIsMHg0OCwweGUyLDB4MDgsMHgzYSwweDQ4LDB4ZTAsMHgwMCwweDFjLDB4OTksMHhlMiwweDAwLDB4YzQsMHg3ZiwweGUwLDB4MjgsMHhhNCwweGY5LDB4MTQsMHgwMCwweDI0LDB4OTAsMHhlMCwweDAwLDB4MWMsMHgwOSwweGUwLDB4MDAsMHgxNSwweDUwLDB4ZTAsMHgwMCwweGQwLDB4N2MsMHhlMCwweDAwLDB4MWMsMHgwOSwweDIyLDB4MDQsMHg5YywweGU4LDB4M2MsMHhmNCwweDAxLDB4MDQsMHhhNCwweDk4LDB4MmMsMHhmMywweDE0LDB4MDAsMHg2MCwweDgyLDB4NjIsMHgwMSwweGMwLDB4MDgsMHgzOCwweDgyLDB4ZTIsMHgwMSwweGM0LDB4ZmYsMHhlMiwweDAwLDB4Y2MsMHg4MSwweDAxLDB4OGEsMHgxNSwweDAwLDB4YmQsMHgwOCwweGJkLDB4MTgsMHhlMCwweDAxLDB4YjUsMHgzOCwweGUwLDB4MDEsMHhiNSwweDI4LDB4YmQsMHg2OCwweGJkLDB4NDgsMHgzZCwweDY5LDB4YzUsMHg3ZiwweGUyLDB4MDEsMHhjNSwweDdmLDB4ZTIsMHgwMCwweGNkLDB4MDEsMHgwMiwweDg2LDB4MTUsMHgwMCwweGJkLDB4MjgsMHhlMCwweDAxLDB4YmQsMHg0OCwweDAwLDB4ODQsMHhlMiwweDAwLDB4Y2QsMHgwMiwweDAxLDB4OWEsMHgxNSwweDAwLDB4MTUsMHhmZiwweGUwLDB4MDEsMHhiZCwweDc4LDB4ZTAsMHgwMSwweGJkLDB4NjgsMHhlMCwweDAxLDB4YmQsMHhkOCwweGUwLDB4MDIsMHhiZCwweDQ4LDB4ZTAsMHgwMiwweGJkLDB4MzgsMHhlMCwweDAyLDB4YmQsMHgyOCwweGUwLDB4MDIsMHhiZCwweDk4LDB4YmQsMHgzOCwweGUwLDB4MDEsMHhiZCwweDI4LDB4ZTAsMHgwMiwweGJkLDB4NjgsMHhlMCwweDAyLDB4YmQsMHg1OCwweGUwLDB4MDMsMHhiZCwweDA4LDB4ZTAsMHgwNywweGI0LDB4ODgsMHgzOCwweDgyLDB4ZTAsMHgwMCwweDFjLDB4YWMsMHhlMCwweDAwLDB4MWMsMHgwNSwweGJjLDB4ODgsMHgzYSwweDgwLDB4MDAsMHhmZiwweDE0LDB4MDAsMHgzOCwweDgyLDB4MTQsMHgwMCwweDM4LDB4ODIsMHgxNCwweDAwLDB4MzgsMHg4MiwweDE0LDB4MDAsMHgzOCwweDgyLDB4MTQsMHgwMCwweDM4LDB4ODIsMHgzOCwweDgyLDB4MzgsMHg4MiwweDM4LDB4ODIsMHgzOCwweDgyLDB4YzAsMHg3YywweDdjLDB4MDEsMHg2NCwweDAxLDB4M2MsMHhlOCwweGM0LDB4ZmYsMHg3YywweDgxLDB4MmMsMHg3YywweGMwLDB4MDQsMHgzOCwweDgyLDB4MzgsMHg4MiwweDM4LDB4ODIsMHhjMCwweDdjLDB4NzgsMHg4MSwweGUyLDB4M2YsMHhjYywweGZmLDB4M2UsMHg2OCwweDNlLDB4ZTksMHgzZCwweGVhLDB4MTQsMHgwMCwweDAyLDB4ODUsMHgzYywweGVjLDB4M2QsMHg2ZCwweDE2LDB4MDEsMHgwMCwweDgzLDB4M2QsMHg2YywweDE2LDB4MDAsMHhlMCwweDAwLDB4ZDEsMHhlNSwweDYwLDB4ODEsMHhjMCwweDA0LDB4MzgsMHg4MiwweGMwLDB4NmMsMHg3OCwweDg1LDB4NzksMHgwNCwweDdhLDB4MDMsMHg3YSwweDgyLDB4N2IsMHgwMSwweDNiLDB4NjgsMHgzYywweDY5LDB4ZTIsMHgwMCwweGM0LDB4MDEsMHgzYSwweGU5LDB4M2EsMHg2YSwweDI0LDB4MDcsMHgyNSwweDA2LDB4ZTEsMHg4MCwweDhjLDB4MTUsMHhjMiwweDdmLDB4ZTEsMHg4MCwweGFjLDB4MTYsMHhlMCwweDA4LDB4MzIsMHhjMSwweGUyLDB4MDAsMHhjNCwweDAxLDB4MjQsMHgwYSwweDE0LDB4MDEsMHhlMSwweDI4LDB4M2EsMHgxOCwweDI0LDB4MDYsMHhlMSwweDgwLDB4OWMsMHgxNSwweGMyLDB4N2UsMHhlMSwweDgwLDB4YjQsMHgxNiwweGUwLDB4MDgsMHgzMiwweGMyLDB4ZTIsMHgwMCwweGM0LDB4MDEsMHgyNCwweDBhLDB4MTQsMHgwMywweGUxLDB4MjgsMHgzYSwweDE4LDB4MjQsMHgwNiwweGUxLDB4ODAsMHhhNCwweDE1LDB4YzIsMHg3YywweGUxLDB4ODAsMHhiYywweDE2LDB4MTEsMHg3OCwweGUwLDB4MDIsMHgzYSwweDUyLDB4MjEsMHgwNSwweDNjLDB4NjYsMHgzYywweGU1LDB4M2QsMHg2MiwweGRmLDB4YjYsMHgzYywweDY0LDB4ZTIsMHgwMCwweGM0LDB4MDcsMHgyNCwweDE4LDB4M2MsMHg2NCwweGUyLDB4MDAsMHhjNCwweDA0LDB4M2EsMHg5MiwweDNiLDB4MTIsMHgyNCwweDA1LDB4ZTEsMHg4MCwweGE0LDB4MTUsMHhlMSwweDgwLDB4YmMsMHgxNiwweDNjLDB4NjQsMHhlMiwweDAwLDB4YzQsMHgwMiwweDI0LDB4MDUsMHhlMSwweDgwLDB4OWMsMHgxNSwweGUxLDB4ODAsMHhiNCwweDE2LDB4ZTIsMHgwMCwweGMyLDB4MDEsMHgyMiwweDAzLDB4OGMsMHgwNSwweGFjLDB4MDYsMHg2MCwweDg1LDB4NjEsMHgwNCwweDYyLDB4MDMsMHg2MiwweDgyLDB4NjMsMHgwMSwweGMwLDB4MTQsMHgzOCwweDgyLDB4ZTAsMHgwZSwweDM1LDB4NDUsMHgzZSwweGVlLDB4M2UsMHg2OSwweDNkLDB4ZTgsMHgwMCwweDk0LDB4YTcsMHg4YywweGM2LDB4ZmYsMHhiZiwweDhiLDB4YTcsMHg5YywweGJmLDB4OWIsMHhhNywweGFjLDB4YmYsMHhhYiwweGE3LDB4YmMsMHhiZiwweGJiLDB4YTcsMHhjYywweGJmLDB4Y2IsMHhhNywweGRjLDB4YmYsMHhkYiwweGE3LDB4ZWMsMHhiZiwweGViLDB4YTcsMHhmYywweGM2LDB4MjAsMHhiZiwweGZiLDB4YzUsMHhhMCwweDJlLDB4ZWQsMHhlMCwweDBiLDB4MzcsMHgyNSwweDNjLDB4MWIsMHgzYywweDliLDB4M2QsMHhlYSwweGUyLDB4MDAsMHhjNSwweDkwLDB4MjUsMHg4YiwweGE1LDB4ODksMHhiZCwweDg4LDB4YTUsMHg5OSwweGJkLDB4OTgsMHhhNSwweGE5LDB4YmQsMHhhOCwweGE1LDB4YjksMHhjNCwweDkwLDB4YmQsMHhiOCwweGM0LDB4MTAsMHgzZCwweGVhLDB4ZTIsMHgwMCwweGM1LDB4ODgsMHgyNSwweDg3LDB4YTUsMHg4OSwweGJkLDB4ODgsMHhhNSwweDk5LDB4YzQsMHg4OCwweGJkLDB4OTgsMHhjNCwweDA4LDB4M2QsMHhlYSwweGUyLDB4MDAsMHhjNSwweDg0LDB4MjUsMHg4NSwweGUxLDB4ODAsMHhhNSwweDk5LDB4ZTEsMHg4MCwweGJkLDB4OTgsMHgzZCwweGVhLDB4ZTIsMHgwMCwweGM1LDB4ODIsMHgyNSwweDg1LDB4ZTEsMHg4MCwweDlkLDB4OTksMHhlMSwweDgwLDB4YjUsMHg5OCwweGUyLDB4MDAsMHhjNSwweDAxLDB4MjUsMHgwMywweDhjLDB4ODksMHhhYywweDg4LDB4MzgsMHg4MiwweGMwLDB4N2MsMHg3OCwweDgxLDB4M2QsMHhlOSwweGUyLDB4MDAsMHhjNSwweDgxLDB4MjUsMHg4NiwweGUxLDB4ODAsMHg4ZCwweDk5LDB4YzUsMHg3ZiwweGUxLDB4ODAsMHhhZCwweDk4LDB4M2QsMHhlOSwweGUyLDB4MDAsMHhjNSwweDgyLDB4MjUsMHg4NiwweGUxLDB4ODAsMHg5ZCwweDk5LDB4YzUsMHg3ZSwweGUxLDB4ODAsMHhiNSwweDk4LDB4ZGYsMHhhMCwweDYwLDB4ODEsMHhjMCwweDA0LDB4MzgsMHg4MiwweGUyLDB4MDEsMHhjNCwweGZmLDB4MDAsMHg4NCwweGUwLDB4NDAsMHhhYywweDk4LDB4YzUsMHg3ZiwweGM0LDB4MDEsMHgyZCwweDdjLDB4MzgsMHg4MiwweGMwLDB4NzAsMHg3OCwweDg0LDB4N2EsMHgwMywweDdhLDB4ODIsMHg3YiwweDAxLDB4ZTIsMHgwNCwweDNjLDB4YzgsMHhlMiwweDAwLDB4YzIsMHgwMywweDNlLDB4ZTgsMHgzZCwweGU5LDB4M2UsMHg2YSwweDNmLDB4ZTgsMHgzZiwweDY5LDB4MmEsMHgwNCwweGRmLDB4ZDAsMHhlMCwweDAxLDB4MDAsMHhjYywweGUyLDB4MDAsMHhjZCwweDA3LDB4ZTAsMHgwMSwweDA1LDB4YzUsMHgwMCwweDg2LDB4ZTAsMHg0MCwweDhjLDB4MWUsMHhjNiwweDdmLDB4ZTAsMHg0MCwweGFjLDB4MWYsMHgzYywweDZmLDB4ZTIsMHgwMCwweGM0LDB4MDMsMHgzZCwweGVlLDB4M2EsMHg2ZiwweGM3LDB4MDEsMHhjNywweDgxLDB4MmMsMHg3NCwweDNjLDB4NmIsMHhlMiwweDAwLDB4YzQsMHgwMywweGUyLDB4MDAsMHhjYywweDAxLDB4M2UsMHhlNCwweDAxLDB4MGUsMHhlMiwweDAwLDB4Y2MsMHgwMiwweDAxLDB4ODYsMHhlMSwweDgwLDB4OWQsMHgxYiwweGM2LDB4N2UsMHgxNCwweDEwLDB4MDAsMHg5MCwweGUxLDB4ODAsMHg4ZCwweDFiLDB4YzYsMHg3ZiwweDE0LDB4MTgsMHgwMCwweDhiLDB4M2MsMHhlYiwweGUxLDB4ODAsMHg4ZCwweDE5LDB4YzYsMHg3ZCwweDljLDB4MDksMHhlNCwweDBhLDB4MzUsMHgyMCwweDNkLDB4NDgsMHhjNSwweDgzLDB4MTQsMHgwOCwweDE0LDB4YTAsMHhlMCwweDA1LDB4MzYsMHg0NSwweDNjLDB4YTgsMHgzZiwweGU1LDB4M2YsMHg2YiwweDAwLDB4YmMsMHhhMywweDBlLDB4MzUsMHgzOCwweGUwLDB4MDEsMHgzMywweDU5LDB4ZTAsMHgwYSwweDM4LDB4Y2EsMHhiZCwweDA0LDB4MzMsMHgzOCwweGM3LDB4ZmYsMHhhNSwweDFlLDB4ZTAsMHgwMSwweDM1LDB4NTksMHhlMCwweDA2LDB4MzgsMHhjNiwweGJiLDB4MTQsMHgzNSwweDM4LDB4YTMsMHgyZSwweGUwLDB4MDEsMHgzMywweDU5LDB4ZTAsMHgwYSwweDM4LDB4Y2EsMHhiZCwweDI0LDB4MzMsMHgzOCwweGE1LDB4M2UsMHhlMCwweDAxLDB4MzUsMHg1OSwweGUwLDB4MDYsMHgzOCwweGM2LDB4YmIsMHgzNCwweDM1LDB4MzgsMHhhMywweDRlLDB4ZTAsMHgwMSwweDMzLDB4NTksMHhlMCwweDBhLDB4MzgsMHhjYSwweGJkLDB4NDQsMHgzMywweDM4LDB4YTUsMHg1ZSwweGUwLDB4MDEsMHgzNSwweDU5LDB4ZTAsMHgwNiwweDM4LDB4YzYsMHhiYiwweDU0LDB4MzUsMHgzOCwweGEzLDB4NmUsMHhlMCwweDAxLDB4MzMsMHg1OSwweGUwLDB4MGEsMHgzOCwweGNhLDB4YmQsMHg2NCwweDMzLDB4MzgsMHhhNSwweDdlLDB4YzcsMHgyMCwweGUwLDB4MDEsMHgzNSwweDU5LDB4ZTAsMHgwNiwweDM4LDB4YzYsMHhiYiwweDc0LDB4YzIsMHgyMCwweDJmLDB4YzUsMHhlMCwweDBlLDB4MzIsMHhhNSwweDNlLDB4OWUsMHgzZCwweDllLDB4M2YsMHg2YywweGUyLDB4MDAsMHhjNywweDEwLDB4MjcsMHgxZSwweGE3LDB4MGIsMHgzNSwweDM4LDB4ZTAsMHgwZiwweDM3LDB4NTksMHgzZCwweDRmLDB4YmQsMHgwZCwweDM3LDB4MzgsMHhhNSwweDFiLDB4ZTAsMHgwZiwweDM1LDB4NTksMHhlMCwweDBlLDB4M2YsMHhjZSwweGJmLDB4MWQsMHgzNSwweDM4LDB4YTcsMHgyYiwweGUwLDB4MGYsMHgzNywweDU5LDB4ZTAsMHgwYSwweDNmLDB4Y2EsMHhiZCwweDJkLDB4MzcsMHgzOCwweGE1LDB4M2IsMHhjNSwweDkwLDB4ZTAsMHgwZiwweDM1LDB4NTksMHhlMCwweDBlLDB4M2YsMHhjZSwweGJmLDB4M2QsMHhjNiwweDkwLDB4M2YsMHg2YywweGUyLDB4MDAsMHhjNywweDA4LDB4MjcsMHgxMSwweGE3LDB4MGIsMHgzNSwweDM4LDB4ZTAsMHgwZiwweDM3LDB4NTksMHhlMCwweDBhLDB4M2YsMHhjYSwweGJkLDB4MGQsMHgzNywweDM4LDB4YTUsMHgxYiwweGM1LDB4ODgsMHhlMCwweDBmLDB4MzUsMHg1OSwweGUwLDB4MGUsMHgzZiwweGNlLDB4YmYsMHgxZCwweGM2LDB4ODgsMHgzZiwweDZjLDB4ZTIsMHgwMCwweGM3LDB4MDQsMHgyNywweDBiLDB4ZTAsMHgwZSwweDM1LDB4MzgsMHhlMSwweDgwLDB4YTUsMHgxYiwweGUwLDB4MGYsMHgzNSwweDU5LDB4ZTAsMHgwZSwweDNmLDB4Y2UsMHhlMSwweDgwLDB4YmYsMHgxZCwweGUwLDB4MDgsMHgzNSwweDM4LDB4MzQsMHhjMywweGJjLDB4MGQsMHhlMiwweDAwLDB4YzYsMHgwMywweDNlLDB4OTksMHgwMCwweDg2LDB4ZTAsMHg0MCwweDhjLDB4MWIsMHhjNiwweDdmLDB4ZTAsMHg0MCwweGFjLDB4MWQsMHhjNiwweDgxLDB4YzUsMHg4MSwweDJlLDB4NzksMHg2MCwweDg0LDB4NjIsMHgwMywweDYyLDB4ODIsMHg2MywweDAxLDB4YzAsMHgxMCwweDM4LDB4ODIsMHhlMiwweDAxLDB4YzYsMHg3ZiwweGVhLDB4MDEsMHg3ZSwweDk0LDB4ZTAsMHgyOCwweGE2LDB4ZmQsMHhlMiwweDA3LDB4YzUsMHhmZiwweGU0LDB4MGMsMHgzNiwweDIwLDB4M2UsMHg0YiwweGJlLDB4MWQsMHgwMCwweDAwLDB4YmQsMHgyZCwweDAwLDB4MDAsMHhiYywweDhkLDB4MDAsMHgwMCwweDE0LDB4ODEsMHhlMCwweDA4LDB4MzQsMHhiOCwweGU4LDB4MDAsMHg2NCwweGM2LDB4ZTAsMHgwOCwweDNjLDB4YzgsMHhlOCwweDAwLDB4N2MsMHg0NiwweDM4LDB4ODIsMHhjMCwweDdjLDB4ZWEsMHgwMSwweDdjLDB4OTQsMHhlMCwweDI4LDB4YTUsMHg3OSwweGM1LDB4MGMsMHhhNCwweDhhLDB4ZTIsMHgwMCwweGM0LDB4ODEsMHgyNCwweDhlLDB4MTQsMHg4MSwweGUwLDB4MDgsMHgzNCwweGI4LDB4ZTgsMHgwMCwweDY0LDB4YzYsMHhlMywweDA4LDB4M2MsMHhkOCwweGU4LDB4MDAsMHg3YywweDQ2LDB4YzAsMHgwNCwweDM4LDB4ODIsMHg2NCwweDgxLDB4YzQsMHg4MSwweDdjLDB4ODEsMHg2NCwweDgxLDB4ZTIsMHgwMCwweGNjLDB4ODQsMHgwMiwweGViLDB4MDAsMHhmOSwweGMwLDB4NjgsMHg3OCwweDgzLDB4N2EsMHgwMiwweDdhLDB4ODEsMHhlOCwweDAwLDB4NjYsMHhjNiwweDNhLDB4ZWMsMHgxNiwweDAxLDB4MzYsMHgzOCwweDNlLDB4NWQsMHgzYSwweDY4LDB4ZTIsMHgwMSwweGMyLDB4ZmYsMHgyNiwweDA4LDB4N2MsMHg4NiwweDdkLDB4MDUsMHg3ZCwweDg0LDB4ZGYsMHhkMiwweDY1LDB4ODQsMHg2NSwweDA1LDB4NjQsMHg4NiwweDNjLDB4NjQsMHgzZSwweDY1LDB4ZGYsMHhiMSwweDNjLDB4NjQsMHhkZiwweGNhLDB4NjAsMHg4MywweDYyLDB4MDIsMHg2MiwweDgxLDB4YzAsMHgxOCwweDM4LDB4ODIsMHhlMCwweDAwLDB4MWMsMHg4NSwweGE0LDB4MzksMHhjNCwweDAxLDB4YmMsMHgzOSwweDE0LDB4MDAsMHgzOCwweDgyLDB4ZTAsMHgwMCwweDFjLDB4MGMsMHgzOCwweDgyLDB4YzAsMHg3YywweDc4LDB4ODEsMHhlMCwweDAxLDB4OWQsMHg4OCwweDNjLDB4ZTgsMHhhNCwweGI5LDB4ZTAsMHgwMCwweDFjLDB4MGMsMHhlMCwweDAwLDB4MTUsMHg2NCwweGUxLDB4MmEsMHgzZCwweGRhLDB4ZWYsMHhmZiwweGRlLDB4YjEsMHg2MCwweDgxLDB4YzAsMHgwNCwweDM4LDB4ODIsMHhjMCwweDc4LDB4NzgsMHg4MiwweDdhLDB4MDEsMHhlMCwweDAzLDB4OGQsMHhhOCwweGUwLDB4MDAsMHgxYywweDhiLDB4MzUsMHhhYiwweGUyLDB4ZjAsMHhjNSwweDgwLDB4ZTEsMHgwMCwweGNkLDB4ODAsMHhlMCwweDBjLDB4MzUsMHhjOCwweGFlLDB4NjksMHgxNSwweDAwLDB4YWQsMHhmOSwweGUwLDB4MDEsMHg5NSwweDg4LDB4YzUsMHg4YywweGUzLDB4ZmYsMHhjNSwweGZmLDB4ZTAsMHgwYywweDM1LDB4YzgsMHhhZSwweDQ5LDB4YWQsMHhkOSwweGE1LDB4YjgsMHhlNywweGYwLDB4MTQsMHgwMCwweGUwLDB4MDgsMHgzZCwweGQ4LDB4ZTQsMHgwYiwweDM0LDB4NDgsMHhhZCwweDg5LDB4ZTQsMHgwYiwweDM0LDB4NDAsMHhhZCwweDk5LDB4MzQsMHg0OCwweGFkLDB4MzksMHhlMCwweDAxLDB4YWQsMHgwOSwweGUwLDB4MDEsMHhhZCwweDE5LDB4ZTAsMHgwMSwweGFkLDB4MjksMHhlMCwweDAxLDB4YWQsMHgzOSwweGUwLDB4MDEsMHhhZCwweDQ5LDB4ZTAsMHgwMSwweGFkLDB4NTksMHhlMCwweDAxLDB4YWQsMHg2OSwweGUwLDB4MDEsMHhhZCwweDc5LDB4YWMsMHgyOSwweGUwLDB4MDAsMHgxYywweDJkLDB4YTIsMHgwOCwweDIyLDB4N2YsMHhlMCwweDAwLDB4MWMsMHg4YiwweDNjLDB4NjQsMHhlMCwweDAxLDB4MTUsMHgwMCwweGVmLDB4ZmYsMHhkZSwweDZiLDB4ZTAsMHgwMCwweDFjLDB4MmUsMHhiYSwweDA4LDB4MDAsMHgwMCwweGUwLDB4MDAsMHgxYywweDg1LDB4YTQsMHgzOSwweGM0LDB4MDEsMHhiYywweDM5LDB4MTQsMHgwMCwweDYwLDB4ODIsMHg2MiwweDAxLDB4YzAsMHgwOCwweDM4LDB4ODIsMHhlMCwweDAwLDB4MWMsMHg4NSwweGE0LDB4MzksMHhjNCwweDAxLDB4YmMsMHgzOSwweDE0LDB4MDAsMHgzOCwweDgyLDB4YzAsMHg0YywweDc4LDB4ODYsMHg3OSwweDA1LDB4NzksMHg4NCwweDdhLDB4MDMsMHg3YSwweDgyLDB4N2IsMHgwMSwweDEyLDB4ODksMHhlMCwweDAwLDB4MWQsMHhhZiwweGUwLDB4MDAsMHgxOSwweDFkLDB4ZTAsMHgwMCwweDE5LDB4YjAsMHhlMCwweDAwLDB4MWIsMHgwNSwweDAwLDB4YmEsMHhhMiwweDAyLDB4MjIsMHgwMywweGE0LDB4MDQsMHhiYywweDAyLDB4MTQsMHgwMCwweGE0LDB4ODMsMHhiYywweDM0LDB4MTUsMHgxOCwweGE0LDB4MjYsMHhiYywweGE0LDB4YzQsMHgwMSwweGJjLDB4MjYsMHgzYywweDYwLDB4YzQsMHgyMCwweDdkLDB4ODcsMHhlZiwweGZmLDB4ZGUsMHgzNCwweDNjLDB4NjQsMHgzYywweGUwLDB4YzQsMHgxOCwweGM0LDB4YTgsMHgxNSwweDEwLDB4ZWYsMHhmZiwweGRkLDB4YzAsMHhhNCwweGE0LDB4NGMsMHgyMCwweDY1LDB4ODcsMHhlMCwweDA4LDB4M2MsMHg5OCwweGJjLDB4MzQsMHg1YywweDExLDB4ZTAsMHgwMCwweDFjLDB4OGEsMHhlMCwweDAxLDB4YjQsMHgwNCwweGUyLDB4MDAsMHhjYywweDY0LDB4MDIsMHg4NCwweGUwLDB4MDAsMHgxYywweDhjLDB4M2MsMHg5OCwweGUwLDB4MDMsMHg4YywweDE0LDB4YmMsMHg5NCwweDM0LDB4MjMsMHhlMCwweDAwLDB4MWMsMHg4ZiwweDNjLDB4MTksMHgxNCwweDgwLDB4YmMsMHg4NCwweGE0LDB4ODgsMHgyNCwweDg0LDB4YTQsMHg5OCwweGJhLDB4MDksMHgwMCwweDgyLDB4YmEsMHgwOCwweGJhLDB4MTgsMHhhNCwweDBiLDB4MjQsMHgwMywweGMyLDB4ZmYsMHgyYSwweGM0LDB4MTQsMHgwMCwweDYwLDB4ODYsMHg2MSwweDA1LDB4NjEsMHg4NCwweDYyLDB4MDMsMHg2MiwweDgyLDB4NjMsMHgwMSwweGMwLDB4MzQsMHgzOCwweDgyLDB4YzAsMHg3OCwweDc4LDB4ODIsMHg3YSwweDAxLDB4ZWIsMHg4MiwweGNhLDB4MDIsMHhhNCwweDA0LDB4ZTIsMHgwMCwweGM0LDB4MDIsMHgyNCwweDAzLDB4ZTAsMHgwMCwweGQyLDB4MzYsMHhhNCwweDA0LDB4ZTIsMHgwMCwweGM0LDB4MDEsMHgyNCwweDAzLDB4ZTAsMHgwMCwweGQzLDB4MTksMHgxNCwweDAwLDB4NjAsMHg4MiwweDYyLDB4MDEsMHhjMCwweDA4LDB4MzgsMHg4MiwweGU0LDB4MGEsMHgzNCwweDQ4LDB4ZTQsMHgwOSwweDM0LDB4MjgsMHhlMCwweDA5LDB4M2QsMHg0OSwweDNkLDB4NjgsMHhlMywweGZlLDB4YzUsMHgwMCwweDM1LDB4MjgsMHhlYSwweDAxLDB4YzQsMHg3ZiwweDNjLDB4Y2EsMHgzNCwweDQ4LDB4ZTAsMHgwOCwweDNjLDB4YzgsMHgzOCwweDgyLDB4YTQsMHhhOCwweDI0LDB4OGEsMHhlNywweGYwLDB4MTUsMHgwMCwweDNjLDB4ZGEsMHhlMCwweDAwLDB4MWQsMHgzMSwweGJjLDB4OGEsMHgwMCwweDAwLDB4MTQsMHg4MCwweGJjLDB4YTgsMHhlMCwweDAwLDB4MWMsMHg5ZCwweGE1LDB4MDksMHhiZCwweDA4LDB4YmMsMHgwOSwweDM4LDB4ODIsMHhlMiwweDAwLDB4Y2MsMHgwMywweDAxLDB4MTEsMHhlMCwweDAwLDB4MWMsMHg4ZCwweGUwLDB4MDEsMHhhNSwweDc5LDB4ZTAsMHgwMSwweGE1LDB4ZTksMHhlMCwweDBjLDB4M2QsMHhjYSwweDI2LDB4MjQsMHhhNiwweDM5LDB4YTQsMHhhOSwweDNkLDB4ZjksMHgwMiwweGEwLDB4MDEsMHg4MywweDNkLDB4N2MsMHgwMiwweDlkLDB4ZTAsMHgwMCwweDFjLDB4MGQsMHhhNCwweDQ4LDB4ZTAsMHgwNywweDk0LDB4YzgsMHhlMywweGZmLDB4YzQsMHhmZSwweGUwLDB4MDcsMHhiNCwweGM4LDB4ZTAsMHgwMCwweDFjLDB4YjIsMHhhNSwweDg5LDB4ZTAsMHgwMCwweDFkLDB4MzIsMHgyNSwweGZkLDB4ZTAsMHgwMCwweDFjLDB4YjMsMHhiYywweDA5LDB4YTQsMHgwYSwweDI0LDB4N2YsMHhlMCwweDAwLDB4MWMsMHgwZCwweDg0LDB4YzgsMHhlMiwweDAxLDB4YzQsMHhlZiwweGFjLDB4YzgsMHgxNCwweDgzLDB4MDAsMHg4NywweGUyLDB4MDAsMHhjYywweDAyLDB4ZTAsMHgwMCwweDFjLDB4MGQsMHgwMSwweDg0LDB4MTQsMHg4NCwweGFjLDB4ZDgsMHgzOCwweDgyLDB4OGMsMHhkOCwweGUyLDB4MDAsMHhjYywweDgxLDB4MDEsMHhhYSwweGUwLDB4MDEsMHhhNCwweDk4LDB4ZTAsMHgwMSwweGE1LDB4MDgsMHhlMCwweDBiLDB4M2QsMHg0OSwweDI1LDB4OGYsMHhhNCwweDQ4LDB4MTYsMHgwMCwweGUwLDB4MDMsMHhhNSwweGM4LDB4ZTAsMHgwMywweGE0LDB4NzgsMHhjNSwweDgwLDB4M2QsMHhmYSwweGUwLDB4MjgsMHgzZSwweDc4LDB4MDIsMHg5NCwweDAxLDB4ODMsMHgzYywweDc5LDB4MDIsMHg5MSwweGUwLDB4MDAsMHgxYywweDBkLDB4ZTAsMHgwMSwweGE0LDB4ZDgsMHhlMCwweDAxLDB4YTUsMHg0OCwweGUwLDB4MGIsMHgzZCwweDQ5LDB4MjUsMHg4YywweGE1LDB4YjgsMHhhNCwweDI4LDB4M2QsMHg3OCwweDAyLDB4ODgsMHgwMSwweDgzLDB4M2MsMHhmYiwweDAyLDB4ODUsMHhlMCwweDAwLDB4MWMsMHgwZCwweDE0LDB4ODQsMHhhYywweGQ4LDB4MzgsMHg4MiwweGUwLDB4MDAsMHgxYywweGEzLDB4YmMsMHg4OCwweDE0LDB4MDAsMHgzOCwweDgyLDB4ZTAsMHgwMCwweDFjLDB4OTgsMHhiYywweDg4LDB4MTQsMHgwMCwweDM4LDB4ODIsMHhjMCwweDdjLDB4NzgsMHg4MSwweDNkLDB4NjgsMHhlMCwweDAwLDB4YzUsMHg2MCwweDNjLDB4NjksMHgzYywweGVhLDB4ZTAsMHgwMCwweDE1LDB4NTAsMHhlZiwweGZmLDB4ZGMsMHg3MywweDE0LDB4MDAsMHg2MCwweDgxLDB4YzAsMHgwNCwweDM4LDB4ODIsMHhjMCwweDY0LDB4NzgsMHg4NiwweDc5LDB4MDUsMHg3OSwweDg0LDB4N2EsMHgwMywweDdhLDB4ODIsMHg3YiwweDAxLDB4M2EsMHg2OCwweGUwLDB4MDAsMHgxYywweDFhLDB4YTEsMHgwOCwweGE0LDB4NDgsMHhlMiwweDAwLDB4Y2MsMHgwMSwweDAxLDB4ODUsMHhlMCwweDAwLDB4MWMsMHgwNCwweDE0LDB4ODAsMHhiYywweDg4LDB4ZTAsMHgwMywweDhjLDB4NDQsMHhlMCwweDAwLDB4MWMsMHg4ZCwweGM0LDB4MDIsMHgzNCwweDIyLDB4ZTAsMHgwOCwweDNhLDB4MTgsMHhhNCwweDY4LDB4ZGYsMHhkNSwweGUwLDB4MDAsMHgxYywweDBkLDB4OGMsMHg0OCwweGUyLDB4MDAsMHhjNCwweDEwLDB4MmMsMHgwOCwweGUwLDB4MDAsMHgxYywweDgzLDB4YTQsMHgwOSwweGNjLDB4MDQsMHhiYywweDA5LDB4M2MsMHg2NCwweGRmLDB4NDgsMHhlMCwweDAzLDB4OGMsMHg0NCwweGEzLDB4MzQsMHhlMCwweDA4LDB4M2EsMHgxOCwweGUwLDB4MDMsMHg4YywweDU4LDB4ZTAsMHgwMSwweDk5LDB4ODQsMHgzYiwweDE4LDB4MzksMHhhOCwweGUwLDB4MDgsMHgzYiwweDEzLDB4ZTIsMHgwOCwweDNjLDB4NDYsMHhlNCwweDA4LDB4MzQsMHg0MCwweGUwLDB4MDAsMHgxYSwweDkyLDB4MjQsMHgxMSwweDNjLDB4NjYsMHhkZiwweDIxLDB4YmMsMHg2NSwweGJjLDB4MDUsMHgzYywweDY2LDB4ZTEsMHhmZiwweGNjLDB4N2YsMHgzYywweDI2LDB4YzQsMHgwMSwweGRmLDB4MTksMHhiYywweDc1LDB4M2IsMHgxOCwweGJjLDB4MTUsMHgzOSwweGE4LDB4ZTAsMHgwMCwweDFhLDB4OTEsMHgzYywweDY2LDB4ZGYsMHgxMSwweGJjLDB4NjUsMHgxMywweDAwLDB4YmMsMHgwNSwweDNjLDB4NjMsMHhkZiwweDBjLDB4YmMsMHg3NSwweDE1LDB4MzAsMHhiYywweDE1LDB4ZTAsMHgwMSwweGJiLDB4MDUsMHhiYiwweDI1LDB4ZTAsMHgwMSwweGJiLDB4MTUsMHhiYiwweDM1LDB4ZTAsMHgwMCwweDFhLDB4OWEsMHhlMCwweDAwLDB4MWMsMHg5MiwweGExLDB4ZjUsMHgzYywweDYzLDB4ZWYsMHhmZiwweGRjLDB4MDksMHhlMCwweDAyLDB4YTQsMHgyMiwweGJiLDB4MDgsMHgwMCwweDAwLDB4M2MsMHg2MywweGUwLDB4MDIsMHhhNCwweDgyLDB4N2MsMHg4NywweGRlLDB4ZjIsMHg2NCwweDg3LDB4YmMsMHgwOSwweDAwLDB4MDAsMHgzYywweDYzLDB4ZTAsMHgwMiwweGE0LDB4OTIsMHhjNCwweDE4LDB4N2MsMHg4NywweGRlLDB4ZTksMHg2NCwweDg3LDB4YmMsMHgwOSwweDAwLDB4MDAsMHhlMCwweDAwLDB4MWMsMHgwZCwweGUwLDB4MDIsMHhhMSwweDQyLDB4YTQsMHg0OCwweGRlLDB4ZTAsMHhiYywweDAyLDB4MDAsMHgwMCwweGE0LDB4NDUsMHhhNCwweGY1LDB4YzQsMHg3ZiwweGE1LDB4ZTUsMHhiYywweDQ1LDB4M2MsMHg2OSwweGE1LDB4NTUsMHgzYywweGZiLDB4YzQsMHgzMCwweGUwLDB4NjgsMHgzOSwweDJhLDB4YmMsMHg3NSwweGUwLDB4MDAsMHgxYywweDBmLDB4YmIsMHgwNCwweGE0LDB4ZTgsMHgyNCwweDg0LDB4YTQsMHhmOCwweGJhLDB4MDksMHgwMCwweDgyLDB4YmEsMHg2OCwweGJhLDB4NzgsMHg2MCwweDg2LDB4NjEsMHgwNSwweDYxLDB4ODQsMHg2MiwweDAzLDB4NjIsMHg4MiwweDYzLDB4MDEsMHhjMCwweDFjLDB4MzgsMHg4MiwweGMwLDB4NjAsMHg3OCwweDg2LDB4NzksMHgwNSwweDc5LDB4ODQsMHg3YSwweDAzLDB4N2EsMHg4MiwweDdiLDB4MDEsMHgzYSwweDY4LDB4ZTAsMHgwMCwweDFjLDB4MWEsMHhhMSwweDA4LDB4ZTAsMHgwMSwweGE0LDB4MDgsMHhlMiwweDAwLDB4Y2MsMHgwMSwweDAxLDB4ODUsMHhlMCwweDAwLDB4MWMsMHgwNCwweDE0LDB4ODAsMHhiYywweDg4LDB4ZTAsMHgwMywweDhjLDB4NDQsMHhlMCwweDAwLDB4MWMsMHg4ZCwweGM0LDB4MDIsMHgzNCwweDIyLDB4ZTAsMHgwOCwweDNhLDB4MTgsMHhhNCwweDY4LDB4ZGYsMHgzMywweGUwLDB4MDAsMHgxYywweDBkLDB4OGMsMHg0OCwweGUyLDB4MDAsMHhjNCwweDEwLDB4MmMsMHgxMSwweGUwLDB4MDAsMHgxYywweDgzLDB4YTQsMHgwOSwweGNjLDB4MDQsMHhiYywweDA5LDB4ZTAsMHgwMywweDhjLDB4MDQsMHhlMiwweDAwLDB4YzQsMHgwNCwweDI0LDB4MDQsMHgzYywweDY0LDB4ZGUsMHhhMSwweDAwLDB4ODQsMHgzYywweDY0LDB4ZWYsMHhmZiwweGRlLDB4MTksMHhlMCwweDAzLDB4OGMsMHg0NCwweGEzLDB4MzQsMHhlMCwweDA4LDB4M2EsMHgxOCwweGUwLDB4MDMsMHg4YywweDU4LDB4ZTAsMHgwMSwweDk5LDB4ODQsMHgzYiwweDE4LDB4MzksMHhhOCwweGUwLDB4MDgsMHgzYiwweDEzLDB4ZTIsMHgwOCwweDNjLDB4NDYsMHhlNCwweDA4LDB4MzQsMHg0MCwweGUwLDB4MDAsMHgxYSwweDkyLDB4MjQsMHgxMSwweDNjLDB4NjYsMHhkZSwweDc2LDB4YmMsMHg2NSwweGJjLDB4MDUsMHgzYywweDY2LDB4ZTEsMHhmZiwweGNjLDB4N2YsMHgzYywweDI2LDB4YzQsMHgwMSwweGRlLDB4NmUsMHhiYywweDc1LDB4M2IsMHgxOCwweGJjLDB4MTUsMHgzOSwweGE4LDB4ZTAsMHgwMCwweDFhLDB4OTEsMHgzYywweDY2LDB4ZGUsMHg2NiwweGJjLDB4NjUsMHgzYiwweDEzLDB4YmMsMHgwNSwweDNjLDB4NjMsMHhkZSwweDYxLDB4M2QsMHg2NiwweDNjLDB4ZTYsMHhlMCwweDAwLDB4YzUsMHg3ZiwweGM0LDB4ZmYsMHhlMiwweDA5LDB4M2QsMHg0OSwweGJjLDB4MTUsMHhlNCwweDA5LDB4MzQsMHhjMCwweDI0LDB4YTIsMHgzYywweGU2LDB4ZTEsMHhmZiwweGNjLDB4ZmYsMHgzYywweGE2LDB4N2MsMHg4OCwweGM0LDB4ODEsMHgyNCwweDg4LDB4ZTAsMHgwOCwweDNjLDB4OTMsMHg3YywweDg3LDB4ZGUsMHg0YiwweGJjLDB4NzUsMHg2NCwweDg3LDB4MDAsMHg4MiwweGJjLDB4NzUsMHgxNCwweDAwLDB4YmMsMHgyNSwweGJjLDB4MzUsMHhlMCwweDA4LDB4M2IsMHgxOSwweGRlLDB4NDEsMHhlMCwweDAxLDB4YmMsMHgwNSwweGUwLDB4MDAsMHgxNCwweDdmLDB4NjQsMHg4OCwweDNjLDB4MjksMHhkZSwweDNhLDB4ZTAsMHgwMSwweGJjLDB4MTUsMHgzYywweDY1LDB4YzQsMHgxMCwweDAwLDB4OGMsMHgzYywweDYzLDB4ZTAsMHgwMSwweGM0LDB4MDAsMHg3YywweDg3LDB4ZGUsMHgzMCwweDY0LDB4ODcsMHhiYywweDc1LDB4M2MsMHg2NSwweGJjLDB4YTUsMHhjNCwweDA4LDB4YmMsMHhiNSwweGUwLDB4MDAsMHgxYSwweDlhLDB4MTMsMHgwMCwweGJiLDB4NjgsMHgxNSwweDMwLDB4YmIsMHg3OCwweGUwLDB4MDEsMHhhMSwweGI1LDB4ZTAsMHgwMCwweDFjLDB4OTIsMHgzYywweDYzLDB4ZWYsMHhmZiwweGRiLDB4MmIsMHhlMCwweDAxLDB4YTQsMHgyMiwweGJiLDB4MDgsMHgwMCwweDAwLDB4M2MsMHg2MywweGUwLDB4MDEsMHhhNCwweDgyLDB4N2MsMHg4NywweGRlLDB4MTQsMHg2NCwweDg3LDB4YmMsMHgwOSwweDAwLDB4MDAsMHgzYywweDYzLDB4ZTAsMHgwMSwweGE0LDB4OTIsMHhjNCwweDE4LDB4N2MsMHg4NywweGRlLDB4MGIsMHg2NCwweDg3LDB4YmMsMHgwOSwweDAwLDB4MDAsMHhlMCwweDAwLDB4MWMsMHgwZCwweGUwLDB4MDEsMHhhMSwweDQyLDB4YTQsMHg0OCwweGRlLDB4MDIsMHhiYywweDAyLDB4MDAsMHgwMCwweGUwLDB4MDEsMHhhNCwweDA1LDB4ZTAsMHgwMSwweGE0LDB4YjUsMHhjNCwweDdmLDB4ZTAsMHgwMSwweGE1LDB4YTUsMHhlMCwweDAxLDB4YmMsMHgwNSwweDNjLDB4NjksMHhlMCwweDAxLDB4YTUsMHgxNSwweDNjLDB4ZmIsMHhjNCwweDMwLDB4ZTAsMHg2OCwweDM5LDB4MmEsMHhlMCwweDAxLDB4YmMsMHgzNSwweGUwLDB4MDAsMHgxYywweDBmLDB4YmIsMHgwNCwweGUwLDB4MDEsMHhhNCwweDg4LDB4MjQsMHg4NSwweGUwLDB4MDEsMHhhNCwweDk4LDB4YmEsMHgwOSwweDAwLDB4ODMsMHhlMCwweDAxLDB4YmEsMHgwOCwweGUwLDB4MDEsMHhiYSwweDE4LDB4NjAsMHg4NiwweDYxLDB4MDUsMHg2MSwweDg0LDB4NjIsMHgwMywweDYyLDB4ODIsMHg2MywweDAxLDB4YzAsMHgyMCwweDM4LDB4ODIsMHhjMCwweDU4LDB4NzgsMHg4NiwweDc5LDB4MDUsMHg3OSwweDg0LDB4N2EsMHgwMywweDdhLDB4ODIsMHg3YiwweDAxLDB4ZTAsMHgwMCwweDFjLDB4MWEsMHgxMSwweDA4LDB4YTQsMHg4OCwweGUwLDB4MDAsMHgxOSwweDlkLDB4N2MsMHg4OCwweGViLDB4ODIsMHhjYywweDgyLDB4YTUsMHgwOSwweGUwLDB4MDEsMHgwMCwweGM3LDB4NjQsMHgwOCwweGUwLDB4MDEsMHhhMiwweDY4LDB4MTQsMHgwMSwweGRkLDB4YzAsMHhiYywweDA0LDB4MDAsMHgwMCwweDY0LDB4ODgsMHhlMCwweDAxLDB4YTQsMHg3OSwweGE0LDB4MDgsMHhkZCwweGI5LDB4ZTAsMHgwMCwweDFjLDB4OWEsMHg3YywweDA5LDB4ZTAsMHgwMSwweGE0LDB4MDksMHhjNCwweDAxLDB4ZTAsMHgwMSwweGJjLDB4MDksMHhlMCwweDAwLDB4MWMsMHgwZiwweGUwLDB4MDEsMHhhMiwweDA4LDB4MjIsMHgwNiwweGE0LDB4MDQsMHhlMCwweDAwLDB4MWMsMHg4ZiwweGUwLDB4MDEsMHhiYywweDA5LDB4ZTAsMHgwMywweDhjLDB4NDQsMHhlMCwweDAwLDB4MWMsMHg4ZCwweGM0LDB4MDIsMHgzNCwweDIyLDB4ZTAsMHgwOCwweDNhLDB4MTgsMHhhNCwweDY4LDB4N2MsMHgwYSwweGRlLDB4MmQsMHhlMCwweDAwLDB4MWMsMHgwZCwweDhjLDB4NDgsMHgzYywweGU4LDB4ZTIsMHgwMCwweGM0LDB4OTAsMHgyYywweDg1LDB4M2MsMHg2NCwweGRkLDB4YTQsMHhlMCwweDAxLDB4MDAsMHg4ZiwweGUwLDB4MDMsMHg4YywweGM0LDB4NjMsMHgwOSwweGUwLDB4MGEsMHgzYSwweDE5LDB4ZWEsMHgxZSwweGMzLDB4MDAsMHhjNCwweGZmLDB4ZTAsMHgwMywweGFjLDB4YzQsMHhlNCwweDA2LDB4MzMsMHg0OCwweDE0LDB4ODIsMHhlMSwweDI5LDB4M2IsMHgwOSwweGUwLDB4MDMsMHg4ZCwweGRhLDB4MjQsMHg5MSwweDIzLDB4MTAsMHhlMiwweDAwLDB4Y2IsMHgwNywweDAxLDB4ODQsMHhlMiwweDAwLDB4YzQsMHgyMCwweDJjLDB4MGEsMHhlMCwweDAwLDB4MWMsMHg4MywweGE0LDB4MDksMHhjYywweDA0LDB4YmMsMHgwOSwweDNjLDB4NjQsMHhkZCwweDgyLDB4ZTAsMHgwMCwweDAwLDB4ZDUsMHhlMCwweDAwLDB4MWEsMHg4ZCwweGUwLDB4MDEsMHg5YywweDQ1LDB4ZTAsMHgwMCwweDI0LDB4NGQsMHhhNCwweGE0LDB4OGQsMHgxNSwweDNjLDB4NjksMHhjNSwweDE4LDB4YzQsMHg3OCwweDNkLDB4MWIsMHhlZiwweGZmLDB4ZGEsMHg2ZiwweGE0LDB4MjQsMHhhNCwweGI0LDB4YzQsMHg3OCwweGJjLDB4MjQsMHgzYywweDY5LDB4YzQsMHg3OCwweGJjLDB4MzQsMHhlMCwweDAxLDB4OTQsMHgwNCwweGM0LDB4MDgsMHhlMCwweDAxLDB4YjQsMHgwNCwweDhjLDB4MDUsMHhlMiwweDAwLDB4Y2MsMHgwMSwweDAxLDB4OTksMHhlMCwweDAxLDB4OTUsMHg0NSwweGUwLDB4NDAsMHg5YywweDY5LDB4ZTAsMHgwMSwweGI1LDB4NDksMHhjNCwweDA4LDB4ZTAsMHgwMSwweDk1LDB4NTUsMHhlMywweGZmLDB4YzQsMHg3ZiwweGUwLDB4MDEsMHhiNSwweDU5LDB4MTUsMHgwMCwweGUwLDB4MDEsMHhiNSwweDc5LDB4MTUsMHgxMSwweGUwLDB4MDEsMHhiNCwweDY5LDB4ZTAsMHg0MSwweGFkLDB4MjksMHhlMCwweDQwLDB4YjQsMHg2OSwweDAwLDB4OWMsMHhlMCwweDAxLDB4OTQsMHg0NSwweGI0LDB4MjksMHhlMCwweDAxLDB4OTQsMHg1NSwweGI0LDB4MzksMHg2NCwweDA5LDB4ZTMsMHhmZiwweGM0LDB4N2YsMHgzZCwweDY4LDB4YzUsMHg3NCwweGI1LDB4NDksMHgxNSwweDAwLDB4YjUsMHg1OSwweDE1LDB4MTEsMHhlMCwweDQwLDB4YjQsMHg3OSwweDNjLDB4NjksMHhlMCwweDQwLDB4YWQsMHg3OSwweGM0LDB4NzAsMHg3YywweDg3LDB4ZWYsMHhmZiwweGRhLDB4MWEsMHg2NCwweDg3LDB4ZTAsMHg0MCwweGI0LDB4MzksMHgzYywweDY0LDB4ZGUsMHg1ZCwweGUwLDB4MDAsMHgxYywweDBkLDB4MTQsMHg4NCwweDhjLDB4NTgsMHhlMCwweDI5LDB4M2MsMHgwOSwweDJjLDB4ODUsMHgxNCwweDgxLDB4ZTAsMHgyOCwweDNjLDB4MDksMHgyNCwweDAzLDB4M2MsMHg2NiwweGRkLDB4MzEsMHg2NCwweDBhLDB4ZTAsMHgwMCwweDFjLDB4OGQsMHhlMCwweDAwLDB4YzQsMHg2MCwweDE1LDB4MTAsMHhlZiwweGZmLDB4ZGEsMHgxNSwweGE0LDB4MDMsMHhiYywweDA0LDB4YmEsMHgwMywweGViLDB4ODIsMHhjYywweDAyLDB4YTUsMHgwOCwweGMxLDB4N2YsMHhlMiwweDAwLDB4YzUsMHgwMiwweDI1LDB4MDYsMHgxNCwweDAwLDB4ZTEsMHgyOCwweDM5LDB4MDgsMHhlNywweGZlLDB4MmMsMHgzNSwweDE0LDB4MDAsMHg2MCwweDg2LDB4NjEsMHgwNSwweDYxLDB4ODQsMHg2MiwweDAzLDB4NjIsMHg4MiwweDYzLDB4MDEsMHhjMCwweDI4LDB4MzgsMHg4MiwweGMwLDB4NTQsMHg3OCwweDg2LDB4NzksMHgwNSwweDc5LDB4ODQsMHg3YSwweDAzLDB4N2EsMHg4MiwweDdiLDB4MDEsMHhlMCwweDAwLDB4MWMsMHgxYSwweDEyLDB4ODgsMHhhNCwweDg4LDB4N2MsMHg4OSwweGViLDB4ODIsMHhjYywweDgyLDB4YTUsMHgwOSwweDdhLDB4ODgsMHhlMCwweDAxLDB4MDAsMHhhMywweDY0LDB4MDksMHhlMCwweDAyLDB4YTIsMHg2OCwweDE0LDB4MDEsMHhkYywweGQ4LDB4YmMsMHgwNCwweDAwLDB4MDAsMHg2NCwweDg5LDB4ZTAsMHgwMiwweGE0LDB4NzksMHhhNCwweDA4LDB4ZGMsMHhkMSwweGUwLDB4MDAsMHgxYywweDlhLDB4M2IsMHg2OCwweGE0LDB4NDksMHhjNCwweDAxLDB4YmMsMHg0OSwweGUwLDB4MDAsMHgxYywweDBmLDB4YTIsMHg2OCwweDIyLDB4MDUsMHhhNCwweDA0LDB4ZTAsMHgwMCwweDFjLDB4OGYsMHhiYywweDY5LDB4ZTAsMHgwMywweDhjLDB4NDQsMHhlMCwweDAwLDB4MWMsMHg4ZCwweGM0LDB4MDIsMHgzNCwweDIyLDB4ZTAsMHgwOCwweDNhLDB4MTgsMHhhNCwweDY4LDB4ZGQsMHg0YSwweGUwLDB4MDAsMHgxYywweDBkLDB4OGMsMHg0OCwweGUyLDB4MDAsMHhjNCwweDEwLDB4MmMsMHgwNSwweDNjLDB4NjQsMHhkYywweGMyLDB4ZTAsMHgwMCwweDAwLDB4ZWYsMHhlMCwweDAzLDB4OGMsMHg0NCwweGVhLDB4MWUsMHhjMywweDAwLDB4M2MsMHhlOCwweGM0LDB4ODIsMHgzNCwweGEyLDB4ZTAsMHgwOSwweDNhLDB4MTksMHhhNCwweGU5LDB4ZTQsMHgwNiwweDMzLDB4NDgsMHg3YywweDhiLDB4ZTAsMHgwOSwweDNhLDB4MTgsMHhjNCwweDAxLDB4ZTAsMHgwMywweGFjLDB4NDQsMHgxNCwweDAyLDB4ZTEsMHgyOCwweDNiLDB4MDgsMHhlMCwweDAzLDB4ODksMHhkOSwweDI0LDB4MDUsMHgyMywweDA0LDB4M2MsMHg2NCwweGRjLDB4YTUsMHgwMCwweGJkLDB4YTQsMHgxNCwweDE0LDB4ZmMsMHhjNCwweDAzLDB4ZTAsMHgwOSwweDNjLDB4NTksMHhlMCwweDAwLDB4MWEsMHg4ZCwweDdjLDB4OGEsMHhlZiwweGZmLDB4ZGIsMHhiMSwweDhjLDB4ODUsMHhlMCwweDAwLDB4MTEsMHg2OCwweGUyLDB4MDAsMHhjYywweDgxLDB4ZTAsMHgwMCwweDE0LDB4YzAsMHhlMCwweDYyLDB4MzksMHhhOSwweGE0LDB4YjQsMHgzZCwweDYyLDB4N2MsMHgwNywweGVmLDB4ZmYsMHhkOSwweDg5LDB4OGMsMHgyNSwweDY1LDB4ODcsMHhlMiwweDAwLDB4Y2MsMHgwMSwweDAxLDB4OGUsMHg4ZCwweDE1LDB4ZTAsMHgwYywweDM5LDB4MjMsMHhlMCwweDA5LDB4MzksMHg5YSwweGUwLDB4MDgsMHgzZCwweDkzLDB4ZTAsMHgwOSwweDNkLDB4OTksMHhlMCwweDBhLDB4M2UsMHgyYSwweGVmLDB4ZmYsMHhkYSwweDUxLDB4ZTAsMHgwMCwweDFhLDB4OGQsMHg2NCwweDhhLDB4OGMsMHgxNSwweDM5LDB4MjgsMHhhYywweDQ5LDB4M2MsMHg2NCwweGE5LDB4NTksMHhlZiwweGZmLDB4ZGIsMHg5YiwweGE0LDB4MjUsMHhhNSwweDM1LDB4YzQsMHgwMCwweDE0LDB4ODEsMHhlMCwweDI5LDB4M2QsMHg3OSwweGJjLDB4YjUsMHhiYywweDI1LDB4ZTAsMHgwMCwweDFjLDB4MGQsMHgxNCwweDg0LDB4OGMsMHg1OCwweGUwLDB4MjksMHgzYywweDA5LDB4MmMsMHg4NSwweDE0LDB4ODEsMHhlMCwweDI4LDB4M2MsMHgwOSwweDI0LDB4MDMsMHgzYywweDY2LDB4ZGMsMHg2YywweDY0LDB4MGIsMHhlMCwweDAwLDB4MWMsMHg4ZCwweGUwLDB4MDAsMHhjNCwweDYwLDB4MTUsMHgxMCwweGVmLDB4ZmYsMHhkOSwweDUwLDB4NjQsMHgwOCwweGViLDB4ODIsMHhjYywweDgyLDB4YzQsMHg3ZiwweGE1LDB4MDksMHg3YywweDA4LDB4ZTIsMHgwMCwweGM1LDB4MDEsMHgyNSwweDA0LDB4NjQsMHg4OCwweGU3LDB4ZmUsMHgyYywweGRiLDB4MTQsMHgwMCwweDYwLDB4ODYsMHg2MSwweDA1LDB4NjEsMHg4NCwweDYyLDB4MDMsMHg2MiwweDgyLDB4NjMsMHgwMSwweGMwLDB4MmMsMHgzOCwweDgyLDB4ZTAsMHgwMSwweDllLDB4OTgsMHhhNiwweDM4LDB4M2QsMHhlZCwweGM1LDB4OGUsMHhlMywweGZmLDB4YzUsMHhmZiwweDNkLDB4NmIsMHhjNSwweDdlLDB4ZTAsMHgwYSwweDNlLDB4MWEsMHg5NywweDBhLDB4ZTMsMHhmZiwweGM0LDB4ZmYsMHhlMywweDAyLDB4Y2YsMHgwMCwweDAxLDB4ODksMHgzZCwweGVkLDB4YzUsMHg5MiwweGUzLDB4ZmYsMHhjNSwweGZmLDB4M2QsMHg2YiwweGM1LDB4N2UsMHhlMCwweDBhLDB4M2UsMHgxYSwweDk2LDB4OGEsMHhlMywweDEwLDB4Y2UsMHhlNCwweDAxLDB4OWMsMHhjNSwweDg4LDB4ZTMsMHhmZiwweGM1LDB4ZmYsMHgzZCwweDZiLDB4YzUsMHg3ZSwweGUwLDB4MGEsMHgzZSwweDFhLDB4MmMsMHg4MywweDE0LDB4YTEsMHgwMCwweDg2LDB4ZTIsMHgwMCwweGNjLDB4ODEsMHgwMSwweDg0LDB4ZTAsMHgwMCwweDE0LDB4ZDcsMHhiNCwweDhhLDB4ZTAsMHgwMSwweDk0LDB4ODgsMHhlMCwweDAxLDB4OTQsMHgxOCwweGUwLDB4MDgsMHgzYywweDk4LDB4YzQsMHgwMiwweDNjLDB4MmIsMHhlMCwweDQwLDB4YjQsMHgxYSwweDAwLDB4OGEsMHhlMCwweDEwLDB4MTQsMHgwMCwweDI0LDB4ODYsMHhlMiwweDAwLDB4Y2MsMHg4MSwweDAxLDB4ODQsMHhlNywweDBkLDB4MTQsMHg1ZCwweGI0LDB4MGEsMHgxNCwweDAwLDB4MzgsMHg4MiwweGUwLDB4MDEsMHg5ZSwweDE4LDB4YTUsMHhiOCwweDNjLDB4ZWMsMHhjNCwweDhlLDB4ZTMsMHhmZiwweGM0LDB4ZmYsMHgzZCwweDY5LDB4YzUsMHg3ZSwweGUwLDB4MGEsMHgzZCwweDlhLDB4OTYsMHg4YSwweGUzLDB4MDIsMHhjZSwweDgwLDB4MDEsMHg4OSwweDNjLDB4ZWMsMHhjNCwweDkyLDB4ZTMsMHhmZiwweGM0LDB4ZmYsMHgzZCwweDY5LDB4YzUsMHg3ZSwweGUwLDB4MGEsMHgzZCwweDlhLDB4OTYsMHg4YSwweGUzLDB4MTAsMHhjZSwweGU0LDB4MDEsMHg4ZiwweGUwLDB4MDEsMHg5NiwweDg4LDB4YzQsMHg4OCwweGUzLDB4ZmYsMHhjNCwweGZmLDB4M2QsMHg2OSwweDNlLDB4MWQsMHhjNSwweDdlLDB4YzYsMHgwMiwweGUwLDB4MGEsMHgzZCwweDlhLDB4M2UsMHgyOSwweGUwLDB4NDAsMHhiNiwweDFhLDB4OWQsMHgwYSwweGUwLDB4MDAsMHgxNiwweDU3LDB4ZTAsMHgyYywweDNkLDB4MGMsMHgyZSwweDA2LDB4ZTEsMHgwZCwweDE2LDB4NWQsMHhlMCwweDJhLDB4M2QsMHgwYywweDI1LDB4MTAsMHgzZCwweDk5LDB4OGQsMHg2YiwweGUyLDB4MDAsMHhjZCwweDA0LDB4MDEsMHg4YiwweGUwLDB4MDEsMHg5NSwweDA4LDB4ZTAsMHgwMSwweDk0LDB4MTgsMHhlMCwweDA4LDB4M2QsMHgxOCwweGM0LDB4NTgsMHhlMCwweDA5LDB4M2MsMHgyOSwweGI0LDB4YWIsMHgxNCwweDAwLDB4MzgsMHg4MiwweDM4LDB4ODIsMHhjMCwweDUwLDB4NzgsMHg4NiwweDc5LDB4MDUsMHg3OSwweDg0LDB4N2EsMHgwMywweDdhLDB4ODIsMHg3YiwweDAxLDB4MzksMHg2OCwweGVmLDB4ZmYsMHhkYSwweGMyLDB4YTQsMHhiMiwweGUwLDB4MDEsMHg5ZCwweDAyLDB4MzksMHhlOCwweGVmLDB4ZmYsMHhkOCwweGI2LDB4ZTAsMHgwMSwweDlhLDB4ZTIsMHhlMCwweDAyLDB4OWEsMHgxMiwweDNjLDB4NjUsMHhlZiwweGZmLDB4ZDgsMHgxZCwweDNiLDB4NjgsMHhlMCwweDA0LDB4MjQsMHgzMCwweDNjLDB4NjUsMHhlZiwweGZmLDB4ZDcsMHgyNywweDNhLDB4ZTgsMHhlMCwweDA0LDB4MjQsMHgyYSwweGE0LDB4YTYsMHgyNCwweDg3LDB4ZTAsMHgwMCwweDFjLDB4MTYsMHhlMCwweDAyLDB4MTUsMHg1MCwweGVmLDB4ZmYsMHhkOCwweDllLDB4ZTAsMHgwMCwweDFjLDB4MTUsMHhlMCwweDA0LDB4MzksMHg5NCwweDhjLDB4MDgsMHgyYywweDA4LDB4ZTAsMHgwMCwweDFjLDB4MTQsMHg4YywweDA4LDB4ZTIsMHgwMCwweGNjLDB4MDMsMHhlMCwweDAwLDB4MDEsMHhjZiwweGUwLDB4MDMsMHg4YywweDIyLDB4ZTAsMHgwMCwweDJjLDB4NGIsMHhlMCwweDAxLDB4OWMsMHgyMiwweGUyLDB4MDAsMHhjNCwweDEwLDB4ZTAsMHgwMCwweDJjLDB4NDUsMHhlMCwweDAxLDB4OGQsMHgwNCwweGUwLDB4MDEsMHg4YywweDk0LDB4ZTAsMHgwMSwweDhjLDB4MjQsMHhlNCwweDBhLDB4MzUsMHgyOCwweGU0LDB4MDksMHgzNCwweGEwLDB4M2MsMHhjYSwweDM0LDB4MjgsMHgzYywweDQ5LDB4ZTAsMHgwMSwweDhjLDB4YjQsMHhlMCwweDA4LDB4M2MsMHhjOCwweGUwLDB4MDEsMHhhNCwweGQ2LDB4M2MsMHhmOCwweDAxLDB4YWYsMHg4YywweDI0LDB4OGQsMHgzNCwweDM0LDB4MjgsMHhlMCwweDAzLDB4OWMsMHhjNiwweGUwLDB4MDgsMHgzZCwweDQ4LDB4M2MsMHhmOCwweDAxLDB4YTYsMHg4ZCwweDQ0LDB4OGMsMHhkNCwweDhjLDB4NjQsMHhlNCwweDBhLDB4MzUsMHgyOCwweGU0LDB4MDksMHgzNCwweGEwLDB4M2MsMHhjYSwweDM0LDB4MjgsMHgzYywweDQ5LDB4OGMsMHhmNCwweGUwLDB4MDgsMHgzYywweGM4LDB4ZTAsMHgwMSwweGE0LDB4YzYsMHgzYywweGY4LDB4MDEsMHg5NSwweGUwLDB4MDEsMHg4YywweDQ0LDB4ZTIsMHgwMCwweGNjLDB4NTYsMHgwMSwweDkwLDB4ZTAsMHgwMSwweDhjLDB4NTQsMHhlMiwweDAwLDB4Y2MsMHg1MCwweDAxLDB4OGIsMHhlMCwweDAxLDB4OGMsMHg2NCwweGUyLDB4MDAsMHhjYywweDRlLDB4MDEsMHg4NiwweDNjLDB4NjIsMHhlZiwweGZmLDB4ZDcsMHhhZCwweGUwLDB4MDQsMHgwMCwweGZhLDB4MTYsMHgwMCwweGUwLDB4MDMsMHgyMiwweDE1LDB4ODQsMHgwNCwweGUyLDB4MDAsMHhjNCwweDAzLDB4ZTIsMHgwMCwweGNjLDB4MDIsMHgwMSwweDA4LDB4ZTAsMHgwNSwweGE0LDB4MDUsMHhjNCwweDAxLDB4ZTAsMHgwNSwweGJjLDB4MDUsMHhlMCwweDAzLDB4MDAsMHg4OCwweGUwLDB4MDAsMHgxYywweDllLDB4OGMsMHgxNCwweDhkLDB4MDksMHgxNSwweDgxLDB4MzQsMHg0MSwweDdkLDB4OGEsMHgzYywweDdhLDB4MDQsMHgwNSwweDhjLDB4OTksMHhlMCwweDI5LDB4M2MsMHgxOSwweDdjLDB4OGEsMHhlMCwweDAyLDB4YTQsMHgzNSwweGUwLDB4MDIsMHhiYywweDI1LDB4ZTAsMHgwYiwweDljLDB4NDUsMHhlMiwweDAwLDB4Y2MsMHgwMSwweDAxLDB4YTUsMHg4ZCwweDI0LDB4OGMsMHgzNCwweDM1LDB4MjgsMHhlMCwweDBhLDB4M2MsMHg0YSwweGUwLDB4MDIsMHhiNSwweDM2LDB4MTQsMHgwMCwweGUwLDB4MDUsMHhiNSwweDc1LDB4ZTAsMHgwMiwweGJjLDB4MTYsMHhlMCwweDA1LDB4YmMsMHgxNSwweGUwLDB4MGIsMHhiNCwweDQ1LDB4ZTAsMHgwMSwweDhkLDB4ODQsMHhlMCwweDAxLDB4OGMsMHgxNCwweGUwLDB4MDEsMHg4YywweGE0LDB4ZTQsMHgwYiwweDM1LDB4YTgsMHhlNCwweDA4LDB4MzQsMHgyMCwweDNjLDB4NGIsMHgzNCwweGE4LDB4ZTAsMHgwMSwweDhkLDB4YjQsMHgzYywweGM4LDB4ZTAsMHgwOSwweDNkLDB4YzksMHgzYywweDY2LDB4MTUsMHg4MSwweDAwLDB4OTksMHhlMCwweDAxLDB4OGQsMHgwNCwweGUwLDB4MDEsMHg4YywweDE0LDB4ZTQsMHgwYSwweDM1LDB4MjgsMHhlNCwweDA4LDB4MzQsMHgyMCwweGUwLDB4MDEsMHg4YywweGE0LDB4M2MsMHg0YSwweDhkLDB4MjQsMHg4ZCwweGI0LDB4MzQsMHhhOCwweGUwLDB4MDEsMHg4ZSwweDM0LDB4M2MsMHhjOCwweDM1LDB4MjgsMHhlMCwweDBhLDB4M2QsMHhjYSwweDNjLDB4NjYsMHhlMCwweDA5LDB4M2UsMHg0OSwweDE1LDB4ODAsMHhlZiwweGZmLDB4ZDYsMHhkMiwweDM5LDB4ZTgsMHgyYywweDE3LDB4M2MsMHg2NSwweGUwLDB4MDAsMHhjNCwweDQ4LDB4MTQsMHg4MywweGVmLDB4ZmYsMHhkNywweDZiLDB4OGMsMHgyNCwweDhjLDB4YjQsMHgzNCwweDI4LDB4ZTAsMHgwOCwweDNjLDB4YzgsMHhlMCwweDA1LDB4YjQsMHg3NSwweDNjLDB4NjYsMHhjNCwweDI4LDB4ZWYsMHhmZiwweGQ3LDB4YjcsMHgxNSwweDgwLDB4MTYsMHgwMCwweDdkLDB4ODksMHhlMCwweDAxLDB4MDAsMHg5NiwweDhjLDB4MjQsMHg4YywweGI0LDB4MzQsMHgyOCwweGUwLDB4MDgsMHgzYywweGM4LDB4ZTAsMHgwMywweDk0LDB4YzYsMHhlMiwweDAwLDB4YzksMHg4NiwweDNjLDB4MjksMHhlMCwweDQzLDB4M2MsMHgxOCwweDdjLDB4MDksMHg4YywweGM0LDB4OGMsMHg1NCwweDhkLDB4ZTQsMHhlNCwweDA5LDB4MzQsMHhhOCwweGU0LDB4MDgsMHgzNCwweDIwLDB4M2MsMHg0OSwweDM1LDB4YTgsMHgzZCwweGM4LDB4OGMsMHg3NCwweGUwLDB4MGIsMHgzYywweDRiLDB4ZTAsMHgwMSwweGE0LDB4NDYsMHgzZCwweGE4LDB4M2UsMHg2YiwweDAxLDB4ODYsMHhlMCwweDAzLDB4YTQsMHg0NSwweGM0LDB4MDEsMHhlMCwweDAzLDB4YmMsMHg0NSwweDE0LDB4MDIsMHhlMCwweDI4LDB4MzksMHg4OCwweDJjLDB4MDUsMHgxNCwweDA1LDB4ZTAsMHgyOCwweDM5LDB4ODgsMHgyNCwweDA2LDB4ZTAsMHgwNSwweGE0LDB4MjUsMHhjNCwweDAxLDB4ZTAsMHgwNSwweGJjLDB4MjUsMHhlMiwweDAwLDB4N2MsMHgyYywweDdkLDB4ODgsMHg3ZSwweDA3LDB4ZWYsMHhmZiwweGQ3LDB4N2IsMHgxNCwweDAwLDB4ZTAsMHgwMiwweGJjLDB4MzUsMHgzYywweDY2LDB4YzQsMHgyOCwweGUyLDB4MDAsMHg3YywweGFjLDB4MTUsMHgwOCwweGVmLDB4ZmYsMHhkOCwweDRkLDB4MTQsMHgwNCwweGUwLDB4MjgsMHgzOSwweDg4LDB4NjUsMHg4OCwweDY2LDB4MDcsMHgyYywweDA4LDB4MTQsMHgwMSwweGUwLDB4MjgsMHgzOSwweDg4LDB4MmMsMHgwNCwweGUyLDB4MDAsMHhjOSwweDgzLDB4MDEsMHhhZSwweDY0LDB4MGEsMHhlMiwweDAwLDB4Y2MsMHgwMSwweDAxLDB4YWEsMHgzNSwweGMzLDB4ZTAsMHgwOSwweDM1LDB4YTcsMHhlMCwweDA4LDB4MzUsMHhhMiwweGUwLDB4MDgsMHgzYywweGE4LDB4ZTAsMHgwYiwweDNjLDB4MWIsMHhlMCwweDAyLDB4YTQsMHgzNSwweDM1LDB4YTMsMHhlMCwweDBhLDB4M2QsMHhhOCwweDNjLDB4N2IsMHhlMCwweDA5LDB4M2MsMHgyYiwweGUwLDB4NjksMHgzZCwweGFhLDB4ZTAsMHgwNCwweGE1LDB4MTUsMHgzYywweDZhLDB4YzQsMHgwOCwweDM0LDB4NDQsMHhlMCwweDA4LDB4M2QsMHgyOCwweDNjLDB4MTksMHhlMCwweDAzLDB4YTQsMHhmNSwweGUwLDB4MDQsMHhiYywweDE1LDB4M2MsMHg3OSwweDAzLDB4ODMsMHhlMCwweDAzLDB4YmMsMHg3NSwweGUwLDB4MDQsMHhhNCwweDg1LDB4M2MsMHg3OSwweDA1LDB4ODMsMHhlMCwweDA0LDB4YmMsMHgwNSwweGUwLDB4MDIsMHhhNCwweDM1LDB4ZTAsMHgwNCwweGE0LDB4YjUsMHgzYywweDc5LDB4MDMsMHg4MywweGUwLDB4MDQsMHhiYywweDM1LDB4ZTAsMHgwNCwweGE0LDB4YzUsMHgzYywweDc5LDB4MDUsMHg4MywweGUwLDB4MDQsMHhiYywweDQ1LDB4ZTAsMHgwNCwweGE0LDB4ZDUsMHhlMCwweDA0LDB4YTUsMHg2NSwweGM0LDB4ODAsMHhlMCwweDI4LDB4M2MsMHg3YSwweGUwLDB4MDQsMHhiYywweDY1LDB4ZTAsMHgwNCwweGJjLDB4ZDUsMHgxNSwweDg3LDB4ZTAsMHgyYiwweDM5LDB4OGIsMHgyZCwweDg0LDB4ZTAsMHgyOCwweDM5LDB4OGIsMHgyNCwweDBjLDB4M2MsMHg2NSwweGUwLDB4MDAsMHhjNCwweDY0LDB4M2MsMHhlNCwweDE1LDB4MGMsMHg3ZCwweDg4LDB4N2UsMHgwNywweGVmLDB4ZmYsMHhkNywweGVhLDB4NjYsMHgwNywweDY1LDB4ODgsMHgxNCwweDAzLDB4ZTAsMHgyOCwweDM5LDB4ODgsMHgyYywweDAyLDB4MjUsMHg4ZiwweDhjLDB4MjQsMHg4YywweGI0LDB4MzQsMHgyOCwweGUwLDB4MDgsMHgzYywweGM4LDB4ZTAsMHgwNSwweGI0LDB4NzUsMHgxNCwweDAwLDB4ZTAsMHgwMiwweGJjLDB4NjUsMHhlMCwweDAyLDB4YmMsMHgxNiwweGUwLDB4MDUsMHhiYywweDE1LDB4M2MsMHg2MywweGM0LDB4N2IsMHhlMywweGZmLDB4YzQsMHg3ZiwweDE0LDB4ODEsMHhlMSwweDI4LDB4M2MsMHgxOSwweDI0LDB4MmMsMHgxNCwweDAyLDB4ZTEsMHgyMywweDM5LDB4ODgsMHgyMSwweGE4LDB4OGMsMHgyNCwweDhjLDB4YjQsMHgzNCwweDI4LDB4ZTAsMHgwOCwweDNjLDB4YzgsMHhlMCwweDAyLDB4YTQsMHhlNSwweGUwLDB4MDMsMHhiNCwweDQ2LDB4YzQsMHg4MSwweGUwLDB4MDIsMHhiYywweGU1LDB4ZTAsMHgwNSwweGI0LDB4NjUsMHhlMCwweDA1LDB4OWMsMHhmNSwweDI0LDB4OGIsMHgzYywweDc5LDB4MDQsMHg4MywweDNjLDB4MjksMHgwMCwweDg3LDB4ZTIsMHgwMCwweDE1LDB4MDAsMHhlMCwweDA5LDB4M2QsMHgyOSwweGUwLDB4MDgsMHgzYywweDk4LDB4YzQsMHgwMSwweGUwLDB4MDQsMHhiYywweDc1LDB4ZTAsMHgwMiwweGE0LDB4MTYsMHhlMCwweDA5LDB4OWMsMHhmNSwweGUwLDB4MDUsMHhiYywweDE1LDB4M2MsMHg5OCwweGUwLDB4MDQsMHhiYywweGY1LDB4OGQsMHg0NCwweDhjLDB4ZDQsMHg4YywweDY0LDB4ZTQsMHgwYSwweDM1LDB4MjgsMHhlNCwweDA5LDB4MzQsMHhhMCwweDNjLDB4Y2EsMHgzNCwweDI4LDB4M2MsMHg0OSwweDhjLDB4ZjQsMHhlMCwweDA4LDB4M2MsMHhjOCwweGUwLDB4MDEsMHhiYywweDQ2LDB4ZTAsMHgwMSwweDhkLDB4ODQsMHhlMCwweDAxLDB4OGQsMHgxNCwweGUwLDB4MDEsMHg4YywweGE0LDB4ZTQsMHgwYiwweDM1LDB4YTgsMHhlNCwweDBhLDB4MzUsMHgyMCwweDNkLDB4NGIsMHgzNCwweGE4LDB4M2MsMHhjYSwweGUwLDB4MDEsMHg4ZCwweDM0LDB4ZTAsMHgwOSwweDNkLDB4NDksMHhlMCwweDAxLDB4YmMsMHhkNiwweGUwLDB4MDMsMHhiYywweDA1LDB4ZTAsMHgwMiwweGE0LDB4NTUsMHhjNCwweDAxLDB4ZTAsMHgwMiwweGJjLDB4NTUsMHhlMCwweDAzLDB4YTQsMHg1NSwweGM0LDB4MDEsMHhlMCwweDAzLDB4YmMsMHg1NSwweDljLDB4NzYsMHg3ZSwweDA3LDB4ZWYsMHhmZiwweGQ1LDB4MjgsMHgzOSwweGU4LDB4NjYsMHgwNywweDI0LDB4MmEsMHhlMCwweDA4LDB4OGMsMHg0OCwweGUyLDB4MDAsMHhjYywweDAxLDB4MDEsMHg5OSwweGUwLDB4MDIsMHg4YywweDI2LDB4MjQsMHgxZiwweDE0LDB4MDAsMHhlMCwweDAyLDB4YWMsMHgyNiwweGE0LDB4NTYsMHhlYiwweGZmLDB4YzQsMHg3ZiwweDI0LDB4MTgsMHhlMCwweDAxLDB4YTYsMHgwNiwweDI2LDB4MTgsMHgxNSwweDgxLDB4ZTAsMHgwMiwweDhjLDB4NjYsMHg3ZCwweDg5LDB4MjQsMHgxMCwweDNjLDB4NjAsMHhjNCwweDJjLDB4ZWYsMHhmZiwweGQ2LDB4NzYsMHgxNiwweDAwLDB4MDAsMHg4YSwweDE0LDB4MDAsMHhlMCwweDAyLDB4YWMsMHgyNiwweDE1LDB4ODAsMHgxNCwweDAxLDB4ZTAsMHgwOCwweGFjLDB4NDMsMHgxNiwweDAwLDB4N2QsMHg4OSwweGUwLDB4MDIsMHg4YywweDA2LDB4MmMsMHgwNiwweDNjLDB4NjIsMHhlZiwweGZmLDB4ZDUsMHg1YywweGUwLDB4MDEsMHgwMCwweGFmLDB4ZTAsMHgwMiwweDhjLDB4MzYsMHgxNiwweDgwLDB4MjQsMHgzNCwweGUwLDB4MDEsMHg4YywweDg0LDB4ZTAsMHgwMSwweDhjLDB4MTQsMHhlMCwweDAxLDB4OGQsMHgyNCwweGU0LDB4MDksMHgzNCwweGE4LDB4ZTQsMHgwOCwweDM0LDB4MjAsMHgzYywweDQ5LDB4MzUsMHgyOCwweDNkLDB4NDgsMHhlMCwweDAxLDB4OGMsMHgzNCwweGUwLDB4MGEsMHgzYywweDRhLDB4YTQsMHg2NiwweDNkLDB4NzgsMHgwMSwweDIwLDB4ZTQsMHgwOSwweDM1LDB4NDAsMHhlMywweGZmLDB4YzUsMHg3ZiwweGUwLDB4MGEsMHgzYywweDlhLDB4ZTQsMHgwZSwweDM0LDB4NDAsMHhlMCwweDQxLDB4M2MsMHg4OCwweGUzLDB4ZmYsMHhjNCwweGZmLDB4M2QsMHhlZSwweGUwLDB4MDksMHgzZCwweDE5LDB4ZTUsMHhmZiwweGNkLDB4ZmYsMHhlMCwweDBkLDB4M2MsMHg5YiwweGU0LDB4MDksMHgzNCwweDQ4LDB4ZTAsMHgwMSwweGFjLDB4ODQsMHhlMCwweDA5LDB4MzQsMHg0OCwweGUwLDB4MDEsMHhhZiwweDE0LDB4ZTAsMHgwMSwweGFjLDB4YTQsMHhlMCwweDAxLDB4YWMsMHgzNCwweGUwLDB4MDIsMHg4YywweDQ2LDB4MTUsMHgwMCwweDI0LDB4MWIsMHg4YywweGE0LDB4OGMsMHgzNCwweDM0LDB4YTgsMHhlMCwweDA5LDB4M2MsMHg0OSwweDY1LDB4ODksMHhlMCwweDAyLDB4OTQsMHgyNiwweGUwLDB4MDgsMHgzZCwweDk4LDB4ZTMsMHhmZiwweGM0LDB4N2YsMHhlMCwweDAyLDB4YjQsMHgyNiwweDNjLDB4ZjgsMHgwMSwweDBiLDB4ZTAsMHg0MSwweDNkLDB4MDgsMHhlMywweGZmLDB4YzUsMHg3ZiwweGUwLDB4MGEsMHgzYywweDlhLDB4ZTAsMHgwOSwweDM0LDB4NDgsMHhhYywweGE0LDB4YWMsMHgzNCwweGUwLDB4MDIsMHg4YywweGQ2LDB4MTQsMHgwMCwweDI0LDB4YjEsMHg4ZiwweDQ0LDB4OGQsMHhkNCwweDhjLDB4ZTQsMHhlNCwweDBlLDB4MzcsMHgyOCwweGU0LDB4MGIsMHgzNSwweGEwLDB4M2QsMHhjZSwweDM0LDB4YTgsMHgzYywweGNiLDB4OGQsMHhmNCwweGUwLDB4MDksMHgzZCwweGM5LDB4YTUsMHhmNiwweDNlLDB4MWIsMHhiZSwweDc2LDB4M2MsMHhmYywweDAxLDB4MWIsMHhlNCwweDA4LDB4MzQsMHhjMCwweGUzLDB4ZmYsMHhjNCwweGZmLDB4ZTAsMHgwOSwweDNjLDB4MTksMHhlMCwweDQxLDB4M2MsMHgwYywweGUzLDB4ZmYsMHhjNCwweDdmLDB4ZTAsMHgwOCwweDNjLDB4OTgsMHhlNCwweDA5LDB4MzYsMHg0OCwweGU0LDB4MGUsMHgzNiwweDQwLDB4YWMsMHhjNCwweGUwLDB4MDksMHgzNiwweDQ4LDB4M2YsMHhlZSwweGFmLDB4NTQsMHhlNSwweGZmLDB4Y2YsMHhmZiwweGFjLDB4ZTQsMHgzYywweDFmLDB4YWUsMHg3NCwweGUwLDB4MDMsMHhiZSwweDAzLDB4ZTAsMHgwMywweGJlLDB4MDUsMHhlMCwweDBiLDB4M2QsMHgxZCwweDNkLDB4OTgsMHhlMCwweDAyLDB4OGMsMHgyMywweGUwLDB4MDEsMHg5YSwweDAyLDB4ZTIsMHgwMCwweGNjLDB4MDEsMHgzYywweGUzLDB4M2MsMHg2MiwweDE1LDB4MDEsMHgwMSwweDg0LDB4ZWYsMHhmZiwweGQ0LDB4YjAsMHgwMCwweDgzLDB4ZWYsMHhmZiwweGQ0LDB4OTUsMHgyYywweDEyLDB4M2MsMHg2MywweGUwLDB4MDEsMHhjNCwweDMwLDB4ZWYsMHhmZiwweGQ1LDB4YzIsMHhlMCwweDAyLDB4YTQsMHg0MywweGMyLDB4NzQsMHhjNCwweDAxLDB4ZTAsMHgwMiwweGJjLDB4NDMsMHhlMCwweDAzLDB4YTQsMHg2MywweGUwLDB4MDQsMHgzYywweDE0LDB4ZTAsMHgwMywweGJhLDB4NjMsMHg2MCwweDg2LDB4NjEsMHgwNSwweDYxLDB4ODQsMHg2MiwweDAzLDB4NjIsMHg4MiwweDYzLDB4MDEsMHhjMCwweDMwLDB4MzgsMHg4MiwweGMwLDB4NzgsMHg3OCwweDgyLDB4N2EsMHgwMSwweGUwLDB4MDAsMHgxYSwweDBmLDB4YTQsMHg0NCwweDI0LDB4MDUsMHhhNCwweDg4LDB4YmMsMHhjNCwweGRjLDB4ZjUsMHgwMCwweGZiLDB4NjAsMHg4MiwweDYyLDB4MDEsMHhjMCwweDA4LDB4MzgsMHg4MiwweDQ3LDB4NDMsMHg0MywweDNhLDB4MjAsMHgyOCwweDQ3LDB4NGUsMHg1NSwweDI5LDB4MjAsMHgzNCwweDJlLDB4MzYsMHgyZSwweDMxLDB4MDAsMHgwMCwweDJlLDB4NzMsMHg2OCwweDczLDB4NzQsMHg3MiwweDc0LDB4NjEsMHg2MiwweDAwLDB4MmUsMHg2NCwweDY0LDB4NzIsMHg1ZiwweDc0LDB4NjUsMHg3OCwweDc0LDB4MDAsMHg2NiwweDYxLDB4NzMsMHg3NCwweDVmLDB4NzAsMHg2MSwweDc0LDB4NjgsMHgwMCwweDJlLDB4NjQsMHg2NCwweDcyLDB4NWYsMHg2MiwweDczLDB4NzMsMHgwMCwweDJlLDB4NjQsMHg2ZCwweDY1LDB4NmQsMHg1ZiwweDcwLDB4NjUsMHg3MywweDc0LDB4NjEsMHg3NCwweDc1LDB4NzMsMHgwMCwweDJlLDB4NjQsMHg2ZCwweDY1LDB4NmQsMHg1ZiwweDY3LDB4NmYsMHg3NCwweDAwLDB4MmUsMHg2NCwweDZkLDB4NjUsMHg2ZCwweDVmLDB4NzMsMHg2NCwweDYxLDB4NzQsMHg2MSwweDAwLDB4MmUsMHg2NCwweDZkLDB4NjUsMHg2ZCwweDVmLDB4NmMsMHg2OSwweDc0LDB4MzQsMHgwMCwweDJlLDB4NjQsMHg2ZCwweDY1LDB4NmQsMHg1ZiwweDYyLDB4NzMsMHg3MywweDAwLDB4MmUsMHg2NCwweDZkLDB4NjUsMHg2ZCwweDVmLDB4NzMsMHg2OCwweDAwLDB4MmUsMHg2NCwweDZkLDB4NjUsMHg2ZCwweDVmLDB4NzMsMHg3NCwweDYxLDB4NjMsMHg2YiwweDAwLDB4MmUsMHg3NiwweDY1LDB4NjMsMHg3NCwweDZmLDB4NzIsMHgwMCwweDJlLDB4NjMsMHg2ZiwweDZkLDB4NmQsMHg2NSwweDZlLDB4NzQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGIsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDA2LDB4MDMsMHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgxNiwweGE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNSwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMywweGY4LDB4MTYsMHhhNiwweDAwLDB4MDAsMHg0NiwweGE2LDB4MDAsMHgwMCwweDA2LDB4MjIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMywweDAzLDB4ZjgsMHgxYywweGM4LDB4MDAsMHgwMCwweDRjLDB4YzgsMHgwMCwweDAwLDB4MWMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzNywweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgxMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDQxLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweGIwLDB4MDAsMHgwMCwweDEwLDB4YjAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGQsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDEyLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MTAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHg1OCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHhmMCwweDAwLDB4MDAsMHgxMCwweGYwLDB4MDAsMHgwMCwweDA5LDB4ZGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwYSwweGUwLDB4MDAsMHgwMCwweDFhLDB4ZTAsMHgwMCwweDAwLDB4MDUsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NmIsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3NywweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MWYsMHg4MCwweDAwLDB4MDAsMHgyZiwweDgwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDdmLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDRjLDB4YzgsMHgwMCwweDAwLDB4MDAsMHgxMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGMsMHhkOSwweDAwLDB4MDAsMHgwMCwweDg4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZmlfZmxhc2guYyBiL2RyaXZlcnMvY2ZpX2ZsYXNoLmMKaW5kZXggZmQwYTE4Ni4uMzU3NDE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZmlfZmxhc2guYworKysgYi9kcml2ZXJzL2NmaV9mbGFzaC5jCkBAIC03MSw2ICs3MSw4IEBACiAgKiBWZXJpZnkgZXJhc2UgYW5kIHByb2dyYW0gdGltZW91dHMuCiAgKi8KIAorI2RlZmluZSAgICAgICBDRkdfRkxBU0hfQkFTRSAgMHhDMDAwMDAwMAorCiAjaWZuZGVmIENGR19GTEFTSF9CQU5LU19MSVNUCiAjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUIHsgQ0ZHX0ZMQVNIX0JBU0UgfQogI2VuZGlmCkBAIC0xNzMsMTEgKzE3NSwxOSBAQAogLyogdXNlIENGR19NQVhfRkxBU0hfQkFOS1NfREVURUNUIGlmIGRlZmluZWQgKi8KICNpZmRlZiBDRkdfTUFYX0ZMQVNIX0JBTktTX0RFVEVDVAogc3RhdGljIHVsb25nIGJhbmtfYmFzZVtDRkdfTUFYX0ZMQVNIX0JBTktTX0RFVEVDVF0gPSBDRkdfRkxBU0hfQkFOS1NfTElTVDsKKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE8KK2V4dGVybiBmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTX0RFVEVDVF07CS8qIEZMQVNIIGNoaXBzIGluZm8gKi8KKyNlbHNlCiBmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTX0RFVEVDVF07CS8qIEZMQVNIIGNoaXBzIGluZm8gKi8KKyNlbmRpZgogI2Vsc2UKIHN0YXRpYyB1bG9uZyBiYW5rX2Jhc2VbQ0ZHX01BWF9GTEFTSF9CQU5LU10gPSBDRkdfRkxBU0hfQkFOS1NfTElTVDsKKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE8KK2V4dGVybiBmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsJLyogRkxBU0ggY2hpcHMgaW5mbyAqLworI2Vsc2UKIGZsYXNoX2luZm9fdCBmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOwkJLyogRkxBU0ggY2hpcHMgaW5mbyAqLwogI2VuZGlmCisjZW5kaWYKIAogLyoKICAqIENoZWNrIGlmIGNoaXAgd2lkdGggaXMgZGVmaW5lZC4gSWYgbm90LCBzdGFydCBkZXRlY3Rpbmcgd2l0aCA4Yml0LgpAQCAtMTg2LDYgKzE5NiwzNyBAQAogI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX1dJRFRICUZMQVNIX0NGSV84QklUCiAjZW5kaWYKIAorI2lmZGVmIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisKK2V4dGVybiB2b2lkIGJvYXJkX21hcChmbGFzaF9pbmZvX3QgKmluZm8sIHVuc2lnbmVkIGxvbmcgYWRkcik7CisKKyNkZWZpbmUgbWFwX3JlYWRjKGluZm8sIHB0cikJCQkoYm9hcmRfbWFwKGluZm8sICh1bnNpZ25lZCBsb25nKXB0ciksICgqKHB0cikpKQorI2RlZmluZSBtYXBfcmVhZHcoaW5mbywgcHRyKQkJCShib2FyZF9tYXAoaW5mbywgKHVuc2lnbmVkIGxvbmcpcHRyKSwgX19sZTE2X3RvX2NwdSgqKHB0cikpKQorI2RlZmluZSBtYXBfcmVhZGwoaW5mbywgcHRyKQkJCShib2FyZF9tYXAoaW5mbywgKHVuc2lnbmVkIGxvbmcpcHRyKSwgX19sZTMyX3RvX2NwdSgqKHB0cikpKQorI2RlZmluZSBtYXBfcmVhZGxsKGluZm8sIHB0cikJCQkoYm9hcmRfbWFwKGluZm8sICh1bnNpZ25lZCBsb25nKXB0ciksIF9fbGU2NF90b19jcHUoKihwdHIpKSkKKyNkZWZpbmUgbWFwX3dyaXRlYyhpbmZvLCBwdHIsIHZhbCkJCShib2FyZF9tYXAoaW5mbywgKHVuc2lnbmVkIGxvbmcpcHRyKSwgKihwdHIpID0gKHZhbCkpCisjZGVmaW5lIG1hcF93cml0ZXcoaW5mbywgcHRyLCB2YWwpCQkoYm9hcmRfbWFwKGluZm8sICh1bnNpZ25lZCBsb25nKXB0ciksICoocHRyKSA9IF9fY3B1X3RvX2xlMTYodmFsKSkKKyNkZWZpbmUgbWFwX3dyaXRlbChpbmZvLCBwdHIsIHZhbCkJCShib2FyZF9tYXAoaW5mbywgKHVuc2lnbmVkIGxvbmcpcHRyKSwgKihwdHIpID0gX19jcHVfdG9fbGUzMih2YWwpKQorI2RlZmluZSBtYXBfd3JpdGVsbChpbmZvLCBwdHIsIHZhbCkJCShib2FyZF9tYXAoaW5mbywgKHVuc2lnbmVkIGxvbmcpcHRyKSwgKihwdHIpID0gX19jcHVfdG9fbGU2NCh2YWwpKQorI2RlZmluZSBtYXBfY29weWZyb20oaW5mbywgZHN0LCBzcmMsIGxlbikJKGJvYXJkX21hcChpbmZvLCAodW5zaWduZWQgbG9uZylzcmMpLCBtZW1jcHkoZHN0LCBzcmMsIGxlbikpCisjZGVmaW5lIG1hcF9jb3B5dG8oaW5mbywgZHN0LCBzcmMsIGxlbikJCShib2FyZF9tYXAoaW5mbywgKHVuc2lnbmVkIGxvbmcpZHN0KSwgbWVtY3B5KGRzdCwgc3JjLCBsZW4pKQorCisKKyNlbHNlCisKKyNkZWZpbmUgbWFwX3JlYWRjKGluZm8sIHB0cikJCQkoKihwdHIpKQorI2RlZmluZSBtYXBfcmVhZHcoaW5mbywgcHRyKQkJCV9fbGUxNl90b19jcHUoKihwdHIpKQorI2RlZmluZSBtYXBfcmVhZGwoaW5mbywgcHRyKQkJCV9fbGUzMl90b19jcHUoKihwdHIpKQorI2RlZmluZSBtYXBfcmVhZGxsKGluZm8sIHB0cikJCQlfX2xlNjRfdG9fY3B1KCoocHRyKSkKKyNkZWZpbmUgbWFwX2NvcHlmcm9tKGluZm8sIGRzdCwgc3JjLCBsZW4pCW1lbWNweShkc3QsIHNyYywgbGVuKQorI2RlZmluZSBtYXBfd3JpdGVjKGluZm8sIHB0ciwgdmFsKQkJKCoocHRyKSA9ICh2YWwpKQorI2RlZmluZSBtYXBfd3JpdGV3KGluZm8sIHB0ciwgdmFsKQkJKCoocHRyKSA9IF9fY3B1X3RvX2xlMTYodmFsKSkKKyNkZWZpbmUgbWFwX3dyaXRlbChpbmZvLCBwdHIsIHZhbCkJCSgqKHB0cikgPSBfX2NwdV90b19sZTMyKHZhbCkpCisjZGVmaW5lIG1hcF93cml0ZWxsKGluZm8sIHB0ciwgdmFsKQkJKCoocHRyKSA9IF9fY3B1X3RvX2xlNjQodmFsKSkKKyNkZWZpbmUgbWFwX2NvcHl0byhpbmZvLCBkc3QsIHNyYywgbGVuKQkJbWVtY3B5KGRzdCwgc3JjLCBsZW4KKworI2VuZGlmCisKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb25zCkBAIC0yMTIsNiArMjUzLDE1IEBACiBzdGF0aWMgaW50IGZsYXNoX3dyaXRlX2NmaWJ1ZmZlciAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgdWNoYXIgKiBjcCwgaW50IGxlbik7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DT01DRVJUTwordm9pZCBjZmlfZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICopOworaW50IGNmaV9mbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICosIGludCwgaW50KTsKK2ludCBjZmlfd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCk7CitpbnQgY2ZpX2ZsYXNoX3JlYWxfcHJvdGVjdCAoZmxhc2hfaW5mb190ICogaW5mbywgbG9uZyBzZWN0b3IsIGludCBwcm90KTsKKyNlbmRpZgorCisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogY3JlYXRlIGFuIGFkZHJlc3MgYmFzZWQgb24gdGhlIG9mZnNldCBhbmQgdGhlIHBvcnQgd2lkdGgKICAqLwpAQCAtMjQ0LDEyICsyOTQsMTQgQEAKIAkJCQkJIHggKyBGTEFTSF9PRkZTRVRfQ0ZJX1JFU1ApOwogCQlkZWJ1ZyAoIiVwIDogIiwgY3B0ci5jcCk7CiAJCWZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7Ci0JCQlkZWJ1ZyAoIiUyLjJ4ICIsIGNwdHIuY3BbeV0pOworCQkJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCQkJZGVidWcgKCIlMi4yeCAiLCBtYXBfcmVhZGMoaW5mbywgY3B0ci5jcCArIHkpKTsKIAkJfQogCQlkZWJ1ZyAoIiAiKTsKIAkJZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKLQkJCWlmIChjcHRyLmNwW3ldID49IDB4MjAgJiYgY3B0ci5jcFt5XSA8PSAweDdlKSB7Ci0JCQkJZGVidWcgKCIlYyIsIGNwdHIuY3BbeV0pOworCQkJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCQkJaWYgKG1hcF9yZWFkYyhpbmZvLCBjcHRyLmNwICsgeSkgPj0gMHgyMCAmJiBtYXBfcmVhZGMoaW5mbywgY3B0ci5jcCArIHkpIDw9IDB4N2UpIHsKKwkJCQlkZWJ1ZyAoIiVjIiwgbWFwX3JlYWRjKGluZm8sIGNwdHIuY3AgKyB5KSk7CiAJCQl9IGVsc2UgewogCQkJCWRlYnVnICgiLiIpOwogCQkJfQpAQCAtMjY4LDEwICszMjAsMTMgQEAKIAl1Y2hhciAqY3A7CiAKIAljcCA9IGZsYXNoX21ha2VfYWRkciAoaW5mbywgMCwgb2Zmc2V0KTsKLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQlyZXR1cm4gKGNwWzBdKTsKKworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSB8fCAoZGVmaW5lZChDT05GSUdfQ09NQ0VSVE8pICYmIGRlZmluZWQoQkU4X01PREUpKQorCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwlyZXR1cm4gKG1hcF9yZWFkYyhpbmZvLCBjcCkpOwogI2Vsc2UKLQlyZXR1cm4gKGNwW2luZm8tPnBvcnR3aWR0aCAtIDFdKTsKKwkvKiBDT01QTEVYX01BUFBJTkdTICovCisJcmV0dXJuIChtYXBfcmVhZGMoaW5mbywgY3AgKyBpbmZvLT5wb3J0d2lkdGggLSAxKSk7CiAjZW5kaWYKIH0KIApAQCAtMjkyLDE0ICszNDcsMTggQEAKIAlkZWJ1ZyAoInVzaG9ydCBhZGRyIGlzIGF0ICVwIGluZm8tPnBvcnR3aWR0aCA9ICVkXG4iLCBhZGRyLAogCSAgICAgICBpbmZvLT5wb3J0d2lkdGgpOwogCWZvciAoeCA9IDA7IHggPCAyICogaW5mby0+cG9ydHdpZHRoOyB4KyspIHsKLQkJZGVidWcgKCJhZGRyWyV4XSA9IDB4JXhcbiIsIHgsIGFkZHJbeF0pOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCWRlYnVnICgiYWRkclsleF0gPSAweCV4XG4iLCB4LCBtYXBfcmVhZGMoaW5mbywgYWRkciArIHgpKTsKIAl9CiAjZW5kaWYKLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQlyZXR2YWwgPSAoKGFkZHJbKGluZm8tPnBvcnR3aWR0aCldIDw8IDgpIHwgYWRkclswXSk7CisKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikgfHwgKGRlZmluZWQoQ09ORklHX0NPTUNFUlRPKSAmJiBkZWZpbmVkKEJFOF9NT0RFKSkKKwkvKiBDT01QTEVYX01BUFBJTkdTICovCisJcmV0dmFsID0gKChtYXBfcmVhZGMoaW5mbywgYWRkciArIGluZm8tPnBvcnR3aWR0aCkgPDwgOCkgfCBtYXBfcmVhZGMoaW5mbywgYWRkcikpOwogI2Vsc2UKLQlyZXR2YWwgPSAoKGFkZHJbKDIgKiBpbmZvLT5wb3J0d2lkdGgpIC0gMV0gPDwgOCkgfAotCQkgIGFkZHJbaW5mby0+cG9ydHdpZHRoIC0gMV0pOworCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwlyZXR2YWwgPSAoKG1hcF9yZWFkYyhpbmZvLCBhZGRyICsgKDIgKiBpbmZvLT5wb3J0d2lkdGgpIC0gMSkgPDwgOCkgfAorCQkgIG1hcF9yZWFkYyhpbmZvLCBhZGRyICsgaW5mby0+cG9ydHdpZHRoIC0gMSkpOwogI2VuZGlmCiAKIAlkZWJ1ZyAoInJldHZhbCA9IDB4JXhcbiIsIHJldHZhbCk7CkBAIC0zMjQsMTcgKzM4MywyMSBAQAogCWRlYnVnICgibG9uZyBhZGRyIGlzIGF0ICVwIGluZm8tPnBvcnR3aWR0aCA9ICVkXG4iLCBhZGRyLAogCSAgICAgICBpbmZvLT5wb3J0d2lkdGgpOwogCWZvciAoeCA9IDA7IHggPCA0ICogaW5mby0+cG9ydHdpZHRoOyB4KyspIHsKLQkJZGVidWcgKCJhZGRyWyV4XSA9IDB4JXhcbiIsIHgsIGFkZHJbeF0pOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCWRlYnVnICgiYWRkclsleF0gPSAweCV4XG4iLCB4LCBtYXBfcmVhZGMoaW5mbywgYWRkciArIHgpKTsKIAl9CiAjZW5kaWYKLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQlyZXR2YWwgPSAoYWRkclswXSA8PCAxNikgfCAoYWRkclsoaW5mby0+cG9ydHdpZHRoKV0gPDwgMjQpIHwKLQkJKGFkZHJbKDIgKiBpbmZvLT5wb3J0d2lkdGgpXSkgfCAoYWRkclsoMyAqIGluZm8tPnBvcnR3aWR0aCldIDw8IDgpOworCisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pIHx8IChkZWZpbmVkKENPTkZJR19DT01DRVJUTykgJiYgZGVmaW5lZChCRThfTU9ERSkpCisJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCXJldHZhbCA9IChtYXBfcmVhZGMoaW5mbywgYWRkcikgPDwgMTYpIHwgKG1hcF9yZWFkYyhpbmZvLCBhZGRyICsgaW5mby0+cG9ydHdpZHRoKSA8PCAyNCkgfAorCQkobWFwX3JlYWRjKGluZm8sIGFkZHIgKyAyICogaW5mby0+cG9ydHdpZHRoKSkgfCAobWFwX3JlYWRjKGluZm8sIGFkZHIgKyAzICogaW5mby0+cG9ydHdpZHRoKSA8PCA4KTsKICNlbHNlCi0JcmV0dmFsID0gKGFkZHJbKDIgKiBpbmZvLT5wb3J0d2lkdGgpIC0gMV0gPDwgMjQpIHwKLQkJKGFkZHJbKGluZm8tPnBvcnR3aWR0aCkgLSAxXSA8PCAxNikgfAotCQkoYWRkclsoNCAqIGluZm8tPnBvcnR3aWR0aCkgLSAxXSA8PCA4KSB8Ci0JCWFkZHJbKDMgKiBpbmZvLT5wb3J0d2lkdGgpIC0gMV07CisJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCXJldHZhbCA9IChtYXBfcmVhZGMoaW5mbywgYWRkciArICgyICogaW5mby0+cG9ydHdpZHRoKSAtIDEpIDw8IDI0KSB8CisJCShtYXBfcmVhZGMoaW5mbywgYWRkciArIChpbmZvLT5wb3J0d2lkdGgpIC0gMSkgPDwgMTYpIHwKKwkJKG1hcF9yZWFkYyhpbmZvLCBhZGRyICsgKDQgKiBpbmZvLT5wb3J0d2lkdGgpIC0gMSkgPDwgOCkgfAorCQltYXBfcmVhZGMoaW5mbywgYWRkciArICgzICogaW5mby0+cG9ydHdpZHRoKSAtIDEpOwogI2VuZGlmCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTM0Miw3ICs0MDUsMTEgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCisjaWZkZWYgQ09ORklHX0NPTUNFUlRPCit1bnNpZ25lZCBsb25nIGNmaV9mbGFzaF9pbml0ICh2b2lkKQorI2Vsc2UKIHVuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKKyNlbmRpZgogewogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiAJaW50IGk7CkBAIC00NTIsNyArNTE5LDExIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLworI2lmZGVmIENPTkZJR19DT01DRVJUTworaW50IGNmaV9mbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCisjZWxzZQogaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKKyNlbmRpZgogewogCWludCByY29kZSA9IDA7CiAJaW50IHByb3Q7CkBAIC01MTYsNyArNTg3LDExIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLworI2lmZGVmIENPTkZJR19DT01DRVJUTwordm9pZCBjZmlfZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICogaW5mbykKKyNlbHNlCiB2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pCisjZW5kaWYKIHsKIAlpbnQgaTsKIApAQCAtNTU0LDcgKzYyOSw5IEBACiAJCWZsYXNoID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgaW5mby0+c3RhcnRbaV07CiAJCXNpemUgPSBzaXplID4+IDI7CS8qIGRpdmlkZSBieSA0IGZvciBsb25nd29yZCBhY2Nlc3MgKi8KIAkJZm9yIChrID0gMDsgayA8IHNpemU7IGsrKykgewotCQkJaWYgKCpmbGFzaCsrICE9IDB4ZmZmZmZmZmYpIHsKKwkJCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwkJCWlmIChtYXBfcmVhZGwoaW5mbywgZmxhc2gpICE9IDB4ZmZmZmZmZmYpIHsKKwkJCQlmbGFzaCsrOwogCQkJCWVyYXNlZCA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC01ODQsNyArNjYxLDExIEBACiAgKiAxIC0gd3JpdGUgdGltZW91dAogICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKICAqLworI2lmZGVmIENPTkZJR19DT01DRVJUTworaW50IGNmaV93cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQorI2Vsc2UKIGludCB3cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1Y2hhciAqIHNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQorI2VuZGlmCiB7CiAJdWxvbmcgd3A7CiAJdWxvbmcgY3A7CkBAIC02MDQsNyArNjg1LDcgQEAKIAkJY3dvcmQubCA9IDA7CiAJCWNwID0gd3A7CiAJCWZvciAoaSA9IDA7IGkgPCBhbG47ICsraSwgKytjcCkKLQkJCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsICgqKHVjaGFyICopIGNwKSk7CisJCQlmbGFzaF9hZGRfYnl0ZSAoaW5mbywgJmN3b3JkLCBtYXBfcmVhZGMoaW5mbywgKHVjaGFyICopY3ApKTsKIAogCQlmb3IgKDsgKGkgPCBpbmZvLT5wb3J0d2lkdGgpICYmIChjbnQgPiAwKTsgaSsrKSB7CiAJCQlmbGFzaF9hZGRfYnl0ZSAoaW5mbywgJmN3b3JkLCAqc3JjKyspOwpAQCAtNjEyLDcgKzY5Myw3IEBACiAJCQljcCsrOwogCQl9CiAJCWZvciAoOyAoY250ID09IDApICYmIChpIDwgaW5mby0+cG9ydHdpZHRoKTsgKytpLCArK2NwKQotCQkJZmxhc2hfYWRkX2J5dGUgKGluZm8sICZjd29yZCwgKCoodWNoYXIgKikgY3ApKTsKKwkJCWZsYXNoX2FkZF9ieXRlIChpbmZvLCAmY3dvcmQsIG1hcF9yZWFkYyhpbmZvLCAodWNoYXIgKiljcCkpOwogCQlpZiAoKHJjID0gZmxhc2hfd3JpdGVfY2Zpd29yZCAoaW5mbywgd3AsIGN3b3JkKSkgIT0gMCkKIAkJCXJldHVybiByYzsKIAkJd3AgPSBjcDsKQEAgLTY3MSw3ICs3NTIsNyBAQAogCQktLWNudDsKIAl9CiAJZm9yICg7IGkgPCBpbmZvLT5wb3J0d2lkdGg7ICsraSwgKytjcCkgewotCQlmbGFzaF9hZGRfYnl0ZSAoaW5mbywgJmN3b3JkLCAoKih1Y2hhciAqKSBjcCkpOworCQlmbGFzaF9hZGRfYnl0ZSAoaW5mbywgJmN3b3JkLCBtYXBfcmVhZGMoaW5mbywgKHVjaGFyICopY3ApKTsKIAl9CiAKIAlyZXR1cm4gZmxhc2hfd3JpdGVfY2Zpd29yZCAoaW5mbywgd3AsIGN3b3JkKTsKQEAgLTY4MSw3ICs3NjIsMTEgQEAKICAqLwogI2lmZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCiAKKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE8KK2ludCBjZmlfZmxhc2hfcmVhbF9wcm90ZWN0IChmbGFzaF9pbmZvX3QgKiBpbmZvLCBsb25nIHNlY3RvciwgaW50IHByb3QpCisjZWxzZQogaW50IGZsYXNoX3JlYWxfcHJvdGVjdCAoZmxhc2hfaW5mb190ICogaW5mbywgbG9uZyBzZWN0b3IsIGludCBwcm90KQorI2VuZGlmCiB7CiAJaW50IHJldGNvZGUgPSAwOwogCkBAIC03MjYsNyArODExLDcgQEAKIAlkc3QgPSBidWZmZXI7CiAJc3JjID0gZmxhc2hfbWFrZV9hZGRyIChpbmZvLCAwLCBGTEFTSF9PRkZTRVRfVVNFUl9QUk9URUNUSU9OKTsKIAlmbGFzaF93cml0ZV9jbWQgKGluZm8sIDAsIDAsIEZMQVNIX0NNRF9SRUFEX0lEKTsKLQltZW1jcHkgKGRzdCwgc3JjICsgb2Zmc2V0LCBsZW4pOworCW1hcF9jb3B5ZnJvbShpbmZvLCBkc3QsIHNyYyArIG9mZnNldCwgbGVuKTsKIAlmbGFzaF93cml0ZV9jbWQgKGluZm8sIDAsIDAsIGluZm8tPmNtZF9yZXNldCk7CiB9CiAKQEAgLTc0MCw3ICs4MjUsNyBAQAogCiAJc3JjID0gZmxhc2hfbWFrZV9hZGRyIChpbmZvLCAwLCBGTEFTSF9PRkZTRVRfSU5URUxfUFJPVEVDVElPTik7CiAJZmxhc2hfd3JpdGVfY21kIChpbmZvLCAwLCAwLCBGTEFTSF9DTURfUkVBRF9JRCk7Ci0JbWVtY3B5IChidWZmZXIsIHNyYyArIG9mZnNldCwgbGVuKTsKKwltYXBfY29weWZyb20oaW5mbywgYnVmZmVyLCBzcmMgKyBvZmZzZXQsIGxlbik7CiAJZmxhc2hfd3JpdGVfY21kIChpbmZvLCAwLCAwLCBpbmZvLT5jbWRfcmVzZXQpOwogfQogCkBAIC05MTUsNyArMTAwMCw4IEBACiAJY2FzZSBGTEFTSF9DRklfOEJJVDoKIAkJZGVidWcgKCJmd2MgYWRkciAlcCBjbWQgJXggJXggOGJpdCB4ICVkIGJpdFxuIiwgYWRkci5jcCwgY21kLAogCQkgICAgICAgY3dvcmQuYywgaW5mby0+Y2hpcHdpZHRoIDw8IENGSV9GTEFTSF9TSElGVF9XSURUSCk7Ci0JCSphZGRyLmNwID0gY3dvcmQuYzsKKwkJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCQltYXBfd3JpdGVjKGluZm8sIGFkZHIuY3AsIGN3b3JkLmMpOwogI2lmZGVmIENPTkZJR19CTEFDS0ZJTgogCQlhc20oInNzeW5jOyIpOwogI2VuZGlmCkBAIC05MjQsNyArMTAxMCw4IEBACiAJCWRlYnVnICgiZndjIGFkZHIgJXAgY21kICV4ICU0LjR4IDE2Yml0IHggJWQgYml0XG4iLCBhZGRyLndwLAogCQkgICAgICAgY21kLCBjd29yZC53LAogCQkgICAgICAgaW5mby0+Y2hpcHdpZHRoIDw8IENGSV9GTEFTSF9TSElGVF9XSURUSCk7Ci0JCSphZGRyLndwID0gY3dvcmQudzsKKwkJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCQltYXBfd3JpdGV3KGluZm8sIGFkZHIud3AsIGN3b3JkLncpOwogI2lmZGVmIENPTkZJR19CTEFDS0ZJTgogCQlhc20oInNzeW5jOyIpOwogI2VuZGlmCkBAIC05MzMsNyArMTAyMCw3IEBACiAJCWRlYnVnICgiZndjIGFkZHIgJXAgY21kICV4ICU4LjhseCAzMmJpdCB4ICVkIGJpdFxuIiwgYWRkci5scCwKIAkJICAgICAgIGNtZCwgY3dvcmQubCwKIAkJICAgICAgIGluZm8tPmNoaXB3aWR0aCA8PCBDRklfRkxBU0hfU0hJRlRfV0lEVEgpOwotCQkqYWRkci5scCA9IGN3b3JkLmw7CisJCW1hcF93cml0ZWwoaW5mbywgYWRkci5scCwgY3dvcmQubCk7CiAjaWZkZWYgQ09ORklHX0JMQUNLRklOCiAJCWFzbSgic3N5bmM7Iik7CiAjZW5kaWYKQEAgLTk1MCw3ICsxMDM3LDcgQEAKIAkJCSAgICAgICBpbmZvLT5jaGlwd2lkdGggPDwgQ0ZJX0ZMQVNIX1NISUZUX1dJRFRIKTsKIAkJfQogI2VuZGlmCi0JCSphZGRyLmxscCA9IGN3b3JkLmxsOworCQltYXBfd3JpdGVsbChpbmZvLCBhZGRyLmxscCwgY3dvcmQubGwpOwogI2lmZGVmIENPTkZJR19CTEFDS0ZJTgogCQlhc20oInNzeW5jOyIpOwogI2VuZGlmCkBAIC05NzgsMTYgKzEwNjUsMTkgQEAKIAlkZWJ1ZyAoImlzPSBjbWQgJXgoJWMpIGFkZHIgJXAgIiwgY21kLCBjbWQsIGNwdHIuY3ApOwogCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7CiAJY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJZGVidWcgKCJpcz0gJXggJXhcbiIsIGNwdHIuY3BbMF0sIGN3b3JkLmMpOwotCQlyZXR2YWwgPSAoY3B0ci5jcFswXSA9PSBjd29yZC5jKTsKKwkJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCQlkZWJ1ZyAoImlzPSAleCAleFxuIiwgbWFwX3JlYWRjKGluZm8sIGNwdHIuY3ApLCBjd29yZC5jKTsKKwkJcmV0dmFsID0gKG1hcF9yZWFkYyhpbmZvLCBjcHRyLmNwKSA9PSBjd29yZC5jKTsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9DRklfMTZCSVQ6Ci0JCWRlYnVnICgiaXM9ICU0LjR4ICU0LjR4XG4iLCBjcHRyLndwWzBdLCBjd29yZC53KTsKLQkJcmV0dmFsID0gKGNwdHIud3BbMF0gPT0gY3dvcmQudyk7CisJCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwkJZGVidWcgKCJpcz0gJTQuNHggJTQuNHhcbiIsIG1hcF9yZWFkdyhpbmZvLCBjcHRyLndwKSwgY3dvcmQudyk7CisJCXJldHZhbCA9IChtYXBfcmVhZHcoaW5mbywgY3B0ci53cCkgPT0gY3dvcmQudyk7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgotCQlkZWJ1ZyAoImlzPSAlOC44bHggJTguOGx4XG4iLCBjcHRyLmxwWzBdLCBjd29yZC5sKTsKLQkJcmV0dmFsID0gKGNwdHIubHBbMF0gPT0gY3dvcmQubCk7CisJCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwkJZGVidWcgKCJpcz0gJTguOGx4ICU4LjhseFxuIiwgbWFwX3JlYWRsKGluZm8sIGNwdHIubHApLCBjd29yZC5sKTsKKwkJcmV0dmFsID0gKG1hcF9yZWFkbChpbmZvLCBjcHRyLmxwKSA9PSBjd29yZC5sKTsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9DRklfNjRCSVQ6CiAjaWZkZWYgREVCVUcKQEAgLTk5NSwxMiArMTA4NSwxNCBAQAogCQkJY2hhciBzdHIxWzIwXTsKIAkJCWNoYXIgc3RyMlsyMF07CiAKLQkJCXByaW50X2xvbmdsb25nIChzdHIxLCBjcHRyLmxscFswXSk7CisJCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCQlwcmludF9sb25nbG9uZyAoc3RyMSwgbWFwX3JlYWRsbChpbmZvLCBjcHRyLmxscCkpOwogCQkJcHJpbnRfbG9uZ2xvbmcgKHN0cjIsIGN3b3JkLmxsKTsKIAkJCWRlYnVnICgiaXM9ICVzICVzXG4iLCBzdHIxLCBzdHIyKTsKIAkJfQogI2VuZGlmCi0JCXJldHZhbCA9IChjcHRyLmxscFswXSA9PSBjd29yZC5sbCk7CisJCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwkJcmV0dmFsID0gKG1hcF9yZWFkbGwoaW5mbywgY3B0ci5sbHApID09IGN3b3JkLmxsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dmFsID0gMDsKQEAgLTEwMjEsMTYgKzExMTMsMjAgQEAKIAlmbGFzaF9tYWtlX2NtZCAoaW5mbywgY21kLCAmY3dvcmQpOwogCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7CiAJY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJcmV0dmFsID0gKChjcHRyLmNwWzBdICYgY3dvcmQuYykgPT0gY3dvcmQuYyk7CisJCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwkJcmV0dmFsID0gKChtYXBfcmVhZGMoaW5mbywgY3B0ci5jcCkgJiBjd29yZC5jKSA9PSBjd29yZC5jKTsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9DRklfMTZCSVQ6Ci0JCXJldHZhbCA9ICgoY3B0ci53cFswXSAmIGN3b3JkLncpID09IGN3b3JkLncpOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCXJldHZhbCA9ICgobWFwX3JlYWR3KGluZm8sIGNwdHIud3ApICYgY3dvcmQudykgPT0gY3dvcmQudyk7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfQ0ZJXzMyQklUOgotCQlyZXR2YWwgPSAoKGNwdHIubHBbMF0gJiBjd29yZC5sKSA9PSBjd29yZC5sKTsKKwkJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCQlyZXR2YWwgPSAoKG1hcF9yZWFkbChpbmZvLCBjcHRyLmxwKSAmIGN3b3JkLmwpID09IGN3b3JkLmwpOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0NGSV82NEJJVDoKLQkJcmV0dmFsID0gKChjcHRyLmxscFswXSAmIGN3b3JkLmxsKSA9PSBjd29yZC5sbCk7CisJCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwkJcmV0dmFsID0gKChtYXBfcmVhZGxsKGluZm8sIGNwdHIubGxwKSAmIGN3b3JkLmxsKSA9PSBjd29yZC5sbCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHZhbCA9IDA7CkBAIC0xMDUxLDE3ICsxMTQ3LDIxIEBACiAJZmxhc2hfbWFrZV9jbWQgKGluZm8sIGNtZCwgJmN3b3JkKTsKIAlzd2l0Y2ggKGluZm8tPnBvcnR3aWR0aCkgewogCWNhc2UgRkxBU0hfQ0ZJXzhCSVQ6Ci0JCXJldHZhbCA9ICgoY3B0ci5jcFswXSAmIGN3b3JkLmMpICE9IChjcHRyLmNwWzBdICYgY3dvcmQuYykpOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCXJldHZhbCA9ICgobWFwX3JlYWRjKGluZm8sIGNwdHIuY3ApICYgY3dvcmQuYykgIT0gKG1hcF9yZWFkYyhpbmZvLCBjcHRyLmNwKSAmIGN3b3JkLmMpKTsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9DRklfMTZCSVQ6Ci0JCXJldHZhbCA9ICgoY3B0ci53cFswXSAmIGN3b3JkLncpICE9IChjcHRyLndwWzBdICYgY3dvcmQudykpOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCXJldHZhbCA9ICgobWFwX3JlYWR3KGluZm8sIGNwdHIud3ApICYgY3dvcmQudykgIT0gKG1hcF9yZWFkdyhpbmZvLCBjcHRyLndwKSAmIGN3b3JkLncpKTsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9DRklfMzJCSVQ6Ci0JCXJldHZhbCA9ICgoY3B0ci5scFswXSAmIGN3b3JkLmwpICE9IChjcHRyLmxwWzBdICYgY3dvcmQubCkpOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCXJldHZhbCA9ICgobWFwX3JlYWRsKGluZm8sIGNwdHIubHApICYgY3dvcmQubCkgIT0gKG1hcF9yZWFkbChpbmZvLCBjcHRyLmxwKSAmIGN3b3JkLmwpKTsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9DRklfNjRCSVQ6Ci0JCXJldHZhbCA9ICgoY3B0ci5sbHBbMF0gJiBjd29yZC5sbCkgIT0KLQkJCSAgKGNwdHIubGxwWzBdICYgY3dvcmQubGwpKTsKKwkJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCQlyZXR2YWwgPSAoKG1hcF9yZWFkbGwoaW5mbywgY3B0ci5sbHApICYgY3dvcmQubGwpICE9CisJCQkgIChtYXBfcmVhZGxsKGluZm8sIGNwdHIubGxwKSAmIGN3b3JkLmxsKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHZhbCA9IDA7CkBAIC0xMTI1LDYgKzEyMjUsMTAgQEAKIAlpbmZvLT5sZWdhY3lfdW5sb2NrID0gMDsKICNlbmRpZgogCisjaWZkZWYgQ0ZHX0ZMQVNIX0NGSV9BTURfUkVTRVQKKwlpbmZvLT5jbWRfcmVzZXQgPSBBTURfQ01EX1JFU0VUOworI2VuZGlmCisKIAlpbmZvLT5zdGFydFswXSA9IGJhc2U7CiAKIAlpZiAoZmxhc2hfZGV0ZWN0X2NmaSAoaW5mbykpIHsKQEAgLTEyNTIsMjAgKzEzNTYsMjMgQEAKIAljdGxhZGRyLmNwID0gZmxhc2hfbWFrZV9hZGRyIChpbmZvLCAwLCAwKTsKIAljcHRyLmNwID0gKHVjaGFyICopIGRlc3Q7CiAKLQogCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwogCXN3aXRjaCAoaW5mby0+cG9ydHdpZHRoKSB7CiAJY2FzZSBGTEFTSF9DRklfOEJJVDoKLQkJZmxhZyA9ICgoY3B0ci5jcFswXSAmIGN3b3JkLmMpID09IGN3b3JkLmMpOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCWZsYWcgPSAoKG1hcF9yZWFkYyhpbmZvLCBjcHRyLmNwKSAmIGN3b3JkLmMpID09IGN3b3JkLmMpOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0NGSV8xNkJJVDoKLQkJZmxhZyA9ICgoY3B0ci53cFswXSAmIGN3b3JkLncpID09IGN3b3JkLncpOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCWZsYWcgPSAoKG1hcF9yZWFkdyhpbmZvLCBjcHRyLndwKSAmIGN3b3JkLncpID09IGN3b3JkLncpOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0NGSV8zMkJJVDoKLQkJZmxhZyA9ICgoY3B0ci5scFswXSAmIGN3b3JkLmwpID09IGN3b3JkLmwpOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCWZsYWcgPSAoKG1hcF9yZWFkbChpbmZvLCBjcHRyLmxwKSAmIGN3b3JkLmwpID09IGN3b3JkLmwpOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0NGSV82NEJJVDoKLQkJZmxhZyA9ICgoY3B0ci5sbHBbMF0gJiBjd29yZC5sbCkgPT0gY3dvcmQubGwpOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCWZsYWcgPSAoKG1hcF9yZWFkbGwoaW5mbywgY3B0ci5sbHApICYgY3dvcmQubGwpID09IGN3b3JkLmxsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDI7CkBAIC0xMjkxLDE2ICsxMzk4LDIwIEBACiAKIAlzd2l0Y2ggKGluZm8tPnBvcnR3aWR0aCkgewogCWNhc2UgRkxBU0hfQ0ZJXzhCSVQ6Ci0JCWNwdHIuY3BbMF0gPSBjd29yZC5jOworCQkvKiBDT01QTEVYX01BUFBJTkdTICovCisJCW1hcF93cml0ZWMoaW5mbywgY3B0ci5jcCwgY3dvcmQuYyk7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfQ0ZJXzE2QklUOgotCQljcHRyLndwWzBdID0gY3dvcmQudzsKKwkJLyogQ09NUExFWF9NQVBQSU5HUyAqLworCQltYXBfd3JpdGV3KGluZm8sIGNwdHIud3AsIGN3b3JkLncpOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0NGSV8zMkJJVDoKLQkJY3B0ci5scFswXSA9IGN3b3JkLmw7CisJCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwkJbWFwX3dyaXRlbChpbmZvLCBjcHRyLmxwLCBjd29yZC5sKTsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9DRklfNjRCSVQ6Ci0JCWNwdHIubGxwWzBdID0gY3dvcmQubGw7CisJCS8qIENPTVBMRVhfTUFQUElOR1MgKi8KKwkJbWFwX3dyaXRlbGwoaW5mbywgY3B0ci5sbHAsIGN3b3JkLmxsKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xMzU1LDE2ICsxNDY2LDI0IEBACiAJCQl3aGlsZSAoY250LS0gPiAwKSB7CiAJCQkJc3dpdGNoIChpbmZvLT5wb3J0d2lkdGgpIHsKIAkJCQljYXNlIEZMQVNIX0NGSV84QklUOgotCQkJCQkqZHN0LmNwKysgPSAqc3JjLmNwKys7CisJCQkJCW1hcF93cml0ZWMoaW5mbywgZHN0LmNwLCAqc3JjLmNwKTsKKwkJCQkJZHN0LmNwKys7CisJCQkJCXNyYy5jcCsrOwogCQkJCQlicmVhazsKIAkJCQljYXNlIEZMQVNIX0NGSV8xNkJJVDoKLQkJCQkJKmRzdC53cCsrID0gKnNyYy53cCsrOworCQkJCQltYXBfd3JpdGV3KGluZm8sIGRzdC53cCwgX19jcHVfdG9fbGUxNigqc3JjLndwKSk7CisJCQkJCWRzdC53cCsrOworCQkJCQlzcmMud3ArKzsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBGTEFTSF9DRklfMzJCSVQ6Ci0JCQkJCSpkc3QubHArKyA9ICpzcmMubHArKzsKKwkJCQkJbWFwX3dyaXRlbChpbmZvLCBkc3QubHAsICpzcmMubHApOworCQkJCQlkc3QubHArKzsKKwkJCQkJc3JjLmxwKys7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgRkxBU0hfQ0ZJXzY0QklUOgotCQkJCQkqZHN0LmxscCsrID0gKnNyYy5sbHArKzsKKwkJCQkJbWFwX3dyaXRlbGwoaW5mbywgZHN0LmxscCwgKnNyYy5sbHApOworCQkJCQlkc3QubGxwKys7CisJCQkJCXNyYy5sbHArKzsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKIAkJCQkJcmV0dXJuIEVSUl9JTlZBTDsKQEAgLTEzOTIsMjIgKzE1MTEsMzggQEAKIAkJY2FzZSBGTEFTSF9DRklfOEJJVDoKIAkJCWNudCA9IGxlbjsKIAkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAgKHVjaGFyKSBjbnQgLSAxKTsKLQkJCXdoaWxlIChjbnQtLSA+IDApICpkc3QuY3ArKyA9ICpzcmMuY3ArKzsKKwkJCXdoaWxlIChjbnQtLSA+IDApIHsKKwkJCQltYXBfd3JpdGVjKGluZm8sIGRzdC5jcCwgKnNyYy5jcCk7CisJCQkJZHN0LmNwKys7CisJCQkJc3JjLmNwKys7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBGTEFTSF9DRklfMTZCSVQ6CiAJCQljbnQgPSBsZW4gPj4gMTsKIAkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAgKHVjaGFyKSBjbnQgLSAxKTsKLQkJCXdoaWxlIChjbnQtLSA+IDApICpkc3Qud3ArKyA9ICpzcmMud3ArKzsKKwkJCXdoaWxlIChjbnQtLSA+IDApIHsKKwkJCQltYXBfd3JpdGV3KGluZm8sIGRzdC53cCwgX19jcHVfdG9fbGUxNigqc3JjLndwKSk7CisJCQkJZHN0LndwKys7CisJCQkJc3JjLndwKys7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBGTEFTSF9DRklfMzJCSVQ6CiAJCQljbnQgPSBsZW4gPj4gMjsKIAkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAgKHVjaGFyKSBjbnQgLSAxKTsKLQkJCXdoaWxlIChjbnQtLSA+IDApICpkc3QubHArKyA9ICpzcmMubHArKzsKKwkJCXdoaWxlIChjbnQtLSA+IDApIHsKKwkJCQltYXBfd3JpdGVsKGluZm8sIGRzdC5scCwgKnNyYy5scCk7CisJCQkJZHN0LmxwKys7CisJCQkJc3JjLmxwKys7CisJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBGTEFTSF9DRklfNjRCSVQ6CiAJCQljbnQgPSBsZW4gPj4gMzsKIAkJCWZsYXNoX3dyaXRlX2NtZCAoaW5mbywgc2VjdG9yLCAwLCAgKHVjaGFyKSBjbnQgLSAxKTsKLQkJCXdoaWxlIChjbnQtLSA+IDApICpkc3QubGxwKysgPSAqc3JjLmxscCsrOworCQkJd2hpbGUgKGNudC0tID4gMCkgeworCQkJCW1hcF93cml0ZWxsKGluZm8sIGRzdC5sbHAsICpzcmMubGxwKTsKKwkJCQlkc3QubGxwKys7CisJCQkJc3JjLmxscCsrOworCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gRVJSX0lOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb21jZXJ0bzEwMDBfZ2VtLmggYi9kcml2ZXJzL2NvbWNlcnRvMTAwMF9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI5N2NlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jb21jZXJ0bzEwMDBfZ2VtLmgKQEAgLTAsMCArMSwzNDUgQEAKKyNpZm5kZWYgX19DT01DRVJUT19HRU0xMDAwX0hfXworI2RlZmluZSBfX0NPTUNFUlRPX0dFTTEwMDBfSF9fCisKKworLyogU3BlY2lmeSB0aGUgZGVmYXVsdCBQQ0xLIGRpdmlzb3IgZm9yIGdlbmVyYXRpbmcgTURDLiAgVGhpcyBzaW1wbHkgZGVmaW5lcworICogd2hpY2ggb2YgdGhlIGRpdmlzb3IgY29udHJvbCBiaXRzIGFyZSBhY3RpdmUuICBCeSBkZWZhdWx0LCB0aGUgY2xvY2sKKyAqIGRpdmlzaW9uIGlzIDMyLgorICovCisjZGVmaW5lIEdFTV9ERUZfUENMS19ESVYgKE1EQ19ESVZfOTYpCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICBHRU1BQyBJUCB3cmFwcGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIEdFTV9TQ0hfQ1RMCQkJMHg4MDA0CisjZGVmaW5lCUdFTV9TQ0hfUEtUX1FVRVVFRAkJMHg4MDA4CisKKyNkZWZpbmUgR0VNX0lQCQkJCTB4RTAwMAorI2RlZmluZSBHRU1fQ0ZHCQkJCTB4RjAwMAorI2RlZmluZSBHRU1fTUJJU1QJCQkweEYwMDQKKyNkZWZpbmUgR0VNX1NFTlNFX0FNUF9ERUxBWV9BREoJCTB4RjAwOAorI2RlZmluZSBHRU1fREVMQVlfRUxFTUVOVF9DVFJMCQkweEYwMEMKKyNkZWZpbmUgQURNSVRUQU5DRQkJCTB4NDAwMAorCisjZGVmaW5lIEdFTV9DT05GX01PREVfU0VMX1BJTgkJKDAgPDwgMCkKKyNkZWZpbmUgR0VNX0NPTkZfTU9ERV9TRUxfR0VNCQkoMSA8PCAwKQorCisjZGVmaW5lIEdFTV9DT05GX01PREVfR0VNX01BU0sJCSg3IDw8IDEpCisjZGVmaW5lIEdFTV9DT05GX01PREVfR0VNX1JHTUlJCQkoMCA8PCAxKQorI2RlZmluZSBHRU1fQ09ORl9NT0RFX0dFTV9STUlJCQkoMSA8PCAxKQorI2RlZmluZSBHRU1fQ09ORl9NT0RFX0dFTV9NSUkJCSgyIDw8IDEpCisjZGVmaW5lIEdFTV9DT05GX01PREVfR0VNX0dNSUkJCSgzIDw8IDEpCisKKyNkZWZpbmUgR0VNX0NPTkZfTU9ERV9QSU5fTUFTSwkJKDcgPDwgNCkKKyNkZWZpbmUgR0VNX0NPTkZfTU9ERV9QSU5fUkdNSUkJCSgwIDw8IDQpCisjZGVmaW5lIEdFTV9DT05GX01PREVfUElOX1JNSUkJCSgxIDw8IDQpCisjZGVmaW5lIEdFTV9DT05GX01PREVfUElOX01JSQkJKDIgPDwgNCkKKyNkZWZpbmUgR0VNX0NPTkZfTU9ERV9QSU5fR01JSQkJKDMgPDwgNCkKKworI2RlZmluZSBHRU1fQ09ORl9EVVBMRVhfU0VMX1BIWQkJKDAgPDwgOCkKKyNkZWZpbmUgR0VNX0NPTkZfRFVQTEVYX1NFTF9HRU0JCSgxIDw8IDgpCisjZGVmaW5lIEdFTV9DT05GX0RVUExFWF9HRU1fSEFMRgkoMCA8PCA5KQorI2RlZmluZSBHRU1fQ09ORl9EVVBMRVhfR0VNX0ZVTEwJKDEgPDwgOSkKKyNkZWZpbmUgR0VNX0NPTkZfRFVQTEVYX1BIWV9IQUxGCSgwIDw8IDEwKQorI2RlZmluZSBHRU1fQ09ORl9EVVBMRVhfUEhZX0ZVTEwJKDEgPDwgMTApCisjZGVmaW5lIEdFTV9DT05GX1NQRUVEX1NFTF9QSFkJCSgwIDw8IDExKQorI2RlZmluZSBHRU1fQ09ORl9TUEVFRF9TRUxfR0VNCQkoMSA8PCAxMSkKKworI2RlZmluZSBHRU1fQ09ORl9TUEVFRF9NQVNLCQkoMyA8PCAxMikKKyNkZWZpbmUgR0VNX0NPTkZfU1BFRURfR0VNXzEwTQkJKDAgPDwgMTIpCisjZGVmaW5lIEdFTV9DT05GX1NQRUVEX0dFTV8xMDBNCQkoMSA8PCAxMikKKyNkZWZpbmUgR0VNX0NPTkZfU1BFRURfR0VNXzFHCQkoMiA8PCAxMikKKyNkZWZpbmUgR0VNX0NPTkZfU1BFRURfUEhZXzEwTQkJKDAgPDwgMTQpCisjZGVmaW5lIEdFTV9DT05GX1NQRUVEX1BIWV8xMDBNCQkoMSA8PCAxNCkKKyNkZWZpbmUgR0VNX0NPTkZfU1BFRURfUEhZXzFHCQkoMiA8PCAxNCkKKworI2RlZmluZSBHRU1fQ09ORl9QSFlfTElOS19ET1dOCQkoMCA8PCAxNikKKyNkZWZpbmUgR0VNX0NPTkZfUEhZX0xJTktfVVAJCSgxIDw8IDE2KQorI2RlZmluZSBHRU1fQ09ORl9HRU1fTE9PUEJBQ0sJCSgxIDw8IDE3KQorCisKKy8qIERlZmluZSBzb21lIGJpdCBwb3NpdGlvbnMgZm9yIHJlZ2lzdGVycy4gKi8KKworLyogQml0IHBvc2l0aW9ucyBmb3IgbmV0d29yayBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEdFTV9SRUFEX1NOQVAgICAgICAgKDE8PDE0KQkvKiBSZWFkIHNuYXBzaG90IHJlZ2lzdGVyICovCisjZGVmaW5lIEdFTV9UQUtFX1NOQVAgICAgICAgKDE8PDEzKQkvKiBUYWtlIGEgc25hcHNob3QgKi8KKyNkZWZpbmUgR0VNX1RYXzBRX1BBVVNFICAgICAoMTw8MTIpCS8qIFRyYW5zbWl0IHplcm8gcXVhbnR1bSBwYXVzZSBmcmFtZSAqLworI2RlZmluZSBHRU1fVFhfUEFVU0UgICAgICAgICgxPDwxMSkJLyogVHJhbnNtaXQgcGF1c2UgZnJhbWUgKi8KKyNkZWZpbmUgR0VNX1RYX0hBTFQgICAgICAgICAoMTw8MTApCS8qIEhhbHQgdHJhbnNtaXNzaW9uIGFmdGVyIGN1cnIgZnJhbWUgKi8KKyNkZWZpbmUgR0VNX1RYX1NUQVJUICAgICAgICAoMTw8OSkJLyogU3RhcnQgdHggKHR4X2dvKSAqLworI2RlZmluZSBHRU1fU1RBVFNfV1JfRU4gICAgICgxPDw3KQkvKiBFbmFibGUgd3JpdGluZyB0byBzdGF0IHJlZ2lzdGVycyAqLworI2RlZmluZSBHRU1fU1RBVFNfSU5DICAgICAgICgxPDw2KQkvKiBJbmNyZW1lbnQgc3RhdGlzdGljIHJlZ2lzdGVycyAqLworI2RlZmluZSBHRU1fU1RBVFNfQ0xSICAgICAgICgxPDw1KQkvKiBDbGVhciBzdGF0aXN0aWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdFTV9NRElPX0VOICAgICAgICAgKDE8PDQpCS8qIEVuYWJsZSBNRElPIHBvcnQgKi8KKyNkZWZpbmUgR0VNX1RYX0VOICAgICAgICAgICAoMTw8MykJLyogRW5hYmxlIHRyYW5zbWl0IGNpcmN1aXRzICovCisjZGVmaW5lIEdFTV9SWF9FTiAgICAgICAgICAgKDE8PDIpCS8qIEVuYWJsZSByZWNlaXZlIGNpcmN1aXRzICovCisjZGVmaW5lIEdFTV9MQl9NQUMgICAgICAgICAgKDE8PDEpCS8qIFBlcmZvcm0gbG9jYWwgbG9vcGJhY2sgYXQgTUFDICovCisjZGVmaW5lIEdFTV9MQl9QSFkgICAgICAgICAgKDE8PDApCS8qIFBlcmZvcm0gZXh0IGxvb3BiYWNrIHRocm91Z2ggUEhZICovCisKKy8qIEJpdCBwb3NpdGlvbnMgZm9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBHRU1fUlhfTk9fUEFVU0UgICAgICgxPDwyMykJLyogRG8gbm90IGNvcHkgcGF1c2UgZnJhbWVzIHRvIG1lbW9yeSAqLworI2RlZmluZSBHRU1fTURDX0RJVjIgICAgICAgICgxPDwyMCkJLyogUENMSyBkaXZpc29yIGZvciBNREMsIGJpdCAyICovCisjZGVmaW5lIEdFTV9NRENfRElWMSAgICAgICAgKDE8PDE5KQkvKiBQQ0xLIGRpdmlzb3IgZm9yIE1EQywgYml0IDEgKi8KKyNkZWZpbmUgR0VNX01EQ19ESVYwICAgICAgICAoMTw8MTgpCS8qIFBDTEsgZGl2aXNvciBmb3IgTURDLCBiaXQgMCAqLworI2RlZmluZSBHRU1fUlhfTk9fRkNTICAgICAgICgxPDwxNykJLyogRGlzY2FyZCBGQ1MgZnJvbSByZWNlaXZlZCBmcmFtZXMuICovCisjZGVmaW5lIEdFTV9SWF9MRU5fQ0hLICAgICAgKDE8PDE2KQkvKiBSZWNlaXZlIGxlbmd0aCBjaGVjay4gKi8KKyNkZWZpbmUgR0VNX1JYX1BBVVNFX0VOICAgICAoMTw8MTMpCS8qIEVuYWJsZSBwYXVzZSByZWNlcHRpb24gKi8KKyNkZWZpbmUgR0VNX1JFVFJZX1RFU1QgICAgICAoMTw8MTIpCS8qIFJldHJ5IHRlc3QgZm9yIHNwZWVkaW5nIHVwIGRlYnVnICovCisjZGVmaW5lIEdFTV9QQ1NfU0VMICAgICAgICAgKDE8PDExKQkvKiBTZWxlY3QgUENTICovCisjZGVmaW5lIEdFTV9FQU1fRU4gICAgICAgICAgKDE8PDkpCS8qIEV4dGVybmFsIGFkZHJlc3MgbWF0Y2ggZW5hYmxlICovCisjZGVmaW5lIEdFTV9GUkFNRV8xNTM2ICAgICAgKDE8PDgpCS8qIEVuYWJsZSAxNTM2IGJ5dGUgZnJhbWVzIHJlY2VwdGlvbiAqLworI2RlZmluZSBHRU1fVU5JQ0FTVF9FTiAgICAgICgxPDw3KQkvKiBSZWNlaXZlIHVuaWNhc3QgaGFzaCBmcmFtZXMgKi8KKyNkZWZpbmUgR0VNX01VTFRJQ0FTVF9FTiAgICAoMTw8NikJLyogUmVjZWl2ZSBtdWx0aWNhc3QgaGFzaCBmcmFtZXMgKi8KKyNkZWZpbmUgR0VNX05PX0JST0FEQ0FTVCAgICAoMTw8NSkJLyogRG8gbm90IHJlY2VpdmUgYnJvYWRjYXN0IGZyYW1lcyAqLworI2RlZmluZSBHRU1fQ09QWV9BTEwgICAgICAgICgxPDw0KQkvKiBDb3B5IGFsbCBmcmFtZXMgKi8KKyNkZWZpbmUgR0VNX1JYX0pVTUJPICAgICAgICAoMTw8MykJLyogQWxsb3cganVtYm8gZnJhbWUgcmVjZXB0aW9uICovCisjZGVmaW5lIEdFTV9WTEFOX09OTFkgICAgICAgKDE8PDIpCS8qIFJlY2VpdmUgb25seSBWTEFOIGZyYW1lcyAqLworCisvKiBCaXQgcG9zaXRpb25zIGZvciBuZXR3b3JrIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBHRU1fUEhZX0lETEUgICAgICAgICgxPDwyKQkvKiBQSFkgbWFuYWdlbWVudCBpcyBpZGxlICovCisjZGVmaW5lIEdFTV9NRElPX0lOICAgICAgICAgKDE8PDEpCS8qIFN0YXR1cyBvZiBtZGlvX2luIHBpbiAqLworI2RlZmluZSBHRU1fTElOS19TVEFUVVMgICAgICgxPDwwKQkvKiBTdGF0dXMgb2YgbGluayBwaW4gKi8KKworLyogQml0IHBvc2l0aW9ucyBmb3IgdHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEdFTV9UWF9IUkVTUCAgICAgICAgKDE8PDgpCS8qIFRyYW5zbWl0IGhyZXNwIG5vdCBPSyAqLworI2RlZmluZSBHRU1fTEFURV9DT0wgICAgICAgICgxPDw3KQkvKiBMYXRlIGNvbGxpc2lvbiAqLworI2RlZmluZSBHRU1fVFhfVVJVTiAgICAgICAgICgxPDw2KQkvKiBUcmFuc21pdCB1bmRlcnJ1biBvY2N1cnJlZCAqLworI2RlZmluZSBHRU1fVFhfQ09NUExFVEUgICAgICgxPDw1KQkvKiBUcmFuc21pdCBjb21wbGV0ZWQgT0sgKi8KKyNkZWZpbmUgR0VNX1RYX0JVRl9FWEggICAgICAoMTw8NCkJLyogVHJhbnNtaXQgYnVmZnMgZXhoYXVzdGVkIG1pZCBmcmFtZSAqLworI2RlZmluZSBHRU1fVFhfR08gICAgICAgICAgICgxPDwzKQkvKiBTdGF0dXMgb2YgdHhfZ28gaW50ZXJuYWwgdmFyaWFibGUgKi8KKyNkZWZpbmUgR0VNX1RYX1JFVFJZX0VYQyAgICAoMTw8MikJLyogUmV0cnkgbGltaXQgZXhjZWVkZWQgKi8KKyNkZWZpbmUgR0VNX1RYX0NPTCAgICAgICAgICAoMTw8MSkJLyogQ29sbGlzaW9uIG9jY3VycmVkIGR1cmluZyBmcmFtZSB0eCAqLworI2RlZmluZSBHRU1fVFhfVVNFRCAgICAgICAgICgxPDwwKQkvKiBVc2VkIGJpdCByZWFkIGluIHR4IGJ1ZmZlciAqLworCisvKiBCaXQgcG9zaXRpb25zIGZvciByZWNlaXZlIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBHRU1fUlhfSFJFU1AgICAgICAgICgxPDwzKQkvKiBSZWNlaXZlIGhyZXNwIG5vdCBPSyAqLworI2RlZmluZSBHRU1fUlhfT1JVTiAgICAgICAgICgxPDwyKQkvKiBSZWNlaXZlIG92ZXJydW4gb2NjdXJyZWQgKi8KKyNkZWZpbmUgR0VNX1JYX0RPTkUgICAgICAgICAoMTw8MSkJLyogRnJhbWUgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkICovCisjZGVmaW5lIEdFTV9SWF9CVUZfVVNFRCAgICAgKDE8PDApCS8qIFJlY2VpdmUgYnVmZmVyIHVzZWQgYml0IHJlYWQgKi8KKworLyogQml0IHBvc2l0aW9ucyBmb3IgaW50ZXJydXB0cyAqLworI2RlZmluZSBHRU1fSVJRX1BDU19BTiAgICAgICgxPDwxNikJLyogUENTIGF1dG9uZWdvdGlhdGlvbiBjb21wbGV0ZSAqLworI2RlZmluZSBHRU1fSVJRX0VYVF9JTlQgICAgICgxPDwxNSkJLyogRXh0ZXJuYWwgaW50ZXJydXB0IHBpbiB0cmlnZ2VyZWQgKi8KKyNkZWZpbmUgR0VNX0lSUV9QQVVTRV9UWCAgICAoMTw8MTQpCS8qIFBhdXNlIGZyYW1lIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIEdFTV9JUlFfUEFVU0VfMCAgICAgKDE8PDEzKQkvKiBQYXVzZSB0aW1lIGhhcyByZWFjaGVkIHplcm8gKi8KKyNkZWZpbmUgR0VNX0lSUV9QQVVTRV9SWCAgICAoMTw8MTIpCS8qIFBhdXNlIGZyYW1lIHJlY2VpdmVkICovCisjZGVmaW5lIEdFTV9JUlFfSFJFU1AgICAgICAgKDE8PDExKQkvKiBocmVzcCBub3Qgb2sgKi8KKyNkZWZpbmUgR0VNX0lSUV9SWF9PUlVOICAgICAoMTw8MTApCS8qIFJlY2VpdmUgb3ZlcnJ1biBvY2N1cnJlZCAqLworI2RlZmluZSBHRU1fSVJRX1BDU19MSU5LICAgICgxPDw5KQkvKiBTdGF0dXMgb2YgUENTIGxpbmsgY2hhbmdlZCAqLworI2RlZmluZSBHRU1fSVJRX1RYX0RPTkUgICAgICgxPDw3KQkvKiBGcmFtZSB0cmFuc21pdHRlZCBvayAqLworI2RlZmluZSBHRU1fSVJRX1RYX0VSUk9SICAgICgxPDw2KQkvKiBUcmFuc21pdCBlcnIgb2NjdXJyZWQgb3Igbm8gYnVmZmVycyAqLworI2RlZmluZSBHRU1fSVJRX1JFVFJZX0VYQyAgICgxPDw1KQkvKiBSZXRyeSBsaW1pdCBleGNlZWRlZCAqLworI2RlZmluZSBHRU1fSVJRX1RYX1VSVU4gICAgICgxPDw0KQkvKiBUcmFuc21pdCB1bmRlcnJ1biBvY2N1cnJlZCAqLworI2RlZmluZSBHRU1fSVJRX1RYX1VTRUQgICAgICgxPDwzKQkvKiBUeCBidWZmZXIgdXNlZCBiaXQgcmVhZCAqLworI2RlZmluZSBHRU1fSVJRX1JYX1VTRUQgICAgICgxPDwyKQkvKiBSeCBidWZmZXIgdXNlZCBiaXQgcmVhZCAqLworI2RlZmluZSBHRU1fSVJRX1JYX0RPTkUgICAgICgxPDwxKQkvKiBGcmFtZSByZWNlaXZlZCBvayAqLworI2RlZmluZSBHRU1fSVJRX01BTl9ET05FICAgICgxPDwwKQkvKiBQSFkgbWFuYWdlbWVudCBvcGVyYXRpb24gY29tcGxldGUgKi8KKyNkZWZpbmUgR0VNX0lSUV9BTEwgICAgICAgICAoMHhGRkZGRkZGRikJLyogRXZlcnl0aGluZyEgKi8KKworLyogUmV2aXNpb24gSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0VNX1JFVl9JRF9NT0RFTF9NQVNLICAgKDB4MDAwRjAwMDApCS8qIE1vZGVsIElEICovCisjZGVmaW5lIEdFTV9SRVZfSURfTU9ERUxfQkFTRSAgICgxNikJLyogRm9yIFNoaWZ0aW5nICovCisjZGVmaW5lIEdFTV9SRVZfSURfUkVHX01PREVMICAgICgweDAwMDIwMDAwKQkvKiBHRU0gbW9kdWxlIElEICovCisjZGVmaW5lIEdFTV9SRVZfSURfUkVWX01BU0sgICAgICgweDAwMDBGRkZGKQkvKiBSZXZpc2lvbiBJRCAqLworCisvKiBEZWZpbmUgc29tZSBtZW1vcnkgb2Zmc2V0cyBmb3IgZWFzaWVyIGRpcmVjdCBhY2Nlc3MgdG8gbWVtb3J5IG1hcC4gKi8KKyNkZWZpbmUgR0VNX05FVF9DT05UUk9MICAgICAgICAgKDB4MDApCisjZGVmaW5lIEdFTV9ORVRfQ09ORklHICAgICAgICAgICgweDA0KQorI2RlZmluZSBHRU1fTkVUX1NUQVRVUyAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgR0VNX1VTRVJfSU8gICAgICAgICAgICAgKDB4MEMpCisjZGVmaW5lIEdFTV9ETUFfQ09ORklHCQkoMHgxMCkKKyNkZWZpbmUgR0VNX1RYX1NUQVRVUyAgICAgICAgICAgKDB4MTQpCisjZGVmaW5lIEdFTV9SWF9RUFRSICAgICAgICAgICAgICgweDE4KQorI2RlZmluZSBHRU1fUlhfT0ZGU0VUICAgICAgICAgICAoMHgxQykKKyNkZWZpbmUgR0VNX1JYX1NUQVRVUyAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIEdFTV9JUlFfU1RBVFVTICAgICAgICAgICgweDI0KQorI2RlZmluZSBHRU1fSVJRX0VOQUJMRSAgICAgICAgICAoMHgyOCkKKyNkZWZpbmUgR0VNX0lSUV9ESVNBQkxFICAgICAgICAgKDB4MkMpCisjZGVmaW5lIEdFTV9JUlFfTUFTSyAgICAgICAgICAgICgweDMwKQorI2RlZmluZSBHRU1fUEhZX01BTiAgICAgICAgICAgICAoMHgzNCkKKyNkZWZpbmUgR0VNX1JYX1BBVVNFX1RJTUUgICAgICAgKDB4MzgpCisjZGVmaW5lIEdFTV9UWF9QQVVTRV9RVUFOVCAgICAgICgweDNDKQorCisjZGVmaW5lIEdFTV9IQVNIX0JPVCAgICAgICAgICAgICgweDgwKQorI2RlZmluZSBHRU1fSEFTSF9UT1AgICAgICAgICAgICAoMHg4NCkKKyNkZWZpbmUgR0VNX0xBRERSMV9CT1QgICAgICAgICAgKDB4ODgpCisjZGVmaW5lIEdFTV9MQUREUjFfVE9QICAgICAgICAgICgweDhDKQorI2RlZmluZSBHRU1fTEFERFIyX0JPVCAgICAgICAgICAoMHg5MCkKKyNkZWZpbmUgR0VNX0xBRERSMl9UT1AgICAgICAgICAgKDB4OTQpCisjZGVmaW5lIEdFTV9MQUREUjNfQk9UICAgICAgICAgICgweDk4KQorI2RlZmluZSBHRU1fTEFERFIzX1RPUCAgICAgICAgICAoMHg5QykKKyNkZWZpbmUgR0VNX0xBRERSNF9CT1QgICAgICAgICAgKDB4QTApCisjZGVmaW5lIEdFTV9MQUREUjRfVE9QICAgICAgICAgICgweEE0KQorI2RlZmluZSBHRU1fSURfQ0hFQ0sxICAgICAgICAgICAoMHgzMjApCisjZGVmaW5lIEdFTV9JRF9DSEVDSzIgICAgICAgICAgICgweDMyNCkKKyNkZWZpbmUgR0VNX0lEX0NIRUNLMyAgICAgICAgICAgKDB4MzI4KQorI2RlZmluZSBHRU1fSURfQ0hFQ0s0ICAgICAgICAgICAoMHgzMkMpCisjZGVmaW5lIEdFTV9SRVZfSUQgICAgICAgICAgICAgICgweEZDKQorCisjZGVmaW5lIEdFTV9PQ1RfVFhfQk9UICAgICAgICAgICgweDEwMCkKKyNkZWZpbmUgR0VNX09DVF9UWF9UT1AgICAgICAgICAgKDB4MTA0KQorI2RlZmluZSBHRU1fU1RBVFNfRlJBTUVTX1RYICAgICAoMHgxMDgpCisjZGVmaW5lIEdFTV9CUk9BRENBU1RfVFggICAgICAgICgweDEwQykKKyNkZWZpbmUgR0VNX01VTFRJQ0FTVF9UWCAgICAgICAgKDB4MTEwKQorI2RlZmluZSBHRU1fU1RBVFNfUEFVU0VfVFggICAgICAoMHgxMTQpCisjZGVmaW5lIEdFTV9GUkFNRTY0X1RYICAgICAgICAgICgweDExOCkKKyNkZWZpbmUgR0VNX0ZSQU1FNjVfVFggICAgICAgICAgKDB4MTFDKQorI2RlZmluZSBHRU1fRlJBTUUxMjhfVFggICAgICAgICAoMHgxMjApCisjZGVmaW5lIEdFTV9GUkFNRTI1Nl9UWCAgICAgICAgICgweDEyNCkKKyNkZWZpbmUgR0VNX0ZSQU1FNTEyX1RYICAgICAgICAgKDB4MTI4KQorI2RlZmluZSBHRU1fRlJBTUUxMDI0X1RYICAgICAgICAoMHgxMkMpCisjZGVmaW5lIEdFTV9GUkFNRTE1MTlfVFggICAgICAgICgweDEzMCkKKyNkZWZpbmUgR0VNX1NUQVRTX1RYX1VSVU4gICAgICAgKDB4MTM0KQorI2RlZmluZSBHRU1fU1RBVFNfU0lOR0xFX0NPTCAgICAoMHgxMzgpCisjZGVmaW5lIEdFTV9TVEFUU19NVUxUSV9DT0wgICAgICgweDEzQykKKyNkZWZpbmUgR0VNX1NUQVRTX0VYQ0VTU19DT0wgICAgKDB4MTQwKQorI2RlZmluZSBHRU1fU1RBVFNfTEFURV9DT0wgICAgICAoMHgxNDQpCisjZGVmaW5lIEdFTV9TVEFUU19ERUZfVFggICAgICAgICgweDE0OCkKKyNkZWZpbmUgR0VNX1NUQVRTX0NSU19FUlJPUlMgICAgKDB4MTRDKQorI2RlZmluZSBHRU1fT0NUX1JYX0JPVCAgICAgICAgICAoMHgxNTApCisjZGVmaW5lIEdFTV9PQ1RfUlhfVE9QICAgICAgICAgICgweDE1NCkKKyNkZWZpbmUgR0VNX1NUQVRTX0ZSQU1FU19SWCAgICAgKDB4MTU4KQorI2RlZmluZSBHRU1fQlJPQURDQVNUX1JYICAgICAgICAoMHgxNUMpCisjZGVmaW5lIEdFTV9NVUxUSUNBU1RfUlggICAgICAgICgweDE2MCkKKyNkZWZpbmUgR0VNX1NUQVRTX1BBVVNFX1JYICAgICAgKDB4MTY0KQorI2RlZmluZSBHRU1fRlJBTUU2NF9SWCAgICAgICAgICAoMHgxNjgpCisjZGVmaW5lIEdFTV9GUkFNRTY1X1JYICAgICAgICAgICgweDE2QykKKyNkZWZpbmUgR0VNX0ZSQU1FMTI4X1JYICAgICAgICAgKDB4MTcwKQorI2RlZmluZSBHRU1fRlJBTUUyNTZfUlggICAgICAgICAoMHgxNzQpCisjZGVmaW5lIEdFTV9GUkFNRTUxMl9SWCAgICAgICAgICgweDE3OCkKKyNkZWZpbmUgR0VNX0ZSQU1FMTAyNF9SWCAgICAgICAgKDB4MTdDKQorI2RlZmluZSBHRU1fRlJBTUUxNTE5X1JYICAgICAgICAoMHgxODApCisjZGVmaW5lIEdFTV9TVEFUU19VU0laRV9GUkFNRVMgICgweDE4NCkKKyNkZWZpbmUgR0VNX1NUQVRTX0VYQ0VTU19MRU4gICAgKDB4MTg4KQorI2RlZmluZSBHRU1fU1RBVFNfSkFCQkVSUyAgICAgICAoMHgxOEMpCisjZGVmaW5lIEdFTV9TVEFUU19GQ1NfRVJST1JTICAgICgweDE5MCkKKyNkZWZpbmUgR0VNX1NUQVRTX0xFTkdUSF9FUlJPUlMgKDB4MTk0KQorI2RlZmluZSBHRU1fU1RBVFNfUlhfU1lNX0VSUiAgICAoMHgxOTgpCisjZGVmaW5lIEdFTV9TVEFUU19BTElHTl9FUlJPUlMgICgweDE5QykKKyNkZWZpbmUgR0VNX1NUQVRTX1JYX1JFU19FUlIgICAgKDB4MWEwKQorI2RlZmluZSBHRU1fU1RBVFNfUlhfT1JVTiAgICAgICAoMHgxYTQpCisKKyNkZWZpbmUgR0VNX1JFR19UT1AgICAgICAgICAgICAgKDB4MjNDKQorCisjZGVmaW5lCUdFTV9RVUVVRV9CQVNFMAkJKDB4MzAwKQorI2RlZmluZQlHRU1fUVVFVUVfQkFTRTEJCSgweDMwNCkKKyNkZWZpbmUJR0VNX1FVRVVFX0JBU0UyCQkoMHgzMDgpCisjZGVmaW5lCUdFTV9RVUVVRV9CQVNFMwkJKDB4MzBDKQorI2RlZmluZQlHRU1fUVVFVUVfQkFTRTQJCSgweDMxMCkKKyNkZWZpbmUJR0VNX1FVRVVFX0JBU0U1CQkoMHgzMTQpCisjZGVmaW5lCUdFTV9RVUVVRV9CQVNFNgkJKDB4MzE4KQorI2RlZmluZQlHRU1fUVVFVUVfQkFTRTcJCSgweDMxQykKKworI2RlZmluZSBHRU1fSURfQ0hFQ0s1ICAgICAgICAgICAoMHgzMjApCisjZGVmaW5lIEdFTV9JRF9DSEVDSzYgICAgICAgICAgICgweDMyNCkKKyNkZWZpbmUgR0VNX0lEX0NIRUNLNyAgICAgICAgICAgKDB4MzI4KQorI2RlZmluZSBHRU1fSURfQ0hFQ0s4ICAgICAgICAgICAoMHgzMkMpCisgCisvLyBtZW1vcnkgb2Zmc2V0cyBmb3IgYWRtaXR0YW5jZSByZWdpc3RlcnMKKyNkZWZpbmUgQURNX0NGRwkJCSgweDAwQykKKworc3RydWN0IGdlbWFjX2luZm9fc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgYmFzZWFkZHI7CisJdW5zaWduZWQgaW50IHBoeWFkZHI7CisJdW5zaWduZWQgaW50IGdlbWFjY29uZmlnOworCXUzMiBtb2RlOworCXUzMiBwaHlmbGFnczsJCS8vIHRvIGluZGljYXRlIGlmIGdpZ2FiaXQgc3VwcG9ydGVkIG9yIG5vdAorCXVuc2lnbmVkIGludCBwaHlyZWdpZHg7Cit9OworCitzdHJ1Y3QgcnhfZGVzYyB7CisJdm9sYXRpbGUgdTMyIGRhdGE7CisJdm9sYXRpbGUgdTMyIHN0YXR1czsKKwl2b2xhdGlsZSB1MzIgZXh0c3RhdHVzOworCXUzMiBwYWQ7Cit9OworLy9nZW1hYyByeCBjb250cm9scworLy8gV3JhcCBmbGFnIC0gbWFya3MgbGFzdCBkZXNjcmlwdG9yIGluIGEgcXVldWUgd2hlbiBzZXQKKy8vIGdvZXMgdG8gdGhlIHN0YXR1cyB3b3JkIChvZmZzZXQgMHg0KQorI2RlZmluZSBHRU1SWF9XUkFQIAkoMTw8MjgpCisvLyBPd25lcnNoaXAgZmxhZyAtIHdoZW4gMCBnZW0gY2FuIHVzZSB0aGUgZGVzY3JpcHRvcgorLy8gZ29lcyB0byB0aGUgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgKG9mZnNldCAweDgpCisjZGVmaW5lIEdFTVJYX09XTgkoMTw8MTUpCisKKy8vIGdlbWFjIHJ4IHN0YXR1cworI2RlZmluZSBSWF9TVEFfQkNBU1QJCSgxVUw8PDMxKQorI2RlZmluZSBSWF9TVEFfTUNBU1QJCSgxPDwzMCkKKyNkZWZpbmUgUlhfU1RBX1VNCQkoMTw8MjkpCisjZGVmaW5lIFJYX01BQ19NQVRDSF9GTEFHIAkoMHg0PDwyNSkKKyNkZWZpbmUgUlhfTUFDX01BVENIX05VTV9NQVNLCSgweDM8PDI1KQorI2RlZmluZSBSWF9NQUNfTUFUQ0hfUE9TIAkyNQorI2RlZmluZSBSWF9JTlQgCQkJKDE8PDI0KQorI2RlZmluZSBSWF9JUFNFQ19PVVQJCSgxPDwyMykKKyNkZWZpbmUgUlhfSVBTRUNfSU4JIAkoMTw8MjIpCisjZGVmaW5lIFJYX1NUQV9WTEFOIAkJKDE8PDIxKQorI2RlZmluZSBSWF9TVEFfVkxBTl84MDJwIAkoMTw8MjApCisjZGVmaW5lIFJYX1NUQV9WTEFOX1BSSV9NQVNLCSg3PDwxNykKKyNkZWZpbmUgUlhfU1RBX1ZMQU5fUFJJX1BPUwkxNworI2RlZmluZSBSWF9TVEFfVkxBTl9DRkkJCSgxPDwxNikKKyNkZWZpbmUgUlhfU1RBX1NPRgkJKDE8PDE1KQorI2RlZmluZSBSWF9TVEFfRU9GCQkoMTw8MTQpCisjZGVmaW5lIFJYX1NUQV9QQUNLRVQJCShSWF9TVEFfU09GfFJYX1NUQV9FT0YpCisjZGVmaW5lIFJYX1NUQV9DUkNFUlIJCSgxPDwxMykKKyNkZWZpbmUgUlhfU1RBX0xFTl9NQVNLCQkweDFmZmYKKyNkZWZpbmUgUlhfU1RBX0xFTl9QT1MJCTAKKyNkZWZpbmUJUlhfQ0hFQ0tfRVJST1IJCVJYX1NUQV9DUkNFUlIKKy8vIGdlbWFjIHJ4IGV4dGVuZGVkIHN0YXR1cyh3b3JkMikKKyNkZWZpbmUgUlhfU1RBX0w0T0ZGX01BU0sJKDB4ZmY8PDI0KQorI2RlZmluZSBSWF9TVEFfTDRPRkZfUE9TCTI0CisjZGVmaW5lIFJYX1NUQV9MM09GRl9NQVNLCSgweGZmPDwxNikKKyNkZWZpbmUgUlhfU1RBX0wzT0ZGX1BPUwkxNgorCisjZGVmaW5lIFJYX1NUQV9MM19DS1NVTQkJKDE8PDExKQorI2RlZmluZSBSWF9TVEFfTDNfR09PRAkJKDE8PDEyKQorI2RlZmluZSBSWF9TVEFfTDRfQ0tTVU0JCSgxPDwxMykKKyNkZWZpbmUgUlhfU1RBX0w0X0dPT0QJCSgxPDwxNCkKKworI2RlZmluZSBSWF9TVEFfVENQCQkoMTw8OSkKKyNkZWZpbmUgUlhfU1RBX1VEUAkJKDE8PDgpCisjZGVmaW5lIFJYX1NUQV9JUFY2CQkoMTw8NykKKyNkZWZpbmUgUlhfU1RBX0lQVjQJCSgxPDw2KQorI2RlZmluZSBSWF9TVEFfUFBQT0UJCSgxPDw1KQorI2RlZmluZSBSWF9TVEFfV0lMTEhBTkRMRQkoUlhfU1RBX0lQVjYgfCBSWF9TVEFfSVBWNCkKKyNkZWZpbmUgUlhfU1RBX1FpblEJCSgxPDw0KQorI2RlZmluZSBSWF9TVEFfVFlQRUlEX01BVENIX0ZMQUcgKDB4OCA8PCAwKQorI2RlZmluZSBSWF9TVEFfVFlQRUlECQkoMHg3IDw8IDApCisjZGVmaW5lIFJYX1NUQV9UWVBFSURfUE9TCTAKKworc3RydWN0IHR4X2Rlc2MgeworCXZvbGF0aWxlIHUzMiBkYXRhOworCXZvbGF0aWxlIHUzMiBjdGw7Cit9OworCisjZGVmaW5lIFRYX0RFU0NfV09SRDFfVVNFRAkoQklUMzEpCisjZGVmaW5lIFRYX0RFU0NfV09SRDFfV1JBUAkoQklUMzApCisjZGVmaW5lIFRYX0RFU0NfV09SRDFfSU5UCShCSVQyOSkKKyNkZWZpbmUgVFhfREVTQ19XT1JEMV9FUlIxCShCSVQyOCkKKyNkZWZpbmUgVFhfREVTQ19XT1JEMV9FUlIyCShCSVQyNykKKyNkZWZpbmUgVFhfREVTQ19XT1JEMV9UWENTVU1fTUFTSwkoQklUMjZ8QklUMjUpCisjZGVmaW5lCVRYX0RFU0NfQ1NVTShhKQkJKChhJihUWF9ERVNDX1dPUkQxX1RYQ1NVTV9NQVNLKSk8PDI1KQorI2RlZmluZSBUWF9ERVNDX1dPUkQxX0ZDUwkoQklUMjQpCisjZGVmaW5lIFRYX0RFU0NfV09SRDFfTEFTVAkoQklUMTUpCisjZGVmaW5lIFRYX0RFU0NfV09SRDFfUE9PTEIJKEJJVDE0KQorI2RlZmluZSBUWF9ERVNDX1dPUkQxX0JVRlJFVAkoQklUMTMpCisjZGVmaW5lIFRYX0RFU0NfV09SRDFfTEVHVEhfTUFTSyAoMHgxRkZGKQorCisvKiBUaGlzIGlzIGEgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBwYXNzZWQgYW5kIHVzZWQgZm9yIGFsbCBIQUwgb3BlcmF0aW9ucywgaXQKKyAqIGNvbnNpc3RzIG9mIHBvaW50ZXJzIHRvIHRoZSB2YXJpb3VzIE1BQyBzdHJ1Y3R1cmVzIHN1Y2ggYXMgdGhlIE1BQyByZWdpc3RlcgorICogYmxvY2sgYW5kIHRoZSBmaXJzdCBkZXNjcmlwdG9yIGVsZW1lbnQgZm9yIHRoZSByeCBhbmQgdHggYnVmZmVyIHF1ZXVlcy4KKyAqIE90aGVyIGludGVybmFsIHZhcmlhYmxlcyBkZWNsYXJlZCBmb3IgdXNlIGluIGZ1bmN0aW9uIGNhbGxzIGFuZCB0byBrZWVwIHRyYWNrCisgKiBvZiB3aGVyZSB0aGluZ3MgYXJlLgorICovCitzdHJ1Y3QgZ2VtYWNfZGV2IHsKKwl2b2lkICpyZWdpc3RlcnM7CS8qIFBvaW50ZXIgdG8gdGhlIE1BQyBhZGRyZXNzIHNwYWNlLiAqLworCXZvaWQgKnBoeXJlZ2lzdGVyczsJLyogUG9pbnRlciB0byB0aGUgTUFDIGFkZHJlc3Mgc3BhY2UgY29udHJvbGxpbmcgdGhlIHBoeSAqLworCisJdm9pZCAqYmFzZWFkZHI7CisJc3RydWN0IHBoeV9pbmZvICpwaHlpbmZvOworCXUzMiBwaHlhZGRyOworCXUzMiBtb2RlOworCXUzMiBwaHlmbGFnczsKKwlzdHJ1Y3QgZXRoX2RldmljZSAqZGV2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NvbWNlcnRvMTAwX2dlbS5oIGIvZHJpdmVycy9jb21jZXJ0bzEwMF9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmQ5YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jb21jZXJ0bzEwMF9nZW0uaApAQCAtMCwwICsxLDM1MiBAQAorI2lmbmRlZiBfX0NPTUNFUlRPX0dFTTEwMF9IX18KKyNkZWZpbmUgX19DT01DRVJUT19HRU0xMDBfSF9fCisKKyNpbmNsdWRlIDxhc20vYXJjaC9pZG1hLmg+CisKKyNkZWZpbmUgR0VNX0RFRl9QQ0xLX0RJViAoTURDX0RJVl8zMikKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgR0VNQUMgSVAgd3JhcHBlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNkZWZpbmUgR0VNX0FSTV9GSUZPX0NUUkwJCTB4MDAwMAorI2RlZmluZSBHRU1fQVJNX1RYX0ZJRk9fU0laRQkJMHgwMDE0CisjZGVmaW5lIEdFTV9BUk1fUlhfRklGT19TSVpFCQkweDAwMjQKKyNkZWZpbmUgR0VNX0FSTV9SWF9GSUZPX0hJR0gJCTB4MDAyOAorI2RlZmluZSBHRU1fQVJNX1JYX0ZJRk9fTE9XCQkweDAwMkMKKworI2RlZmluZSBHRU1fRklGT19DVFJMCQkJMHhEMDAwCisjZGVmaW5lIEdFTV9SWF9GSUZPX0hJR0gJCTB4RDAyNAorI2RlZmluZSBHRU1fUlhfRklGT19MT1cJCQkweEQwMjgKKyNkZWZpbmUgR0VNX0lQCQkJCTB4RTAwMAorI2RlZmluZSBHRU1fQ0ZHCQkJCTB4RjAwMAorI2RlZmluZSBHRU1fVFhfQ1RSTAkJCTB4RjAwNAorI2RlZmluZSBHRU1fVFhfQ09MTAkJCTB4RjAwOAorI2RlZmluZSBHRU1fUlhfQ1RSTAkJCTB4RjAxMAorI2RlZmluZSBHRU1fUlhfU1RBVF9QS1RTSVpFCQkweEYwMTQKKyNkZWZpbmUgR0VNX1JYX1NUQVRfRklGT0RFUFRICQkweEYwMTgKKyNkZWZpbmUgR0VNX1JYX1NUQVRfRklGT0RBVEEJCTB4RjAxQworCisjZGVmaW5lCUdFTV9GSUZPX0NUUkxfVFhGRl9FTgkJKDEgPDwgMCkKKyNkZWZpbmUJR0VNX0ZJRk9fQ1RSTF9IQlRYUlFfRU4JCSgxIDw8IDEpCisjZGVmaW5lCUdFTV9GSUZPX0NUUkxfUlhGRl9FTgkJKDEgPDwgMykKKyNkZWZpbmUJR0VNX0ZJRk9fQ1RSTF9IQlJYUlFfRU4JCSgxIDw8IDQpCisjZGVmaW5lCUdFTV9GSUZPX0NUUkxfVFhDUF9JTkgJCSgxIDw8IDUpCisjZGVmaW5lCUdFTV9GSUZPX0NUUkxfUlhDTVBMVElFCQkoMSA8PCAxMSkKKworI2RlZmluZSBHRU1fQ09ORl9NT0RFX1NFTF9QSU4JCSgwIDw8IDApCisjZGVmaW5lIEdFTV9DT05GX01PREVfU0VMX0dFTQkJKDEgPDwgMCkKKyNkZWZpbmUgR0VNX0NPTkZfTU9ERV9HRU1fTUFTSwkJKDcgPDwgMSkKKyNkZWZpbmUgR0VNX0NPTkZfTU9ERV9HRU1fTUlJCQkoMCA8PCAxKQorI2RlZmluZSBHRU1fQ09ORl9NT0RFX0dFTV9HTUlJCQkoMSA8PCAxKQorI2RlZmluZSBHRU1fQ09ORl9NT0RFX0dFTV9STUlJCQkoMiA8PCAxKQorI2RlZmluZSBHRU1fQ09ORl9NT0RFX0dFTV9SR01JSQkJKDMgPDwgMSkKKyNkZWZpbmUgR0VNX0NPTkZfTU9ERV9HRU1fU01JSQkJKDYgPDwgMSkKKworI2RlZmluZSBHRU1fQ09ORl9NT0RFX1BJTl9NQVNLCQkoNyA8PCA0KQorI2RlZmluZSBHRU1fQ09ORl9NT0RFX1BJTl9NSUkJCSgwIDw8IDQpCisjZGVmaW5lIEdFTV9DT05GX01PREVfUElOX0dNSUkJCSgxIDw8IDQpCisjZGVmaW5lIEdFTV9DT05GX01PREVfUElOX1JNSUkJCSgyIDw8IDQpCisjZGVmaW5lIEdFTV9DT05GX01PREVfUElOX1JHTUlJCQkoMyA8PCA0KQorI2RlZmluZSBHRU1fQ09ORl9NT0RFX1BJTl9TTUlJCQkoNiA8PCA0KQorCisjZGVmaW5lIEdFTV9DT05GX0RVUExFWF9TRUxfUEhZCQkoMCA8PCA4KQorI2RlZmluZSBHRU1fQ09ORl9EVVBMRVhfU0VMX0dFTQkJKDEgPDwgOCkKKyNkZWZpbmUgR0VNX0NPTkZfRFVQTEVYX0dFTV9IQUxGCSgwIDw8IDkpCisjZGVmaW5lIEdFTV9DT05GX0RVUExFWF9HRU1fRlVMTAkoMSA8PCA5KQorI2RlZmluZSBHRU1fQ09ORl9EVVBMRVhfUEhZX0hBTEYJKDAgPDwgMTApCisjZGVmaW5lIEdFTV9DT05GX0RVUExFWF9QSFlfRlVMTAkoMSA8PCAxMCkKKyNkZWZpbmUgR0VNX0NPTkZfU1BFRURfU0VMX1BIWQkJKDAgPDwgMTEpCisjZGVmaW5lIEdFTV9DT05GX1NQRUVEX1NFTF9HRU0JCSgxIDw8IDExKQorI2RlZmluZSBHRU1fQ09ORl9TUEVFRF9NQVNLCQkoMyA8PCAxMikKKyNkZWZpbmUgR0VNX0NPTkZfU1BFRURfR0VNXzEwTQkJKDAgPDwgMTIpCisjZGVmaW5lIEdFTV9DT05GX1NQRUVEX0dFTV8xMDBNCQkoMSA8PCAxMikKKyNkZWZpbmUgR0VNX0NPTkZfU1BFRURfR0VNXzFHCQkoMiA8PCAxMikKKyNkZWZpbmUgR0VNX0NPTkZfU1BFRURfUEhZXzEwTQkJKDAgPDwgMTQpCisjZGVmaW5lIEdFTV9DT05GX1NQRUVEX1BIWV8xMDBNCQkoMSA8PCAxNCkKKyNkZWZpbmUgR0VNX0NPTkZfU1BFRURfUEhZXzFHCQkoMiA8PCAxNCkKKyNkZWZpbmUgR0VNX0NPTkZfUEhZX0xJTktfRE9XTgkJKDAgPDwgMTYpCisjZGVmaW5lIEdFTV9DT05GX1BIWV9MSU5LX1VQCQkoMSA8PCAxNikKKyNkZWZpbmUgR0VNX0NPTkZfR0VNX0xPT1BCQUNLCQkoMSA8PCAxNykKKworI2RlZmluZSBHRU1fVFhDVFJMX0RNQUlGX0VOCQkoMSA8PCAwKQorI2RlZmluZSBHRU1fVFhDVFJMX0NSQ19FTgkJKDEgPDwgMSkKKyNkZWZpbmUgR0VNX1RYQ1RSTF9SRVRSX0VOCQkoMSA8PCAyKQorI2RlZmluZSBHRU1fVFhDVFJMX1RYX1NUQVRFCQkweGYwMDAwCisKKyNkZWZpbmUgR0VNX1JYQ1RSTF9ETUFJRl9FTgkJKDEgPDwgMCkKKyNkZWZpbmUgR0VNX1JYQ1RSTF9SWF9TVEFURQkJMHhmMDAwMAorCisvLyBIb3N0IGZpZm8gY29udHJvbCBiaXRzCisjZGVmaW5lIEFSTV9GSUZPX1JYRFJFUVdFCQkoMSA8PCAyKQorI2RlZmluZSBBUk1fRklGT19UWERSRVFSRQkJKDEgPDwgMykKKyNkZWZpbmUgQVJNX0ZJRk9fVFhGRl9SRVMJCSgxIDw8IDEyKQorI2RlZmluZSBBUk1fRklGT19SWEZGX1JFUwkJKDEgPDwgMTMpCisjZGVmaW5lIEFSTV9GSUZPX1JYQ1BfSU5ICQkoMSA8PCAxNSkKKworLyogRGVmaW5lIHNvbWUgYml0IHBvc2l0aW9ucyBmb3IgcmVnaXN0ZXJzLiAqLworCisvKiBCaXQgcG9zaXRpb25zIGZvciBuZXR3b3JrIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0VNX1JFQURfU05BUCAgICAgICAoMTw8MTQpCS8qIFJlYWQgc25hcHNob3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0VNX1RBS0VfU05BUCAgICAgICAoMTw8MTMpCS8qIFRha2UgYSBzbmFwc2hvdCAqLworI2RlZmluZSBHRU1fVFhfMFFfUEFVU0UgICAgICgxPDwxMikJLyogVHJhbnNtaXQgemVybyBxdWFudHVtIHBhdXNlIGZyYW1lICovCisjZGVmaW5lIEdFTV9UWF9QQVVTRSAgICAgICAgKDE8PDExKQkvKiBUcmFuc21pdCBwYXVzZSBmcmFtZSAqLworI2RlZmluZSBHRU1fVFhfSEFMVCAgICAgICAgICgxPDwxMCkJLyogSGFsdCB0cmFuc21pc3Npb24gYWZ0ZXIgY3VyciBmcmFtZSAqLworI2RlZmluZSBHRU1fVFhfU1RBUlQgICAgICAgICgxPDw5KQkvKiBTdGFydCB0eCAodHhfZ28pICovCisjZGVmaW5lIEdFTV9TVEFUU19XUl9FTiAgICAgKDE8PDcpCS8qIEVuYWJsZSB3cml0aW5nIHRvIHN0YXQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdFTV9TVEFUU19JTkMgICAgICAgKDE8PDYpCS8qIEluY3JlbWVudCBzdGF0aXN0aWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIEdFTV9TVEFUU19DTFIgICAgICAgKDE8PDUpCS8qIENsZWFyIHN0YXRpc3RpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0VNX01ESU9fRU4gICAgICAgICAoMTw8NCkJLyogRW5hYmxlIE1ESU8gcG9ydCAqLworI2RlZmluZSBHRU1fVFhfRU4gICAgICAgICAgICgxPDwzKQkvKiBFbmFibGUgdHJhbnNtaXQgY2lyY3VpdHMgKi8KKyNkZWZpbmUgR0VNX1JYX0VOICAgICAgICAgICAoMTw8MikJLyogRW5hYmxlIHJlY2VpdmUgY2lyY3VpdHMgKi8KKyNkZWZpbmUgR0VNX0xCX01BQyAgICAgICAgICAoMTw8MSkJLyogUGVyZm9ybSBsb2NhbCBsb29wYmFjayBhdCBNQUMgKi8KKyNkZWZpbmUgR0VNX0xCX1BIWSAgICAgICAgICAoMTw8MCkJLyogUGVyZm9ybSBleHQgbG9vcGJhY2sgdGhyb3VnaCBQSFkgKi8KKworLyogQml0IHBvc2l0aW9ucyBmb3IgbmV0d29yayBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIEdFTV9SWF9OT19QQVVTRSAgICAgKDE8PDIzKQkvKiBEbyBub3QgY29weSBwYXVzZSBmcmFtZXMgdG8gbWVtb3J5ICovCisjZGVmaW5lIEdFTV9BSEJfV0lEVEgxICAgICAgKDE8PDIyKQkvKiBCaXQgMSBmb3IgZGVmaW5pbmcgQUhCIHdpZHRoICovCisjZGVmaW5lIEdFTV9BSEJfV0lEVEgwICAgICAgKDE8PDIxKQkvKiBCaXQgMCBmb3IgZGVmaW5pbmcgQUhCIHdpZHRoICovCisjZGVmaW5lIEdFTV9NRENfRElWMiAgICAgICAgKDE8PDIwKQkvKiBQQ0xLIGRpdmlzb3IgZm9yIE1EQywgYml0IDIgKi8KKyNkZWZpbmUgR0VNX01EQ19ESVYxICAgICAgICAoMTw8MTkpCS8qIFBDTEsgZGl2aXNvciBmb3IgTURDLCBiaXQgMSAqLworI2RlZmluZSBHRU1fTURDX0RJVjAgICAgICAgICgxPDwxOCkJLyogUENMSyBkaXZpc29yIGZvciBNREMsIGJpdCAwICovCisjZGVmaW5lIEdFTV9SWF9OT19GQ1MgICAgICAgKDE8PDE3KQkvKiBEaXNjYXJkIEZDUyBmcm9tIHJlY2VpdmVkIGZyYW1lcy4gKi8KKyNkZWZpbmUgR0VNX1JYX0xFTl9DSEsgICAgICAoMTw8MTYpCS8qIFJlY2VpdmUgbGVuZ3RoIGNoZWNrLiAqLworI2RlZmluZSBHRU1fUlhfT0ZGU0VUX0JBU0UgIDE0CS8qIFBvcyBvZiBMU0IgZm9yIHJ4IGJ1ZmZlciBvZmZzZXRzLiAqLworI2RlZmluZSBHRU1fUlhfT0ZGU0VUMSAgICAgICgxPDwoR0VNX1JYX09GRlNFVF9CQVNFICsgMSkpCS8qIFJYIG9mZnNldCBiaXQgMSAqLworI2RlZmluZSBHRU1fUlhfT0ZGU0VUMCAgICAgICgxPDxHRU1fUlhfT0ZGU0VUX0JBU0UpCS8qIFJYIG9mZnNldCBiaXQgMCAqLworI2RlZmluZSBHRU1fUlhfUEFVU0VfRU4gICAgICgxPDwxMykJLyogRW5hYmxlIHBhdXNlIHJlY2VwdGlvbiAqLworI2RlZmluZSBHRU1fUkVUUllfVEVTVCAgICAgICgxPDwxMikJLyogUmV0cnkgdGVzdCBmb3Igc3BlZWRpbmcgdXAgZGVidWcgKi8KKyNkZWZpbmUgR0VNX1BDU19TRUwgICAgICAgICAoMTw8MTEpCS8qIFNlbGVjdCBQQ1MgKi8KKyNkZWZpbmUgR0VNX0dJR19NT0RFICAgICAgICAoMTw8MTApCS8qIEdpZ2FiaXQgbW9kZSBlbmFibGUgKi8KKyNkZWZpbmUgR0VNX0VBTV9FTiAgICAgICAgICAoMTw8OSkJLyogRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBlbmFibGUgKi8KKyNkZWZpbmUgR0VNX0ZSQU1FXzE1MzYgICAgICAoMTw8OCkJLyogRW5hYmxlIDE1MzYgYnl0ZSBmcmFtZXMgcmVjZXB0aW9uICovCisjZGVmaW5lIEdFTV9VTklDQVNUX0VOICAgICAgKDE8PDcpCS8qIFJlY2VpdmUgdW5pY2FzdCBoYXNoIGZyYW1lcyAqLworI2RlZmluZSBHRU1fTVVMVElDQVNUX0VOICAgICgxPDw2KQkvKiBSZWNlaXZlIG11bHRpY2FzdCBoYXNoIGZyYW1lcyAqLworI2RlZmluZSBHRU1fTk9fQlJPQURDQVNUICAgICgxPDw1KQkvKiBEbyBub3QgcmVjZWl2ZSBicm9hZGNhc3QgZnJhbWVzICovCisjZGVmaW5lIEdFTV9DT1BZX0FMTCAgICAgICAgKDE8PDQpCS8qIENvcHkgYWxsIGZyYW1lcyAqLworI2RlZmluZSBHRU1fUlhfSlVNQk8gICAgICAgICgxPDwzKQkvKiBBbGxvdyBqdW1ibyBmcmFtZSByZWNlcHRpb24gKi8KKyNkZWZpbmUgR0VNX1ZMQU5fT05MWSAgICAgICAoMTw8MikJLyogUmVjZWl2ZSBvbmx5IFZMQU4gZnJhbWVzICovCisjZGVmaW5lIEdFTV9GVUxMX0RVUExFWCAgICAgKDE8PDEpCS8qIEVuYWJsZSBmdWxsIGR1cGxleCAqLworI2RlZmluZSBHRU1fU1BFRURfMTAwICAgICAgICgxPDwwKQkvKiBTZXQgdG8gMTAwTWIgbW9kZSAqLworCisvKiBCaXQgcG9zaXRpb25zIGZvciBuZXR3b3JrIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBHRU1fUEhZX0lETEUgICAgICAgICgxPDwyKQkvKiBQSFkgbWFuYWdlbWVudCBpcyBpZGxlICovCisjZGVmaW5lIEdFTV9NRElPX0lOICAgICAgICAgKDE8PDEpCS8qIFN0YXR1cyBvZiBtZGlvX2luIHBpbiAqLworI2RlZmluZSBHRU1fTElOS19TVEFUVVMgICAgICgxPDwwKQkvKiBTdGF0dXMgb2YgbGluayBwaW4gKi8KKworLyogQml0IHBvc2l0aW9ucyBmb3IgdHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIEdFTV9UWF9IUkVTUCAgICAgICAgKDE8PDgpCS8qIFRyYW5zbWl0IGhyZXNwIG5vdCBPSyAqLworI2RlZmluZSBHRU1fTEFURV9DT0wgICAgICAgICgxPDw3KQkvKiBMYXRlIGNvbGxpc2lvbiAqLworI2RlZmluZSBHRU1fVFhfVVJVTiAgICAgICAgICgxPDw2KQkvKiBUcmFuc21pdCB1bmRlcnJ1biBvY2N1cnJlZCAqLworI2RlZmluZSBHRU1fVFhfQ09NUExFVEUgICAgICgxPDw1KQkvKiBUcmFuc21pdCBjb21wbGV0ZWQgT0sgKi8KKyNkZWZpbmUgR0VNX1RYX0JVRl9FWEggICAgICAoMTw8NCkJLyogVHJhbnNtaXQgYnVmZnMgZXhoYXVzdGVkIG1pZCBmcmFtZSAqLworI2RlZmluZSBHRU1fVFhfR08gICAgICAgICAgICgxPDwzKQkvKiBTdGF0dXMgb2YgdHhfZ28gaW50ZXJuYWwgdmFyaWFibGUgKi8KKyNkZWZpbmUgR0VNX1RYX1JFVFJZX0VYQyAgICAoMTw8MikJLyogUmV0cnkgbGltaXQgZXhjZWVkZWQgKi8KKyNkZWZpbmUgR0VNX1RYX0NPTCAgICAgICAgICAoMTw8MSkJLyogQ29sbGlzaW9uIG9jY3VycmVkIGR1cmluZyBmcmFtZSB0eCAqLworI2RlZmluZSBHRU1fVFhfVVNFRCAgICAgICAgICgxPDwwKQkvKiBVc2VkIGJpdCByZWFkIGluIHR4IGJ1ZmZlciAqLworCisvKiBCaXQgcG9zaXRpb25zIGZvciByZWNlaXZlIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBHRU1fUlhfSFJFU1AgICAgICAgICgxPDwzKQkvKiBSZWNlaXZlIGhyZXNwIG5vdCBPSyAqLworI2RlZmluZSBHRU1fUlhfT1JVTiAgICAgICAgICgxPDwyKQkvKiBSZWNlaXZlIG92ZXJydW4gb2NjdXJyZWQgKi8KKyNkZWZpbmUgR0VNX1JYX0RPTkUgICAgICAgICAoMTw8MSkJLyogRnJhbWUgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkICovCisjZGVmaW5lIEdFTV9SWF9CVUZfVVNFRCAgICAgKDE8PDApCS8qIFJlY2VpdmUgYnVmZmVyIHVzZWQgYml0IHJlYWQgKi8KKworLyogQml0IHBvc2l0aW9ucyBmb3IgaW50ZXJydXB0cyAqLworI2RlZmluZSBHRU1fSVJRX1BDU19BTiAgICAgICgxPDwxNikJLyogUENTIGF1dG9uZWdvdGlhdGlvbiBjb21wbGV0ZSAqLworI2RlZmluZSBHRU1fSVJRX0VYVF9JTlQgICAgICgxPDwxNSkJLyogRXh0ZXJuYWwgaW50ZXJydXB0IHBpbiB0cmlnZ2VyZWQgKi8KKyNkZWZpbmUgR0VNX0lSUV9QQVVTRV9UWCAgICAoMTw8MTQpCS8qIFBhdXNlIGZyYW1lIHRyYW5zbWl0dGVkICovCisjZGVmaW5lIEdFTV9JUlFfUEFVU0VfMCAgICAgKDE8PDEzKQkvKiBQYXVzZSB0aW1lIGhhcyByZWFjaGVkIHplcm8gKi8KKyNkZWZpbmUgR0VNX0lSUV9QQVVTRV9SWCAgICAoMTw8MTIpCS8qIFBhdXNlIGZyYW1lIHJlY2VpdmVkICovCisjZGVmaW5lIEdFTV9JUlFfSFJFU1AgICAgICAgKDE8PDExKQkvKiBocmVzcCBub3Qgb2sgKi8KKyNkZWZpbmUgR0VNX0lSUV9SWF9PUlVOICAgICAoMTw8MTApCS8qIFJlY2VpdmUgb3ZlcnJ1biBvY2N1cnJlZCAqLworI2RlZmluZSBHRU1fSVJRX1BDU19MSU5LICAgICgxPDw5KQkvKiBTdGF0dXMgb2YgUENTIGxpbmsgY2hhbmdlZCAqLworI2RlZmluZSBHRU1fSVJRX1RYX0RPTkUgICAgICgxPDw3KQkvKiBGcmFtZSB0cmFuc21pdHRlZCBvayAqLworI2RlZmluZSBHRU1fSVJRX1RYX0VSUk9SICAgICgxPDw2KQkvKiBUcmFuc21pdCBlcnIgb2NjdXJyZWQgb3Igbm8gYnVmZmVycyAqLworI2RlZmluZSBHRU1fSVJRX1JFVFJZX0VYQyAgICgxPDw1KQkvKiBSZXRyeSBsaW1pdCBleGNlZWRlZCAqLworI2RlZmluZSBHRU1fSVJRX1RYX1VSVU4gICAgICgxPDw0KQkvKiBUcmFuc21pdCB1bmRlcnJ1biBvY2N1cnJlZCAqLworI2RlZmluZSBHRU1fSVJRX1RYX1VTRUQgICAgICgxPDwzKQkvKiBUeCBidWZmZXIgdXNlZCBiaXQgcmVhZCAqLworI2RlZmluZSBHRU1fSVJRX1JYX1VTRUQgICAgICgxPDwyKQkvKiBSeCBidWZmZXIgdXNlZCBiaXQgcmVhZCAqLworI2RlZmluZSBHRU1fSVJRX1JYX0RPTkUgICAgICgxPDwxKQkvKiBGcmFtZSByZWNlaXZlZCBvayAqLworI2RlZmluZSBHRU1fSVJRX01BTl9ET05FICAgICgxPDwwKQkvKiBQSFkgbWFuYWdlbWVudCBvcGVyYXRpb24gY29tcGxldGUgKi8KKyNkZWZpbmUgR0VNX0lSUV9BTEwgICAgICAgICAoMHhGRkZGRkZGRikJLyogRXZlcnl0aGluZyEgKi8KKworLyogVHJhbnNtaXQgYnVmZmVyIGRlc2NyaXB0b3Igc3RhdHVzIHdvcmRzIGJpdCBwb3NpdGlvbnMuICovCisjZGVmaW5lIEdFTV9UQlFFX1VTRUQgICAgICAgKDE8PDMxKQkvKiBVc2VkIGJpdC4gKi8KKyNkZWZpbmUgR0VNX1RCUUVfV1JBUCAgICAgICAoMTw8MzApCS8qIFdyYXAgYml0ICovCisjZGVmaW5lIEdFTV9UQlFFX1JFVFJZX0VYQyAgKDE8PDI5KQkvKiBSZXRyeSBsaW1pdCBleGNlZWRlZC4gKi8KKyNkZWZpbmUgR0VNX1RCUUVfVVJVTiAgICAgICAoMTw8MjgpCS8qIFRyYW5zbWl0IHVuZGVycnVuIG9jY3VycmVkLiAqLworI2RlZmluZSBHRU1fVEJRRV9CVUZfRVhIICAgICgxPDwyNykJLyogQnVmZmVycyBleGhhdXN0ZWQgbWlkIGZyYW1lLiAqLworI2RlZmluZSBHRU1fVEJRRV9MQVRFX0NPTCAgICgxPDwyNikJLyogTGF0ZSBjb2xsaXNpb24uICovCisjZGVmaW5lIEdFTV9UQlFFX05PX0NSQyAgICAgKDE8PDE2KQkvKiBObyBDUkMgKi8KKyNkZWZpbmUgR0VNX1RCUUVfTEFTVF9CVUYgICAoMTw8MTUpCS8qIExhc3QgYnVmZmVyICovCisjZGVmaW5lIEdFTV9UQlFFX0xFTl9NQVNLICAgKDB4M0ZGRikJLyogTWFzayBmb3IgbGVuZ3RoIGZpZWxkICovCisjZGVmaW5lIEdFTV9UWF9NQVhfTEVOICAgICAgKDB4M0ZGRikJLyogTWF4aW11bSB0cmFuc21pdCBsZW5ndGggdmFsdWUgKi8KKyNkZWZpbmUgR0VNX1RCUUVfRFVNTVkgICAgICAoMHg4MDAwQkZGRikJLyogRHVtbXkgdmFsdWUgdG8gY2hlY2sgZm9yIGZyZWUgYnVmZmVyICovCisvKiBSZWNlaXZlIGJ1ZmZlciBkZXNjcmlwdG9yIHN0YXR1cyB3b3JkcyBiaXQgcG9zaXRpb25zLiAqLworI2RlZmluZSBHRU1fUkJRRV9CUk9BRENBU1QgICgxPDwzMSkJLyogQnJvYWRjYXN0IGZyYW1lICovCisjZGVmaW5lIEdFTV9SQlFFX01VTFRJQ0FTVCAgKDE8PDMwKQkvKiBNdWx0aWNhc3QgaGFzaGVkIGZyYW1lICovCisjZGVmaW5lIEdFTV9SQlFFX1VOSUNBU1QgICAgKDE8PDI5KQkvKiBVbmljYXN0IGhhc2hlZCBmcmFtZSAqLworI2RlZmluZSBHRU1fUkJRRV9FWFRfQUREUiAgICgxPDwyOCkJLyogRXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCAqLworI2RlZmluZSBHRU1fUkJRRV9TUEVDX01BVENIICgxPDwyNykJLyogU3BlY2lmaWMgYWRkcmVzcyBtYXRjaGVkICovCisjZGVmaW5lIEdFTV9SQlFFX1NQRUNfQkFTRSAgKDI1KQkvKiBQb3MgZm9yIGJhc2Ugb2Ygc3BlY2lmaWMgbWF0Y2ggKi8KKyNkZWZpbmUgR0VNX1JCUUVfU1BFQ19NQVQxICAoMTw8KFJCUUVfU1BFQ19CQVNFICsgMSkpCisjZGVmaW5lIEdFTV9SQlFFX1NQRUNfTUFUMCAgKDE8PFJCUUVfU1BFQ19CQVNFKQorI2RlZmluZSBHRU1fUkJRRV9UWVBFX01BVENIICgxPDwyNCkJLyogVHlwZSBJRCBtYXRjaGVkICovCisjZGVmaW5lIEdFTV9SQlFFX1RZUEVfQkFTRSAgKDIyKQkvKiBQb3NpdGlvbiBmb3IgYmFzZSBvZiB0eXBlIGlkIG1hdGNoICovCisjZGVmaW5lIEdFTV9SQlFFX1RZUEVfTUFUMSAgKDE8PChSQlFFX1RZUEVfQkFTRSArIDEpKQorI2RlZmluZSBHRU1fUkJRRV9UWVBFX01BVDAgICgxPDxSQlFFX1RZUEVfQkFTRSkKKyNkZWZpbmUgR0VNX1JCUUVfVkxBTiAgICAgICAoMTw8MjEpCS8qIFZMQU4gdGFnZ2VkICovCisjZGVmaW5lIEdFTV9SQlFFX1BSSU9SSVRZICAgKDE8PDIwKQkvKiBQcmlvcml0eSB0YWdnZWQgKi8KKyNkZWZpbmUgR0VNX1JCUUVfVkxBTl9CQVNFICAoMTcpCS8qIFBvc2l0aW9uIGZvciBiYXNlIG9mIFZMQU4gcHJpb3JpdHkgKi8KKyNkZWZpbmUgR0VNX1JCUUVfVkxBTl9QMiAgICAoMTw8KFJCUUVfVkxBTl9CQVNFKzIpKQorI2RlZmluZSBHRU1fUkJRRV9WTEFOX1AxICAgICgxPDwoUkJRRV9WTEFOX0JBU0UrMSkpCisjZGVmaW5lIEdFTV9SQlFFX1ZMQU5fUDAgICAgKDE8PFJCUUVfVkxBTl9CQVNFKQorI2RlZmluZSBHRU1fUkJRRV9DRkkgICAgICAgICgxPDwxNikJLyogQ0ZJIGZyYW1lICovCisjZGVmaW5lIEdFTV9SQlFFX0VPRiAgICAgICAgKDE8PDE1KQkvKiBFbmQgb2YgZnJhbWUuICovCisjZGVmaW5lIEdFTV9SQlFFX1NPRiAgICAgICAgKDE8PDE0KQkvKiBTdGFydCBvZiBmcmFtZS4gKi8KKyNkZWZpbmUgR0VNX1JCUUVfTEVOX01BU0sgICAoMHgzRkZGKQkvKiBNYXNrIGZvciB0aGUgbGVuZ3RoIGZpZWxkLiAqLworI2RlZmluZSBHRU1fUkJRRV9XUkFQICAgICAgICgxPDwxKQkvKiBXcmFwIGJpdC4uICovCisjZGVmaW5lIEdFTV9SQlFFX1VTRUQgICAgICAgKDE8PDApCS8qIFVzZWQgYml0Li4gKi8KKyNkZWZpbmUgR0VNX1JCUUVfQUREX01BU0sgICAoMHhGRkZGRkZGQykJLyogTWFzayBmb3IgYWRkcmVzcyAqLworCisvKiBSZXZpc2lvbiBJRCBSZWdpc3RlciAqLworI2RlZmluZSBHRU1fUkVWX0lEX01PREVMX01BU0sgICAoMHgwMDBGMDAwMCkJLyogTW9kZWwgSUQgKi8KKyNkZWZpbmUgR0VNX1JFVl9JRF9NT0RFTF9CQVNFICAgKDE2KQkvKiBGb3IgU2hpZnRpbmcgKi8KKyNkZWZpbmUgR0VNX1JFVl9JRF9SRUdfTU9ERUwgICAgKDB4MDAwMjAwMDApCS8qIEdFTSBtb2R1bGUgSUQgKi8KKyNkZWZpbmUgR0VNX1JFVl9JRF9SRVZfTUFTSyAgICAgKDB4MDAwMEZGRkYpCS8qIFJldmlzaW9uIElEICovCisKKy8qIERlZmluZSBzb21lIG1lbW9yeSBvZmZzZXRzIGZvciBlYXNpZXIgZGlyZWN0IGFjY2VzcyB0byBtZW1vcnkgbWFwLiAqLworI2RlZmluZSBHRU1fTkVUX0NPTlRST0wgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgR0VNX05FVF9DT05GSUcgICAgICAgICAgKDB4MDQpCisjZGVmaW5lIEdFTV9ORVRfU1RBVFVTICAgICAgICAgICgweDA4KQorI2RlZmluZSBHRU1fVVNFUl9JTyAgICAgICAgICAgICAoMHgwQykKKyNkZWZpbmUgR0VNX1RYX1NUQVRVUyAgICAgICAgICAgKDB4MTQpCisjZGVmaW5lIEdFTV9SWF9RUFRSICAgICAgICAgICAgICgweDE4KQorI2RlZmluZSBHRU1fVFhfUVBUUiAgICAgICAgICAgICAoMHgxQykKKyNkZWZpbmUgR0VNX1JYX1NUQVRVUyAgICAgICAgICAgKDB4MjApCisjZGVmaW5lIEdFTV9JUlFfU1RBVFVTICAgICAgICAgICgweDI0KQorI2RlZmluZSBHRU1fSVJRX0VOQUJMRSAgICAgICAgICAoMHgyOCkKKyNkZWZpbmUgR0VNX0lSUV9ESVNBQkxFICAgICAgICAgKDB4MkMpCisjZGVmaW5lIEdFTV9JUlFfTUFTSyAgICAgICAgICAgICgweDMwKQorI2RlZmluZSBHRU1fUEhZX01BTiAgICAgICAgICAgICAoMHgzNCkKKyNkZWZpbmUgR0VNX1JYX1BBVVNFX1RJTUUgICAgICAgKDB4MzgpCisjZGVmaW5lIEdFTV9UWF9QQVVTRV9RVUFOVCAgICAgICgweDNDKQorCisjZGVmaW5lIEdFTV9IQVNIX0JPVCAgICAgICAgICAgICgweDgwKQorI2RlZmluZSBHRU1fSEFTSF9UT1AgICAgICAgICAgICAoMHg4NCkKKyNkZWZpbmUgR0VNX0xBRERSMV9CT1QgICAgICAgICAgKDB4ODgpCisjZGVmaW5lIEdFTV9MQUREUjFfVE9QICAgICAgICAgICgweDhDKQorI2RlZmluZSBHRU1fTEFERFIyX0JPVCAgICAgICAgICAoMHg5MCkKKyNkZWZpbmUgR0VNX0xBRERSMl9UT1AgICAgICAgICAgKDB4OTQpCisjZGVmaW5lIEdFTV9MQUREUjNfQk9UICAgICAgICAgICgweDk4KQorI2RlZmluZSBHRU1fTEFERFIzX1RPUCAgICAgICAgICAoMHg5QykKKyNkZWZpbmUgR0VNX0xBRERSNF9CT1QgICAgICAgICAgKDB4QTApCisjZGVmaW5lIEdFTV9MQUREUjRfVE9QICAgICAgICAgICgweEE0KQorI2RlZmluZSBHRU1fSURfQ0hFQ0sxICAgICAgICAgICAoMHhBOCkKKyNkZWZpbmUgR0VNX0lEX0NIRUNLMiAgICAgICAgICAgKDB4QUMpCisjZGVmaW5lIEdFTV9JRF9DSEVDSzMgICAgICAgICAgICgweEIwKQorI2RlZmluZSBHRU1fSURfQ0hFQ0s0ICAgICAgICAgICAoMHhCNCkKKyNkZWZpbmUgR0VNX1JFVl9JRCAgICAgICAgICAgICAgKDB4RkMpCisKKyNkZWZpbmUgR0VNX09DVF9UWF9CT1QgICAgICAgICAgKDB4MTAwKQorI2RlZmluZSBHRU1fT0NUX1RYX1RPUCAgICAgICAgICAoMHgxMDQpCisjZGVmaW5lIEdFTV9TVEFUU19GUkFNRVNfVFggICAgICgweDEwOCkKKyNkZWZpbmUgR0VNX0JST0FEQ0FTVF9UWCAgICAgICAgKDB4MTBDKQorI2RlZmluZSBHRU1fTVVMVElDQVNUX1RYICAgICAgICAoMHgxMTApCisjZGVmaW5lIEdFTV9TVEFUU19QQVVTRV9UWCAgICAgICgweDExNCkKKyNkZWZpbmUgR0VNX0ZSQU1FNjRfVFggICAgICAgICAgKDB4MTE4KQorI2RlZmluZSBHRU1fRlJBTUU2NV9UWCAgICAgICAgICAoMHgxMUMpCisjZGVmaW5lIEdFTV9GUkFNRTEyOF9UWCAgICAgICAgICgweDEyMCkKKyNkZWZpbmUgR0VNX0ZSQU1FMjU2X1RYICAgICAgICAgKDB4MTI0KQorI2RlZmluZSBHRU1fRlJBTUU1MTJfVFggICAgICAgICAoMHgxMjgpCisjZGVmaW5lIEdFTV9GUkFNRTEwMjRfVFggICAgICAgICgweDEyQykKKyNkZWZpbmUgR0VNX0ZSQU1FMTUxOV9UWCAgICAgICAgKDB4MTMwKQorI2RlZmluZSBHRU1fU1RBVFNfVFhfVVJVTiAgICAgICAoMHgxMzQpCisjZGVmaW5lIEdFTV9TVEFUU19TSU5HTEVfQ09MICAgICgweDEzOCkKKyNkZWZpbmUgR0VNX1NUQVRTX01VTFRJX0NPTCAgICAgKDB4MTNDKQorI2RlZmluZSBHRU1fU1RBVFNfRVhDRVNTX0NPTCAgICAoMHgxNDApCisjZGVmaW5lIEdFTV9TVEFUU19MQVRFX0NPTCAgICAgICgweDE0NCkKKyNkZWZpbmUgR0VNX1NUQVRTX0RFRl9UWCAgICAgICAgKDB4MTQ4KQorI2RlZmluZSBHRU1fU1RBVFNfQ1JTX0VSUk9SUyAgICAoMHgxNEMpCisjZGVmaW5lIEdFTV9PQ1RfUlhfQk9UICAgICAgICAgICgweDE1MCkKKyNkZWZpbmUgR0VNX09DVF9SWF9UT1AgICAgICAgICAgKDB4MTU0KQorI2RlZmluZSBHRU1fU1RBVFNfRlJBTUVTX1JYICAgICAoMHgxNTgpCisjZGVmaW5lIEdFTV9CUk9BRENBU1RfUlggICAgICAgICgweDE1QykKKyNkZWZpbmUgR0VNX01VTFRJQ0FTVF9SWCAgICAgICAgKDB4MTYwKQorI2RlZmluZSBHRU1fU1RBVFNfUEFVU0VfUlggICAgICAoMHgxNjQpCisjZGVmaW5lIEdFTV9GUkFNRTY0X1JYICAgICAgICAgICgweDE2OCkKKyNkZWZpbmUgR0VNX0ZSQU1FNjVfUlggICAgICAgICAgKDB4MTZDKQorI2RlZmluZSBHRU1fRlJBTUUxMjhfUlggICAgICAgICAoMHgxNzApCisjZGVmaW5lIEdFTV9GUkFNRTI1Nl9SWCAgICAgICAgICgweDE3NCkKKyNkZWZpbmUgR0VNX0ZSQU1FNTEyX1JYICAgICAgICAgKDB4MTc4KQorI2RlZmluZSBHRU1fRlJBTUUxMDI0X1JYICAgICAgICAoMHgxN0MpCisjZGVmaW5lIEdFTV9GUkFNRTE1MTlfUlggICAgICAgICgweDE4MCkKKyNkZWZpbmUgR0VNX1NUQVRTX1VTSVpFX0ZSQU1FUyAgKDB4MTg0KQorI2RlZmluZSBHRU1fU1RBVFNfRVhDRVNTX0xFTiAgICAoMHgxODgpCisjZGVmaW5lIEdFTV9TVEFUU19KQUJCRVJTICAgICAgICgweDE4QykKKyNkZWZpbmUgR0VNX1NUQVRTX0ZDU19FUlJPUlMgICAgKDB4MTkwKQorI2RlZmluZSBHRU1fU1RBVFNfTEVOR1RIX0VSUk9SUyAoMHgxOTQpCisjZGVmaW5lIEdFTV9TVEFUU19SWF9TWU1fRVJSICAgICgweDE5OCkKKyNkZWZpbmUgR0VNX1NUQVRTX0FMSUdOX0VSUk9SUyAgKDB4MTlDKQorI2RlZmluZSBHRU1fU1RBVFNfUlhfUkVTX0VSUiAgICAoMHgxYTApCisjZGVmaW5lIEdFTV9TVEFUU19SWF9PUlVOICAgICAgICgweDFhNCkKKworI2RlZmluZSBHRU1fUkVHX1RPUCAgICAgICAgICAgICAoMHgyM0MpCisKKworLyogRGVmaW5lIHNvbWUgdHlwZXMgZm9yIHVzaW5nIHdpdGggdGhlIEhBTC4gIFRoZXNlIHR5cGVzIGNvcnJlc3BvbmQgdG8gdGhlCisgKiBtZW1vcnkgbWFwIGFuZCBwcm9ncmFtbWluZyBzdHJ1Y3R1cmUgb2YgdGhlIE1BQyBkZXZpY2UuCisgKiBBbGwgc3RydWN0dXJlcyBhcmUgJ3ZvbGF0aWxlJyB0byBpbmRpY2F0ZSB0aGV5IGNhbiBiZSBjaGFuZ2VkIGJ5IHNvbWUgbm9uLQorICogcHJvZ3JhbW1pbmcgbWVhbnMgLSBpLmUuIGJ5IHRoZSBoYXJkd2FyZSBpdHNlbGYuICBUaGlzIHByZXZlbnRzIHRoZSBjb21waWxlcgorICogZnJvbSBtYWtpbmcgZmFsc2UgYXNzdW1wdGlvbnMgb24gaG93IHRvIG9wdGltaXNlIHRoZSBjb2RlLiAgU29tZSBlbGVtZW50cworICogYXJlIGFsc28gZGVmaW5lZCBhcyAnY29uc3QnIHRvIGVuZm9yY2Ugc29tZSBjaGVja3Mgb24gdGhlIHByb2dyYW1tZXIuICBUaGVzZQorICogYXJlIG9ubHkgZm9yIHJlZ2lzdGVyIGZpZWxkcyB0aGF0IGNhbiBvbmx5IGJlIGNoYW5nZWQgYnkgdGhlIGhhcmR3YXJlIGFuZCBhcmUKKyAqIG5vdCB3cml0YWJsZS4KKyAqLworCisKK3N0cnVjdCBiZGVzYyB7CisJdm9sYXRpbGUgdTggKmJwdHI7CisJdm9sYXRpbGUgdTMyIGJjb250cm9sOworCXUzMiBkdW1teTE7CisJdTMyIGR1bW15MjsKK307CisKK3N0cnVjdCBmZGVzYyB7CisJLy8gSGFyZHdhcmUgbWFwcGVkIGZpZWxkcworCXZvaWQgKm5leHQ7CisJdm9sYXRpbGUgdTMyIHN5c3RlbTsKKwl2b2xhdGlsZSB1MzIgZnN0YXR1czsKKwl2b2xhdGlsZSB1MzIgZmNvbnRyb2w7CisJc3RydWN0IGJkZXNjIGJkZXNjOworfTsKKworc3RydWN0IGdlbWFjX2luZm9fc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgYmFzZWFkZHI7CisJdW5zaWduZWQgaW50IGlkbWFfYmFzZWFkZHI7CisJdW5zaWduZWQgaW50IHBoeWFkZHI7CisJdW5zaWduZWQgaW50IGdlbWFjY29uZmlnOworCXUzMiBtb2RlOworCXUzMiBwaHlmbGFnczsJCS8vIHRvIGluZGljYXRlIGlmIGdpZ2FiaXQgc3VwcG9ydGVkIG9yIG5vdAorCXVuc2lnbmVkIGludCBwaHlyZWdpZHg7Cit9OworCisvKiBUaGlzIGlzIGEgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSBwYXNzZWQgYW5kIHVzZWQgZm9yIGFsbCBIQUwgb3BlcmF0aW9ucywgaXQKKyAqIGNvbnNpc3RzIG9mIHBvaW50ZXJzIHRvIHRoZSB2YXJpb3VzIE1BQyBzdHJ1Y3R1cmVzIHN1Y2ggYXMgdGhlIE1BQyByZWdpc3RlcgorICogYmxvY2sgYW5kIHRoZSBmaXJzdCBkZXNjcmlwdG9yIGVsZW1lbnQgZm9yIHRoZSByeCBhbmQgdHggYnVmZmVyIHF1ZXVlcy4KKyAqIE90aGVyIGludGVybmFsIHZhcmlhYmxlcyBkZWNsYXJlZCBmb3IgdXNlIGluIGZ1bmN0aW9uIGNhbGxzIGFuZCB0byBrZWVwIHRyYWNrCisgKiBvZiB3aGVyZSB0aGluZ3MgYXJlLgorICovCitzdHJ1Y3QgZ2VtYWNfZGV2IHsKKwl2b2lkICpyZWdpc3RlcnM7CS8qIFBvaW50ZXIgdG8gdGhlIE1BQyBhZGRyZXNzIHNwYWNlLiAqLworCXZvaWQgKnBoeXJlZ2lzdGVyczsJLyogUG9pbnRlciB0byB0aGUgTUFDIGFkZHJlc3Mgc3BhY2UgY29udHJvbGxpbmcgdGhlIHBoeSAqLworCXZvaWQgKmlkbWFfYmFzZWFkZHI7CisJdm9pZCAqYmFzZWFkZHI7CisJc3RydWN0IHBoeV9pbmZvICpwaHlpbmZvOworCXUzMiBwaHlhZGRyOworCXUzMiBtb2RlOworCXUzMiBwaHlmbGFnczsKKwlzdHJ1Y3QgZXRoX2RldmljZSAqZGV2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NvbWNlcnRvX2dlbS5jIGIvZHJpdmVycy9jb21jZXJ0b19nZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2EwOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jb21jZXJ0b19nZW0uYwpAQCAtMCwwICsxLDc5OSBAQAorLyoKKyAqIGNvbWNlcnRvX2dlbS5jCisgKiBNaW5kc3BlZWQgQ29tY2VydG8gR0VNQUMgZHJpdmVyCisgKgorICogRnJvbSBUU0VDLmMgCisgKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZQorICogdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBpbmNvcnBvcmF0ZWQKKyAqIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKgorICogQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiAoQykgQ29weXJpZ2h0IDIwMDMsIE1vdG9yb2xhLCBJbmMuCisgKiBhdXRob3IgQW5keSBGbGVtaW5nCisgKgorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxuZXQuaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8bWlpcGh5Lmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19HRU1BQykKKyNpbmNsdWRlICJjb21jZXJ0b19nZW0uaCIKKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK3N0YXRpYyBzdHJ1Y3QgZ2VtYWNfaW5mb19zdHJ1Y3QgZ2VtYWNfaW5mb1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzkwMCkgfHwgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorCXtHRU1BQ19CQVNFQUREUiwgTU1HRU0wX1NUQVJULCBHRU1BQzBfUEhZX0FERFIsIEdFTUFDMF9DT05GSUcsIEdFTUFDMF9NT0RFLCBHRU1BQzBfUEhZX0ZMQUdTLCBHRU1BQzBfUEhZSURYfSwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMDApCisJe0dFTUFDX0JBU0VBRERSLCBHRU1BQzBfUEhZX0FERFIsIEdFTUFDMF9DT05GSUcsIEdFTUFDMF9NT0RFLCBHRU1BQzBfUEhZX0ZMQUdTLCBHRU1BQzBfUEhZSURYfSwKKyNlbHNlCisJezAsIDAsIDB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorCXtHRU1BQzFfQkFTRUFERFIsIE1NR0VNMV9TVEFSVCwgR0VNQUMxX1BIWV9BRERSLCBHRU1BQzFfQ09ORklHLCBHRU1BQzFfTU9ERSwgR0VNQUMxX1BIWV9GTEFHUywgR0VNQUMxX1BIWUlEWH0sCisjZWxpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDAwKQorCXtHRU1BQzFfQkFTRUFERFIsIEdFTUFDMV9QSFlfQUREUiwgR0VNQUMxX0NPTkZJRywgR0VNQUMxX01PREUsIEdFTUFDMV9QSFlfRkxBR1MsIEdFTUFDMV9QSFlJRFh9LAorI2Vsc2UKKwl7MCwgMCwgMH0sCisjZW5kaWYKK307CisKKyNkZWZpbmUgTUFYX0dFTUFDUwkyCisKK3N0YXRpYyBzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hY19saXN0W01BWF9HRU1BQ1NdOworCisjZGVmaW5lIE5VTV9SWF9ERVNDCQkxNgorI2RlZmluZSBNQVhfUlhfQlVGRl9TSVpFCTIwNDgKKworc3RhdGljIHUzMiByeF9uZXh0OworCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorc3RhdGljIHU4IHJ4X3JpbmdfZGF0YV9idWZmW05VTV9SWF9ERVNDICogTUFYX1JYX0JVRkZfU0laRV0gX19hdHRyaWJ1dGUoKGFsaWduZWQoNCkpKTsKK3N0YXRpYyBzdHJ1Y3QgZmRlc2MgcnhfcmluZ1tOVU1fUlhfREVTQ10gX19hdHRyaWJ1dGUoKGFsaWduZWQoMTYpKSk7CitzdGF0aWMgc3RydWN0IGZkZXNjIHR4X2ZkZXNjIF9fYXR0cmlidXRlKChhbGlnbmVkKDE2KSkpOworI2Vsc2UKK3N0YXRpYyB1OCByeF9yaW5nX2RhdGFfYnVmZltOVU1fUlhfREVTQyAqIE1BWF9SWF9CVUZGX1NJWkVdIF9fYXR0cmlidXRlKChhbGlnbmVkKDE2KSkpOworc3RhdGljIHN0cnVjdCByeF9kZXNjIHJ4X3JpbmdbTlVNX1JYX0RFU0NdIF9fYXR0cmlidXRlKChhbGlnbmVkKDE2KSkpOworc3RhdGljIHN0cnVjdCB0eF9kZXNjIHR4X2ZkZXNjWzJdIF9fYXR0cmlidXRlKChhbGlnbmVkKDgpKSk7CisjZW5kaWYKKworLyogSW5pdGlhbGl6ZSBkZXZpY2Ugc3RydWN0dXJlLiBSZXR1cm5zIHN1Y2Nlc3MgaWYgUEhZCisgKiBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQgKGkuZS4gaWYgaXQgcmVjb2duaXplcyB0aGUgUEhZKQorICovCisKK3N0YXRpYyB2b2lkIGRlZmF1bHRfc3BlZWRfZHVwbGV4KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCBpbnQgKnNwZWVkLCBpbnQgKmR1cGxleCkKK3sKKwlzd2l0Y2ggKGdlbWFjLT5tb2RlICYgR0VNX0NPTkZfU1BFRURfTUFTSykgeworCWNhc2UgR0VNX0NPTkZfU1BFRURfR0VNXzEwTToKKwkJKnNwZWVkID0gXzEwQkFTRVQ7CisJCWJyZWFrOworCisJY2FzZSBHRU1fQ09ORl9TUEVFRF9HRU1fMTAwTToKKwkJKnNwZWVkID0gXzEwMEJBU0VUOworCQlicmVhazsKKworCWNhc2UgR0VNX0NPTkZfU1BFRURfR0VNXzFHOgorCWRlZmF1bHQ6CisJCSpzcGVlZCA9IF8xMDAwQkFTRVQ7CisJCWJyZWFrOworCX0KKworCWlmIChnZW1hYy0+bW9kZSAmIEdFTV9DT05GX0RVUExFWF9HRU1fRlVMTCkKKwkJKmR1cGxleCA9IEZVTEw7CisJZWxzZQorCQkqZHVwbGV4ID0gSEFMRjsKK30KKworc3RhdGljIHZvaWQgZ2VtdF9yZWluaXQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIGludCBzcGVlZCwgaW50IGR1cGxleCkKK3sKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBfMTAwMEJBU0VUOgorCQlwcmludGYoIlBIWSAxMDAwTWJpdCAiKTsKKwkJZ2VtX3NldF9zcGVlZChnZW1hYywgU1BFRURfMTAwME0pOworCQlicmVhazsKKworCWNhc2UgXzEwMEJBU0VUOgorCQlwcmludGYoIlBIWSAxMDBNYml0ICIpOworCQlnZW1fc2V0X3NwZWVkKGdlbWFjLCBTUEVFRF8xMDBNKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCWNhc2UgXzEwQkFTRVQ6CisJCXByaW50ZigiUEhZIDEwTWJpdCAiKTsKKwkJZ2VtX3NldF9zcGVlZChnZW1hYywgU1BFRURfMTBNKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChkdXBsZXgpIHsKKwljYXNlIEZVTEw6CisJCXByaW50ZigiRkRcbiIpOworCQlnZW1fZnVsbF9kdXBsZXgoZ2VtYWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJY2FzZSBIQUxGOgorCQlwcmludGYoIkhEXG4iKTsKKwkJZ2VtX2hhbGZfZHVwbGV4KGdlbWFjKTsKKwkJYnJlYWs7CisJfQorfQorCisjaWYgZGVmaW5lZChDT05GSUdfTUlJKSB8fCAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9NSUkpCisKK3N0YXRpYyBpbnQgZ2VtdF9QSFlfdGltZW91dChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgaW50IHRpbWVvdXQpCit7CisJd2hpbGUgKCFnZW1fcGh5X21hbl9pZGxlKGdlbWFjKSkgeworCisJCWlmICh0aW1lb3V0LS0gPD0gMCkgeworCQkJcHJpbnRmKCJQSFkgTURJTyByZWFkL3dyaXRlIHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJdWRlbGF5KDEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdlbWFjX2RldiAqZ2V0X2dlbWFjKGNoYXIgKmRldm5hbWUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0dFTUFDUzsgaSsrKSB7CisJCWlmICghc3RyY21wKGdlbWFjX2xpc3RbaV0tPmRldi0+bmFtZSwgZGV2bmFtZSkpCisJCQlyZXR1cm4gZ2VtYWNfbGlzdFtpXTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBjb21jZXJ0b19taWlwaHlfd3JpdGUoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgc2hvcnQgdmFsdWUpCit7CisJc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMgPSBnZXRfZ2VtYWMoZGV2bmFtZSk7CisKKwlpZiAoIWdlbWFjKSB7CisJCXByaW50ZigiVW5rbm93biBkZXZpY2UgJXNcbiIsIGRldm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChhZGRyID4gMzEpIHx8IChyZWcgPiAzMSkpCisJCXJldHVybiAtMTsKKworCWdlbV9waHlfbWFuX3dyKGdlbWFjLCBhZGRyLCByZWcsIHZhbHVlKTsKKwlpZiAoZ2VtdF9QSFlfdGltZW91dChnZW1hYywgTURJT19USU1FT1VUKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tY2VydG9fbWlpcGh5X3JlYWQoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgc2hvcnQgKnZhbHVlKQoreworCXN0cnVjdCBnZW1hY19kZXYgKmdlbWFjID0gZ2V0X2dlbWFjKGRldm5hbWUpOworCisJaWYgKCFnZW1hYykgeworCQlwcmludGYoIlVua25vd24gZGV2aWNlICVzXG4iLCBkZXZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgoYWRkciA+IDMxKSB8fCAocmVnID4gMzEpKQorCQlyZXR1cm4gLTE7CisKKwlnZW1fcGh5X21hbl9yZChnZW1hYywgYWRkciwgcmVnKTsKKwlpZiAoZ2VtdF9QSFlfdGltZW91dChnZW1hYywgTURJT19USU1FT1VUKSkKKwkJcmV0dXJuIC0xOworCisJKnZhbHVlID0gZ2VtX3BoeV9tYW5fZGF0YShnZW1hYyk7CisKKwlyZXR1cm4gMDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIE5BTUU6IGdlbXRfY29uZmlnX1BIWQorICogCisgKiBQQVJBTUVURVJTOiAgIAorICogICBuZXRfZGV2aWNlICpkZXYgICAgLUlOT1VUCisgKgorICogREVTQ1JJUFRJT04gICAKKyAqICAgUmVjb25maWd1cmUgUEhZCisgKiAgIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdXAgdGhlIFBIWSBkZXZpY2UuICBUaGlzIGlzIGEgcmVxdWlyZWQgZXh0ZXJuYWwKKyAqICAgc3VwcG9ydCByb3V0aW5lLgorICogICBUaGUgcGFyYW1ldGVycyBzZXQgdXAgdGhlIG1heGltdW0gZGVzaXJlZCBhZHZlcnRpc2VkIGFiaWxpdHkgZm9yIHRoZSAKKyAqICAgZGV2aWNlLgorICogICBUT0RPIC0gcmVhZCBiYWNrIG5lZ290aWF0ZWQgYWJpbGl0eSBhbmQgc2V0IE1BQyBhcHByb3ByaWF0ZWx5LgorICogICAgICAgICAgZHVwbGV4IGNvbmZpZ3VyYXRpb24gdG8gYmUgZG9uZS4KKyAqCisgKiBBU1NVTVBUSU9OUworICogICBOb25lCisgKgorICogU0lERSBFRkZFQ1RTIC8gU1RBVElDIERBVEEgVVNFCisgKiAgIE5vbmUKKyAqCisgKiBSRVRVUk5TOiAgICAgIAorICogICBpbnQgICAgICAgIDAgICAgICAgLXN1Y2Nlc3NmdWwKKyAqICAgICAgICAgICAgICA8MCAgICAgIC1mYWlsZWQKKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgaW50IGdlbXRfY29uZmlnX1BIWShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgaW50IHBoeV9hZGRyLCBNQUNfU1BFRUQgc3BlZWQsIHU4IGR1cGxleCkKK3sKKwl1bnNpZ25lZCBzaG9ydCBhbmFyLCBibWNyLCBidGNyOworCisJaWYgKGdlbWFjLT5waHlmbGFncyAmIEdFTUFDX004OEUxMTExX1BIWV9SR01JSV9BRERfREVMQVkpIHsKKwkJdW5zaWduZWQgc2hvcnQgdG1wOworCisJCWlmICghbWlpcGh5X3JlYWQoZ2VtYWMtPmRldi0+bmFtZSwgcGh5X2FkZHIsIDIwLCAmdG1wKSkgeworCQkJdG1wIHw9IDB4ODI7CisJCQltaWlwaHlfd3JpdGUoZ2VtYWMtPmRldi0+bmFtZSwgcGh5X2FkZHIsIDIwLCB0bXApOworCQl9CisJfQorCisJaWYgKG1paXBoeV9yZXNldChnZW1hYy0+ZGV2LT5uYW1lLCBnZW1hYy0+cGh5YWRkcikpCisJCXJldHVybiAtMTsKKworCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIF8xMEJBU0VUOgorCQlpZiAoZHVwbGV4ID09IEZVTEwpIHsKKwkJCWFuYXIgPSBQSFlfQU5BUl8xMEZEIHwgUEhZX0FOQVJfMTA7CisJCQlidGNyID0gMHgwOworCQkJYm1jciA9IFBIWV9CTUNSX0RQTFggfCBQSFlfQk1DUl8xMF9NQlBTOworCQl9IGVsc2UgeworCQkJYW5hciA9IFBIWV9BTkFSXzEwOworCQkJYnRjciA9IDB4MDsKKwkJCWJtY3IgPSBQSFlfQk1DUl8xMF9NQlBTOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIF8xMDBCQVNFVDoKKwlkZWZhdWx0OgorCQlpZiAoZHVwbGV4ID09IEZVTEwpIHsKKwkJCWFuYXIgPSBQSFlfQU5BUl9UWEZEIHwgUEhZX0FOQVJfVFggfCBQSFlfQU5BUl8xMEZEIHwgUEhZX0FOQVJfMTA7CisJCQlidGNyID0gMHgwOworCQkJYm1jciA9IFBIWV9CTUNSX0RQTFggfCBQSFlfQk1DUl8xMDBfTUJQUzsKKwkJfSBlbHNlIHsKKwkJCWFuYXIgPSBQSFlfQU5BUl9UWCB8IFBIWV9BTkFSXzEwOworCQkJYnRjciA9IDB4MDsKKwkJCWJtY3IgPSBQSFlfQk1DUl8xMDBfTUJQUzsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBfMTAwMEJBU0VUOgorCQlpZiAoZHVwbGV4ID09IEZVTEwpIHsKKwkJCWFuYXIgPSBQSFlfQU5BUl9UWEZEIHwgUEhZX0FOQVJfVFggfCBQSFlfQU5BUl8xMEZEIHwgUEhZX0FOQVJfMTA7CisJCQlidGNyID0gUEhZXzEwMDBCVENSXzEwMDBGRCB8IFBIWV8xMDAwQlRDUl8xMDAwSEQ7CisJCQlibWNyID0gUEhZX0JNQ1JfRFBMWCB8IFBIWV9CTUNSXzEwMDBfTUJQUzsKKwkJfSBlbHNlIHsKKwkJCWFuYXIgPSBQSFlfQU5BUl9UWCB8IFBIWV9BTkFSXzEwOworCQkJYnRjciA9IFBIWV8xMDAwQlRDUl8xMDAwSEQ7CisJCQlibWNyID0gUEhZX0JNQ1JfMTAwMF9NQlBTOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJaWYgKGdlbWFjLT5waHlmbGFncyAmIEdFTUFDX1BIWV9BVVRPTkVHKSB7CisJCWlmIChtaWlwaHlfd3JpdGUoZ2VtYWMtPmRldi0+bmFtZSwgcGh5X2FkZHIsIFBIWV9BTkFSLCBhbmFyIHwgUEhZX0FOQVJfUFNCXzgwMl8zKSkKKwkJCXJldHVybiAtMTsKKworCQlpZiAobWlpcGh5X3N1cHBvcnRzXzEwMDBiYXNlX3QoZ2VtYWMtPmRldi0+bmFtZSwgcGh5X2FkZHIpKSB7CisJCQlpZiAobWlpcGh5X3dyaXRlKGdlbWFjLT5kZXYtPm5hbWUsIHBoeV9hZGRyLCBQSFlfMTAwMEJUQ1IsIGJ0Y3IpKQorCQkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChtaWlwaHlfd3JpdGUoZ2VtYWMtPmRldi0+bmFtZSwgcGh5X2FkZHIsIFBIWV9CTUNSLCBQSFlfQk1DUl9BVVRPTiB8IFBIWV9CTUNSX1JTVF9ORUcgfCBibWNyKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlpZiAobWlpcGh5X3dyaXRlKGdlbWFjLT5kZXYtPm5hbWUsIHBoeV9hZGRyLCBQSFlfQk1DUiwgYm1jcikpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19NSUkpIHx8IChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01JSSkgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIE5BTUU6IGdlbXRfcmVzZXRfZ2VtCisgKiAKKyAqIFBBUkFNRVRFUlM6ICAgCisgKiAgIG5ldF9kZXZpY2UgKmRldiAgICAtSU5PVVQKKyAqCisgKiBERVNDUklQVElPTiAgIAorICogICBSZXNldCBNQUMgaGFyZHdhcmUKKyAqICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IE1BQyBoYXJkd2FyZSBhZnRlciBzdG9wIHRoZSBNQUMgZm9yIGJvdGggCisgKiAgIHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uLgorICoKKyAqIEFTU1VNUFRJT05TCisgKiAgIE5vbmUKKyAqCisgKiBTSURFIEVGRkVDVFMgLyBTVEFUSUMgREFUQSBVU0UKKyAqICAgTm9uZQorICoKKyAqIFJFVFVSTlM6ICAgICAgCisgKiAgIE5vbmUKKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgdm9pZCBnZW10X3Jlc2V0X2dlbShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlnZW1fYWJvcnRfdHgoZ2VtYWMpOworCWdlbV9kaXNhYmxlX3J4KGdlbWFjKTsKKworCWdlbV9tYXNrX2lycShnZW1hYywgR0VNX0lSUV9BTEwpOworCWdlbV9nZXRfaXJxX3N0YXQoZ2VtYWMpOworCisJaWYgKGdlbV9yZXNldChnZW1hYykgIT0gMCkKKwkJcHJpbnRmKCJGYWlsZWQgdG8gcmVzZXQgZGV2aWNlIVxuIik7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDApCitzdGF0aWMgdm9pZCBnZW1hY19yeF9yaW5nX2luaXQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJdTMyIGk7CisJdTggKnBVOCA9IHJ4X3JpbmdfZGF0YV9idWZmOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ERVNDIC0gMTsgaSsrKSB7CisJCXJ4X3JpbmdbaV0ubmV4dCA9ICh2b2lkICopKF9fY3B1X3RvX2xlMzIoKHUzMikmKHJ4X3JpbmdbaSArIDFdKSkpOworCQlyeF9yaW5nW2ldLnN5c3RlbSA9IF9fY3B1X3RvX2xlMzIoaSk7CisJCXJ4X3JpbmdbaV0uZnN0YXR1cyA9IF9fY3B1X3RvX2xlMzIoMCk7CisJCXJ4X3JpbmdbaV0uZmNvbnRyb2wgPSBfX2NwdV90b19sZTMyKElETUFfRkNPTlRST0xfRlJFQURZKTsKKwkJcnhfcmluZ1tpXS5iZGVzYy5icHRyID0gKHZvbGF0aWxlIHU4ICopKF9fY3B1X3RvX2xlMzIoKHUzMilwVTgpKTsKKwkJcnhfcmluZ1tpXS5iZGVzYy5iY29udHJvbCA9IF9fY3B1X3RvX2xlMzIoMCk7CisJCXBVOCArPSBNQVhfUlhfQlVGRl9TSVpFOworCX0KKworCXJ4X3JpbmdbaV0ubmV4dCA9ICh2b2lkICopKF9fY3B1X3RvX2xlMzIoKHUzMikmKHJ4X3JpbmdbMF0pKSk7CisJcnhfcmluZ1tpXS5zeXN0ZW0gPSBfX2NwdV90b19sZTMyKGkpOworCXJ4X3JpbmdbaV0uZnN0YXR1cyA9IF9fY3B1X3RvX2xlMzIoMCk7CisJcnhfcmluZ1tpXS5mY29udHJvbCA9IF9fY3B1X3RvX2xlMzIoMCk7CisJcnhfcmluZ1tpXS5iZGVzYy5icHRyID0gKHZvbGF0aWxlIHU4ICopKF9fY3B1X3RvX2xlMzIoKHUzMilwVTgpKTsKKwlyeF9yaW5nW2ldLmJkZXNjLmJjb250cm9sID0gX19jcHVfdG9fbGUzMigwKTsKKworCXJ4X25leHQgPSAwOworfQorCitzdGF0aWMgaW50IGdlbWFjX3NlbmQoc3RydWN0IGV0aF9kZXZpY2UgKmRldiwgdm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBnZW1hY19kZXYgKmdlbWFjID0gKHN0cnVjdCBnZW1hY19kZXYgKilkZXYtPnByaXY7CisJaW50IGk7CisKKwlpZiAobGVuZ3RoIDw9IDApIHsKKwkJcHJpbnRmKCJDb21jZXJ0b19FbWFjOiBiYWQgcGFja2V0IHNpemU6ICVkXG4iLCBsZW5ndGgpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwltZW1zZXQoJnR4X2ZkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGZkZXNjKSk7CisKKwkvLyBidWlsZCB0aGUgdHggZnJhbWUgZGVzY3JpcHRvciBoZXJlCisJdHhfZmRlc2MuZmNvbnRyb2wgPSBfX2NwdV90b19sZTMyKElETUFfRkNPTlRST0xfRlJFQURZIHwgSURNQV9GQ09OVFJPTF9GTEFTVCk7CisJdHhfZmRlc2MuZnN0YXR1cyA9IF9fY3B1X3RvX2xlMzIoMCk7CisJdHhfZmRlc2MuYmRlc2MuYnB0ciA9ICh2b2xhdGlsZSB1OCAqKShfX2NwdV90b19sZTMyKCh1MzIpKCh1OCAqKXBhY2tldCkpKTsKKwl0eF9mZGVzYy5iZGVzYy5iY29udHJvbCA9IF9fY3B1X3RvX2xlMzIobGVuZ3RoIHwgSURNQV9CQ09OVFJPTF9CTEFTVCk7CisKKwkvLyBDaGVjayBpZiBETUEgU3RvcHBlZAorCWlmICghKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5pZG1hX2Jhc2VhZGRyICsgTU1FTV9TVEFSVCkgJiBfX2NwdV90b19sZTMyKElETUFfU1RBUlQpKSkgeworCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+aWRtYV9iYXNlYWRkciArIE1NRU1fSEVBRCkgPSBfX2NwdV90b19sZTMyKCh1MzIpICZ0eF9mZGVzYyk7CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5pZG1hX2Jhc2VhZGRyICsgTU1FTV9TVEFSVCkgfD0gX19jcHVfdG9fbGUzMihJRE1BX1NUQVJUKTsKKwl9IGVsc2UgeworCQlwcmludGYoIkVtYWM6IHR4IEVETUEgYnVzeSFcbiIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlpID0gMDsKKwl3aGlsZSAoKHR4X2ZkZXNjLmZzdGF0dXMgJiBfX2NwdV90b19sZTMyKElETUFfRlNUQVRVU19GUkFNRV9ET05FX01BU0spKSA9PSAwKSB7CisJCXVkZWxheSgxMDApOworCQlpKys7CisJCWlmIChpID09IDUwMDAwKSB7CisJCQlwcmludGYoIkVtYWM6IHR4IHRpbWVkIG91dCFcbiIpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9CisKKwlpZiAoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmlkbWFfYmFzZWFkZHIgKyBNTUVNX1NUQVJUKSAmIF9fY3B1X3RvX2xlMzIoSURNQV9TVEFSVCkpIHsKKwkJcHJpbnRmKCJFcnJvciEgRW1hYzogdHggZGlkIG5vdCBzdG9wIGFmdGVyIHNlbmRpbmcgYSBwYWNrZXQhXG4iKTsKKwl9CisKKwlyZXR1cm4gKGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQgZ2VtYWNfcmVjdihzdHJ1Y3QgZXRoX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnZW1hY19kZXYgKmdlbWFjID0gKHN0cnVjdCBnZW1hY19kZXYgKilkZXYtPnByaXY7CisJaW50IHJ4X3ByZXY7CisJaW50IGxlbmd0aDsKKwlpbnQgdG90YWxfbGVuZ3RoID0gMDsKKworCS8vIGxvb3AgdGhydSByeCBGRGVzY3MKKwl3aGlsZSAoMSkgeworCQlpZiAoKHJ4X3JpbmdbcnhfbmV4dF0uZnN0YXR1cyAmIF9fY3B1X3RvX2xlMzIoSURNQV9GU1RBVFVTX0ZSQU1FX0RPTkVfTUFTSykpID09IDApCisJCQlicmVhazsKKworCQkvLyBtYXJrIHJ4X25leHQgbm90IHVzYWJsZQorCQlyeF9yaW5nW3J4X25leHRdLmZjb250cm9sID0gX19jcHVfdG9fbGUzMigwKTsKKworCQlsZW5ndGggPSBfX2xlMzJfdG9fY3B1KHJ4X3JpbmdbcnhfbmV4dF0uYmRlc2MuYmNvbnRyb2wpICYgMHgwMDAwZmZmZjsKKwkJaWYgKGxlbmd0aCA+IE1BWF9SWF9CVUZGX1NJWkUpIHsKKwkJCXByaW50ZigiQ29tY2VydG9fRW1hYzogZnJhbWUgdG9vIGJpZyAoJWQgYnl0ZXMpIVxuIiwgbGVuZ3RoKTsKKwkJCWxlbmd0aCA9IE1BWF9SWF9CVUZGX1NJWkU7CisJCX0KKworCQkvLyBQYXNzIHRoZSBwYWNrZXQgdXAgdG8gdGhlIHByb3RvY29sIGxheWVycy4KKyAgICAgICAgICAgICAgICBOZXRSZWNlaXZlKCh2b2xhdGlsZSB1Y2hhciAqKShfX2xlMzJfdG9fY3B1KCh1MzIpKHJ4X3JpbmdbcnhfbmV4dF0uYmRlc2MuYnB0cikpKSwgbGVuZ3RoKTsKKwkJdG90YWxfbGVuZ3RoICs9IGxlbmd0aDsKKworCQkvLyByeF9wcmV2IGNhbiBiZSB1c2VkIG5vdworCQlpZiAocnhfbmV4dCA9PSAwKQorCQkJcnhfcHJldiA9IE5VTV9SWF9ERVNDIC0gMTsKKwkJZWxzZQorCQkJcnhfcHJldiA9IHJ4X25leHQgLSAxOworCisJCXJ4X3JpbmdbcnhfcHJldl0uZnN0YXR1cyA9IF9fY3B1X3RvX2xlMzIoMCk7CisJCXJ4X3JpbmdbcnhfcHJldl0uZmNvbnRyb2wgPSBfX2NwdV90b19sZTMyKElETUFfRkNPTlRST0xfRlJFQURZKTsKKworCQlyeF9uZXh0Kys7CisJCWlmIChyeF9uZXh0ID09IE5VTV9SWF9ERVNDKQorCQkJcnhfbmV4dCA9IDA7CisJfQorCisJLy8gQ2hlY2sgaWYgRE1BIFN0b3BwZWQKKwkvLyBpZiBSWCBpcyBzdG9wcGVkLCByZXN0YXJ0CisJaWYgKCEoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmlkbWFfYmFzZWFkZHIgKyBFTU1NX1NUQVJUKSAmIF9fY3B1X3RvX2xlMzIoSURNQV9TVEFSVCkpKSB7CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5pZG1hX2Jhc2VhZGRyICsgRU1NTV9IRUFEKSA9IF9fY3B1X3RvX2xlMzIoKHUzMikgKCYocnhfcmluZ1tyeF9uZXh0XSkpKTsKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmlkbWFfYmFzZWFkZHIgKyBFTU1NX1NUQVJUKSB8PSBfX2NwdV90b19sZTMyKElETUFfU1RBUlQpOworCX0KKworCXJldHVybiAodG90YWxfbGVuZ3RoKTsKK30KKworLyogU3RvcCB0aGUgaW50ZXJmYWNlICovCitzdGF0aWMgdm9pZCBnZW1hY19oYWx0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMgPSAoc3RydWN0IGdlbWFjX2RldiAqKWRldi0+cHJpdjsKKworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5pZG1hX2Jhc2VhZGRyICsgTU1FTV9TT0ZUX1JFU0VUKSA9IF9fY3B1X3RvX2xlMzIoMSk7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmlkbWFfYmFzZWFkZHIgKyBFTU1NX1NPRlRfUkVTRVQpID0gX19jcHVfdG9fbGUzMigxKTsKKworCWdlbV9zdG9wX3R4KGdlbWFjKTsKKwlnZW1fZGlzYWJsZV9yeChnZW1hYyk7Cit9CisKKyNlbHNlCitzdGF0aWMgdm9pZCBnZW1hY19yeF9yaW5nX2luaXQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJdTggKnBVODsKKwlpbnQgaTsKKworLy8JcHJpbnRmKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltZW1zZXQocnhfcmluZywgMCwgTlVNX1JYX0RFU0MgKiBzaXplb2Yoc3RydWN0IHJ4X2Rlc2MpKTsKKwlwVTggPSByeF9yaW5nX2RhdGFfYnVmZjsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfREVTQyAtIDE7IGkrKykgeworCQlyeF9yaW5nW2ldLmRhdGEgPSAodm9sYXRpbGUgdTggKikoX19jcHVfdG9fbGUzMigodTMyKXBVOCkpOworCQlwVTggKz0gTUFYX1JYX0JVRkZfU0laRTsKKwl9CisKKwlyeF9yaW5nW2ldLmRhdGEgPSAodm9sYXRpbGUgdTggKikoX19jcHVfdG9fbGUzMigodTMyKXBVOCkpOworCXJ4X3JpbmdbaV0uc3RhdHVzIHw9IF9fY3B1X3RvX2xlMzIoR0VNUlhfV1JBUCk7CS8vIGxhc3QgZGVzY3JpcHRvciBpbiB0aGUgbGlzdAorCXJ4X25leHQgPSAwOworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9JUCArIEdFTV9SWF9RUFRSKSA9IF9fY3B1X3RvX2xlMzIoKHUzMilyeF9yaW5nKTsKK30KKworc3RhdGljIGludCBnZW1hY19zZW5kKHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyA9IChzdHJ1Y3QgZ2VtYWNfZGV2ICopZGV2LT5wcml2OworCWludCBpLCByYyA9IC0xOworCisJaWYgKGxlbmd0aCA8PSAwKSB7CisJCXByaW50ZigiQ29tY2VydG9fRW1hYzogYmFkIHBhY2tldCBzaXplOiAlZFxuIiwgbGVuZ3RoKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLy8gYnVpbGQgdGhlIHR4IGZyYW1lIGRlc2NyaXB0b3IgaGVyZQorCW1lbXNldCgmdHhfZmRlc2MsIDAsIDIgKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpKTsKKworCXR4X2ZkZXNjWzBdLmN0bCB8PSBfX2NwdV90b19sZTMyKFRYX0RFU0NfV09SRDFfTEFTVCB8IFRYX0RFU0NfV09SRDFfRkNTKTsKKwl0eF9mZGVzY1swXS5kYXRhID0gKHZvbGF0aWxlIHU4ICopKF9fY3B1X3RvX2xlMzIoKHUzMilwYWNrZXQpKTsKKwl0eF9mZGVzY1swXS5jdGwgfD0gX19jcHVfdG9fbGUzMihsZW5ndGggJiBUWF9ERVNDX1dPUkQxX0xFR1RIX01BU0spOworCXR4X2ZkZXNjWzFdLmN0bCB8PSBfX2NwdV90b19sZTMyKFRYX0RFU0NfV09SRDFfV1JBUCB8IFRYX0RFU0NfV09SRDFfVVNFRCk7CisKKwkvLyBqdXN0IGVuYWJsZSBxdWV1ZTAsIGxldCB0aGUgb3RoZXIgcXVldWVzIHVuaW5pdGlhbGl6ZWQKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fSVAgKyBHRU1fUVVFVUVfQkFTRTApID0gX19jcHVfdG9fbGUzMigodTMyKSZ0eF9mZGVzY1swXSk7CisKKwlnZW1fc3RhcnRfdHgoZ2VtYWMpOworCS8vIE5vdGlmeSBzY2hlZHVsZXIKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fU0NIX1BLVF9RVUVVRUQpID0gX19jcHVfdG9fbGUzMigodTMyKSBsZW5ndGgpOworCisJaSA9IDA7CisJd2hpbGUgKCh0eF9mZGVzY1swXS5jdGwgJiBfX2NwdV90b19sZTMyKFRYX0RFU0NfV09SRDFfVVNFRCkpID09IDApIHsKKwkJdWRlbGF5KDEwMCk7CisJCWkrKzsKKwkJaWYgKGkgPT0gNTAwMDApIHsKKwkJCXByaW50ZigiRW1hYzogdHggdGltZWQgb3V0IVxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJjID0gbGVuZ3RoOworLy8gICAgICBwcmludGYoImdlbWFjX3NlbmQgZG9uZSBcbiIpOworb3V0OgorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGdlbWFjX3JlY3Yoc3RydWN0IGV0aF9kZXZpY2UgKmRldikKK3sKKwlpbnQgbGVuZ3RoID0gMDsKKwlpbnQgdG90YWxfbGVuZ3RoID0gMDsKKwl1MzIgcnhfc3RhdHVzOworCXUzMiByeF9kYXRhOworCXUzMiByeF9leHRzdGF0dXM7CisKKwkvLyBsb29wIHRocnUgcnggRkRlc2NzCisJd2hpbGUgKDEpIHsKKworCQlyeF9leHRzdGF0dXMgPSByeF9yaW5nW3J4X25leHRdLmV4dHN0YXR1czsKKwkJaWYgKCgocnhfZXh0c3RhdHVzICYgX19jcHVfdG9fbGUzMihHRU1SWF9PV04pKSA9PSAwKSkgeworLy8JCQlwcmludGYoImRvbmUgJWQgaW5kZXggJWRcbiIsdG90YWxfbGVuZ3RoLCByeF9uZXh0KTsgCisJCQlicmVhazsKKwkJfQorCisJCXJ4X2RhdGEgPSBfX2xlMzJfdG9fY3B1KHJ4X3JpbmdbcnhfbmV4dF0uZGF0YSk7CisJCXJ4X3N0YXR1cyA9IF9fbGUzMl90b19jcHUocnhfcmluZ1tyeF9uZXh0XS5zdGF0dXMpOworCQlsZW5ndGggPSAocnhfc3RhdHVzICYgUlhfU1RBX0xFTl9NQVNLKSAvKj4+UlhfU1RBX0xFTl9QT1MgKi8gOworCisJCS8vIFBhc3MgdGhlIHBhY2tldCB1cCB0byB0aGUgcHJvdG9jb2wgbGF5ZXJzLgorCQlpZiAoIShyeF9zdGF0dXMgJiBSWF9DSEVDS19FUlJPUikpIHsKKwkJCU5ldFJlY2VpdmUoKHU4ICopcnhfZGF0YSwgbGVuZ3RoKTsKKwkJCXRvdGFsX2xlbmd0aCArPSBsZW5ndGg7CisJCX0KKworCQkvL2NsZWFyIGJpdHMuLi4gdGhlIGJ1ZmZlciBjYW4gYmUgcmV1c2VkCisJCXJ4X3JpbmdbcnhfbmV4dF0uc3RhdHVzICY9IF9fY3B1X3RvX2xlMzIoR0VNUlhfV1JBUCk7CisJCXJ4X3JpbmdbcnhfbmV4dF0uZXh0c3RhdHVzID0gX19jcHVfdG9fbGUzMigwKTsKKwkJbGVuZ3RoID0gMDsKKworCQlyeF9uZXh0Kys7CisJCWlmIChyeF9uZXh0ID09IE5VTV9SWF9ERVNDKQorCQkJcnhfbmV4dCA9IDA7CisJfQorCisJcmV0dXJuICh0b3RhbF9sZW5ndGgpOworfQorCisvKiBTdG9wIHRoZSBpbnRlcmZhY2UgKi8KK3N0YXRpYyB2b2lkIGdlbWFjX2hhbHQoc3RydWN0IGV0aF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyA9IChzdHJ1Y3QgZ2VtYWNfZGV2ICopZGV2LT5wcml2OworCisvLwlwcmludGYoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCWdlbV9zdG9wX3R4KGdlbWFjKTsKKwlnZW1fYWJvcnRfdHgoZ2VtYWMpOworCWdlbV9kaXNhYmxlX3J4KGdlbWFjKTsKK30KKyNlbmRpZgorCisvKiBJbml0aWFsaXplcyBkYXRhIHN0cnVjdHVyZXMgYW5kIHJlZ2lzdGVycyBmb3IgdGhlIGNvbnRyb2xsZXIsCisgKiBhbmQgYnJpbmdzIHRoZSBpbnRlcmZhY2UgdXAuCSBSZXR1cm5zIHRoZSBsaW5rIHN0YXR1cywgbWVhbmluZworICogdGhhdCBpdCByZXR1cm5zIHN1Y2Nlc3MgaWYgdGhlIGxpbmsgaXMgdXAsIGZhaWx1cmUgb3RoZXJ3aXNlLgorICogVGhpcyBhbGxvd3MgdS1ib290IHRvIGZpbmQgdGhlIGZpcnN0IGFjdGl2ZSBjb250cm9sbGVyLiAqLworc3RhdGljIGludCBnZW1hY19pbml0KHN0cnVjdCBldGhfZGV2aWNlICpkZXYsIGJkX3QgKiBiZCkKK3sKKwlzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyA9IChzdHJ1Y3QgZ2VtYWNfZGV2ICopZGV2LT5wcml2OworCU1BQ19BRERSIGVuZXRfYWRkcjsKKwlpbnQgc3BlZWQgPSBfMTAwMEJBU0VULCBkdXBsZXggPSBGVUxMOworCisvLwlwcmludGYoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpcyBzdG9wcGVkICovCisJZ2VtYWNfaGFsdChkZXYpOworCisJZGVmYXVsdF9zcGVlZF9kdXBsZXgoZ2VtYWMsICZzcGVlZCwgJmR1cGxleCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19NSUkpIHx8IChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01JSSkKKwlpZiAoIShnZW1hYy0+cGh5ZmxhZ3MgJiBHRU1BQ19OT19QSFkpKQorCQlpZiAobWlpcGh5X3NwZWVkX2R1cGxleChnZW1hYy0+ZGV2LT5uYW1lLCBnZW1hYy0+cGh5YWRkciwgJnNwZWVkLCAmZHVwbGV4KSkKKwkJCXJldHVybiAtMTsKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19NSUkpIHx8IChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01JSSkgKi8KKworCWdlbXRfcmVpbml0KGdlbWFjLCBzcGVlZCwgZHVwbGV4KTsKKworCWdlbV9kaXNhYmxlX2NvcHlfYWxsKGdlbWFjKTsKKwlnZW1fYWxsb3dfYnJvYWRjYXN0KGdlbWFjKTsKKwlnZW1fZW5hYmxlX3VuaWNhc3QoZ2VtYWMpOworCWdlbV9kaXNhYmxlX211bHRpY2FzdChnZW1hYyk7CisJZ2VtX2Rpc2FibGVfZmNzX3J4KGdlbWFjKTsKKworCWdlbV9lbmV0X2FkZHJfYnl0ZV9tYWMoZGV2LT5lbmV0YWRkciwgJmVuZXRfYWRkcik7CisJZ2VtX3NldF9sYWRkcjEoZ2VtYWMsICZlbmV0X2FkZHIpOworCisJZ2VtYWNfcnhfcmluZ19pbml0KGdlbWFjKTsKKworCS8qIFJlYWR5IHRoZSBkZXZpY2UgZm9yIHR4L3J4ICovCisJZ2VtX3N0YXJ0X3R4KGdlbWFjKTsKKwlnZW1fZW5hYmxlX3J4KGdlbWFjKTsKKworCXJldHVybiAoMSk7Cit9CisKK2ludCBjb21jZXJ0b19nZW1hY19pbml0aWFsaXplKGJkX3QgKiBiaXMsIGludCBpbmRleCwgY2hhciAqZGV2bmFtZSkKK3sKKwlzdHJ1Y3QgZXRoX2RldmljZSAqZGV2OworCXN0cnVjdCBnZW1hY19kZXYgKmdlbWFjOworCWludCBpOworCisJZGV2ID0gKHN0cnVjdCBldGhfZGV2aWNlICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXRoX2RldmljZSkpOworCWlmICghZGV2KQorCQlyZXR1cm4gLTE7CisKKwltZW1zZXQoZGV2LCAwLCBzaXplb2Yoc3RydWN0IGV0aF9kZXZpY2UpKTsKKworCWdlbWFjID0gKHN0cnVjdCBnZW1hY19kZXYgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBnZW1hY19kZXYpKTsKKwlpZiAoIWdlbWFjKQorCQlyZXR1cm4gLTE7CisKKwlnZW1hY19saXN0W2luZGV4XSA9IGdlbWFjOworCWdlbWFjLT5iYXNlYWRkciA9ICh2b2lkICopZ2VtYWNfaW5mb1tpbmRleF0uYmFzZWFkZHI7CisJZ2VtYWMtPnJlZ2lzdGVycyA9ICh2b2lkICopKGdlbWFjX2luZm9baW5kZXhdLmJhc2VhZGRyICsgR0VNX0lQKTsKKwlnZW1hYy0+cGh5cmVnaXN0ZXJzID0gKHZvaWQgKikoZ2VtYWNfaW5mb1tnZW1hY19pbmZvW2luZGV4XS5waHlyZWdpZHhdLmJhc2VhZGRyICsgR0VNX0lQKTsKKwlnZW1hYy0+cGh5YWRkciA9IGdlbWFjX2luZm9baW5kZXhdLnBoeWFkZHI7CisJZ2VtYWMtPm1vZGUgPSBnZW1hY19pbmZvW2luZGV4XS5tb2RlOworCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorCWdlbWFjLT5pZG1hX2Jhc2VhZGRyID0gKHZvaWQgKikoZ2VtYWNfaW5mb1tpbmRleF0uaWRtYV9iYXNlYWRkcik7CisjZW5kaWYKKwlnZW1hYy0+cGh5ZmxhZ3MgPSBnZW1hY19pbmZvW2luZGV4XS5waHlmbGFnczsKKwlzcHJpbnRmKGRldi0+bmFtZSwgZGV2bmFtZSk7CisJZGV2LT5pb2Jhc2UgPSAwOworCWRldi0+cHJpdiA9IGdlbWFjOworCWdlbWFjLT5kZXYgPSBkZXY7CisJZGV2LT5pbml0ID0gZ2VtYWNfaW5pdDsKKwlkZXYtPmhhbHQgPSBnZW1hY19oYWx0OworCWRldi0+c2VuZCA9IGdlbWFjX3NlbmQ7CisJZGV2LT5yZWN2ID0gZ2VtYWNfcmVjdjsKKworCS8qIFRlbGwgdS1ib290IHRvIGdldCB0aGUgYWRkciBmcm9tIHRoZSBlbnYgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlkZXYtPmVuZXRhZGRyW2ldID0gMDsKKworCWV0aF9yZWdpc3RlcihkZXYpOworCisJLyogcHV0IGdlbWFjIG91dCBvZiByZXNldCAqLworI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMCkKKwl7CisvLyBUT0RPOiBwbGVhc2UgY2xlYW51cCBuZWVkIGNlbnRyYWxpemUgdGhlIHJlc2V0IGJvY2sKKwkJdm9sYXRpbGUgaW50IGRlbGF5X2NvdW50OworCisJCS8vIGdldCBHRU1BQyBvdXQgb2YgcmVzZXQKKwkJKih2b2xhdGlsZSB1MzIgKikoQkxPQ0tfUkVTRVRfUkVHKSB8PSBfX2NwdV90b19sZTMyKEdFTUFDMF9SU1QgPDwgaW5kZXgpOworCQkvLyAyMCBvcHMgZGVsYXkKKwkJZGVsYXlfY291bnQgPSAyMDsKKwkJd2hpbGUgKGRlbGF5X2NvdW50LS0pIDsKKwl9CisjZWxzZQorCXsKKwkJLy8gVE9ETzogcGxlYXNlIGNsZWFudXAgbmVlZCBjZW50cmFsaXplIHRoZSByZXNldCBib2NrCisJCXZvbGF0aWxlIGludCBkZWxheV9jb3VudDsKKworCQkvLyBnZXQgR0VNQUMgb3V0IG9mIHJlc2V0CisJCSoodm9sYXRpbGUgdTMyICopKENMS0NPUkVfQkxLX1JFU0VUKSB8PQorCQkgICAgX19jcHVfdG9fbGUzMigoQkxLX1JFU0VUX0dFTUFDMF9BSEJfUkVTRVRfTiA8PCBpbmRleCkgfCAoQkxLX1JFU0VUX0dFTUFDMF9SRUZfUkVTRVRfTiA8PCBpbmRleCkpOworCQkvLyAyMCBvcHMgZGVsYXkKKwkJZGVsYXlfY291bnQgPSAyMDsKKwkJd2hpbGUgKGRlbGF5X2NvdW50LS0pIDsKKwl9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUCkKKwkvLyBzb2Z0d2FyZSBjb25maWcKKwlzd2l0Y2ggKGdlbWFjX2luZm9baW5kZXhdLmdlbWFjY29uZmlnKSB7CisJY2FzZSBDT05GSUdfQ09NQ0VSVE9fVVNFX0dNSUk6CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpID0gX19jcHVfdG9fbGUzMihnZW1hYy0+bW9kZSB8IEdFTV9DT05GX01PREVfU0VMX0dFTSB8IEdFTV9DT05GX01PREVfR0VNX0dNSUkpOworCQlicmVhazsKKwljYXNlIENPTkZJR19DT01DRVJUT19VU0VfUkdNSUk6CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpID0gX19jcHVfdG9fbGUzMihnZW1hYy0+bW9kZSB8IEdFTV9DT05GX01PREVfU0VMX0dFTSB8IEdFTV9DT05GX01PREVfR0VNX1JHTUlJKTsKKwkJYnJlYWs7CisJY2FzZSBDT05GSUdfQ09NQ0VSVE9fVVNFX1JNSUk6CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpID0gX19jcHVfdG9fbGUzMihnZW1hYy0+bW9kZSB8IEdFTV9DT05GX01PREVfU0VMX0dFTSB8IEdFTV9DT05GX01PREVfR0VNX1JNSUkpOworCQlicmVhazsKKwljYXNlIENPTkZJR19DT01DRVJUT19VU0VfTUlJOgorCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fQ0ZHKSA9IF9fY3B1X3RvX2xlMzIoZ2VtYWMtPm1vZGUgfCBHRU1fQ09ORl9NT0RFX1NFTF9HRU0gfCBHRU1fQ09ORl9NT0RFX0dFTV9NSUkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoImNvbWNlcnRvIGdlbWFjIHNvZnR3YXJlIGNvbmZpZyByZXF1aXJlcyBvbmUgTUlJIG1vZGUgZGVmaW5lZCAlZFxuIik7CisJCXJldHVybiAoLTEpOworCX0KKyNlbHNlCisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX0NGRykgPSBfX2NwdV90b19sZTMyKGdlbWFjLT5tb2RlKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwMCkKKwlpZiAoKGdlbWFjLT5waHlmbGFncyAmIEdFTUFDX0dFTV9ERUxBWV9ESVNBQkxFKSkKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX0RFTEFZX0VMRU1FTlRfQ1RSTCkgPSBfX2NwdV90b19sZTMyKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDApCisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX1RYX0NUUkwpID0gX19jcHVfdG9fbGUzMihHRU1fVFhDVFJMX0RNQUlGX0VOIHwgR0VNX1RYQ1RSTF9DUkNfRU4gfCBHRU1fVFhDVFJMX1JFVFJfRU4pOworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9SWF9DVFJMKSA9IF9fY3B1X3RvX2xlMzIoR0VNX1JYQ1RSTF9ETUFJRl9FTik7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX1JYX1NUQVRfUEtUU0laRSkgPSBfX2NwdV90b19sZTMyKDB4MTAwKTsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fQVJNX0ZJRk9fQ1RSTCkgPSBfX2NwdV90b19sZTMyKEFSTV9GSUZPX1JYRFJFUVdFIHwgQVJNX0ZJRk9fVFhEUkVRUkUpOworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9BUk1fUlhfRklGT19ISUdIKSA9IF9fY3B1X3RvX2xlMzIoMHgxRDApOworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9BUk1fUlhfRklGT19MT1cpID0gX19jcHVfdG9fbGUzMigweDE4MCk7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX1JYX0ZJRk9fSElHSCkgPSBfX2NwdV90b19sZTMyKDB4MUNEKTsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fRklGT19DVFJMKSA9IF9fY3B1X3RvX2xlMzIoR0VNX0ZJRk9fQ1RSTF9UWEZGX0VOIHwgR0VNX0ZJRk9fQ1RSTF9IQlRYUlFfRU4gfCBHRU1fRklGT19DVFJMX1JYRkZfRU4gfCBHRU1fRklGT19DVFJMX0hCUlhSUV9FTik7CisjZWxzZQorCS8qIGNvbmZpZ3VyZSBETUEgcmVnaXN0ZXIgKi8KKwkvKiBlbmFibGUgc2NoZWR1bGVyICovCisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX0lQICsgR0VNX0RNQV9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoKDFVTCA8PCAzMSkpOworCisJLyogTWFzdGVyIGVuYWJsZSBzY2hlZHVsZXIgYmxvY2sqLworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9TQ0hfQ1RMKSB8PSBfX2NwdV90b19sZTMyKDFVTCk7CisKKwkvKiBlbmFibGUgMTYgYnl0ZXMgYWxpZ25lZCBidXJzdHMgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fSVAgKyBHRU1fRE1BX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMigoMVVMIDw8IDI3KSk7CisKKwkvKiBlbmFibGUgc29mdHdhcmUgYnVmZmVyIGFsbG9jYXRpb24gKGxlZ2FjeSBtb2RlKSAqLworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9JUCArIEdFTV9ETUFfQ09ORklHKSB8PSBfX2NwdV90b19sZTMyKCgxVUwgPDwgMjYpKTsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fSVAgKyBHRU1fRE1BX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMigoMVVMIDw8IDI1KSk7CisKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fSVAgKyBHRU1fRE1BX0NPTkZJRykgJj0gX19jcHVfdG9fbGUzMih+KDB4MDBGRjAwMUYpKTsKKworCS8qIHNldCBidWZmZXIgc2l6ZSB0byAyMDQ4IGJ5dGVzICovCisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX0lQICsgR0VNX0RNQV9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoMHgwMDIwMDAwMCk7CisKKwkvKiBhdHRlbXB0IHRvIHVzZSBJTkNSMTYgQUhCIGJ1cnN0cyAqLworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9JUCArIEdFTV9ETUFfQ09ORklHKSB8PSBfX2NwdV90b19sZTMyKDB4MDAwMDAwMTApOworCisJLyogZGlzYWJsZSBhZG1pdHRhbmNlIG1hbmFnZXIgKi8KKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fSVAgKyBHRU1fRE1BX0NPTkZJRykgJj0gX19jcHVfdG9fbGUzMih+KDFVTCA8PCAxMikpOworCisgCS8qIGRpc2FibGUgYWRtaXR0YW5jZSBtYXN0ZXIgY29uZmlnIGJpdCAqLworIAkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBBRE1JVFRBTkNFICsgQURNX0NGRykgJj0gfigxVUwpOworCisjZW5kaWYKKwkvKiBSZXNldCB0aGUgTUFDICovCisJZ2VtdF9yZXNldF9nZW0oZ2VtYWMpOworCisJaWYgKGluZGV4ID09IDApIHsKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDApCisvKiB0b2RvIHJlbW92ZSB0aGlzIGZyb20gdGhpcyBmaWxlICovCisJCS8vIHNldCBlcGh5IGRpdmlkZXIgYW5kIHN3aXRjaCB0byByZWYgY2xrICgyNU1oeikKKwkJKih2b2xhdGlsZSB1MzIgKikoQ0xLQ09SRV9DTEtESVZfQ05UUkwpICY9IF9fY3B1X3RvX2xlMzIofigweDFGIDw8IEVQSFlfQ0xLRElWX1JBVElPX1NISUZUKSk7CisJCSoodm9sYXRpbGUgdTMyICopKENMS0NPUkVfQ0xLRElWX0NOVFJMKSB8PSBfX2NwdV90b19sZTMyKCgoQ0ZHX0FSTV9DTE9DSyAvIDI1MDAwMDAwKSA8PCBFUEhZX0NMS0RJVl9SQVRJT19TSElGVCkpOworCQkqKHZvbGF0aWxlIHUzMiAqKShDTEtDT1JFX0NMS0RJVl9DTlRSTCkgJj0gX19jcHVfdG9fbGUzMih+RVBIWV9DTEtESVZfQllQQVNTKTsKKyNlbmRpZgorCQlyZXNldF9lbWFjMF9waHkoMSk7CisJfQorCisJaWYgKGluZGV4ID09IDEpIHsKKwkJcmVzZXRfZW1hYzFfcGh5KDEpOworCX0KKworI2lmIGRlZmluZWQoQ09ORklHX01JSSkgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKQorCWdlbV9lbmFibGVfTURJTyhnZW1hYyk7CisKKwlpZiAoIShnZW1hYy0+cGh5ZmxhZ3MgJiBHRU1BQ19OT19QSFkpKSB7CisJCWludCBzcGVlZCwgZHVwbGV4OworCisJCW1paXBoeV9yZWdpc3RlcihkZXYtPm5hbWUsIGNvbWNlcnRvX21paXBoeV9yZWFkLCBjb21jZXJ0b19taWlwaHlfd3JpdGUpOworCisJCWRlZmF1bHRfc3BlZWRfZHVwbGV4KGdlbWFjLCAmc3BlZWQsICZkdXBsZXgpOworCisJCWlmIChnZW10X2NvbmZpZ19QSFkoZ2VtYWMsIGdlbWFjLT5waHlhZGRyLCBzcGVlZCwgZHVwbGV4KSkKKwkJCXJldHVybiAtMTsKKwl9CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0NPTUNFUlRPX0dFTUFDICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NvbWNlcnRvX2dlbS5oIGIvZHJpdmVycy9jb21jZXJ0b19nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjA4N2VkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jb21jZXJ0b19nZW0uaApAQCAtMCwwICsxLDM5OCBAQAorI2lmbmRlZiBfX0NPTUNFUlRPX0dFTV9IX18KKyNkZWZpbmUgX19DT01DRVJUT19HRU1fSF9fCisKKy8qIEFuIGVudW1lcmF0ZWQgdHlwZSBmb3IgbG9vcGJhY2sgdmFsdWVzLiAgVGhpcyBjYW4gYmUgb25lIG9mIHRocmVlIHZhbHVlcywgbm8KKyAqIGxvb3BiYWNrIC1ub3JtYWwgb3BlcmF0aW9uLCBsb2NhbCBsb29wYmFjayB3aXRoIGludGVybmFsIGxvb3BiYWNrIG1vZHVsZSBvZgorICogTUFDIG9yIFBIWSBsb29wYmFjayB3aGljaCBpcyB0aHJvdWdoIHRoZSBleHRlcm5hbCBQSFkuCisgKi8KKyNpZm5kZWYgX19NQUNfTE9PUF9FTlVNX18KKyNkZWZpbmUgX19NQUNfTE9PUF9FTlVNX18KK3R5cGVkZWYgZW51bSB7IExCX05PTkUsIExCX0VYVCwgTEJfTE9DQUwgfSBNQUNfTE9PUDsKKyNlbmRpZgorCisvKiBUaGUgcG9zc2libGUgb3BlcmF0aW5nIHNwZWVkcyBvZiB0aGUgTUFDLCBjdXJyZW50bHkgc3VwcG9ydGluZyAxMCwgMTAwIGFuZAorICogMTAwME1iIG1vZGVzLgorICovCisjaWZuZGVmIF9fTUFDX1NQRUVEX0VOVU1fXworI2RlZmluZSBfX01BQ19TUEVFRF9FTlVNX18KK3R5cGVkZWYgZW51bSB7IFNQRUVEXzEwTSwgU1BFRURfMTAwTSwgU1BFRURfMTAwME0sIFNQRUVEXzEwMDBNX1BDUyB9IE1BQ19TUEVFRDsKKyNlbmRpZgorCisvKiBUaGUgcG9zc2libGUgQU1CQSBBSEIgYnVzIHdpZHRoIG9mIHRoZSBNQUMsIGN1cnJlbnRseSBzdXBwb3J0aW5nIDMyLCA2NCBhbmQKKyAqIDEyOCBiaXRzLgorICovCisjaWZuZGVmIF9fTUFDX0FIQl9FTlVNX18KKyNkZWZpbmUgX19NQUNfQUhCX0VOVU1fXwordHlwZWRlZiBlbnVtIHsgQU1CQV9BSEJfMzIsIEFNQkFfQUhCXzY0LCBBTUJBX0FIQl8xMjggfSBNQUNfQUhCX1dJRFRIOworI2VuZGlmCisKKy8qIFRoZSBwb3NzaWJsZSBNREMgY2xvY2sgZGl2aXNpb24gb2YgdGhlIE1BQywgY3VycmVudGx5IHN1cHBvcnRpbmcgOCwgMTYgLCAzMiwKKyAqIDQ4LCA2NCwgOTYsIDEyOCwgMjI0LgorICovCisjaWZuZGVmIF9fTUFDX0RNQ0RJVl9FTlVNX18KKyNkZWZpbmUgX19NQUNfRE1DRElWX0VOVU1fXwordHlwZWRlZiBlbnVtIHsgTURDX0RJVl84LCBNRENfRElWXzE2LCBNRENfRElWXzMyLCBNRENfRElWXzQ4LCBNRENfRElWXzY0LAorCU1EQ19ESVZfOTYsIE1EQ19ESVZfMTI4LCBNRENfRElWXzIyNAorfSBNQUNfTURDX0RJVjsKKyNlbmRpZgorCisjZGVmaW5lIE1ESU9fVElNRU9VVCAgICAgICAgICAgIDUwMDAJLyogaW5zdHJ1Y3Rpb24gY3ljbGVzPyAqLworCisvKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIE1ESU8gc2hvdWxkIGJlIGF2YWlsYWJsZSwgdGhpcyBpcyBzZXQgc28gdGhhdCBmb3IgcmVzZXQKKyAqIGZ1bmN0aW9uLCBhcHByb3ByaWF0ZSBvcHRpb25zIGFyZSBzZXR1cC4gIFRvIGRpc2FibGUsIHVzZSAwLgorICovCisjZGVmaW5lIEdFTV9NRElPX0VOQUJMRUQgKEdFTV9NRElPX0VOKQorCisvKiBTcGVjaWZ5IHRoZSBkZWZhdWx0IEFNQkEgQUhCIGJ1cyB3aWR0aC4gIFRoaXMgc2ltcGx5IGRlZmluZXMKKyAqIHdoaWNoIG9mIHRoZSBidXMgd2lkdGggY29udHJvbCBiaXRzIGFyZSBhY3RpdmUuICBCeSBkZWZhdWx0LCB0aGUgYnVzCisgKiB3aWR0aCBpcyAzMi4KKyAqLworI2RlZmluZSBHRU1fREVGX0FIQl9XSURUSCAoQU1CQV9BSEJfMzIpCisKKy8qIFNwZWNpZnkgZGVmYXVsdCBkdXBsZXggbW9kZSwgZm9yIGhhbGYgZHVwbGV4IC0gc3BlY2lmeSAwLiAqLworI2lmbmRlZiBHRU1fREVGX0RVUExFWAorLyogQWxsb3cgdGhlIHZhbHVlIHRvIGJlIHNwZWNpZmllZCBhcyBjb21waWxlciBvcHRpb24gCisgICAwIC0gaGFsZi1kdXBsZXgsIAorICAgR0VNX0ZVTExfRFVQTEVYIC0gZnVsbC1kdXBsZXgKKyovCisjZGVmaW5lIEdFTV9ERUZfRFVQTEVYIChHRU1fRlVMTF9EVVBMRVgpCisjZW5kaWYKKworLyogU3BlY2lmeSBkZWZhdWx0IG9wZXJhdGluZyBzcGVlZCwgMSBmb3IgMTAwTWIuICBOb3RlIHRoYXQgdGhpcyBpcyBsZWZ0CisgKiBzaGlmdGVkLiAgQWxzbyBub3RlIHRoYXQgdGhpcyBzaW1wbHkgYXNzZXJ0cyBhIHNpZ25hbCB0byB0aGUgUEhZIGFuZCBoYXMgbm8KKyAqIGVmZmVjdCBvbiB0aGUgb3BlcmF0aW9uIG9mIHRoZSBNQUMuCisgKiBGb3IgMTBNYi9zIG1vZGUsIHNwZWNpZnkgICAgICAgICBTUEVFRF8xME0KKyAqIEZvciAxMDBNYi9zIG1vZGUsIHNwZWNpZnkgICAgICAgIFNQRUVEXzEwME0KKyAqIEZvciAxR2IvcyBtb2RlLCBzcGVjaWZ5ICAgICAgICAgIFNQRUVEXzEwMDBNCisgKiBGb3IgMUdiL3Mgd2l0aCBQQ1MgbW9kZSwgc3BlY2lmeSBTUEVFRF8xMDAwTV9QQ1MKKyAqLworI2lmbmRlZiBHRU1fREVGX1NQRUVECisvKiBBbGxvdyB0aGUgdmFsdWUgdG8gYmUgc3BlY2lmaWVkIGFzIGNvbXBpbGVyIG9wdGlvbiAqLworI2RlZmluZSBHRU1fREVGX1NQRUVEIChTUEVFRF8xMDAwTSkKKyNlbmRpZgorCisvKiBTcGVjaWZ5IGRlZmF1bHQgbG9vcGJhY2sgbW9kZS4gIExCX05PTkUgZm9yIG5vIGxvb3BiYWNrLCBvdGhlciB2YWx1ZXMgYXJlIExCX01BQworICogYW5kIExCX1BIWQorICovCisjZGVmaW5lIEdFTV9ERUZfTE9PUCAoTEJfTk9ORSkKKworLyogRGVmaW5lIHNvbWUgdHlwZXMgZm9yIHVzaW5nIHdpdGggdGhlIEhBTC4gIFRoZXNlIHR5cGVzIGNvcnJlc3BvbmQgdG8gdGhlCisgKiBtZW1vcnkgbWFwIGFuZCBwcm9ncmFtbWluZyBzdHJ1Y3R1cmUgb2YgdGhlIE1BQyBkZXZpY2UuCisgKiBBbGwgc3RydWN0dXJlcyBhcmUgJ3ZvbGF0aWxlJyB0byBpbmRpY2F0ZSB0aGV5IGNhbiBiZSBjaGFuZ2VkIGJ5IHNvbWUgbm9uLQorICogcHJvZ3JhbW1pbmcgbWVhbnMgLSBpLmUuIGJ5IHRoZSBoYXJkd2FyZSBpdHNlbGYuICBUaGlzIHByZXZlbnRzIHRoZSBjb21waWxlcgorICogZnJvbSBtYWtpbmcgZmFsc2UgYXNzdW1wdGlvbnMgb24gaG93IHRvIG9wdGltaXNlIHRoZSBjb2RlLiAgU29tZSBlbGVtZW50cworICogYXJlIGFsc28gZGVmaW5lZCBhcyAnY29uc3QnIHRvIGVuZm9yY2Ugc29tZSBjaGVja3Mgb24gdGhlIHByb2dyYW1tZXIuICBUaGVzZQorICogYXJlIG9ubHkgZm9yIHJlZ2lzdGVyIGZpZWxkcyB0aGF0IGNhbiBvbmx5IGJlIGNoYW5nZWQgYnkgdGhlIGhhcmR3YXJlIGFuZCBhcmUKKyAqIG5vdCB3cml0YWJsZS4KKyAqLworCisvKiBUaGUgQWRkcmVzcyBvcmdhbmlzYXRpb24gZm9yIHRoZSBNQUMgZGV2aWNlLiAgQWxsIGFkZHJlc3NlcyBhcmUgc3BsaXQgaW50bworICogdHdvIDMyLWJpdCByZWdpc3RlciBmaWVsZHMuICBUaGUgZmlyc3Qgb25lIChib3R0b20pIGlzIHRoZSBsb3dlciAzMi1iaXRzIG9mCisgKiB0aGUgYWRkcmVzcyBhbmQgdGhlIG90aGVyIGZpZWxkIGFyZSB0aGUgaGlnaCBvcmRlciBiaXRzIC0gdGhpcyBtYXkgYmUgMTYtYml0cworICogaW4gdGhlIGNhc2Ugb2YgTUFDIGFkZHJlc3Nlcywgb3IgMzItYml0cyBmb3IgdGhlIGhhc2ggYWRkcmVzcy4KKyAqIEluIHRlcm1zIG9mIG1lbW9yeSBzdG9yYWdlLCB0aGUgZmlyc3QgaXRlbSAoYm90dG9tKSBpcyBhc3N1bWVkIHRvIGJlIGF0IGEKKyAqIGxvd2VyIGFkZHJlc3MgbG9jYXRpb24gdGhhbiAndG9wJy4gaS5lLiB0b3Agc2hvdWxkIGJlIGF0IGFkZHJlc3MgbG9jYXRpb24gb2YKKyAqICdib3R0b20nICsgNCBieXRlcy4KKyAqLworI2lmbmRlZiBfX01BQ19BRERSX0RFRl9fCisjZGVmaW5lIF9fTUFDX0FERFJfREVGX18KK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgYm90dG9tOwkJLyogTG93ZXIgMzItYml0cyBvZiBhZGRyZXNzLiAqLworCXUzMiB0b3A7CQkvKiBVcHBlciAzMi1iaXRzIG9mIGFkZHJlc3MuICovCit9IHZvbGF0aWxlIE1BQ19BRERSOworI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIG9yZ2FuaXNhdGlvbiBvZiB0aGUgYWRkcmVzcyBmaWx0ZXJzIHNlY3Rpb24gb2YgdGhlIE1BQworICogcmVnaXN0ZXJzLiAgVGhlIENhZGVuY2UgTUFDIGNvbnRhaW5zIGZvdXIgcG9zc2libGUgc3BlY2lmaWMgYWRkcmVzcyBtYXRjaAorICogYWRkcmVzc2VzLCBpZiBhbiBpbmNvbWluZyBmcmFtZSBjb3JyZXNwb25kcyB0byBhbnkgb25lIG9mIHRoZXNlIGZvdXIKKyAqIGFkZHJlc3NlcyB0aGVuIHRoZSBmcmFtZSB3aWxsIGJlIGNvcGllZCB0byBtZW1vcnkuCisgKiBJdCBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbGwgZm91ciBvZiB0aGUgYWRkcmVzcyBtYXRjaCByZWdpc3RlcnMgdG8gYmUKKyAqIHByb2dyYW1tZWQsIHRoaXMgaXMgYXBwbGljYXRpb24gZGVwZW5kYW50LgorICovCisjaWZuZGVmIF9fU1BFQ19BRERSX0RFRl9fCisjZGVmaW5lIF9fU1BFQ19BRERSX0RFRl9fCit0eXBlZGVmIHN0cnVjdCB7CisJTUFDX0FERFIgb25lOwkJLyogU3BlY2lmaWMgYWRkcmVzcyByZWdpc3RlciAxLiAqLworCU1BQ19BRERSIHR3bzsJCS8qIFNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXIgMi4gKi8KKwlNQUNfQUREUiB0aHJlZTsJCS8qIFNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXIgMy4gKi8KKwlNQUNfQUREUiBmb3VyOwkJLyogU3BlY2lmaWMgYWRkcmVzcyByZWdpc3RlciA0LiAqLworfSB2b2xhdGlsZSBTUEVDX0FERFI7CisjZW5kaWYKKworLyogVGhlIHNldCBvZiBzdGF0aXN0aWNzIHJlZ2lzdGVycyBpbXBsZW1lbnRlZCBpbiB0aGUgQ2FkZW5jZSBNQUMuCisgKiBUaGUgc3RhdGlzdGljcyByZWdpc3RlcnMgaW1wbGVtZW50ZWQgYXJlIGEgc3Vic2V0IG9mIGFsbCB0aGUgc3RhdGlzdGljcworICogYXZhaWxhYmxlLCBidXQgY29udGFpbnMgYWxsIHRoZSBjb21wdWxzb3J5IG9uZXMuCisgKiBGb3IgZnVsbCBkZXNjcmlwdGlvbnMgb24gdGhlIHJlZ2lzdGVycywgcmVmZXIgdG8gdGhlIENhZGVuY2UgTUFDIHByb2dyYW1tZXJzCisgKiBndWlkZSBvciB0aGUgSUVFRSA4MDIuMyBzcGVjaWZpY2F0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiBvY3RldHNfdHhfYm90OwkvKiBMb3dlciAzMi1iaXRzIGZvciBudW1iZXIgb2Ygb2N0ZXRzIHR4J2QgKi8KKwl1MzIgb2N0ZXRzX3R4X3RvcDsJLyogVXBwZXIgMTYtYml0cyBmb3IgbnVtYmVyIG9mIG9jdGV0cyB0eCdkICovCisJdTMyIGZyYW1lc190eDsJCS8qIE51bWJlciBvZiBmcmFtZXMgdHJhbnNtaXR0ZWQgT0sgKi8KKwl1MzIgYnJvYWRjYXN0X3R4OwkvKiBOdW1iZXIgb2YgYnJvYWRjYXN0IGZyYW1lcyB0cmFuc21pdHRlZCAqLworCXUzMiBtdWx0aWNhc3RfdHg7CS8qIE51bWJlciBvZiBtdWx0aWNhc3QgZnJhbWVzIHRyYW5zbWl0dGVkICovCisJdTMyIHBhdXNlX3R4OwkJLyogTnVtYmVyIG9mIHBhdXNlIGZyYW1lcyB0cmFuc21pdHRlZC4gKi8KKwl1MzIgZnJhbWU2NF90eDsJCS8qIE51bWJlciBvZiA2NGJ5dGUgZnJhbWVzIHRyYW5zbWl0dGVkICovCisJdTMyIGZyYW1lNjVfMTI3X3R4OwkvKiBOdW1iZXIgb2YgNjUtMTI3IGJ5dGUgZnJhbWVzIHRyYW5zbWl0dGVkICovCisJdTMyIGZyYW1lMTI4XzI1NV90eDsJLyogTnVtYmVyIG9mIDEyOC0yNTUgYnl0ZSBmcmFtZXMgdHJhbnNtaXR0ZWQgKi8KKwl1MzIgZnJhbWUyNTZfNTExX3R4OwkvKiBOdW1iZXIgb2YgMjU2LTUxMSBieXRlIGZyYW1lcyB0cmFuc21pdHRlZCAqLworCXUzMiBmcmFtZTUxMl8xMDIzX3R4OwkvKiBOdW1iZXIgb2YgNTEyLTEwMjMgYnl0ZSBmcmFtZXMgdHJhbnNtaXR0ZWQgKi8KKwl1MzIgZnJhbWUxMDI0XzE1MThfdHg7CS8qIE51bWJlciBvZiAxMDI0LTE1MTggYnl0ZSBmcmFtZXMgdHJhbnNtaXR0ZWQgKi8KKwl1MzIgZnJhbWUxNTE5X3R4OwkvKiBOdW1iZXIgb2YgZnJhbWVzIGdyZWF0ZXIgdGhhbiAxNTE4IGJ5dGVzIHR4ICovCisJdTMyIHR4X3VydW47CQkvKiBUcmFuc21pdCB1bmRlcnJ1biBlcnJvcnMgZHVlIHRvIERNQSAqLworCXUzMiBzaW5nbGVfY29sOwkJLyogTnVtYmVyIG9mIHNpbmdsZSBjb2xsaXNpb24gZnJhbWVzICovCisJdTMyIG11bHRpX2NvbDsJCS8qIE51bWJlciBvZiBtdWx0aSBjb2xsaXNpb24gZnJhbWVzICovCisJdTMyIGV4Y2Vzc19jb2w7CQkvKiBOdW1iZXIgb2YgZXhjZXNzaXZlIGNvbGxpc2lvbiBmcmFtZXMuICovCisJdTMyIGxhdGVfY29sOwkJLyogQ29sbGlzaW9ucyBvY2N1cmluZyBhZnRlciBzbG90IHRpbWUgKi8KKwl1MzIgZGVmX3R4OwkJLyogRnJhbWVzIGRlZmVycmVkIGR1ZSB0byBjcnMgKi8KKwl1MzIgY3JzX2Vycm9yczsJCS8qIEVycm9ycyBjYXVzZWQgYnkgY3JzIG5vdCBiZWluZyBhc3NlcnRlZC4gKi8KKworCXUzMiBvY3RldHNfcnhfYm90OwkvKiBMb3dlciAzMi1iaXRzIGZvciBudW1iZXIgb2Ygb2N0ZXRzIHJ4J2QgKi8KKwl1MzIgb2N0ZXRzX3J4X3RvcDsJLyogVXBwZXIgMTYtYml0cyBmb3IgbnVtYmVyIG9mIG9jdGV0cyByeCdkICovCisJdTMyIGZyYW1lc19yeDsJCS8qIE51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgT0sgKi8KKwl1MzIgYnJvYWRjYXN0X3J4OwkvKiBOdW1iZXIgb2YgYnJvYWRjYXN0IGZyYW1lcyByZWNlaXZlZCAqLworCXUzMiBtdWx0aWNhc3Rfcng7CS8qIE51bWJlciBvZiBtdWx0aWNhc3QgZnJhbWVzIHJlY2VpdmVkICovCisJdTMyIHBhdXNlX3J4OwkJLyogTnVtYmVyIG9mIHBhdXNlIGZyYW1lcyByZWNlaXZlZC4gKi8KKwl1MzIgZnJhbWU2NF9yeDsJCS8qIE51bWJlciBvZiA2NGJ5dGUgZnJhbWVzIHJlY2VpdmVkICovCisJdTMyIGZyYW1lNjVfMTI3X3J4OwkvKiBOdW1iZXIgb2YgNjUtMTI3IGJ5dGUgZnJhbWVzIHJlY2VpdmVkICovCisJdTMyIGZyYW1lMTI4XzI1NV9yeDsJLyogTnVtYmVyIG9mIDEyOC0yNTUgYnl0ZSBmcmFtZXMgcmVjZWl2ZWQgKi8KKwl1MzIgZnJhbWUyNTZfNTExX3J4OwkvKiBOdW1iZXIgb2YgMjU2LTUxMSBieXRlIGZyYW1lcyByZWNlaXZlZCAqLworCXUzMiBmcmFtZTUxMl8xMDIzX3J4OwkvKiBOdW1iZXIgb2YgNTEyLTEwMjMgYnl0ZSBmcmFtZXMgcmVjZWl2ZWQgKi8KKwl1MzIgZnJhbWUxMDI0XzE1MThfcng7CS8qIE51bWJlciBvZiAxMDI0LTE1MTggYnl0ZSBmcmFtZXMgcmVjZWl2ZWQgKi8KKwl1MzIgZnJhbWUxNTE5X3J4OwkvKiBOdW1iZXIgb2YgZnJhbWVzIGdyZWF0ZXIgdGhhbiAxNTE4IGJ5dGVzIHJ4ICovCisJdTMyIHVzaXplX2ZyYW1lczsJLyogRnJhbWVzIHJlY2VpdmVkIGxlc3MgdGhhbiBtaW4gb2YgNjQgYnl0ZXMgKi8KKwl1MzIgZXhjZXNzX2xlbmd0aDsJLyogTnVtYmVyIG9mIGV4Y2Vzc2l2ZSBsZW5ndGggZnJhbWVzIHJ4ICovCisJdTMyIGphYmJlcnM7CQkvKiBFeGNlc3NpdmUgbGVuZ3RoICsgY3JjIG9yIGFsaWduIGVycm9ycy4gKi8KKwl1MzIgZmNzX2Vycm9yczsJCS8qIE51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBjcmMgZXJyb3JzICovCisJdTMyIGxlbmd0aF9jaGVja19lcnJvcnM7CS8qIE51bWJlciBvZiBmcmFtZXMgd2l0aCBpbmNvcnJlY3QgbGVuZ3RoICovCisJdTMyIHJ4X3N5bWJvbF9lcnJvcnM7CS8qIE51bWJlciBvZiB0aW1lcyByeF9lciBhc3NlcnRlZCBkdXJpbmcgcnggKi8KKwl1MzIgYWxpZ25fZXJyb3JzOwkvKiBGcmFtZXMgcmVjZWl2ZWQgd2l0aG91dCBpbnRlZ2VyIG5vLiBieXRlcyAqLworCXUzMiByeF9yZXNfZXJyb3JzOwkvKiBOdW1iZXIgb2YgdGltZXMgYnVmZmVycyByYW4gb3V0IGR1cmluZyByeCAqLworCXUzMiByeF9vcnVuOwkJLyogUmVjZWl2ZSBvdmVycnVuIGVycm9ycyBkdWUgdG8gRE1BICovCisKK30gdm9sYXRpbGUgR0VNX1NUQVRTOworI2lmIDAKKy8qIFRoaXMgaXMgdGhlIG1lbW9yeSBtYXAgZm9yIHRoZSBDYWRlbmNlIEVuaGFuY2VkIE1BQyBkZXZpY2UuCisgKiBGb3IgZnVsbCBkZXNjcmlwdGlvbnMgb24gdGhlIHJlZ2lzdGVycywgcmVmZXIgdG8gdGhlIENhZGVuY2UgTUFDIHByb2dyYW1tZXJzCisgKiBndWlkZSBvciB0aGUgSUVFRSA4MDIuMyBzcGVjaWZpY2F0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiBuZXRfY29udHJvbDsJLyogTmV0d29yayBjb250cm9sIDB4MDAgKi8KKwl1MzIgbmV0X2NvbmZpZzsJCS8qIE5ldHdvcmsgY29uZmlnIDB4MDQgKi8KKwljb25zdCB2b2xhdGlsZSB1MzIgbmV0X3N0YXR1czsJLyogTmV0d29yayBzdGF0dXMsIFJPLCAweDA4ICovCisJdm9sYXRpbGUgdTMyIHVzZXJfaW87CS8qIFVzZXIgSU8gMHgwQyAqLworCXZvbGF0aWxlIHUzMiBkbWE7CS8qIERNQSBpbnRlcmZhY2UgMHgxMCAqLworCXUzMiB0eF9zdGF0dXM7CQkvKiBUcmFuc21pdCBzdGF0dXMgMHgxNCAqLworCXUzMiByeF9xcHRyOwkJLyogUmVjZWl2ZSBxdWV1ZSBwb2ludGVyIDB4MTggKi8KKwl1MzIgdHhfcXB0cjsJCS8qIFRyYW5zbWl0IHF1ZXVlIHBvaW50ZXIgMHgxQyAqLworCXUzMiByeF9zdGF0dXM7CQkvKiBSZWNlaXZlIHN0YXR1cyAweDIwICovCisJdTMyIGlycV9zdGF0dXM7CQkvKiBJbnRlcnJ1cHQgc3RhdHVzIDB4MjQgKi8KKwl1MzIgaXJxX2VuYWJsZTsJCS8qIEludGVycnVwdCBlbmFibGUgMHgyOCAqLworCXUzMiBpcnFfZGlzYWJsZTsJLyogSW50ZXJydXB0IGRpc2FibGUgMHgyQyAqLworCWNvbnN0IHZvbGF0aWxlIHUzMiBpcnFfbWFzazsJLyogSW50ZXJydXB0IG1hc2ssIFJPLCAweDMwICovCisJdTMyIHBoeV9tYW47CQkvKiBQSFkgbWFuYWdlbWVudCAweDM0ICovCisJY29uc3Qgdm9sYXRpbGUgdTMyIHBhdXNlX3RpbWU7CS8qIFBhdXNlIHRpbWUgcmVnaXN0ZXIgMHgzOCAqLworCXUzMiB0eF9wYXVzZV9xdWFudDsJLyogVHJhbnNtaXQgcGF1c2UgcXVhbnR1bSAweDNDICovCisJdTMyIHJlc2VydmVkWzE2XTsJLyogUmVzZXJ2ZWQgKi8KKwlNQUNfQUREUiBoYXNoX2FkZHI7CS8qIEhhc2ggYWRkcmVzcyAweDgwIC0gMHg4NCAqLworCVNQRUNfQUREUiBhZGRyZXNzOwkvKiBTcGVjaWZpYyBhZGRyZXNzZXMgMHg4OCAtIDB4QTQgKi8KKwl1MzIgaWRfY2hlY2sxOwkJLyogVHlwZSBJRCBjaGVjazEgMHhBOCAqLworCXUzMiBpZF9jaGVjazI7CQkvKiBUeXBlIElEIGNoZWNrMiAweEFDICovCisJdTMyIGlkX2NoZWNrMzsJCS8qIFR5cGUgSUQgY2hlY2szIDB4QjAgKi8KKwl1MzIgaWRfY2hlY2s0OwkJLyogVHlwZSBJRCBjaGVjazQgMHhCNCAqLworCXUzMiByc3ZkMlsxN107CQkvKiBSZXNlcnZlZCAqLworCXUzMiByZXZfaWQ7CQkvKiBEZXZpY2UgUmV2aXNpb24gSUQgMHhGQyAqLworCUdFTV9TVEFUUyBzdGF0czsJLyogTUFDIHN0YXRpc3RpY3MgMHgxMDAgLSAweDFBNCAqLworfSB2b2xhdGlsZSBHRU1fUkVHOworI2VuZGlmCisKKyNkZWZpbmUgR0VNQUNfU1dfQ09ORgkJKDEgPDwgOCkgfCAoMSA8PCAxMSkgICAgLy8gR0VNQUMgY29uZmlndXJlZCBieSBTVworI2RlZmluZSBHRU1BQ19QSFlfQ09ORgkJMCAgICAgICAgICAgICAgICAgICAgICAgLy8gR0VNQUMgY29uZmlndXJlZCBieSBwaHkgbGluZXMgKG5vdCBmb3IgTUlJL0dNSUkpCisjZGVmaW5lIEdFTUFDX1NXX0ZVTExfRFVQTEVYCSgxIDw8IDkpCisjZGVmaW5lIEdFTUFDX1NXX1NQRUVEXzEwTQkoMCA8PCAxMikKKyNkZWZpbmUgR0VNQUNfU1dfU1BFRURfMTAwTQkoMSA8PCAxMikKKyNkZWZpbmUgR0VNQUNfU1dfU1BFRURfMUcJKDIgPDwgMTIpCisKKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX1VTRV9NSUkJCSgxIDw8IDApCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19VU0VfUk1JSQkoMSA8PCAxKQorI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fVVNFX0dNSUkJKDEgPDwgMikKKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQkoMSA8PCAzKQorCisvLyBmbGFncyB0byBiZSB1c2VkIGZvciBwaHkgY29uZmlnCisjZGVmaW5lIEdFTUFDX05PX1BIWQkJCQkoMSA8PCAwKQkvKiBHRU1BQyBpcyBub3QgY29ubmVjdGVkIHRvIFBIWSAqLworI2RlZmluZSBHRU1BQ19QSFlfQVVUT05FRwkJCSgxIDw8IDEpCS8qIEVuYWJsZSBQSFkgYXV0b25lZ290aWF0aW9uICovCisjZGVmaW5lIEdFTUFDX0dFTV9ERUxBWV9ESVNBQkxFCQkJKDEgPDwgMikJLyogRGlzYWJsZSBkZWxheSBvbiBHRU0gVHgvUnggY2xvY2tzICovCisjZGVmaW5lIEdFTUFDX004OEUxMTExX1BIWV9SR01JSV9BRERfREVMQVkJKDEgPDwgMykJLyogRW5hYmxlIGRlbGF5IG9uIE1hcnZlbCA4OEUxMTExIFBIWSBUeC9SeCBjbG9ja3MgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMCkKKyNpbmNsdWRlICJjb21jZXJ0bzEwMF9nZW0uaCIKKyNlbHNlCisjaW5jbHVkZSAiY29tY2VydG8xMDAwX2dlbS5oIgorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIG9mIEhBTAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJlLWluaXRpYWxpc2UgZGV2aWNlIGFuZCBjaGVjayByZXNldCB2YWx1ZXMuICovCitpbnQgZ2VtX3Jlc2V0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKKworLyogRGV2aWNlIHNldHVwLiAqLworCit2b2lkIGdlbV9zZXRfbG9vcChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX0xPT1AgZ2VtX2xvb3ApOworTUFDX0xPT1AgZ2VtX2dldF9sb29wKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKKwordm9pZCBnZW1fZW5hYmxlX2VhbShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9kaXNhYmxlX2VhbShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKK3ZvaWQgZ2VtX2VuYWJsZV9mY3Nfcngoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOwordm9pZCBnZW1fZGlzYWJsZV9mY3Nfcngoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCit2b2lkIGdlbV9lbmFibGVfMTUzNl9yeChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9kaXNhYmxlXzE1MzZfcngoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCit2b2lkIGdlbV9mdWxsX2R1cGxleChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9oYWxmX2R1cGxleChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKK3ZvaWQgZ2VtX3NldF9zcGVlZChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX1NQRUVEIGdlbV9zcGVlZCk7CitNQUNfU1BFRUQgZ2VtX2dldF9zcGVlZChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKK3ZvaWQgZ2VtX3NldF9haGJfd2lkdGgoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIE1BQ19BSEJfV0lEVEggZ2VtX2J1c3dpZHRoKTsKK01BQ19BSEJfV0lEVEggZ2VtX2dldF9haGJfd2lkdGgoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCit2b2lkIGdlbV9zZXRfbWRjX2RpdihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX01EQ19ESVYgZ2VtX21kY2Rpdik7CitNQUNfTURDX0RJViBnZW1fZ2V0X21kY19kaXYoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCisvKiBQYXVzZSBjb250cm9sLiAqLwordm9pZCBnZW1fZW5hYmxlX3BhdXNlX3J4KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3ZvaWQgZ2VtX2Rpc2FibGVfcGF1c2Vfcngoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCit1MzIgZ2VtX3BhdXNlX3RpbWUoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCit2b2lkIGdlbV9lbmFibGVfcGF1c2VfY3B5KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3ZvaWQgZ2VtX2Rpc2FibGVfcGF1c2VfY3B5KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKKwordm9pZCBnZW1fc2VuZF8wcV9wYXVzZShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9zZW5kX3BhdXNlKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKKwordm9pZCBnZW1fc2V0X3R4X3BhdXNlX3Eoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHUzMiBnZW1fcGF1c2UpOwordTMyIGdlbV9nZXRfdHhfcGF1c2VfcShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKKy8qIFBIWSBtYW5hZ2VtZW50IGNvbnRyb2wuICovCit2b2lkIGdlbV9lbmFibGVfTURJTyhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9kaXNhYmxlX01ESU8oc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCitpbnQgZ2VtX3BoeV9tYW5fd3Ioc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHU4IHBoeV9hZGRyLCB1OCByZWdfYWRkciwgdTMyIGRhdGEpOworaW50IGdlbV9waHlfbWFuX3JkKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1OCBwaHlfYWRkciwgdTggcmVnX2FkZHIpOwordTMyIGdlbV9waHlfbWFuX2RhdGEoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCitpbnQgZ2VtX3BoeV9tYW5faWRsZShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKK2ludCBnZW1fbGlua19zdGF0dXMoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCisvKiBBZGRyZXNzIHNldHVwIGFuZCBjb250cm9sLiAqLwordm9pZCBnZW1fZW5hYmxlX3VuaWNhc3Qoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOwordm9pZCBnZW1fZGlzYWJsZV91bmljYXN0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKKwordm9pZCBnZW1fZW5hYmxlX211bHRpY2FzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9kaXNhYmxlX211bHRpY2FzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKK3ZvaWQgZ2VtX2FsbG93X2Jyb2FkY2FzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9ub19icm9hZGNhc3Qoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCit2b2lkIGdlbV9lbmFibGVfY29weV9hbGwoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOwordm9pZCBnZW1fZGlzYWJsZV9jb3B5X2FsbChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKK3ZvaWQgZ2VtX3NldF9oYXNoKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCBNQUNfQUREUiAqaGFzaF9hZGRyKTsKK01BQ19BRERSIGdlbV9nZXRfaGFzaChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKK3ZvaWQgZ2VtX3NldF9hZGRyZXNzKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCBTUEVDX0FERFIgKnNwZWNfYWRkcik7CitTUEVDX0FERFIgZ2VtX2dldF9hZGRyZXNzKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKKworLyogRnVuY3Rpb25zIHRvIGNvbnZlcnQgYmV0d2VlbiBhZGRyZXNzIGZvcm1hdHMuICovCitpbnQgZ2VtX2VuZXRfYWRkcl9ieXRlX21hYyh1OCAqZW5ldF9ieXRlX2FkZHIsIE1BQ19BRERSICplbmV0X2FkZHIpOworaW50IGdlbV9lbmV0X2FkZHJfbWFjX2J5dGUodTggKmVuZXRfYnl0ZV9hZGRyLCBNQUNfQUREUiAqZW5ldF9hZGRyKTsKKwordm9pZCBnZW1fc2V0X2xhZGRyMShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX0FERFIgKmFkZHJlc3MpOwordm9pZCBnZW1fc2V0X2xhZGRyMihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX0FERFIgKmFkZHJlc3MpOwordm9pZCBnZW1fc2V0X2xhZGRyMyhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX0FERFIgKmFkZHJlc3MpOwordm9pZCBnZW1fc2V0X2xhZGRyNChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX0FERFIgKmFkZHJlc3MpOworTUFDX0FERFIgZ2VtX2dldF9sYWRkcjEoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworTUFDX0FERFIgZ2VtX2dldF9sYWRkcjIoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworTUFDX0FERFIgZ2VtX2dldF9sYWRkcjMoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworTUFDX0FERFIgZ2VtX2dldF9sYWRkcjQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCit2b2lkIGdlbV9zZXRfaWRfY2hlY2sxKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgaWRfY2hlY2spOwordm9pZCBnZW1fc2V0X2lkX2NoZWNrMihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgdTMyIGlkX2NoZWNrKTsKK3ZvaWQgZ2VtX3NldF9pZF9jaGVjazMoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHUzMiBpZF9jaGVjayk7Cit2b2lkIGdlbV9zZXRfaWRfY2hlY2s0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgaWRfY2hlY2spOwordTMyIGdlbV9nZXRfaWRfY2hlY2sxKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3UzMiBnZW1fZ2V0X2lkX2NoZWNrMihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit1MzIgZ2VtX2dldF9pZF9jaGVjazMoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOwordTMyIGdlbV9nZXRfaWRfY2hlY2s0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKKwordm9pZCBnZW1fZW5hYmxlX2xlbl9jaGVjayhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9kaXNhYmxlX2xlbl9jaGVjayhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKKy8qIEludGVycnVwdCBoYW5kbGluZyBhbmQgbWFza2luZy4gKi8KK3ZvaWQgZ2VtX3NldF9pcnFfc3RhdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgdTMyIGlycV9zdGF0dXMpOwordTMyIGdlbV9nZXRfaXJxX3N0YXQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCit2b2lkIGdlbV9lbmFibGVfaXJxKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgaXJxX2VuKTsKK3ZvaWQgZ2VtX21hc2tfaXJxKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgaXJxX21hc2spOwordTMyIGdlbV9nZXRfaXJxX21hc2soc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCisvKiBUcmFuc21pdCBjb250cm9sLiAqLworaW50IGdlbV9zdGFydF90eChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9zdG9wX3R4KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3ZvaWQgZ2VtX2Fib3J0X3R4KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK2ludCBnZW1fcmVzdGFydF90eChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CitpbnQgZ2VtX3RyYW5zbWl0dGluZyhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit1MzIgZ2VtX2dldF90eF9zdGF0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3ZvaWQgZ2VtX3Jlc2V0X3R4X3N0YXQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHUzMiByc3Rfc3RhdHVzKTsKK3ZvaWQgZ2VtX3Jlc2V0X3R4X3Eoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCisvKiBSZWNlaXZlIGNvbnRyb2wuICovCitpbnQgZ2VtX2VuYWJsZV9yeChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9kaXNhYmxlX3J4KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3ZvaWQgZ2VtX3Jlc2V0X3J4X3Eoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCitpbnQgZ2VtX3JlY2VpdmVfb24oc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOwordTMyIGdlbV9nZXRfcnhfc3RhdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9yZXNldF9yeF9zdGF0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgcnN0X3N0YXR1cyk7CisKK3ZvaWQgZ2VtX2VuYWJsZV9yeF9qbWIoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOwordm9pZCBnZW1fZGlzYWJsZV9yeF9qbWIoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOworCit2b2lkIGdlbV9lbmFibGVfdmxhbl9vbmx5KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3ZvaWQgZ2VtX2Rpc2FibGVfdmxhbl9vbmx5KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKKworLyogU25hcHNob3Qgb2Ygc3RhdGlzdGljIHJlZ2lzdGVycyAqLwordm9pZCBnZW1fZW5hYmxlX3JkX3NuYXAoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOwordm9pZCBnZW1fZGlzYWJsZV9yZF9zbmFwKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3ZvaWQgZ2VtX3Rha2Vfc25hcChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKKy8qIERlYnVnIG9wdGlvbnMuICovCit2b2lkIGdlbV9zdGF0c193cl9lbihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9zdGF0c193cl9vZmYoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpOwordm9pZCBnZW1fc3RhdHNfaW5jKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3ZvaWQgZ2VtX3N0YXRzX2NscihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKK3ZvaWQgZ2VtX2VuYWJsZV9icChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9kaXNhYmxlX2JwKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKKwordm9pZCBnZW1fZW5fcmV0cnlfdGVzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7Cit2b2lkIGdlbV9kaXNfcmV0cnlfdGVzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYyk7CisKK0dFTV9TVEFUUyBnZW1fZ2V0X3N0YXRzKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKTsKK3ZvaWQgZ2VtX3NldF9zdGF0cyhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgR0VNX1NUQVRTICpzdGF0cyk7CisKKy8qIEdlbmVyaWMgcmVnaXN0ZXIgYWNjZXNzIGludGVyZmFjZS4gKi8KK3UzMiBnZW1fcmVnaXN0ZXJfcmQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHUzMiByZWdfYWRkcik7CitpbnQgZ2VtX3JlZ2lzdGVyX3dyKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgcmVnX2FkZHIsIHUzMiBkYXRhKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NvbWNlcnRvX2dlbV9BTC5jIGIvZHJpdmVycy9jb21jZXJ0b19nZW1fQUwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTYyMzFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jb21jZXJ0b19nZW1fQUwuYwpAQCAtMCwwICsxLDE4MjUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDMKKyAqICAgICAgICAgICAgQ0FERU5DRSAgICAgICAgICAgICAgICAgICAgQ0FERU5DRSBERVNJR04gRk9VTkRSWQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogICBGaWxlbmFtZSAgICAgICA6ICAgZ2VtX0FMLmMKKyAqCisgKiAgIEF1dGhvciAgICAgICAgIDogICBTdGV2ZW4gSG8sIERJQ1MsIExEQworICoKKyAqICAgRGF0ZSAgICAgICAgICAgOiAgIDl0aCBPY3QgMjAwMQorICoKKyAqICAgTGltaXRhdGlvbnMgICAgOiAgIER1ZSB0byB0aGUgdXNlIG9mIGJpdC1maWVsZHMsIG9ubHkgbGl0dGxlIGVuZGlhbgorICogICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLiAgVGhlIGhlYWRlciBmaWxlCisgKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZCBmb3Igb3RoZXIgYXJjaGl0ZWN0dXJlcy4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBEZXNjcmlwdGlvbiAgICA6ICAgQSBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllciBmb3IgdGhlIENhZGVuY2UgR2lnYWJpdAorICogICAgICAgICAgICAgICAgICAgICAgRXRoZXJuZXQgTUFDIChnZW0pLgorICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21wcmlzZXMgb2YgYSBzZXQgb2YgZnVuY3Rpb25zIGFuZCBtYWNyb3MgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGUgYSBzaW1wbGUgYWJzdHJhY3RlZCB2aWV3IHRvIG9wZXJhdGluZyB0aGUgTUFDCisgKiAgICAgICAgICAgICAgICAgICAgICBlbmFibGluZyB0aGUgTUFDIHNvZnR3YXJlIGRldmVsb3BtZW50IGluIHRoZSBtaW5pbWFsCisgKiAgICAgICAgICAgICAgICAgICAgICBhbW91bnQgb2YgdGltZS4KKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICBSZXZpc2lvbiBDb250cm9sCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8bmV0Lmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fR0VNQUMpCisjaW5jbHVkZSAiY29tY2VydG9fZ2VtLmgiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTb21lIGZ1bmN0aW9ucyB0byBzZXQvcmVzZXQgYW5kIGdldCBzcGVjaWZpYyBiaXRzIGluIHRoZSBNQUMgcmVnaXN0ZXJzCisgKiBOb3RlIHRoYXQgYWxsIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIGEgcmVhZC1tb2RpZnktd3JpdGUgYmFzaXMKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEZ1bmN0aW9uIHRvIHN0YXJ0IHRyYW5zbWlzc2lvbiBvbiB0aGUgc3BlY2lmaWVkIGRldmljZS4gIFRoZSBwYXJhbWV0ZXIgdG8KKyAqIHRoaXMgZnVuY3Rpb24gaXMgc2ltcGx5IGEgcG9pbnRlciB0byB0aGUgc3RydWN0IGdlbWFjX2RldiBzdHJ1Y3R1cmUuCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIHJlbGV2YW50IHF1ZXVlcyBhbmQgZGF0YSBoYXMgYmVlbgorICogc2V0IHVwLCBob3dldmVyIGl0IHdpbGwgY2hlY2sgaWYgdGhlIG51bWJlciBvZiBxdWV1ZSBlbGVtZW50cyBpcyB6ZXJvIGZpcnN0LgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGVuYWJsZSB0eCBldmVuIGlmIGl0IHdhcyBwcmV2aW91c2x5IG5vdCBzZXQKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgMCAgIDogICBPSworICogIC0xICA6ICAgVHJhbnNtaXQgcXVldWUgbm90IHZhbGlkLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGdlbV9zdGFydF90eChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05UUk9MKSB8PSBfX2NwdV90b19sZTMyKEdFTV9UWF9TVEFSVCB8IEdFTV9UWF9FTik7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSGFsdCB0cmFuc21pc3Npb24gYWZ0ZXIgY3VycmVudCBmcmFtZSBoYXMgY29tcGxldGVkLiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQKKyAqIHNpbXBseSBieSB3cml0aW5nIHRvIHRoZSBHRU1fVFhfSEFMVCBiaXQgaW4gdGhlIG5ldHdvcmsgY29udHJvbCByZWdpc3RlciwKKyAqIHdoaWNoIHNob3VsZCBjYXVzZSB0aGUgTUFDIHRvIGNvbXBsZXRlIGl0cyBjdXJyZW50IGZyYW1lIHRoZW4gc3RvcC4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUgZm9yIHRoaXMgZnVuY3Rpb24uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9zdG9wX3R4KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTlRST0wpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX1RYX0hBTFQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEFib3J0IHRyYW5zbWlzc2lvbiBpbW1lZGlhdGVseSBXSVRIT1VUIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gb2YgYW55IGN1cnJlbnQKKyAqIGZyYW1lLgorICogTm90ZSB0aGF0IGFmdGVyIHRoaXMgb3BlcmF0aW9uLCB0aGUgdHJhbnNtaXQgYnVmZmVyIGRlc2NyaXB0b3Igd2lsbCBiZSByZXNldAorICogdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGUgZGVzY3JpcHRvciBsaXN0IQorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2Fib3J0X3R4KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTlRST0wpICY9IF9fY3B1X3RvX2xlMzIofihHRU1fVFhfU1RBUlQgfCBHRU1fVFhfRU4pKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBPYnRhaW5zIHN0YXR1cyBvZiB0cmFuc21pc3Npb24gY2lyY3VpdHJ5LCB3aGV0aGVyIGl0IGlzIHRyYW5zbWl0dGluZyBvciBpZGxlLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICAwICAgOiAgIFRyYW5zbWl0dGVyIGlzIGlkbGUuCisgKiAgMSAgIDogICBUcmFuc21pdHRlciBhY3RpdmUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZ2VtX3RyYW5zbWl0dGluZyhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9UWF9TVEFUVVMpICYgX19jcHVfdG9fbGUzMihHRU1fVFhfR08pKSA9PSBHRU1fVFhfR08pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEVuYWJsZSB0aGUgcmVjZWl2ZSBjaXJjdWl0cnkuICBUaGlzIHNob3VsZCBiZSBwZXJmb3JtZWQgb25seSBhZnRlciB0aGUKKyAqIGJ1ZmZlcnMgYW5kIHRoZSBkZXNjcmlwdG9yIHF1ZXVlcyBoYXZlIGJlZW4gc2V0IHVwLCBvdGhlcndpc2UgdW5wcmVkaWN0YWJsZQorICogcmVzdWx0cyBtYXkgb2NjdXIuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogIDAgICA6ICAgT0sKKyAqICAtMSAgOiAgIFJlY2VpdmUgcXVldWUgbm90IHZhbGlkLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGdlbV9lbmFibGVfcngoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgfD0gX19jcHVfdG9fbGUzMihHRU1fUlhfRU4pOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIERpc2FibGUgdGhlIHJlY2VpdmUgY2lyY3VpdHJ5LiAgVGhpcyB3aWxsIHN0b3AgcmVjZXB0aW9uIG9mIGFueSBmcmFtZQorICogaW1tZWRpYXRlbHksIG5vdGUgdGhhdCB0aGUgZGVzY3JpcHRvciBwb2ludGVyIGlzIG5vdCBjaGFuZ2VkLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2Rpc2FibGVfcngoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgJj0gX19jcHVfdG9fbGUzMih+R0VNX1JYX0VOKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBPYnRhaW4gdGhlIHN0YXR1cyBvZiB0aGUgcmVjZWl2ZSBjaXJjdWl0cnksIHdoZXRoZXIgaXQgaXMgZW5hYmxlZC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgMCAgIDogICBSZWNlaXZlIGNpcmN1aXRyeSBkaXNhYmxlZC4KKyAqICAtMSAgOiAgIFJlY2VpdmUgY2lyY3VpdHMgZW5hYmxlZC4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBnZW1fcmVjZWl2ZV9vbihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgJiBfX2NwdV90b19sZTMyKEdFTV9SWF9FTikpID09IEdFTV9SWF9FTik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU2V0IHRoZSBsb29wYmFjayBtb2RlIG9mIHRoZSBNQUMuICBUaGlzIGNhbiBiZSBlaXRoZXIgbm8gbG9vcGJhY2sgZm9yIG5vcm1hbAorICogb3BlcmF0aW9uLCBsb2NhbCBsb29wYmFjayB0aHJvdWdoIE1BQyBpbnRlcm5hbCBsb29wYmFjayBtb2R1bGUgb3IgUEhZCisgKiBsb29wYmFjayBmb3IgZXh0ZXJuYWwgbG9vcGJhY2sgdGhyb3VnaCBhIFBIWS4gIFRoaXMgYXNzZXJ0cyB0aGUgZXh0ZXJuYWwgbG9vcAorICogcGluLgorICogVGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYXJlIGEgcG9pbnRlciB0byB0aGUgZGV2aWNlIGFuZCBhbiBlbnVtZXJhdGVkIHR5cGUKKyAqIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgbG9vcGJhY2sgcmVxdWlyZWQuCisgKgorICogTm90ZTogaWYgYW4gaW52YWxpZCBsb29wYmFjayBtb2RlIGlzIHNwZWNpZmllZCwgbG9vcCBiYWNrIHdpbGwgYmUgZGlzYWJsZWQuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fc2V0X2xvb3Aoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsCS8qIFBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCisJCSAgTUFDX0xPT1AgZ2VtX2xvb3AJLyogTG9vcGJhY2sgbW9kZS4gKi8KKyAgICApIHsKKwlzd2l0Y2ggKGdlbV9sb29wKSB7CisJY2FzZSBMQl9MT0NBTDoKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgJj0gX19jcHVfdG9fbGUzMih+R0VNX0xCX1BIWSk7CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTlRST0wpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX0xCX01BQyk7CisJCWJyZWFrOworCWNhc2UgTEJfRVhUOgorCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05UUk9MKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fTEJfTUFDKTsKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgfD0gX19jcHVfdG9fbGUzMihHRU1fTEJfUEhZKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgJj0gX19jcHVfdG9fbGUzMih+KEdFTV9MQl9NQUMgfCBHRU1fTEJfUEhZKSk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEdldCB0aGUgbG9vcGJhY2sgbW9kZSBvZiB0aGUgTUFDLiAgVGhpcyBjYW4gYmUgZWl0aGVyIG5vIGxvb3BiYWNrIGZvciBub3JtYWwKKyAqIG9wZXJhdGlvbiwgbG9jYWwgbG9vcGJhY2sgdGhyb3VnaCBNQUMgaW50ZXJuYWwgbG9vcGJhY2sgbW9kdWxlIG9yIFBIWQorICogbG9vcGJhY2sgZm9yIGV4dGVybmFsIGxvb3BiYWNrIHRocm91Z2ggYSBQSFkuICBUaGlzIGFzc2VydHMgdGhlIGV4dGVybmFsIGxvb3AKKyAqIHBpbi4KKyAqIFRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZSBhIHBvaW50ZXIgdG8gdGhlIGRldmljZS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgTEJfTE9DQUwgICAgOiAgIExvY2FsIGxvb3AgYmFjayBhY3RpdmUuCisgKiAgTEJfRVhUICAgICAgOiAgIEV4dGVybmFsIGxvb3AgYmFjayBhY3RpdmUuCisgKiAgTEJfTk9ORSAgICAgOiAgIExvb3AgYmFjayBkaXNhYmxlZC4KKyAqICAtMSAgICAgICAgICA6ICAgVW5rbm93biBtb2RlLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTUFDX0xPT1AgZ2VtX2dldF9sb29wKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCXUzMiBsYl9tb2RlOworCisJbGJfbW9kZSA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTlRST0wpICYgKEdFTV9MQl9QSFkgfCBHRU1fTEJfTUFDKTsKKworCXN3aXRjaCAobGJfbW9kZSkgeworCWNhc2UgR0VNX0xCX01BQzoKKwkJcmV0dXJuIExCX0xPQ0FMOworCQlicmVhazsKKwljYXNlIEdFTV9MQl9QSFk6CisJCXJldHVybiBMQl9FWFQ7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJcmV0dXJuIExCX05PTkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQWN0aXZhdGUgdGhlIE1hbmFnZW1lbnQgaW50ZXJmYWNlLiAgVGhpcyBpcyByZXF1aXJlZCB0byBwcm9ncmFtIHRoZSBQSFkKKyAqIHJlZ2lzdGVycyB0aHJvdWdoIHRoZSBNRElPIHBvcnQuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZW5hYmxlX01ESU8oc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgfD0gX19jcHVfdG9fbGUzMihHRU1fTURJT19FTik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRGlzYWJsZSB0aGUgTWFuYWdlbWVudCBpbnRlcmZhY2UuICBJbiB0aGlzIHN0YXRlLCB0aGUgTURJTyBpcyBwbGFjZWQgaW4gYQorICogaGlnaCBpbXBlZGFuY2Ugc3RhdGUgYW5kIHRoZSBNREMgY2xvY2sgaXMgZHJpdmVuIGxvdy4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUgZm9yIHRoaXMgZnVuY3Rpb24uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9kaXNhYmxlX01ESU8oc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgJj0gX19jcHVfdG9fbGUzMih+R0VNX01ESU9fRU4pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEVuYWJsZSB3cml0aW5nIHRvIHRoZSBzdGF0aXN0aWMgcmVnaXN0ZXJzLiAgVGhpcyBpcyBmb3IgZGVidWcgcHVycG9zZXMgb25seQorICogYW5kIHNob3VsZCBub3QgYmUgYWN0aXZlIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX3N0YXRzX3dyX2VuKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTlRST0wpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX1NUQVRTX1dSX0VOKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBEaXNhYmxlIHdyaXRpbmcgdG8gdGhlIHN0YXRpc3RpYyByZWdpc3RlcnMuICBVbmRlciBub3JtYWwgb3BlcmF0aW9uIHRoaXMgaXMKKyAqIG5vdCBuZWNlc3NhcnkgYXMgdGhlIHdyaXRpbmcgdG8gc3RhdGlzdGljcyByZWdpc3RlcnMgc2hvdWxkIGJlIG9mZiBieSBkZWZhdWx0CisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fc3RhdHNfd3Jfb2ZmKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTlRST0wpICY9IF9fY3B1X3RvX2xlMzIofkdFTV9TVEFUU19XUl9FTik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSW5jcmVtZW50IGFsbCB0aGUgc3RhdGlzdGljIHJlZ2lzdGVycyBieSAxLiAgVGhpcyBpcyBmb3IgZGVidWcgcHVycG9zZXMgb25seS4KKyAqIE5vdGUgdGhhdCB0aGUgc3RhdGlzdGljIHJlZ2lzdGVycyBhcmUgYXV0b21hdGljYWxseSBjbGVhcmVkIG9uIHJlYWQhCisgKgorICogTm8gcmV0dXJuIHZhbHVlLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fc3RhdHNfaW5jKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTlRST0wpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX1NUQVRTX0lOQyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQ2xlYXIgYWxsIHRoZSBzdGF0aXN0aWMgcmVnaXN0ZXJzLgorICoKKyAqIE5vIHJldHVybiB2YWx1ZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX3N0YXRzX2NscihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05UUk9MKSB8PSBfX2NwdV90b19sZTMyKEdFTV9TVEFUU19DTFIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEVuYWJsZSBwYXVzZSBmcmFtZSByZWNlcHRpb24uICBXaXRoIHRoaXMgZW5hYmxlZCwgaWYgYSB2YWxpZCBwYXVzZSBmcmFtZSBpcworICogcmVjZWl2ZWQsIHRyYW5zbWlzc2lvbiB3aWxsIGhhbHQgZm9yIHRoZSBzcGVjaWZpZWQgdGltZSBhZnRlciB0aGUgY3VycmVudAorICogZnJhbWUgaGFzIGNvbXBsZXRlZCB0cmFuc21pc3Npb24uCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZW5hYmxlX3BhdXNlX3J4KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMihHRU1fUlhfUEFVU0VfRU4pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIERpc2FibGUgcGF1c2UgZnJhbWUgcmVjZXB0aW9uLiAgSW5jb21pbmcgcGF1c2UgZnJhbWVzIGFyZSBpZ25vcmVkLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2Rpc2FibGVfcGF1c2Vfcngoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fUlhfUEFVU0VfRU4pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEVuYWJsZSBjb3B5IG9mIHJlY2VpdmVkIHBhdXNlIGZyYW1lLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2VuYWJsZV9wYXVzZV9jcHkoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fUlhfTk9fUEFVU0UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIERpc2FibGUgY29weSBvZiByZWNlaXZlZCBwYXVzZSBmcmFtZS4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUgZm9yIHRoaXMgZnVuY3Rpb24uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9kaXNhYmxlX3BhdXNlX2NweShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05UUk9MKSB8PSBfX2NwdV90b19sZTMyKEdFTV9SWF9OT19QQVVTRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU2VuZCBhIHBhdXNlIGZyYW1lIHdpdGggemVybyBxdWFudHVtLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX3NlbmRfMHFfcGF1c2Uoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgfD0gX19jcHVfdG9fbGUzMihHRU1fVFhfMFFfUEFVU0UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFNlbmQgYSBub3JtYWwgcGF1c2UgZnJhbWUuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fc2VuZF9wYXVzZShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05UUk9MKSB8PSBfX2NwdV90b19sZTMyKEdFTV9UWF9QQVVTRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU2V0IHRyYW5zbWl0IHBhdXNlIHF1YW50dW0uCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fc2V0X3R4X3BhdXNlX3Eoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHUzMiBnZW1fcGF1c2UpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9UWF9QQVVTRV9RVUFOVCkgPSBfX2NwdV90b19sZTMyKGdlbV9wYXVzZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUmVhZCB0cmFuc21pdCBwYXVzZSBxdWFudHVtLgorICoKKyAqIFJldHVybiB2YWx1ZXM6CisgKiAwLTY1NTM1OiB0cmFuc21pdCBwYXVzZSBxdWFudHVtLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGdlbV9nZXRfdHhfcGF1c2VfcShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9UWF9QQVVTRV9RVUFOVCkpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBTZXQgcmV0cnkgdGVzdCBiaXQsIHRoaXMgaXMgdXNlZCBmb3IgZGVidWcgcHVycG9zZXMgb25seSB0byBzcGVlZCB1cCB0ZXN0aW5nLgorICogVGhpcyBzaG91bGQgbm90IGJlIGVuYWJsZWQgZm9yIG5vcm1hbCBvcGVyYXRpb24uCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZW5fcmV0cnlfdGVzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX1JFVFJZX1RFU1QpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIERpc2FibGUgcmV0cnkgdGVzdCBiaXQuICBGb3Igbm9ybWFsIG9wZXJhdGlvbiB0aGlzIGJpdCBzaG91bGQgbm90IGJlIHNldC4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUgZm9yIHRoaXMgZnVuY3Rpb24uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9kaXNfcmV0cnlfdGVzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICY9IF9fY3B1X3RvX2xlMzIofkdFTV9SRVRSWV9URVNUKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFbmFibGUgZXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCB2aWEgdGhlIGVhbSBwaW4sIHdoaWNoIHdoZW4gYWN0aXZlIHdpbGwgY29weQorICogdGhlIGN1cnJlbnQgZnJhbWUgdG8gbWVtb3J5LgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2VuYWJsZV9lYW0oc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSB8PSBfX2NwdV90b19sZTMyKEdFTV9FQU1fRU4pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIERpc2FibGUgZXh0ZXJuYWwgYWRkcmVzcyBtYXRjaCBjYXBhYmlsaXR5LiAgVGhlIE1BQyB3aWxsIGlnbm9yZSB0aGUgc3RhdHVzIG9mCisgKiB0aGUgZWFtIHBpbi4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUgZm9yIHRoaXMgZnVuY3Rpb24uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9kaXNhYmxlX2VhbShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICY9IF9fY3B1X3RvX2xlMzIofkdFTV9FQU1fRU4pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEVuYWJsZSBzdG9yaW5nIG9mIHRoZSByZWNlaXZlIGZyYW1lIGNoZWNrIHNlcXVlbmNlIGludG8gbWVtb3J5LgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2VuYWJsZV9mY3Nfcngoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fUlhfTk9fRkNTKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBEaXNhYmxlIHN0b3Jpbmcgb2YgdGhlIHJlY2VpdmUgZnJhbWUgY2hlY2sgc2VxdWVuY2UgaW50byBtZW1vcnkuICBUaGUgbGFzdCA0CisgKiBieXRlcyBmcm9tIHRoZSBpbmNvbWluZyBmcmFtZSB3aWxsIGJlIGNoZWNrZWQgZm9yIHZhbGlkIENSQywgaG93ZXZlciB0aGlzCisgKiB3aWxsIG5vdCBiZSBzdG9yZWQgaW50byBtZW1vcnkuICBUaGUgZnJhbWUgbGVuZ3RoIHdpbGwgYmUgdXBkYXRlZAorICogYWNjb3JkaW5nbHkuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZGlzYWJsZV9mY3Nfcngoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSB8PSBfX2NwdV90b19sZTMyKEdFTV9SWF9OT19GQ1MpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEVuYWJsZSByZWNlcHRpb24gb2YgbG9uZyBmcmFtZXMgdXAgdG8gMTUzNiBieXRlcyBpbiBsZW5ndGguCisgKiBUaGVzZSBhcmUgbm90IHN0YW5kYXJkIElFRUUgODAyLjMgZnJhbWVzLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2VuYWJsZV8xNTM2X3J4KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMihHRU1fRlJBTUVfMTUzNik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRGlzYWJsZSByZWNlcHRpb24gb2YgZnJhbWVzIGdyZWF0ZXIgdGhhbiAxNTE4IGJ5dGVzIGluIGxlbmd0aC4KKyAqIFRoaXMgaXMgbm9ybWFsIG9wZXJhdGlvbiBtb2RlIGZvciB0aGUgTUFDIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSUVFRSA4MDIuMworICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2Rpc2FibGVfMTUzNl9yeChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICY9IF9fY3B1X3RvX2xlMzIofkdFTV9GUkFNRV8xNTM2KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFbmFibGUgcmVjZXB0aW9uIG9mIHVuaWNhc3QgaGFzaGVkIGZyYW1lcy4gIFRoZSBmcmFtZSB3aWxsIGJlIHJlY2VpdmVkIHdoZW4KKyAqIHRoZSA2IGJpdCBoYXNoIGZ1bmN0aW9uIG9mIHRoZSBmcmFtZSdzIGRlc3RpbmF0aW9uIGFkZHJlc3MgcG9pbnRzIGEgYml0IHRoYXQKKyAqIGlzIHNldCBpbiB0aGUgNjQtYml0IGhhc2ggcmVnaXN0ZXIgYW5kIGlzIHNpZ25hbGxlZCBhcyBhIHVuaWNhc3QgZnJhbWUuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZW5hYmxlX3VuaWNhc3Qoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSB8PSBfX2NwdV90b19sZTMyKEdFTV9VTklDQVNUX0VOKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBEaXNhYmxlIHJlY2VwdGlvbiBvZiB1bmljYXN0IGhhc2hlZCBmcmFtZXMuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZGlzYWJsZV91bmljYXN0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJj0gX19jcHVfdG9fbGUzMih+R0VNX1VOSUNBU1RfRU4pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEVuYWJsZSByZWNlcHRpb24gb2YgbXVsdGljYXN0IGhhc2hlZCBmcmFtZXMuICBUaGUgZnJhbWUgd2lsbCBiZSByZWNlaXZlZCB3aGVuCisgKiB0aGUgNiBiaXQgaGFzaCBmdW5jdGlvbiBvZiB0aGUgZnJhbWUncyBkZXN0aW5hdGlvbiBhZGRyZXNzIHBvaW50cyBhIGJpdCB0aGF0CisgKiBpcyBzZXQgaW4gdGhlIDY0LWJpdCBoYXNoIHJlZ2lzdGVyIGFuZCBpcyBzaWduYWxsZWQgYXMgYSBtdWx0aWNhc3QgZnJhbWUuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZW5hYmxlX211bHRpY2FzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX01VTFRJQ0FTVF9FTik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRGlzYWJsZSByZWNlcHRpb24gb2YgbXVsdGljYXN0IGhhc2hlZCBmcmFtZXMuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZGlzYWJsZV9tdWx0aWNhc3Qoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fTVVMVElDQVNUX0VOKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBBbGxvdyByZWNlcHRpb24gb2YgYnJvYWRjYXN0IGZyYW1lcyAoZnJhbWVzIHdpdGggYWRkcmVzcyBzZXQgdG8gYWxsIDEncykKKyAqIFRoaXMgaXMgbm9ybWFsIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgTUFDLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2FsbG93X2Jyb2FkY2FzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICY9IF9fY3B1X3RvX2xlMzIofkdFTV9OT19CUk9BRENBU1QpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIERvIG5vdCBhbGxvdyByZWNlcHRpb24gb2YgYnJvYWRjYXN0IGZyYW1lcywgc3VjaCBmcmFtZXMgd2lsbCBiZSBpZ25vcmVkLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX25vX2Jyb2FkY2FzdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX05PX0JST0FEQ0FTVCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRW5hYmxlIGNvcHkgYWxsIGZyYW1lcy4gIEluIHRoaXMgbW9kZSwgdGhlIE1BQyB3aWxsIGNvcHkgYWxsIHZhbGlkIHJlY2VpdmVkCisgKiBmcmFtZXMgdG8gbWVtb3J5IHJlZ2FyZGxlc3Mgb2YgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZW5hYmxlX2NvcHlfYWxsKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMihHRU1fQ09QWV9BTEwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIERvIG5vdCBjb3B5IGFsbCBmcmFtZXMuICBOb3JtYWwgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSBNQUMsIGZyYW1lcyB3aWxsIG9ubHkKKyAqIGJlIGNvcGllZCB0byBtZW1vcnkgaWYgaXQgbWF0Y2hlcyBvbmUgb2YgdGhlIHNwZWNpZmljIG9yIGhhc2ggYWRkcmVzc2VzLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2Rpc2FibGVfY29weV9hbGwoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fQ09QWV9BTEwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFNldCBNQUMgaW50byBmdWxsIGR1cGxleCBtb2RlLiAgVGhlIGNycyBhbmQgY29sIHNpZ25hbHMgd2lsbCBiZSBpZ25vcmVkIGluCisgKiB0aGlzIG1vZGUuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZnVsbF9kdXBsZXgoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX0NGRykgfD0gX19jcHVfdG9fbGUzMihHRU1fQ09ORl9EVVBMRVhfR0VNX0ZVTEwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFNldCBNQUMgaW50byBoYWxmIGR1cGxleCBtb2RlLiAgVGhlIGNycyBhbmQgY29sIHNpZ25hbHMgYXJlIHVzZWQgdG8gZGV0ZWN0CisgKiBjb2xsaXNpb25zIGFuZCBwZXJmb3JtIGRlZmVyZW5jZSB3aGVyZSBuZWNlc3NhcnkuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlIGZvciB0aGlzIGZ1bmN0aW9uLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1faGFsZl9kdXBsZXgoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX0NGRykgJj0gX19jcHVfdG9fbGUzMih+R0VNX0NPTkZfRFVQTEVYX0dFTV9GVUxMKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBTZXQgdGhlIG9wZXJhdGluZyBzcGVlZCBvZiB0aGUgTUFDLCBmb3IgMTAgYW5kIDEwME1iIG1vZGVzLCB0aGlzIGhhcyBubworICogZWZmZWN0IG9uIHRoZSBNQUMgZnVuY3Rpb25hbGl0eSwgYnV0IHNpbXBseSBhc3NlcnRzIGFuIGV4dGVybmFsIHNwZWVkIHBpbgorICogYWNjb3JkaW5nbHkuCisgKiBGb3IgMUcgbW9kZXMsIHRoaXMgd2lsbCBzZXQgdGhlIE1BQyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBvcGVyYXRpbmcgbW9kZSBieQorICogc3dpdGNoaW5nIHRvIGVpdGhlciB0aGUgR01JSSBvciBUQkkgaW50ZXJmYWNlIGRlcGVuZGluZyBvbiByZXF1aXJlZCBtb2RlLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX3NldF9zcGVlZChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX1NQRUVEIGdlbV9zcGVlZCkKK3sKKwlzd2l0Y2ggKGdlbV9zcGVlZCkgeworCWNhc2UgU1BFRURfMTBNOgorCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fQ0ZHKSA9ICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fQ0ZHKSAmIF9fY3B1X3RvX2xlMzIofkdFTV9DT05GX1NQRUVEX01BU0spKSB8IF9fY3B1X3RvX2xlMzIoR0VNX0NPTkZfU1BFRURfU0VMX0dFTSB8IEdFTV9DT05GX1NQRUVEX0dFTV8xME0pOworCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICY9IF9fY3B1X3RvX2xlMzIofkdFTV9QQ1NfU0VMKTsKKwkJYnJlYWs7CisJY2FzZSBTUEVFRF8xMDBNOgorCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fQ0ZHKSA9ICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fQ0ZHKSAmIF9fY3B1X3RvX2xlMzIofkdFTV9DT05GX1NQRUVEX01BU0spKSB8IF9fY3B1X3RvX2xlMzIoR0VNX0NPTkZfU1BFRURfU0VMX0dFTSB8IEdFTV9DT05GX1NQRUVEX0dFTV8xMDBNKTsKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fUENTX1NFTCk7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwME06CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpID0gKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpICYgX19jcHVfdG9fbGUzMih+R0VNX0NPTkZfU1BFRURfTUFTSykpIHwgX19jcHVfdG9fbGUzMihHRU1fQ09ORl9TUEVFRF9TRUxfR0VNIHwgR0VNX0NPTkZfU1BFRURfR0VNXzFHKTsKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fUENTX1NFTCk7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwME1fUENTOgorCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fQ0ZHKSA9ICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+YmFzZWFkZHIgKyBHRU1fQ0ZHKSAmIF9fY3B1X3RvX2xlMzIofkdFTV9DT05GX1NQRUVEX01BU0spKSB8IF9fY3B1X3RvX2xlMzIoR0VNX0NPTkZfU1BFRURfU0VMX0dFTSB8IEdFTV9DT05GX1NQRUVEX0dFTV8xRyk7CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMihHRU1fUENTX1NFTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpID0gKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpICYgX19jcHVfdG9fbGUzMih+R0VNX0NPTkZfU1BFRURfTUFTSykpIHwgX19jcHVfdG9fbGUzMihHRU1fQ09ORl9TUEVFRF9TRUxfR0VNIHwgR0VNX0NPTkZfU1BFRURfR0VNXzEwME0pOworCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICY9IF9fY3B1X3RvX2xlMzIofkdFTV9QQ1NfU0VMKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogR2V0IHRoZSBvcGVyYXRpbmcgc3BlZWQgb2YgdGhlIE1BQywgY3VycmVudGx5IHRoaXMgaGFzIG5vIGZ1bmN0aW9uYWwgZWZmZWN0CisgKiBvbiB0aGUgTUFDLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbnVtZXJhdGVkIHZhbHVlIGNhc3QgaW50byBhbiBpbnQuICBUaGlzIGlzIGZvcgorICogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBtYWNiIGRyaXZlci4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgU1BFRURfMTBNICAgOiAgIE1BQyBpbiAxME1iL3MgbW9kZS4KKyAqICBTUEVFRF8xMDBNICA6ICAgTUFDIGluIDEwME1iL3MgbW9kZS4KKyAqICBTUEVFRF8xMDAwTSA6ICAgTUFDIGluIDFHIG1vZGUgd2l0aCBHTUlJIGludGVyZmFjZS4KKyAqICBTUEVFRF8xMDAwTV9QQ1MgOiAgIE1BQyBpbiAxRyBtb2RlIHdpdGggUENTIGludGVyZmFjZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK01BQ19TUEVFRCBnZW1fZ2V0X3NwZWVkKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCisJaWYgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpICYgX19jcHVfdG9fbGUzMihHRU1fQ09ORl9TUEVFRF9TRUxfR0VNKSkgeworCQlpZiAoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX0NGRykgJiBfX2NwdV90b19sZTMyKEdFTV9DT05GX1NQRUVEX0dFTV8xRykpIHsKKwkJCWlmICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICYgX19jcHVfdG9fbGUzMihHRU1fUENTX1NFTCkpCisJCQkJcmV0dXJuIChTUEVFRF8xMDAwTV9QQ1MpOworCQkJZWxzZQorCQkJCXJldHVybiAoU1BFRURfMTAwME0pOworCQl9IGVsc2UgeworCQkJaWYgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpICYgX19jcHVfdG9fbGUzMihHRU1fQ09ORl9TUEVFRF9HRU1fMTAwTSkpCisJCQkJcmV0dXJuIChTUEVFRF8xMDBNKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gKFNQRUVEXzEwTSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPmJhc2VhZGRyICsgR0VNX0NGRykgJiBfX2NwdV90b19sZTMyKEdFTV9DT05GX1NQRUVEX1BIWV8xRykpIHsKKwkJCWlmICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICYgX19jcHVfdG9fbGUzMihHRU1fUENTX1NFTCkpCisJCQkJcmV0dXJuIChTUEVFRF8xMDAwTV9QQ1MpOworCQkJZWxzZQorCQkJCXJldHVybiAoU1BFRURfMTAwME0pOworCQl9IGVsc2UgeworCQkJaWYgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5iYXNlYWRkciArIEdFTV9DRkcpICYgX19jcHVfdG9fbGUzMihHRU1fQ09ORl9TUEVFRF9QSFlfMTAwTSkpCisJCQkJcmV0dXJuIChTUEVFRF8xMDBNKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gKFNQRUVEXzEwTSk7CisJCX0KKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBTZXQgQU1CQSBBSEIgYnVzIHdpZHRoLgorICogQU1CQV9BSEJfMzI6CisgKiBBTUJBX0FIQl82NDoKKyAqIEFNQkFfQUhCXzEyODoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX3NldF9haGJfd2lkdGgoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIE1BQ19BSEJfV0lEVEggZ2VtX2J1c3dpZHRoKQoreworCXN3aXRjaCAoZ2VtX2J1c3dpZHRoKSB7CisJY2FzZSBBTUJBX0FIQl8xMjg6CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMihHRU1fQUhCX1dJRFRIMSk7CisJCWJyZWFrOworCWNhc2UgQU1CQV9BSEJfNjQ6CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJj0gX19jcHVfdG9fbGUzMih+R0VNX0FIQl9XSURUSDEpOworCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX0FIQl9XSURUSDApOworCQlicmVhazsKKwljYXNlIEFNQkFfQUhCXzMyOgorCWRlZmF1bHQ6CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJj0gX19jcHVfdG9fbGUzMigofkdFTV9BSEJfV0lEVEgxKSAmICh+R0VNX0FIQl9XSURUSDApKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogR2V0IEFNQkEgQUhCIGJ1cyB3aWR0aC4gCisgKiBJdCByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAqIEFNQkFfQUhCXzMyLCBBTUJBX0FIQl82NCwgQU1CQV9BSEJfMTI4LAorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTUFDX0FIQl9XSURUSCBnZW1fZ2V0X2FoYl93aWR0aChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlpZiAoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmIF9fY3B1X3RvX2xlMzIoR0VNX0FIQl9XSURUSDEpKSB7CisJCXJldHVybiBBTUJBX0FIQl8xMjg7CisJfSBlbHNlIHsKKwkJaWYgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJiBfX2NwdV90b19sZTMyKEdFTV9BSEJfV0lEVEgwKSkgeworCQkJcmV0dXJuIEFNQkFfQUhCXzY0OworCQl9IGVsc2UgeworCQkJcmV0dXJuIEFNQkFfQUhCXzMyOworCQl9CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFNldCBNREMgY2xvY2sgZGl2aXNpb24uCisgKiBNRENfRElWXzg6CisgKiBNRENfRElWXzE2OgorICogTURDX0RJVl8zMjoKKyAqIE1EQ19ESVZfNDg6CisgKiBNRENfRElWXzY0OgorICogTURDX0RJVl85NjoKKyAqIE1EQ19ESVZfMTI4OgorICogTURDX0RJVl8yMjQ6CisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUgZm9yIHRoaXMgZnVuY3Rpb24uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9zZXRfbWRjX2RpdihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX01EQ19ESVYgZ2VtX21kY2RpdikKK3sKKwlzd2l0Y2ggKGdlbV9tZGNkaXYpIHsKKwljYXNlIE1EQ19ESVZfODoKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKCh+R0VNX01EQ19ESVYyKSAmICh+R0VNX01EQ19ESVYxKSAmICh+R0VNX01EQ19ESVYwKSk7CisJCWJyZWFrOworCWNhc2UgTURDX0RJVl8xNjoKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKCh+R0VNX01EQ19ESVYyKSAmICh+R0VNX01EQ19ESVYxKSk7CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMihHRU1fTURDX0RJVjApOworCQlicmVhazsKKwljYXNlIE1EQ19ESVZfMzI6CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJj0gX19jcHVfdG9fbGUzMigofkdFTV9NRENfRElWMikgJiAofkdFTV9NRENfRElWMCkpOworCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX01EQ19ESVYxKTsKKwkJYnJlYWs7CisJY2FzZSBNRENfRElWXzQ4OgorCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX01EQ19ESVYxIHwgR0VNX01EQ19ESVYwKTsKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fTURDX0RJVjIpOworCQlicmVhazsKKwljYXNlIE1EQ19ESVZfNjQ6CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJj0gX19jcHVfdG9fbGUzMigofkdFTV9NRENfRElWMSkgJiAofkdFTV9NRENfRElWMCkpOworCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX01EQ19ESVYyKTsKKwkJYnJlYWs7CisJY2FzZSBNRENfRElWXzk2OgorCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX01EQ19ESVYyIHwgR0VNX01EQ19ESVYwKTsKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fTURDX0RJVjEpOworCQlicmVhazsKKwljYXNlIE1EQ19ESVZfMTI4OgorCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX01EQ19ESVYyIHwgR0VNX01EQ19ESVYxKTsKKwkJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fTURDX0RJVjApOworCQlicmVhazsKKwljYXNlIE1EQ19ESVZfMjI0OgorCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpIHw9IF9fY3B1X3RvX2xlMzIoR0VNX01EQ19ESVYyIHwgR0VNX01EQ19ESVYxIHwgR0VNX01EQ19ESVYwKTsKKwkJYnJlYWs7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEdldCBNREMgY2xvY2sgZGl2aXNpb24uCisgKiBJdCByZXR1cm5zIG9uZSBvZiB0aGlzIHZhbHVlczoKKyAqIE1EQ19ESVZfOCwgTURDX0RJVl8xNiwgTURDX0RJVl8zMiwgTURDX0RJVl80OCwgTURDX0RJVl82NCwgTURDX0RJVl85NiwKKyAqIE1EQ19ESVZfMTI4LCBNRENfRElWXzIyNC4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK01BQ19NRENfRElWIGdlbV9nZXRfbWRjX2RpdihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlpZiAoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmIF9fY3B1X3RvX2xlMzIoR0VNX01EQ19ESVYyKSkgeworCQlpZiAoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmIF9fY3B1X3RvX2xlMzIoR0VNX01EQ19ESVYxKSkgeworCQkJaWYgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJiBfX2NwdV90b19sZTMyKEdFTV9NRENfRElWMCkpIHsKKwkJCQlyZXR1cm4gTURDX0RJVl8yMjQ7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBNRENfRElWXzEyODsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICYgX19jcHVfdG9fbGUzMihHRU1fTURDX0RJVjApKSB7CisJCQkJcmV0dXJuIE1EQ19ESVZfOTY7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBNRENfRElWXzY0OworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJiBfX2NwdV90b19sZTMyKEdFTV9NRENfRElWMSkpIHsKKwkJCWlmICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICYgX19jcHVfdG9fbGUzMihHRU1fTURDX0RJVjApKSB7CisJCQkJcmV0dXJuIE1EQ19ESVZfNDg7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBNRENfRElWXzMyOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJiBfX2NwdV90b19sZTMyKEdFTV9NRENfRElWMCkpIHsKKwkJCQlyZXR1cm4gTURDX0RJVl8xNjsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIE1EQ19ESVZfODsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFbmFibGUgdG8gcmVhZCBzbmFwc2hvdCB2YWx1ZXMgb2Ygc3RhdGlzdGljIHJlZ2lzdGVycy4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUgZm9yIHRoaXMgZnVuY3Rpb24uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9lbmFibGVfcmRfc25hcChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05UUk9MKSB8PSBfX2NwdV90b19sZTMyKEdFTV9SRUFEX1NOQVApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIERpc2FibGUgdG8gcmVhZCBzbmFwc2hvdCB2YWx1ZXMgb2Ygc3RhdGlzdGljIHJlZ2lzdGVycy4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUgZm9yIHRoaXMgZnVuY3Rpb24uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9kaXNhYmxlX3JkX3NuYXAoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09OVFJPTCkgJj0gX19jcHVfdG9fbGUzMih+R0VNX1JFQURfU05BUCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogVGFrZSBzbmFwc2hvdCBvZiBzdGF0aXN0aWMgcmVnaXN0ZXJzLiBXcml0aW5nIGEgb25lIHdpbGwgcmVjb3JkIHRoZSBjdXJyZW50IAorICogdmFsdWUgb2YgYWxsIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIGluIHRoZSBzbmFwc2hvdCByZWdpc3RlcnMgYW5kIGNsZWFyIHRoZSAKKyAqIHN0YXRpc3RpY3MgcmVnaXN0ZXJzLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBmdW5jdGlvbi4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX3Rha2Vfc25hcChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05UUk9MKSB8PSBfX2NwdV90b19sZTMyKEdFTV9UQUtFX1NOQVApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEdldCB0aGUgY3VycmVudCBsaW5rIHN0YXR1cyBhcyByZXR1cm5lZCBieSB0aGUgUEhZCisgKgorICogUmV0dXJuIHZhbHVlOgorICogIDAgICA6ICAgTGluayBpcyBkb3duLgorICogIDEgICA6ICAgTGluayBhY3RpdmUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZ2VtX2xpbmtfc3RhdHVzKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCXJldHVybiAoX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9TVEFUVVMpICYgX19jcHVfdG9fbGUzMihHRU1fTElOS19TVEFUVVMpKSA9PSBHRU1fTElOS19TVEFUVVMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIENoZWNrIGlmIHRoZSBQSFkgbWFuYWdlbWVudCBsb2dpYyBpcyBpZGxlLCBpLmUuIGNvbXBsZXRlZCBtYW5hZ2VtZW50CisgKiBvcGVyYXRpb24uCisgKgorICogUmV0dXJuIHZhbHVlOgorICogIDAgICA6ICAgUEhZIG1hbmFnZW1lbnQgbm90LWlkbGUuCisgKiAgMSAgIDogICBQSFkgbWFuYWdlbWVudCBjb21wbGV0ZWQuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZ2VtX3BoeV9tYW5faWRsZShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnBoeXJlZ2lzdGVycyArIEdFTV9ORVRfU1RBVFVTKSAmIF9fY3B1X3RvX2xlMzIoR0VNX1BIWV9JRExFKSkgPT0gR0VNX1BIWV9JRExFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSB0cmFuc21pdCBzdGF0dXMgcmVnaXN0ZXIuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZQorICogcmVnaXN0ZXIuICBUaGlzIHNob3VsZCBiZSBtYXNrZWQgYXBwcm9wcmlhdGVseSB0byBvYnRhaW4gdGhlIHJlbGV2YW50IHN0YXR1cy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiBSZXR1cm5zIGN1cnJlbnQgdmFsdWUgb2YgdHJhbnNtaXQgc3RhdHVzIHJlZ2lzdGVyLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGdlbV9nZXRfdHhfc3RhdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9UWF9TVEFUVVMpKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUmVzZXQgdGhlIHNwZWNpZmllZCBiaXRzIG9mIHRoZSB0cmFuc21pdCBzdGF0dXMgcmVnaXN0ZXIuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fcmVzZXRfdHhfc3RhdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywJLyogUG9pbnRlciB0byBkZXZpY2Ugc3RydWN0dXJlLiAqLworCQkgICAgICAgdTMyIHJzdF9zdGF0dXMJLyogU3RhdHVzIHRvIHJlc2V0LiAqLworICAgICkgeworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fVFhfU1RBVFVTKSB8PSBfX2NwdV90b19sZTMyKHJzdF9zdGF0dXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIHJlY2VpdmUgc3RhdHVzIHJlZ2lzdGVyLgorICogVGhlIHJldHVybiB2YWx1ZSBpcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqIHJlZ2lzdGVyLiAgVGhpcyBzaG91bGQgYmUgbWFza2VkIGFwcHJvcHJpYXRlbHkgdG8gb2J0YWluIHRoZSByZWxldmFudCBzdGF0dXMuCisgKgorICogUmV0dXJucyBjdXJyZW50IHJlY2VpdmUgc3RhdHVzLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyIGdlbV9nZXRfcnhfc3RhdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9SWF9TVEFUVVMpKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUmVzZXQgdGhlIHNwZWNpZmllZCBiaXRzIG9mIHRoZSByZWNlaXZlIHN0YXR1cyByZWdpc3Rlci4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9yZXNldF9yeF9zdGF0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLAkvKiBQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUuICovCisJCSAgICAgICB1MzIgcnN0X3N0YXR1cwkvKiBTdGF0dXMgdG8gcmVzZXQuICovCisgICAgKSB7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9SWF9TVEFUVVMpIHw9IF9fY3B1X3RvX2xlMzIocnN0X3N0YXR1cyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRW5hYmxlIGp1bWJvIGZyYW1lcyB0byBiZSBhY2NlcHRlZC4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9lbmFibGVfcnhfam1iKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMihHRU1fUlhfSlVNQk8pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIERpc2FibGUganVtYm8gZnJhbWVzIHRvIGJlIGFjY2VwdGVkLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2Rpc2FibGVfcnhfam1iKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgJj0gX19jcHVfdG9fbGUzMih+R0VNX1JYX0pVTUJPKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFbmFibGUgb25seSBWTEFOIGZyYW1lcyB0byBiZSBhY2NlcHRlZCwgYWxsIG90aGVyIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZC4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9lbmFibGVfdmxhbl9vbmx5KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMihHRU1fVkxBTl9PTkxZKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBEaXNhYmxlIFZMQU4gZnJhbWUgb25seSBtb2RlLiBBbGwgZnJhbWVzIHdpbGwgYmUgYWNjZXB0ZWQuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fZGlzYWJsZV92bGFuX29ubHkoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9ORVRfQ09ORklHKSAmPSBfX2NwdV90b19sZTMyKH5HRU1fVkxBTl9PTkxZKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLgorICogVGhpcyByZXR1cm5zIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIHdpdGggdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cywKKyAqIHRoaXMgc2hvdWxkIGJlIG1hc2tlZCBhcHByb3ByaWF0ZWx5IHRvIGdldCB0aGUgcmVxdWlyZWQgc3RhdHVzLgorICogTm90ZSB0aGF0IHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQgb24gcmVhZCwgc28KKyAqIHRoZSByZXR1cm5lZCB2YWx1ZSBzaG91bGQgYmUgc3RvcmVkIGlmIGZ1cnRoZXIgcHJvY2Vzc2luZyByZXF1aXJlZC4KKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGludGVycnVwdCBzdGF0dXMuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2VtX2dldF9pcnFfc3RhdChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JUlFfU1RBVFVTKSkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFNldCBzcGVjaWZpZWQgYml0cyBpbiB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4KKyAqIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGRlYnVnIHB1cnBvc2VzIHRvIG1hbnVhbGx5IGFjdGl2YXRlIGFuIGludGVycnVwdC4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9zZXRfaXJxX3N0YXQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHUzMiBpcnFfc3RhdHVzKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSVJRX1NUQVRVUykgfD0gX19jcHVfdG9fbGUzMihpcnFfc3RhdHVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFbmFibGUgc3BlY2lmaWVkIGludGVycnVwdHMuCisgKiBUaGUgc3BlY2lmaWVkIGludGVycnVwdCBiaXRzIGFyZSBlbmFibGVkIGJ5IHVubWFza2luZyB0aGVtLgorICogTm90ZSB0aGF0IHRoaXMgYXBwZW5kcyB0byB0aGUgZXhpc3RpbmcgaW50ZXJydXB0IGVuYWJsZSBsaXN0LgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX2VuYWJsZV9pcnEoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHUzMiBpcnFfZW4pCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JUlFfRU5BQkxFKSB8PSBfX2NwdV90b19sZTMyKGlycV9lbik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRGlzYWJsZSBzcGVjaWZpZWQgaW50ZXJydXB0cy4KKyAqIFRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cyBhcmUgbWFza2VkIG91dCBzbyB0aGF0IHRoZXkgZG8gbm90IGdlbmVyYXRlIGFuCisgKiBpbnRlcnJ1cHQuCisgKiBOb3RlIHRoYXQgdGhpcyBhcHBlbmRzIHRvIHRoZSBleGlzdGluZyBpbnRlcnJ1cHQgbWFzayBsaXN0LgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX21hc2tfaXJxKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgaXJxX21hc2spCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JUlFfRElTQUJMRSkgfD0gX19jcHVfdG9fbGUzMihpcnFfbWFzayk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogT2J0YWluIHRoZSBjdXJyZW50IGludGVycnVwdCBtYXNrIHZhbHVlLgorICogVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hpY2ggaW50ZXJydXB0cyBhcmUgY3VycmVudGx5IG1hc2tlZCBvdXQgaS5lLiBkbworICogbm90IGdlbmVyYXRlIGFuIGludGVycnVwdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBpbnRlcnJ1cHQgbWFzayBzdGF0dXMuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2VtX2dldF9pcnFfbWFzayhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JUlFfTUFTSykpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBXcml0ZSB0byB0aGUgUEhZIG1hbmFnZW1lbnQgcmVnaXN0ZXJzLgorICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgc2V0cyBvZmYgdGhlIFBIWSBtYW5hZ2VtZW50IG9wZXJhdGlvbiwgY29tcGxldGlvbiB3aWxsCisgKiBiZSBpbmRpY2F0ZWQgYnkgYW4gaW50ZXJydXB0LgorICogVGhlIGlucHV0IHBhcmFtZXRlcnMgYXJlIHRoZSBQSFkgYWRkcmVzcywgcmVnaXN0ZXIgYWRkcmVzcywgYW5kIHRoZSAxNi1iaXQKKyAqIGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAqIE5vdGUgdGhhdCB0aGUgTURJTyBlbmFibGUgcmVnaXN0ZXIgbXVzdCBiZSBvbi4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgMCAgIDogICBPSworICogIC0xICA6ICAgSW52YWxpZCBpbnB1dCByYW5nZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBnZW1fcGh5X21hbl93cihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgdTggcGh5X2FkZHIsIHU4IHJlZ19hZGRyLCB1MzIgZGF0YSkgeworCXUzMiB3cml0ZV9kYXRhOworCisJaWYgKChwaHlfYWRkciA+IDB4MUYpIHx8IChyZWdfYWRkciA+IDB4MUYpIHx8IChkYXRhID4gMHhGRkZGKSkgeworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJd3JpdGVfZGF0YSA9IDB4NTAwMjAwMDA7CisJCXdyaXRlX2RhdGEgfD0gKChwaHlfYWRkciA8PCAyMykgfCAocmVnX2FkZHIgPDwgMTgpIHwgZGF0YSk7CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5waHlyZWdpc3RlcnMgKyBHRU1fUEhZX01BTikgPSBfX2NwdV90b19sZTMyKHdyaXRlX2RhdGEpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUGVyZm9ybSBQSFkgbWFuYWdlbWVudCByZWdpc3RlciByZWFkIG9wZXJhdGlvbi4KKyAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IHNldHMgb2ZmIHRoZSBQSFkgbWFuYWdlbWVudCBvcGVyYXRpb24sIGNvbXBsZXRpb24gd2lsbAorICogYmUgaW5kaWNhdGVkIGJ5IGFuIGludGVycnVwdC4KKyAqIFRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHRvIGJlIHJlYWQKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgMCAgIDogICBPSworICogIC0xICA6ICAgSW52YWxpZCBpbnB1dCByYW5nZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBnZW1fcGh5X21hbl9yZChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgdTggcGh5X2FkZHIsIHU4IHJlZ19hZGRyKSB7CisJdTMyIHdyaXRlX2RhdGE7CisKKwlpZiAoKHBoeV9hZGRyID4gMHgxRikgfHwgKHJlZ19hZGRyID4gMHgxRikpIHsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCXdyaXRlX2RhdGEgPSAweDYwMDIwMDAwOworCQl3cml0ZV9kYXRhIHw9ICgocGh5X2FkZHIgPDwgMjMpIHwgKHJlZ19hZGRyIDw8IDE4KSk7CisJCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5waHlyZWdpc3RlcnMgKyBHRU1fUEhZX01BTikgPSBfX2NwdV90b19sZTMyKHdyaXRlX2RhdGEpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogUmVhZCB0aGUgZGF0YSBzZWN0aW9uIG9mIHRoZSBQSFkgbWFuYWdlbWVudCByZWdpc3Rlci4gIEFmdGVyIGEgcmVhZCBvcGVyYXRpb24KKyAqIHRoZSBkYXRhIGZyb20gdGhlIFBIWSB3aWxsIGJlIHN0b3JlZCBoZXJlLgorICoKKyAqIFJldHVybiB2YWx1ZSBpcyB0aGUgbG93ZXIgMTYtYml0cyBvZiB0aGUgUEhZIG1hbmFnZW1lbnQgcmVnaXN0ZXIuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2VtX3BoeV9tYW5fZGF0YShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnBoeXJlZ2lzdGVycyArIEdFTV9QSFlfTUFOKSAmIF9fY3B1X3RvX2xlMzIoMHhGRkZGKSkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFJlYWQgdGhlIHBhdXNlIHRpbWUgcmVnaXN0ZXIuCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgcGF1c2UgdGltZSByZWdpc3RlciB3aGljaCB3aWxsCisgKiBkZWNyZW1lbnQgd2hlbiB0aGUgTUFDIGhhcyBnb25lIGludG8gcGF1c2UgbW9kZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBnZW1fcGF1c2VfdGltZShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9SWF9QQVVTRV9USU1FKSkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFNldCB0aGUgaWQtY2hlY2sgcmVnaXN0ZXJzIG9mIHRoZSBNQUMuCisgKiBUaGVzZSByZWdpc3RlcnMgYXJlIHVzZWQgdG8gY2hlY2sgdGhlIHR5cGUtaWQgZmllbGQgb2YgdGhlIGluY29taW5nIGZyYW1lcywgCisgKiBpZiBtYXRjaGVkLCB0aGUgYXBwcm9wcmlhdGUgc3RhdHVzIGJpdCB3aWxsIGJlIHNldCBpbiB3b3JkIDEgb2YgdGhlIHJlY2VpdmUKKyAqIGRlc2NyaXB0b3IgZm9yIHRoYXQgZnJhbWUuCisgKiBUaGUgaW5wdXQgcGFyYW1ldGVyIGlzIHRydW5jYXRlZCB0byAxNi1iaXRzLgorICoKKyAqIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX3NldF9pZF9jaGVjazEoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHUzMiBpZF9jaGVjaykgeworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSURfQ0hFQ0sxKSA9IF9fY3B1X3RvX2xlMzIoaWRfY2hlY2sgJiAweEZGRkYpOworfQorCit2b2lkIGdlbV9zZXRfaWRfY2hlY2syKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgaWRfY2hlY2spIHsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0lEX0NIRUNLMikgPSBfX2NwdV90b19sZTMyKGlkX2NoZWNrICYgMHhGRkZGKTsKK30KKwordm9pZCBnZW1fc2V0X2lkX2NoZWNrMyhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgdTMyIGlkX2NoZWNrKSB7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JRF9DSEVDSzMpID0gX19jcHVfdG9fbGUzMihpZF9jaGVjayAmIDB4RkZGRik7Cit9CisKK3ZvaWQgZ2VtX3NldF9pZF9jaGVjazQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIHUzMiBpZF9jaGVjaykgeworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSURfQ0hFQ0s0KSA9IF9fY3B1X3RvX2xlMzIoaWRfY2hlY2sgJiAweEZGRkYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIGlkLWNoZWNrIHJlZ2lzdGVycyBpbiB0aGUgTUFDLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICBWYWx1ZSBvZiBJRCBjaGVjayByZWdpc3Rlci4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBnZW1fZ2V0X2lkX2NoZWNrMShzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JRF9DSEVDSzEpKSk7Cit9CisKK3UzMiBnZW1fZ2V0X2lkX2NoZWNrMihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JRF9DSEVDSzIpKSk7Cit9CisKK3UzMiBnZW1fZ2V0X2lkX2NoZWNrMyhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JRF9DSEVDSzMpKSk7Cit9CisKK3UzMiBnZW1fZ2V0X2lkX2NoZWNrNChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JRF9DSEVDSzQpKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU2V0IHRoZSBoYXNoIHJlZ2lzdGVyIG9mIHRoZSBNQUMuCisgKiBUaGlzIHJlZ2lzdGVyIGlzIHVzZWQgZm9yIG1hdGNoaW5nIHVuaWNhc3QgYW5kIG11bHRpY2FzdCBmcmFtZXMuCisgKiBUaGUgcGFyYW1ldGVyIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGEgcG9pbnRlciB0byB0eXBlIE1BQ19BRERSIGFzCisgKiBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZS4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9zZXRfaGFzaChzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX0FERFIgKmhhc2hfYWRkcikgeworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSEFTSF9CT1QpID0gaGFzaF9hZGRyLT5ib3R0b207CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9IQVNIX1RPUCkgPSBoYXNoX2FkZHItPnRvcDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGhhc2ggcmVnaXN0ZXJzIG9mIHRoZSBNQUMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2YgdHlwZSBNQUNfQUREUgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworTUFDX0FERFIgZ2VtX2dldF9oYXNoKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCU1BQ19BRERSIGFkZHI7CisKKwlhZGRyLmJvdHRvbSA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSEFTSF9CT1QpOworCWFkZHIudG9wID0gKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9IQVNIX1RPUCk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBTZXR1cCBhbGwgdGhlIHNwZWNpZmljIGFkZHJlc3MgcmVnaXN0ZXJzIGZvciB0aGUgTUFDLgorICogVGhlc2UgcmVnaXN0ZXJzIGFyZSBtYXRjaGVkIGFnYWluc3QgaW5jb21pbmcgZnJhbWVzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQorICogZnJhbWUgc2hvdWxkIGJlIGNvcGllZCB0byBtZW1vcnkuCisgKiBUaGUgaW5wdXQgcGFyYW1ldGVyIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGEgcG9pbnRlciB0byB0eXBlIFNQRUNfQUREUgorICogYXMgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUuCisgKgorICogVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBnZW1fc2V0X2FkZHJlc3Moc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIFNQRUNfQUREUiAqc3BlY19hZGRyKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIxX0JPVCkgPSBzcGVjX2FkZHItPm9uZS5ib3R0b207CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9MQUREUjFfVE9QKSA9IHNwZWNfYWRkci0+b25lLnRvcDsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSMl9CT1QpID0gc3BlY19hZGRyLT50d28uYm90dG9tOworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIyX1RPUCkgPSBzcGVjX2FkZHItPnR3by50b3A7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9MQUREUjNfQk9UKSA9IHNwZWNfYWRkci0+dGhyZWUuYm90dG9tOworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIzX1RPUCkgPSBzcGVjX2FkZHItPnRocmVlLnRvcDsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSNF9CT1QpID0gc3BlY19hZGRyLT5mb3VyLmJvdHRvbTsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSNF9UT1ApID0gc3BlY19hZGRyLT5mb3VyLnRvcDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBHZXQgdGhlIGN1cnJlbnQgc2V0IG9mIHNwZWNpZmljIG1hdGNoIGFkZHJlc3NlcyBmb3IgdGhlIE1BQy4KKyAqIE5vdGUgdGhhdCBhIHBvaW50ZXIgaXMgbm90IHJldHVybmVkIGFzIHRoaXMgd291bGQgZ2l2ZSBkaXJlY3QgYWNjZXNzIHRvIHRoZQorICogTUFDIGFkZHJlc3Mgc3BhY2Ugd2hpY2ggbWF5IGNhdXNlIHVucHJlZGljdGFibGUgYmVoYXZpb3VyIGlmIHdyb25nbHkgdXNlZC4KKyAqCisgKiBSZXR1cm4gdHlwZSBpcyBvZiB0eXBlIFNQRUNfQUREUiBhcyBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1NQRUNfQUREUiBnZW1fZ2V0X2FkZHJlc3Moc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMpCit7CisgICAgICAgIFNQRUNfQUREUiBzcGVjX2FkZHI7CisKKwlzcGVjX2FkZHIub25lLmJvdHRvbSA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIxX0JPVCk7CisJc3BlY19hZGRyLm9uZS50b3AgPSAqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSMV9UT1ApOworCXNwZWNfYWRkci50d28uYm90dG9tID0gKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9MQUREUjJfQk9UKTsKKwlzcGVjX2FkZHIudHdvLnRvcCA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIyX1RPUCk7CisJc3BlY19hZGRyLnRocmVlLmJvdHRvbSA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIzX0JPVCk7CisJc3BlY19hZGRyLnRocmVlLnRvcCA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIzX1RPUCk7CisJc3BlY19hZGRyLmZvdXIuYm90dG9tID0gKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9MQUREUjRfQk9UKTsKKwlzcGVjX2FkZHIuZm91ci50b3AgPSAqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSNF9UT1ApOworCisgICAgICAgIHJldHVybiBzcGVjX2FkZHI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU2V0IHNwZWNpZmljIGxvY2FsIGFkZHJlc3NlcyBvZiB0aGUgTUFDLgorICogUmF0aGVyIHRoYW4gc2V0dGluZyB1cCBhbGwgZm91ciBzcGVjaWZpYyBhZGRyZXNzZXMsIHRoaXMgZnVuY3Rpb24gc2V0cyB0aGVtCisgKiB1cCBpbmRpdmlkdWFsbHkuICBUaGUgaW5wdXQgcGFyYW1ldGVyIHNob3VsZCBiZSBhIHBvaW50ZXIgdG8gdHlwZSBNQUNfQUREUi4KKyAqCisgKiBUaGVyZSBhcmUgbm8gcmV0dXJuIHZhbHVlcy4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZ2VtX3NldF9sYWRkcjEoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIE1BQ19BRERSICphZGRyZXNzKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIxX0JPVCkgPSBhZGRyZXNzLT5ib3R0b207CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9MQUREUjFfVE9QKSA9IGFkZHJlc3MtPnRvcDsKK30KKwordm9pZCBnZW1fc2V0X2xhZGRyMihzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYywgTUFDX0FERFIgKmFkZHJlc3MpCit7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9MQUREUjJfQk9UKSA9IGFkZHJlc3MtPmJvdHRvbTsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSMl9UT1ApID0gYWRkcmVzcy0+dG9wOworfQorCit2b2lkIGdlbV9zZXRfbGFkZHIzKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCBNQUNfQUREUiAqYWRkcmVzcykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSM19CT1QpID0gYWRkcmVzcy0+Ym90dG9tOworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIzX1RPUCkgPSBhZGRyZXNzLT50b3A7Cit9CisKK3ZvaWQgZ2VtX3NldF9sYWRkcjQoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIE1BQ19BRERSICphZGRyZXNzKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFI0X0JPVCkgPSBhZGRyZXNzLT5ib3R0b207CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9MQUREUjRfVE9QKSA9IGFkZHJlc3MtPnRvcDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBHZXQgc3BlY2lmaWMgbG9jYWwgYWRkcmVzc2VzIG9mIHRoZSBNQUMuCisgKiBUaGlzIGFsbG93cyByZXR1cm5pbmcgb2YgYSBzaW5nbGUgc3BlY2lmaWMgYWRkcmVzcyBzdG9yZWQgaW4gdGhlIE1BQy4KKyAqCisgKiBSZXR1cm4gdmFsdWUgaWYgb2YgdHlwZSBNQUNfQUREUiBhcyBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZS4KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK01BQ19BRERSIGdlbV9nZXRfbGFkZHIxKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCU1BQ19BRERSIGFkZHI7CisKKwlhZGRyLmJvdHRvbSA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIxX0JPVCk7CisJYWRkci50b3AgPSAqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSMV9UT1ApOworCisJcmV0dXJuIGFkZHI7Cit9CisKK01BQ19BRERSIGdlbV9nZXRfbGFkZHIyKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCU1BQ19BRERSIGFkZHI7CisKKwlhZGRyLmJvdHRvbSA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIyX0JPVCk7CisJYWRkci50b3AgPSAqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSMl9UT1ApOworCisJcmV0dXJuIGFkZHI7Cit9CisKK01BQ19BRERSIGdlbV9nZXRfbGFkZHIzKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCU1BQ19BRERSIGFkZHI7CisKKwlhZGRyLmJvdHRvbSA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFIzX0JPVCk7CisJYWRkci50b3AgPSAqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSM19UT1ApOworCisJcmV0dXJuIGFkZHI7Cit9CisKK01BQ19BRERSIGdlbV9nZXRfbGFkZHI0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCU1BQ19BRERSIGFkZHI7CisKKwlhZGRyLmJvdHRvbSA9ICoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTEFERFI0X0JPVCk7CisJYWRkci50b3AgPSAqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSNF9UT1ApOworCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogT2J0YWluIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyBzdHJ1Y3R1cmUuCisgKiB0eXBlIEdFTV9TVEFUUyBhcyBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZS4KKyAqIE5vdGUgdGhhdCB0aGlzIG9wZXJhdGlvbiBpcyByZWxhdGl2ZWx5IHNsb3cgYXMgaXQgaXMgY29weWluZyBhbGwgdGhlCisgKiBzdGF0aXN0aWNzIHJlZ2lzdGVyIHZhbHVlcyByYXRoZXIgdGhhbiBwcm92aWRpbmcgYSBwb2ludGVyIHJlZmVyZW5jZSB0byB0aGVtLgorICogTm90ZSBhbHNvIHRoYXQgdGhlIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIHdpbGwgYWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYXJlZAorICogYWZ0ZXIgdGhpcyBvcGVyYXRpb24uCisgKgorICogUmV0dXJucyB0aGUgZW50aXJlIHN0YXRpc3RpY3MgcmVnaXN0ZXIgYmxvY2sgZm9yIHRoZSBNQUMgaW4gYSBzdHJ1Y3R1cmUgb2YKKyAqIHR5cGUgR0VNX1NUQVRTCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitHRU1fU1RBVFMgZ2VtX2dldF9zdGF0cyhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwlyZXR1cm4gKCooR0VNX1NUQVRTICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fT0NUX1RYX0JPVCkpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFNldCB0aGUgdmFsdWVzIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycy4KKyAqIFRoaXMgaXMgZm9yIGRlYnVnIG9ubHkgYW5kIGFsbG93cyByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBzdGF0aXN0aWMKKyAqIHJlZ2lzdGVycyB0byB2ZXJpZnkgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9zZXRfc3RhdHMoc3RydWN0IGdlbWFjX2RldiAqZ2VtYWMsIEdFTV9TVEFUUyAqc3RhdHMpCit7CisvLwlnZW1hYy0+cmVnaXN0ZXJzLT5zdGF0cyA9ICpzdGF0czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBXcml0ZSB0byBhIHNwZWNpZmljIE1BQyBtZW1vcnkgYWRkcmVzcy4gIFRoZSBkZWZpbmVzIGluIHRoZSBoZWFkZXIgZmlsZQorICogc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMuCisgKiBOb3RlOiBjYXJlIHNob3VsZCBiZSB0YWtlbiB3aGVuIHVzaW5nIHRoaXMgZnVuY3Rpb24gc28gYXMgbm90IHRvIHBhc3MgbnVsbAorICogcG9pbnRlcnMgb3Igd3JpdGUgdG8gcmVhZCBvbmx5IHJlZ2lzdGVycyBldGMuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogIDAgICA6ICAgT0sKKyAqICAtMSAgOiAgIEludmFsaWQgaW5wdXQgcmFuZ2UuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZ2VtX3JlZ2lzdGVyX3dyKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgcmVnX2FkZHIsIHUzMiBkYXRhKQoreworCWlmIChyZWdfYWRkciA+IEdFTV9SRUdfVE9QKSB7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgcmVnX2FkZHIpID0gX19jcHVfdG9fbGUzMihkYXRhKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFJlYWQgZnJvbSBhIHNwZWNpZmljIE1BQyBtZW1vcnkgYWRkcmVzcy4gVGhlIGRlZmluZXMgaW4gdGhlIGhlYWRlciBmaWxlCisgKiBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcy4KKyAqIE5vdGUgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIGFkZHJlc3MgcmVxdWVzdGVkIGlzIG5vdCBjaGVja2VkLgorICoKKyAqIFJldHVybnMgcmVnaXN0ZXIgY29udGVudHMuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZ2VtX3JlZ2lzdGVyX3JkKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjLCB1MzIgcmVnX2FkZHIpCit7CisJcmV0dXJuIChfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyByZWdfYWRkcikpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBSZXNldCB0aGUgTUFDIGRldmljZSB0byBpdHMgZGVmYXVsdCB2YWx1ZSBhbmQgbG9hZCB1cCB0aGUgTUFDIGFkZHJlc3Mgc3RvcmVkCisgKiBpbiB0aGUgaGVhZGVyIGZpbGUgaW50byBzcGVjaWZpYyBhZGRyZXNzIDEuICBUaGUgTUFDIHdpbGwgYmUgaGVsZCBpbgorICogcXVpZXNjZW50IHN0YXRlLgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHRvIGluaXRpYWxpc2UgYW5kIGNoZWNrIHRoZSBkZXZpY2UgcHJpb3IgdG8KKyAqIHNldHRpbmcgdXAgdGhlIGJ1ZmZlciBxdWV1ZXMgYW5kIGVuYWJsaW5nIHRoZSBNQUMuICBJZiBpdCBpcyBjYWxsZWQgbWlkIHdheQorICogdGhyb3VnaCBvcGVyYXRpb24sIHRoZSBNQUMgaXMgcmVzZXQgdG8gZGVmYXVsdCB2YWx1ZSBhbmQgYW55IHBlbmRpbmcgZnJhbWVzCisgKiB3aWxsIGJlIGxvc3QuCisgKiBOb3RlIHRoYXQgdGhlIHZhbHVlcyBpbiB0aGUgc3RydWN0IGdlbWFjX2RldiBzb2Z0d2FyZSBzdHJ1Y3R1cmUgYXJlIG5vdCByZXNldCwgb25seQorICogdGhlIE1BQyByZWdpc3RlcnMgYXJlIHJlc2V0LiAgVGhpcyBpcyB0byBhbGxvdywgaWYgbmVjZXNzYXJ5IHRvIHJlY292ZXIgdGhlCisgKiBidWZmZXJzIGFuZCByZWxvYWQgdGhlbSBpbnRvIHRoZSBNQUMsIGhvd2V2ZXIgcHJpb3IgdG8gZG9pbmcgdGhpcywgdGhleQorICogc2hvdWxkIGJlIGNsZWFyZWQgZmlyc3QuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogIDAgICA6ICAgT0sKKyAqICAtMSAgOiAgIEVycm9yIGluIHdyaXRlL3JlYWQgY2hlY2sgb24gaW5pdGlhbGlzYXRpb24uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZ2VtX3Jlc2V0KHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCU1BQ19BRERSIHplcm9fYWRkcmVzcyA9IHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9OworCU1BQ19BRERSIGVuZXRfYWRkcmVzcyA9IHplcm9fYWRkcmVzczsKKwlpbnQgc3RhdHNfbGVuZ3RoOworCWludCBsb29wX2k7CisKKwlzdGF0c19sZW5ndGggPSBzaXplb2YoR0VNX1NUQVRTKSAvIDQ7CisKKwkvKiBXcml0ZSB0byByZWdpc3RlcnMgYW5kIHNldCBkZWZhdWx0IHZhbHVlcy4gKi8KKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05UUk9MKSA9IF9fY3B1X3RvX2xlMzIoR0VNX1NUQVRTX0NMUiB8IEdFTV9NRElPX0VOQUJMRUQpOworI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMCkKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpID0gX19jcHVfdG9fbGUzMihHRU1fREVGX0RVUExFWCk7CisjZWxzZQorCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgPSBfX2NwdV90b19sZTMyKDApOworI2VuZGlmCisJZ2VtX3NldF9sb29wKGdlbWFjLCBHRU1fREVGX0xPT1ApOworCWdlbV9zZXRfbWRjX2RpdihnZW1hYywgR0VNX0RFRl9QQ0xLX0RJVik7CisJZ2VtX3NldF9zcGVlZChnZW1hYywgR0VNX0RFRl9TUEVFRCk7CisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorCWdlbV9zZXRfYWhiX3dpZHRoKGdlbWFjLCBHRU1fREVGX0FIQl9XSURUSCk7CisjZW5kaWYKKworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fVFhfU1RBVFVTKSA9IF9fY3B1X3RvX2xlMzIoMHhGRkZGRkZGRik7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9SWF9RUFRSKSA9IF9fY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCk7CisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fVFhfUVBUUikgPSBfX2NwdV90b19sZTMyKDB4MDAwMDAwMDApOworI2VuZGlmCisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9SWF9TVEFUVVMpID0gX19jcHVfdG9fbGUzMigweEZGRkZGRkZGKTsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0lSUV9ESVNBQkxFKSA9IF9fY3B1X3RvX2xlMzIoMHhGRkZGRkZGRik7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JUlFfU1RBVFVTKSA9IF9fY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCk7CisKKwlnZW1fc2V0X2hhc2goZ2VtYWMsICZ6ZXJvX2FkZHJlc3MpOworCWdlbV9zZXRfbGFkZHIxKGdlbWFjLCAmZW5ldF9hZGRyZXNzKTsKKwlnZW1fc2V0X2xhZGRyMihnZW1hYywgJnplcm9fYWRkcmVzcyk7CisJZ2VtX3NldF9sYWRkcjMoZ2VtYWMsICZ6ZXJvX2FkZHJlc3MpOworCWdlbV9zZXRfbGFkZHI0KGdlbWFjLCAmemVyb19hZGRyZXNzKTsKKworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSURfQ0hFQ0sxKSA9IF9fY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCk7CisJKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JRF9DSEVDSzIpID0gX19jcHVfdG9fbGUzMigweDAwMDAwMDAwKTsKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0lEX0NIRUNLMykgPSBfX2NwdV90b19sZTMyKDB4MDAwMDAwMDApOworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSURfQ0hFQ0s0KSA9IF9fY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCk7CisKKwkvKiBOb3cgcmVhZCBiYWNrIHZhbHVlcyBhbmQgcmV0dXJuIGlmIG5vdCBjb3JyZWN0LiAqLworCWlmICgoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JRF9DSEVDSzEpICE9IF9fY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkpIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0lEX0NIRUNLMikgIT0gX19jcHVfdG9fbGUzMigweDAwMDAwMDAwKSkgfHwKKwkgICAgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSURfQ0hFQ0szKSAhPSBfX2NwdV90b19sZTMyKDB4MDAwMDAwMDApKSB8fAorCSAgICAoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9JRF9DSEVDSzQpICE9IF9fY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkpIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSNF9CT1QpICE9IHplcm9fYWRkcmVzcy5ib3R0b20pIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSNF9UT1ApICE9IHplcm9fYWRkcmVzcy50b3ApIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSM19CT1QpICE9IHplcm9fYWRkcmVzcy5ib3R0b20pIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSM19UT1ApICE9IHplcm9fYWRkcmVzcy50b3ApIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSMl9CT1QpICE9IHplcm9fYWRkcmVzcy5ib3R0b20pIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSMl9UT1ApICE9IHplcm9fYWRkcmVzcy50b3ApIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSMV9CT1QpICE9IGVuZXRfYWRkcmVzcy5ib3R0b20pIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0xBRERSMV9UT1ApICE9IGVuZXRfYWRkcmVzcy50b3ApIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX0hBU0hfQk9UKSAhPSB6ZXJvX2FkZHJlc3MuYm90dG9tKSB8fAorCSAgICAoKih2b2xhdGlsZSB1MzIgKikoZ2VtYWMtPnJlZ2lzdGVycyArIEdFTV9IQVNIX1RPUCkgIT0gemVyb19hZGRyZXNzLnRvcCkgfHwKKwkgICAgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSVJRX1NUQVRVUykgIT0gX19jcHVfdG9fbGUzMigweDAwMDAwMDAwKSkgfHwKKwkgICAgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fSVJRX01BU0spICE9IF9fY3B1X3RvX2xlMzIoMHgwMDAzRkZGRikpIHx8CisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX1JYX1NUQVRVUykgIT0gX19jcHVfdG9fbGUzMigweDAwMDAwMDAwKSkgfHwKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDApCisJICAgICgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX1RYX1FQVFIpICE9IF9fY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkpIHx8CisjZW5kaWYKKwkgICAgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fUlhfUVBUUikgIT0gX19jcHVfdG9fbGUzMigweDAwMDAwMDAwKSkgfHwKKwkgICAgKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fVFhfU1RBVFVTKSAhPSBfX2NwdV90b19sZTMyKDB4MDAwMDAwMDApKQorCSAgICApIHsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoKF9fbGUzMl90b19jcHUoKCoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTlRST0wpICYgX19jcHVfdG9fbGUzMihHRU1fTURJT19FTikpKSAhPSAoMHgwMDAwMDAwMCB8IEdFTV9NRElPX0VOQUJMRUQpKSB8fAorCQkgICAoZ2VtX2dldF9sb29wKGdlbWFjKSAhPSBHRU1fREVGX0xPT1ApIHx8CisJCSAgIC8vICAgICAgICAgICAoZ2VtX2dldF9zcGVlZChnZW1hYykgIT0gR0VNX0RFRl9TUEVFRCkgIHx8CisJCSAgIChnZW1fZ2V0X21kY19kaXYoZ2VtYWMpICE9IEdFTV9ERUZfUENMS19ESVYpCisJICAgICkgeworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJZm9yIChsb29wX2kgPSAwOyBsb29wX2kgPCBzdGF0c19sZW5ndGg7IGxvb3BfaSsrKSB7CisJCQlpZiAoX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX09DVF9UWF9CT1QgKyA0ICogbG9vcF9pKSkgIT0gMHgwMDAwMDAwMCkgeworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCisJCXJldHVybiAwOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFbmFibGUgbGVuZ3RoIGZpZWxkIGNoZWNraW5nIGZlYXR1cmUuCisgKiBUaGUgbGVuZ3RoIGZpZWxkIGNoZWNrIGZlYXR1cmUgYXV0b21hdGljYWxseSBkaXNjYXJkcyBmcmFtZXMgdGhhdCBoYXMgYSBmcmFtZQorICogbGVuZ3RoIHNtYWxsZXIgdGhhbiB0aGF0IHJlcG9ydGVkIGluIHRoZSBsZW5ndGggZmllbGQgb2YgdGhlIGhlYWRlci4KKyAqCisgKiBOb3RlIHRoYXQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBJRUVFIHNwZWMsIGZyYW1lcyB0aGF0IGFyZSBsb25nZXIgdGhhbiB0aGF0CisgKiByZXBvcnRlZCBpbiBsZW5ndGggZmllbGQgaXMgc3RpbGwgYWNjZXB0ZWQgYXMgYSB2YWxpZCBmcmFtZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9lbmFibGVfbGVuX2NoZWNrKHN0cnVjdCBnZW1hY19kZXYgKmdlbWFjKQoreworCSoodm9sYXRpbGUgdTMyICopKGdlbWFjLT5yZWdpc3RlcnMgKyBHRU1fTkVUX0NPTkZJRykgfD0gX19jcHVfdG9fbGUzMihHRU1fUlhfTEVOX0NISyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRGlzYWJsZSBsZW5ndGggZmllbGQgY2hlY2tpbmcgZmVhdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGdlbV9kaXNhYmxlX2xlbl9jaGVjayhzdHJ1Y3QgZ2VtYWNfZGV2ICpnZW1hYykKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKShnZW1hYy0+cmVnaXN0ZXJzICsgR0VNX05FVF9DT05GSUcpICY9IF9fY3B1X3RvX2xlMzIofkdFTV9SWF9MRU5fQ0hLKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBDb252ZXJ0IHN0YW5kYXJkIGJ5dGUgc3R5bGUgZXRoZXJuZXQgYWRkcmVzcyB0byBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIE1BQy4KKyAqCisgKiBJbnB1dCAgICA6ICAgUG9pbnRlciB0byBiZWdpbm5pbmcgb2YgNiBieXRlIGFkZHJlc3MuCisgKiAgICAgICAgICAgICAgUG9pbnRlciB0byBNQUNfQUREUiBzdHJ1Y3R1cmUuCisgKiBSZXR1cm4gdmFsdWVzOgorICogIDAgICA6ICAgT0sKKyAqICAtMSAgOiAgIEludmFsaWQgaW5wdXRzLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGdlbV9lbmV0X2FkZHJfYnl0ZV9tYWModTggKmVuZXRfYnl0ZV9hZGRyLCBNQUNfQUREUiAqZW5ldF9hZGRyKQoreworCWlmICgoZW5ldF9ieXRlX2FkZHIgPT0gTlVMTCkgfHwgKGVuZXRfYWRkciA9PSBOVUxMKSkgeworCQlyZXR1cm4gLTE7CisJfQorICAgIGVsc2UKKyAgICB7CisjaWYgZGVmaW5lZChCRThfTU9ERSkKKyAgICAgICAgZW5ldF9hZGRyLT5ib3R0b20gPSAoKGVuZXRfYnl0ZV9hZGRyWzBdIDw8IDI0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmV0X2J5dGVfYWRkclsxXSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5ldF9ieXRlX2FkZHJbMl0gPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmV0X2J5dGVfYWRkclszXSk7CisgICAgICAgIGVuZXRfYWRkci0+dG9wID0gKChlbmV0X2J5dGVfYWRkcls0XSA8PCAyNCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5ldF9ieXRlX2FkZHJbNV0gPDwgMTYpKTsKKyNlbHNlCisgICAgICAgIGVuZXRfYWRkci0+Ym90dG9tID0gZW5ldF9ieXRlX2FkZHJbMF0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmV0X2J5dGVfYWRkclsxXSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZXRfYnl0ZV9hZGRyWzJdIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZXRfYnl0ZV9hZGRyWzNdIDw8IDI0KTsKKyAgICAgICAgZW5ldF9hZGRyLT50b3AgPSBlbmV0X2J5dGVfYWRkcls0XSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZXRfYnl0ZV9hZGRyWzVdIDw8IDgpOworI2VuZGlmCisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBDb252ZXJ0IE1BQyB0eXBlIGV0aGVybmV0IGFkZHJlc3MgdG8gc3RhbmRhcmQgYnl0ZSBzdHlsZSBldGhlcm5ldCBhZGRyZXNzLgorICoKKyAqIElucHV0ICAgIDogICBQb2ludGVyIHRvIGJlZ2lubmluZyBvZiBmcmVlIHNwYWNlIGZvciA2IGJ5dGUgYWRkcmVzcy4KKyAqICAgICAgICAgICAgICBQb2ludGVyIHRvIE1BQ19BRERSIHN0cnVjdHVyZS4KKyAqIFJldHVybiB2YWx1ZXM6CisgKiAgMCAgIDogICBPSworICogIC0xICA6ICAgSW52YWxpZCBpbnB1dHMuCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZ2VtX2VuZXRfYWRkcl9tYWNfYnl0ZSh1OCAqZW5ldF9ieXRlX2FkZHIsIE1BQ19BRERSICplbmV0X2FkZHIpCit7CisJaWYgKChlbmV0X2J5dGVfYWRkciA9PSBOVUxMKSB8fCAoZW5ldF9hZGRyID09IE5VTEwpKSB7CisJCXJldHVybiAtMTsKKwl9IAorICAgIGVsc2UKKyAgICB7CisjaWYgZGVmaW5lZChCRThfTU9ERSkKKyAgICAgICAgZW5ldF9ieXRlX2FkZHJbMF0gPSAoZW5ldF9hZGRyLT5ib3R0b20gPj4gMjQpICYgMHhGRjsKKyAgICAgICAgZW5ldF9ieXRlX2FkZHJbMV0gPSAoZW5ldF9hZGRyLT5ib3R0b20gPj4gMTYpICYgMHhGRjsKKyAgICAgICAgZW5ldF9ieXRlX2FkZHJbMl0gPSAoZW5ldF9hZGRyLT5ib3R0b20gPj4gOCkgJiAweEZGOworICAgICAgICBlbmV0X2J5dGVfYWRkclszXSA9IChlbmV0X2FkZHItPmJvdHRvbSkgJiAweEZGOworICAgICAgICBlbmV0X2J5dGVfYWRkcls0XSA9IChlbmV0X2FkZHItPnRvcCA+PiAyNCkgJiAweEZGOworICAgICAgICBlbmV0X2J5dGVfYWRkcls1XSA9IChlbmV0X2FkZHItPnRvcCA+PiAxNikgJiAweEZGOworI2Vsc2UKKyAgICAgICAgZW5ldF9ieXRlX2FkZHJbMF0gPSBlbmV0X2FkZHItPmJvdHRvbSAmIDB4RkY7CisgICAgICAgIGVuZXRfYnl0ZV9hZGRyWzFdID0gKGVuZXRfYWRkci0+Ym90dG9tID4+IDgpICYgMHhGRjsKKyAgICAgICAgZW5ldF9ieXRlX2FkZHJbMl0gPSAoZW5ldF9hZGRyLT5ib3R0b20gPj4gMTYpICYgMHhGRjsKKyAgICAgICAgZW5ldF9ieXRlX2FkZHJbM10gPSAoZW5ldF9hZGRyLT5ib3R0b20gPj4gMjQpICYgMHhGRjsKKworICAgICAgICBlbmV0X2J5dGVfYWRkcls0XSA9IGVuZXRfYWRkci0+dG9wICYgMHhGRjsKKyAgICAgICAgZW5ldF9ieXRlX2FkZHJbNV0gPSAoZW5ldF9hZGRyLT50b3AgPj4gOCkgJiAweEZGOworI2VuZGlmCisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmFuZC9uYW5kLmMgYi9kcml2ZXJzL25hbmQvbmFuZC5jCmluZGV4IDM4OTkwNDUuLjNiYzg1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmFuZC9uYW5kLmMKKysrIGIvZHJpdmVycy9uYW5kL25hbmQuYwpAQCAtMjIsNTkgKzIyLDk4IEBACiAgKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkgJiYgIWRlZmluZWQoQ0ZHX05BTkRfTEVHQUNZKQotCiAjaW5jbHVkZSA8bmFuZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CiAKLSNpZm5kZWYgQ0ZHX05BTkRfQkFTRV9MSVNUCi0jZGVmaW5lIENGR19OQU5EX0JBU0VfTElTVCB7IENGR19OQU5EX0JBU0UgfQotI2VuZGlmCisKK0RFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCiBpbnQgbmFuZF9jdXJyX2RldmljZSA9IC0xOwotbmFuZF9pbmZvX3QgbmFuZF9pbmZvW0NGR19NQVhfTkFORF9ERVZJQ0VdOwogCi1zdGF0aWMgc3RydWN0IG5hbmRfY2hpcCBuYW5kX2NoaXBbQ0ZHX01BWF9OQU5EX0RFVklDRV07Ci1zdGF0aWMgdWxvbmcgYmFzZV9hZGRyZXNzW0NGR19NQVhfTkFORF9ERVZJQ0VdID0gQ0ZHX05BTkRfQkFTRV9MSVNUOwogCi1zdGF0aWMgY29uc3QgY2hhciBkZWZhdWx0X25hbmRfbmFtZVtdID0gIm5hbmQiOworbmFuZF9pbmZvX3QgbmFuZF9pbmZvW0NPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFXTsKIAotZXh0ZXJuIHZvaWQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpOworI2lmbmRlZiBDT05GSUdfU1lTX05BTkRfU0VMRl9JTklUCitzdGF0aWMgc3RydWN0IG5hbmRfY2hpcCBuYW5kX2NoaXBbQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0VdOworc3RhdGljIHVsb25nIGJhc2VfYWRkcmVzc1tDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRV0gPSBDT05GSUdfU1lTX05BTkRfQkFTRV9MSVNUOworI2VuZGlmCiAKLXN0YXRpYyB2b2lkIG5hbmRfaW5pdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAotCQkJICAgdWxvbmcgYmFzZV9hZGRyKQorc3RhdGljIGNoYXIgZGV2X25hbWVbQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0VdWzhdOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbF9uYW5kX3NpemU7IC8qIGluIGtpQiAqLworCisvKiBSZWdpc3RlciBhbiBpbml0aWFsaXplZCBOQU5EIG10ZCBkZXZpY2Ugd2l0aCB0aGUgVS1Cb290IE5BTkQgY29tbWFuZC4gKi8KK2ludCBuYW5kX3JlZ2lzdGVyKGludCBkZXZudW0pCiB7Ci0JbXRkLT5wcml2ID0gbmFuZDsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKIAotCW5hbmQtPklPX0FERFJfUiA9IG5hbmQtPklPX0FERFJfVyA9ICh2b2lkICBfX2lvbWVtICopYmFzZV9hZGRyOwotCWJvYXJkX25hbmRfaW5pdChuYW5kKTsKKwlpZiAoZGV2bnVtID49IENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChuYW5kX3NjYW4obXRkLCAxKSA9PSAwKSB7Ci0JCWlmICghbXRkLT5uYW1lKQotCQkJbXRkLT5uYW1lID0gKGNoYXIgKilkZWZhdWx0X25hbmRfbmFtZTsKLQl9IGVsc2UKLQkJbXRkLT5uYW1lID0gTlVMTDsKKwltdGQgPSAmbmFuZF9pbmZvW2Rldm51bV07CiAKKwlzcHJpbnRmKGRldl9uYW1lW2Rldm51bV0sICJuYW5kJWQiLCBkZXZudW0pOworCW10ZC0+bmFtZSA9IGRldl9uYW1lW2Rldm51bV07CisKKyNpZmRlZiBDT05GSUdfTVREX0RFVklDRQorCS8qCisJICogQWRkIE1URCBkZXZpY2Ugc28gdGhhdCB3ZSBjYW4gcmVmZXJlbmNlIGl0IGxhdGVyCisJICogdmlhIHRoZSBtdGRjb3JlIGluZnJhc3RydWN0dXJlIChlLmcuIHViaSkuCisJICovCisJYWRkX210ZF9kZXZpY2UobXRkKTsKKyNlbmRpZgorCisJdG90YWxfbmFuZF9zaXplICs9IG10ZC0+c2l6ZSAvIDEwMjQ7CisKKwlpZiAobmFuZF9jdXJyX2RldmljZSA9PSAtMSkKKwkJbmFuZF9jdXJyX2RldmljZSA9IGRldm51bTsKKworCXJldHVybiAwOwogfQogCisjaWZuZGVmIENPTkZJR19TWVNfTkFORF9TRUxGX0lOSVQKK3N0YXRpYyB2b2lkIG5hbmRfaW5pdF9jaGlwKGludCBpKQoreworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gJm5hbmRfaW5mb1tpXTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kID0gJm5hbmRfY2hpcFtpXTsKKwl1bG9uZyBiYXNlX2FkZHIgPSBiYXNlX2FkZHJlc3NbaV07CisJaW50IG1heGNoaXBzID0gQ09ORklHX1NZU19OQU5EX01BWF9DSElQUzsKKworCWlmIChtYXhjaGlwcyA8IDEpCisJCW1heGNoaXBzID0gMTsKKworCW10ZC0+cHJpdiA9IG5hbmQ7CisJbmFuZC0+SU9fQUREUl9SID0gbmFuZC0+SU9fQUREUl9XID0gKHZvaWQgIF9faW9tZW0gKiliYXNlX2FkZHI7CisKKwlpZiAoYm9hcmRfbmFuZF9pbml0KG5hbmQpKQorCQlyZXR1cm47CisKKwlpZiAobmFuZF9zY2FuKG10ZCwgbWF4Y2hpcHMpKQorCQlyZXR1cm47CisKKwluYW5kX3JlZ2lzdGVyKGkpOworfQorI2VuZGlmCisKIHZvaWQgbmFuZF9pbml0KHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1NZU19OQU5EX1NFTEZfSU5JVAorCWJvYXJkX25hbmRfaW5pdCgpOworI2Vsc2UKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IENGR19NQVhfTkFORF9ERVZJQ0U7IGkrKykgewotCQluYW5kX2luaXRfY2hpcCgmbmFuZF9pbmZvW2ldLCAmbmFuZF9jaGlwW2ldLCBiYXNlX2FkZHJlc3NbaV0pOwotCQlzaXplICs9IG5hbmRfaW5mb1tpXS5zaXplOwotCQlpZiAobmFuZF9jdXJyX2RldmljZSA9PSAtMSkKLQkJCW5hbmRfY3Vycl9kZXZpY2UgPSBpOwotCX0KLQlwcmludGYoIiVsdSBNaUJcbiIsIHNpemUgLyAoMTAyNCAqIDEwMjQpKTsKIAotI2lmZGVmIENGR19OQU5EX1NFTEVDVF9ERVZJQ0UKKwlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0U7IGkrKykKKwkJbmFuZF9pbml0X2NoaXAoaSk7CisjZW5kaWYKKworCXByaW50ZigiJWx1IE1pQlxuIiwgdG90YWxfbmFuZF9zaXplIC8gMTAyNCk7CisKKyNpZmRlZiBDT05GSUdfU1lTX05BTkRfU0VMRUNUX0RFVklDRQogCS8qCiAJICogU2VsZWN0IHRoZSBjaGlwIGluIHRoZSBib2FyZC9jcHUgc3BlY2lmaWMgZHJpdmVyCiAJICovCiAJYm9hcmRfbmFuZF9zZWxlY3RfZGV2aWNlKG5hbmRfaW5mb1tuYW5kX2N1cnJfZGV2aWNlXS5wcml2LCBuYW5kX2N1cnJfZGV2aWNlKTsKICNlbmRpZgogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCBiN2E1ZDMyLi44MjI1YTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9uYW5kL25hbmRfYmFzZS5jCkBAIC03LDQxICs3LDI0IEBACiAgKiAgIEJhc2ljIHN1cHBvcnQgZm9yIEFHLUFORCBjaGlwcyBpcyBwcm92aWRlZC4KICAqCiAgKglBZGRpdGlvbmFsIHRlY2huaWNhbCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgb24KLSAqCWh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvdGVjaC9uYW5kLmh0bWwKKyAqCWh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvZG9jL25hbmQuaHRtbAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCi0gKiAJCSAgMjAwMiBUaG9tYXMgR2xlaXhuZXIgKHRnbHhAbGludXRyb25peC5kZSkKKyAqCQkgIDIwMDItMjAwNiBUaG9tYXMgR2xlaXhuZXIgKHRnbHhAbGludXRyb25peC5kZSkKICAqCi0gKiAgMDItMDgtMjAwNCAgdGdseDogc3VwcG9ydCBmb3Igc3RyYW5nZSBjaGlwcywgd2hpY2ggY2Fubm90IGF1dG8gaW5jcmVtZW50Ci0gKgkJcGFnZXMgb24gcmVhZCAvIHJlYWRfb29iCi0gKgotICogIDAzLTE3LTIwMDQgIHRnbHg6IENoZWNrIHJlYWR5IGJlZm9yZSBhdXRvIGluY3JlbWVudCBjaGVjay4gU2ltb24gQmF5ZXMKLSAqCQlwb2ludGVkIHRoaXMgb3V0LCBhcyBoZSBtYXJrZWQgYW4gYXV0byBpbmNyZW1lbnQgY2FwYWJsZSBjaGlwCi0gKgkJYXMgTk9BVVRPSU5DUiBpbiB0aGUgYm9hcmQgZHJpdmVyLgotICoJCU1ha2UgcmVhZHMgb3ZlciBibG9jayBib3VuZGFyaWVzIHdvcmsgdG9vCi0gKgotICogIDA0LTE0LTIwMDQJdGdseDogZmlyc3Qgd29ya2luZyB2ZXJzaW9uIGZvciAyayBwYWdlIHNpemUgY2hpcHMKLSAqCi0gKiAgMDUtMTktMjAwNCAgdGdseDogQmFzaWMgc3VwcG9ydCBmb3IgUmVuZXNhcyBBRy1BTkQgY2hpcHMKLSAqCi0gKiAgMDktMjQtMjAwNCAgdGdseDogYWRkIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGNvbnRyb2xsZXJzIChlLmcuIEVDQykgc2hhcmVkCi0gKgkJYW1vbmcgbXVsdGlwbGUgaW5kZXBlbmRlbmQgZGV2aWNlcy4gU3VnZ2VzdGlvbnMgYW5kIGluaXRpYWwgcGF0Y2gKLSAqCQlmcm9tIEJlbiBEb29rcyA8YmVuLW10ZEBmbHVmZi5vcmc+Ci0gKgotICogQ3JlZGl0czoKKyAqICBDcmVkaXRzOgogICoJRGF2aWQgV29vZGhvdXNlIGZvciBhZGRpbmcgbXVsdGljaGlwIHN1cHBvcnQKICAqCiAgKglBbGVwaCBPbmUgTHRkLiBhbmQgVG9ieSBDaHVyY2hpbGwgTHRkLiBmb3Igc3VwcG9ydGluZyB0aGUKICAqCXJld29yayBmb3IgMksgcGFnZSBzaXplIGNoaXBzCiAgKgotICogVE9ETzoKKyAqICBUT0RPOgogICoJRW5hYmxlIGNhY2hlZCBwcm9ncmFtbWluZyBmb3IgMmsgcGFnZSBzaXplIGNoaXBzCiAgKglDaGVjaywgaWYgbXRkLT5lY2N0eXBlIHNob3VsZCBiZSBzZXQgdG8gTVREX0VDQ19IVwogICoJaWYgd2UgaGF2ZSBIVyBlY2Mgc3VwcG9ydC4KICAqCVRoZSBBRy1BTkQgY2hpcHMgaGF2ZSBuaWNlIGZlYXR1cmVzIGZvciBzcGVlZCBpbXByb3ZlbWVudCwKICAqCXdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gUmVhZCAvIHByb2dyYW0gNCBwYWdlcyBpbiBvbmUgZ28uCi0gKgotICogJElkOiBuYW5kX2Jhc2UuYyx2IDEuMTI2IDIwMDQvMTIvMTMgMTE6MjI6MjUgbGF2aW5lbiBFeHAgJAorICoJQkJUIHRhYmxlIGlzIG5vdCBzZXJpYWxpemVkLCBoYXMgdG8gYmUgZml4ZWQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTQ5LDExOCArMzIsMTIwIEBACiAgKgogICovCiAKLS8qIFhYWCBVLUJPT1QgWFhYICovCi0jaWYgMAotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjZGVmaW5lIEVOT1RTVVBQCTUyNAkvKiBPcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCAqLworCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8d2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLWFiaS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9iYm0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9iY2guaD4KIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjZW5kaWYKIAotI2VuZGlmCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpICYmICFkZWZpbmVkKENGR19OQU5EX0xFR0FDWSkKLQotI2luY2x1ZGUgPG1hbGxvYy5oPgotI2luY2x1ZGUgPHdhdGNoZG9nLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgotCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAKLSNpZmRlZiBDT05GSUdfSkZGUzJfTkFORAotI2luY2x1ZGUgPGpmZnMyL2pmZnMyLmg+CisvKgorICogQ09ORklHX1NZU19OQU5EX1JFU0VUX0NOVCBpcyB1c2VkIGFzIGEgdGltZW91dCBtZWNoYW5pc20gd2hlbiByZXNldHRpbmcKKyAqIGEgZmxhc2guICBOQU5EIGZsYXNoIGlzIGluaXRpYWxpemVkIHByaW9yIHRvIGludGVycnVwdHMgc28gc3RhbmRhcmQgdGltZXJzCisgKiBjYW4ndCBiZSB1c2VkLiAgQ09ORklHX1NZU19OQU5EX1JFU0VUX0NOVCBzaG91bGQgYmUgc2V0IHRvIGEgdmFsdWUKKyAqIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiAobWF4IE5BTkQgcmVzZXQgdGltZSAvIE5BTkQgc3RhdHVzIHJlYWQgdGltZSkuCisgKiBBIGNvbnNlcnZhdGl2ZSBkZWZhdWx0IG9mIDIwMDAwMCAoNTAwIHVzIC8gMjUgbnMpIGlzIHVzZWQgYXMgYSBkZWZhdWx0LgorICovCisjaWZuZGVmIENPTkZJR19TWVNfTkFORF9SRVNFVF9DTlQKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1JFU0VUX0NOVCAyMDAwMDAKICNlbmRpZgogCiAvKiBEZWZpbmUgZGVmYXVsdCBvb2IgcGxhY2VtZW50IHNjaGVtZXMgZm9yIGxhcmdlIGFuZCBzbWFsbCBwYWdlIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5hbmRfb29iXzggPSB7Ci0JLnVzZWVjYyA9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9vb2JfOCA9IHsKIAkuZWNjYnl0ZXMgPSAzLAogCS5lY2Nwb3MgPSB7MCwgMSwgMn0sCi0JLm9vYmZyZWUgPSB7IHszLCAyfSwgezYsIDJ9IH0KKwkub29iZnJlZSA9IHsKKwkJey5vZmZzZXQgPSAzLAorCQkgLmxlbmd0aCA9IDJ9LAorCQl7Lm9mZnNldCA9IDYsCisJCSAubGVuZ3RoID0gMn0gfQogfTsKIAotc3RhdGljIHN0cnVjdCBuYW5kX29vYmluZm8gbmFuZF9vb2JfMTYgPSB7Ci0JLnVzZWVjYyA9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9vb2JfMTYgPSB7CiAJLmVjY2J5dGVzID0gNiwKIAkuZWNjcG9zID0gezAsIDEsIDIsIDMsIDYsIDd9LAotCS5vb2JmcmVlID0geyB7OCwgOH0gfQorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDgsCisJCSAuIGxlbmd0aCA9IDh9IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5hbmRfb29iXzY0ID0gewotCS51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfb29iXzY0ID0gewogCS5lY2NieXRlcyA9IDI0LAogCS5lY2Nwb3MgPSB7Ci0JCTQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywKLQkJNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LAotCQk1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjN9LAotCS5vb2JmcmVlID0geyB7MiwgMzh9IH0KKwkJICAgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LAorCQkgICA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsCisJCSAgIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2M30sCisJLm9vYmZyZWUgPSB7CisJCXsub2Zmc2V0ID0gMiwKKwkJIC5sZW5ndGggPSAzOH0gfQogfTsKIAotLyogVGhpcyBpcyB1c2VkIGZvciBwYWRkaW5nIHB1cnBvc2VzIGluIG5hbmRfd3JpdGVfb29iICovCi1zdGF0aWMgdV9jaGFyIGZmY2hhcnNbXSA9IHsKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfb29iXzEyOCA9IHsKKwkuZWNjYnl0ZXMgPSA0OCwKKwkuZWNjcG9zID0geworCQkgICA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsCisJCSAgIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwKKwkJICAgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywKKwkJICAgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsCisJCSAgIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LAorCQkgICAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyN30sCisJLm9vYmZyZWUgPSB7CisJCXsub2Zmc2V0ID0gMiwKKwkJIC5sZW5ndGggPSA3OH0gfQogfTsKIAotLyoKLSAqIE5BTkQgbG93LWxldmVsIE1URCBpbnRlcmZhY2UgZnVuY3Rpb25zCi0gKi8KLXN0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci1zdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pOworc3RhdGljIGludCBuYW5kX2dldF9kZXZpY2Uoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkgICBpbnQgbmV3X3N0YXRlKTsKIAotc3RhdGljIGludCBuYW5kX3JlYWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYpOwotc3RhdGljIGludCBuYW5kX3JlYWRfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCQkgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBlY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7Ci1zdGF0aWMgaW50IG5hbmRfcmVhZF9vb2IgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYpOwotc3RhdGljIGludCBuYW5kX3dyaXRlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIGNvbnN0IHVfY2hhciAqIGJ1Zik7Ci1zdGF0aWMgaW50IG5hbmRfd3JpdGVfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkJICAgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYsIHVfY2hhciAqIGVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLXN0YXRpYyBpbnQgbmFuZF93cml0ZV9vb2IgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOwotLyogWFhYIFUtQk9PVCBYWFggKi8KLSNpZiAwCi1zdGF0aWMgaW50IG5hbmRfd3JpdGV2IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCQl1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqIHJldGxlbik7Ci1zdGF0aWMgaW50IG5hbmRfd3JpdGV2X2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAotCQkJdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotI2VuZGlmCi1zdGF0aWMgaW50IG5hbmRfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwotc3RhdGljIHZvaWQgbmFuZF9zeW5jIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CitzdGF0aWMgaW50IG5hbmRfZG9fd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKIAotLyogU29tZSBpbnRlcm5hbCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgbmFuZF93cml0ZV9wYWdlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHBhZ2UsIHVfY2hhciAqb29iX2J1ZiwKLQkJc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsLCBpbnQgbW9kZSk7Ci0jaWZkZWYgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURQotc3RhdGljIGludCBuYW5kX3ZlcmlmeV9wYWdlcyAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBwYWdlLCBpbnQgbnVtcGFnZXMsCi0JdV9jaGFyICpvb2JfYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwsIGludCBjaGlwbnIsIGludCBvb2Jtb2RlKTsKLSNlbHNlCi0jZGVmaW5lIG5hbmRfdmVyaWZ5X3BhZ2VzKC4uLikgKDApCi0jZW5kaWYKK3N0YXRpYyBpbnQgbmFuZF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzKTsKIAotc3RhdGljIHZvaWQgbmFuZF9nZXRfZGV2aWNlIChzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG5ld19zdGF0ZSk7CitzdGF0aWMgaW50IGNoZWNrX29mZnNfbGVuKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQlsb2ZmX3Qgb2ZzLCB1aW50NjRfdCBsZW4pCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCS8qIFN0YXJ0IGFkZHJlc3MgbXVzdCBhbGlnbiBvbiBibG9jayBib3VuZGFyeSAqLworCWlmIChvZnMgJiAoKDEgPDwgY2hpcC0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgeworCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IFVuYWxpZ25lZCBhZGRyZXNzXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJLyogTGVuZ3RoIG11c3QgYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgKi8KKwlpZiAobGVuICYgKCgxIDw8IGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQpIC0gMSkpIHsKKwkJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiBMZW5ndGggbm90IGJsb2NrIGFsaWduZWRcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwkvKiBEbyBub3QgYWxsb3cgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKG9mcyArIGxlbiA+IG10ZC0+c2l6ZSkgeworCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IFBhc3QgZW5kIG9mIGRldmljZVxuIiwKKwkJCQkJX19mdW5jX18pOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByZXQ7Cit9CiAKIC8qKgogICogbmFuZF9yZWxlYXNlX2RldmljZSAtIFtHRU5FUklDXSByZWxlYXNlIGNoaXAKQEAgLTE2OCwzMyArMTUzLDEzIEBACiAgKgogICogRGVzZWxlY3QsIHJlbGVhc2UgY2hpcCBsb2NrIGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UKICAqLwotLyogWFhYIFUtQk9PVCBYWFggKi8KLSNpZiAwCi1zdGF0aWMgdm9pZCBuYW5kX3JlbGVhc2VfZGV2aWNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3N0YXRpYyB2b2lkIG5hbmRfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCiAJLyogRGUtc2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwotCS8qIERvIHdlIGhhdmUgYSBoYXJkd2FyZSBjb250cm9sbGVyID8gKi8KLQlpZiAodGhpcy0+Y29udHJvbGxlcikgewotCQlzcGluX2xvY2soJnRoaXMtPmNvbnRyb2xsZXItPmxvY2spOwotCQl0aGlzLT5jb250cm9sbGVyLT5hY3RpdmUgPSBOVUxMOwotCQlzcGluX3VubG9jaygmdGhpcy0+Y29udHJvbGxlci0+bG9jayk7Ci0JfQotCS8qIFJlbGVhc2UgdGhlIGNoaXAgKi8KLQlzcGluX2xvY2sgKCZ0aGlzLT5jaGlwX2xvY2spOwotCXRoaXMtPnN0YXRlID0gRkxfUkVBRFk7Ci0Jd2FrZV91cCAoJnRoaXMtPndxKTsKLQlzcGluX3VubG9jayAoJnRoaXMtPmNoaXBfbG9jayk7CisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CiB9Ci0jZWxzZQotc3RhdGljIHZvaWQgbmFuZF9yZWxlYXNlX2RldmljZSAoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsJLyogRGUtc2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotfQotI2VuZGlmCiAKIC8qKgogICogbmFuZF9yZWFkX2J5dGUgLSBbREVGQVVMVF0gcmVhZCBvbmUgYnl0ZSBmcm9tIHRoZSBjaGlwCkBAIC0yMDIsMjMgKzE2NywxMCBAQAogICoKICAqIERlZmF1bHQgcmVhZCBmdW5jdGlvbiBmb3IgOGJpdCBidXN3aXRoCiAgKi8KLXN0YXRpYyB1X2NoYXIgbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCit1aW50OF90IG5hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JcmV0dXJuIHJlYWRiKHRoaXMtPklPX0FERFJfUik7Ci19Ci0KLS8qKgotICogbmFuZF93cml0ZV9ieXRlIC0gW0RFRkFVTFRdIHdyaXRlIG9uZSBieXRlIHRvIHRoZSBjaGlwCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQGJ5dGU6CXBvaW50ZXIgdG8gZGF0YSBieXRlIHRvIHdyaXRlCi0gKgotICogRGVmYXVsdCB3cml0ZSBmdW5jdGlvbiBmb3IgOGl0IGJ1c3dpdGgKLSAqLwotc3RhdGljIHZvaWQgbmFuZF93cml0ZV9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgYnl0ZSkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXdyaXRlYihieXRlLCB0aGlzLT5JT19BRERSX1cpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJcmV0dXJuIHJlYWRiKGNoaXAtPklPX0FERFJfUik7CiB9CiAKIC8qKgpAQCAtMjI4LDI0ICsxODAsMTAgQEAKICAqIERlZmF1bHQgcmVhZCBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aCB3aXRoCiAgKiBlbmRpYW5lc3MgY29udmVyc2lvbgogICovCi1zdGF0aWMgdV9jaGFyIG5hbmRfcmVhZF9ieXRlMTYoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgdWludDhfdCBuYW5kX3JlYWRfYnl0ZTE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JcmV0dXJuICh1X2NoYXIpIGNwdV90b19sZTE2KHJlYWR3KHRoaXMtPklPX0FERFJfUikpOwotfQotCi0vKioKLSAqIG5hbmRfd3JpdGVfYnl0ZTE2IC0gW0RFRkFVTFRdIHdyaXRlIG9uZSBieXRlIGVuZGlhbmVzcyBhd2FyZSB0byB0aGUgY2hpcAotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBieXRlOglwb2ludGVyIHRvIGRhdGEgYnl0ZSB0byB3cml0ZQotICoKLSAqIERlZmF1bHQgd3JpdGUgZnVuY3Rpb24gZm9yIDE2Yml0IGJ1c3dpdGggd2l0aAotICogZW5kaWFuZXNzIGNvbnZlcnNpb24KLSAqLwotc3RhdGljIHZvaWQgbmFuZF93cml0ZV9ieXRlMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBieXRlKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jd3JpdGV3KGxlMTZfdG9fY3B1KCh1MTYpIGJ5dGUpLCB0aGlzLT5JT19BRERSX1cpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJcmV0dXJuICh1aW50OF90KSBjcHVfdG9fbGUxNihyZWFkdyhjaGlwLT5JT19BRERSX1IpKTsKIH0KIAogLyoqCkBAIC0yNTcsNDAgKzE5NSwyNiBAQAogICovCiBzdGF0aWMgdTE2IG5hbmRfcmVhZF93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JcmV0dXJuIHJlYWR3KHRoaXMtPklPX0FERFJfUik7Ci19Ci0KLS8qKgotICogbmFuZF93cml0ZV93b3JkIC0gW0RFRkFVTFRdIHdyaXRlIG9uZSB3b3JkIHRvIHRoZSBjaGlwCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHdvcmQ6CWRhdGEgd29yZCB0byB3cml0ZQotICoKLSAqIERlZmF1bHQgd3JpdGUgZnVuY3Rpb24gZm9yIDE2Yml0IGJ1c3dpdGggd2l0aG91dAotICogZW5kaWFuZXNzIGNvbnZlcnNpb24KLSAqLwotc3RhdGljIHZvaWQgbmFuZF93cml0ZV93b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1MTYgd29yZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXdyaXRldyh3b3JkLCB0aGlzLT5JT19BRERSX1cpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJcmV0dXJuIHJlYWR3KGNoaXAtPklPX0FERFJfUik7CiB9CiAKIC8qKgogICogbmFuZF9zZWxlY3RfY2hpcCAtIFtERUZBVUxUXSBjb250cm9sIENFIGxpbmUKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAY2hpcDoJY2hpcG51bWJlciB0byBzZWxlY3QsIC0xIGZvciBkZXNlbGVjdAorICogQGNoaXBucjoJY2hpcG51bWJlciB0byBzZWxlY3QsIC0xIGZvciBkZXNlbGVjdAogICoKICAqIERlZmF1bHQgc2VsZWN0IGZ1bmN0aW9uIGZvciAxIGNoaXAgZGV2aWNlcy4KICAqLwotc3RhdGljIHZvaWQgbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCitzdGF0aWMgdm9pZCBuYW5kX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcG5yKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3dpdGNoKGNoaXApIHsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJc3dpdGNoIChjaGlwbnIpIHsKIAljYXNlIC0xOgotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJOQ0UpOworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX05PTkUsIDAgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAkJYnJlYWs7CiAJY2FzZSAwOgotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVROQ0UpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0zMDYsMTMgKzIzMCwxMyBAQAogICoKICAqIERlZmF1bHQgd3JpdGUgZnVuY3Rpb24gZm9yIDhiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCit2b2lkIG5hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCXdyaXRlYihidWZbaV0sIHRoaXMtPklPX0FERFJfVyk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQl3cml0ZWIoYnVmW2ldLCBjaGlwLT5JT19BRERSX1cpOwogfQogCiAvKioKQEAgLTMyMywxMyArMjQ3LDEzIEBACiAgKgogICogRGVmYXVsdCByZWFkIGZ1bmN0aW9uIGZvciA4Yml0IGJ1c3dpdGgKICAqLwotc3RhdGljIHZvaWQgbmFuZF9yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCit2b2lkIG5hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykKLQkJYnVmW2ldID0gcmVhZGIodGhpcy0+SU9fQUREUl9SKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWJ1ZltpXSA9IHJlYWRiKGNoaXAtPklPX0FERFJfUik7CiB9CiAKIC8qKgpAQCAtMzQwLDE1ICsyNjQsMTQgQEAKICAqCiAgKiBEZWZhdWx0IHZlcmlmeSBmdW5jdGlvbiBmb3IgOGJpdCBidXN3aXRoCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF92ZXJpZnlfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQgbmFuZF92ZXJpZnlfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCWlmIChidWZbaV0gIT0gcmVhZGIodGhpcy0+SU9fQUREUl9SKSkKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChidWZbaV0gIT0gcmVhZGIoY2hpcC0+SU9fQUREUl9SKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2MCwxNSArMjgzLDE1IEBACiAgKgogICogRGVmYXVsdCB3cml0ZSBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3ZvaWQgbmFuZF93cml0ZV9idWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKQogewogCWludCBpOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1MTYgKnAgPSAodTE2ICopIGJ1ZjsKIAlsZW4gPj49IDE7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykKLQkJd3JpdGV3KHBbaV0sIHRoaXMtPklPX0FERFJfVyk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQl3cml0ZXcocFtpXSwgY2hpcC0+SU9fQUREUl9XKTsKIAogfQogCkBAIC0zODAsMTUgKzMwMywxNSBAQAogICoKICAqIERlZmF1bHQgcmVhZCBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQordm9pZCBuYW5kX3JlYWRfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCXBbaV0gPSByZWFkdyh0aGlzLT5JT19BRERSX1IpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJcFtpXSA9IHJlYWR3KGNoaXAtPklPX0FERFJfUik7CiB9CiAKIC8qKgpAQCAtMzk5LDE1ICszMjIsMTUgQEAKICAqCiAgKiBEZWZhdWx0IHZlcmlmeSBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQgbmFuZF92ZXJpZnlfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCWlmIChwW2ldICE9IHJlYWR3KHRoaXMtPklPX0FERFJfUikpCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAocFtpXSAhPSByZWFkdyhjaGlwLT5JT19BRERSX1IpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKQEAgLTQyNCwzOCArMzQ3LDQzIEBACiBzdGF0aWMgaW50IG5hbmRfYmxvY2tfYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCkKIHsKIAlpbnQgcGFnZSwgY2hpcG5yLCByZXMgPSAwOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1MTYgYmFkOwogCi0JaWYgKGdldGNoaXApIHsKLQkJcGFnZSA9IChpbnQpKG9mcyA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQkJY2hpcG5yID0gKGludCkob2ZzID4+IHRoaXMtPmNoaXBfc2hpZnQpOworCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkxBU1RQQUdFKQorCQlvZnMgKz0gbXRkLT5lcmFzZXNpemUgLSBtdGQtPndyaXRlc2l6ZTsKIAotCQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQkJbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQsIEZMX1JFQURJTkcpOworCXBhZ2UgPSAoaW50KShvZnMgPj4gY2hpcC0+cGFnZV9zaGlmdCkgJiBjaGlwLT5wYWdlbWFzazsKKworCWlmIChnZXRjaGlwKSB7CisJCWNoaXBuciA9IChpbnQpKG9mcyA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKworCQluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9SRUFESU5HKTsKIAogCQkvKiBTZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKLQl9IGVsc2UKLQkJcGFnZSA9IChpbnQpIG9mczsKKwkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCX0KIAotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgewotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURPT0IsIHRoaXMtPmJhZGJsb2NrcG9zICYgMHhGRSwgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKLQkJYmFkID0gY3B1X3RvX2xlMTYodGhpcy0+cmVhZF93b3JkKG10ZCkpOwotCQlpZiAodGhpcy0+YmFkYmxvY2twb3MgJiAweDEpCi0JCQliYWQgPj49IDE7Ci0JCWlmICgoYmFkICYgMHhGRikgIT0gMHhmZikKLQkJCXJlcyA9IDE7CisJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSB7CisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFET09CLCBjaGlwLT5iYWRibG9ja3BvcyAmIDB4RkUsCisJCQkgICAgICBwYWdlKTsKKwkJYmFkID0gY3B1X3RvX2xlMTYoY2hpcC0+cmVhZF93b3JkKG10ZCkpOworCQlpZiAoY2hpcC0+YmFkYmxvY2twb3MgJiAweDEpCisJCQliYWQgPj49IDg7CisJCWVsc2UKKwkJCWJhZCAmPSAweEZGOwogCX0gZWxzZSB7Ci0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgdGhpcy0+YmFkYmxvY2twb3MsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7Ci0JCWlmICh0aGlzLT5yZWFkX2J5dGUobXRkKSAhPSAweGZmKQotCQkJcmVzID0gMTsKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURPT0IsIGNoaXAtPmJhZGJsb2NrcG9zLCBwYWdlKTsKKwkJYmFkID0gY2hpcC0+cmVhZF9ieXRlKG10ZCk7CiAJfQogCi0JaWYgKGdldGNoaXApIHsKLQkJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLworCWlmIChsaWtlbHkoY2hpcC0+YmFkYmxvY2tiaXRzID09IDgpKQorCQlyZXMgPSBiYWQgIT0gMHhGRjsKKwllbHNlCisJCXJlcyA9IGh3ZWlnaHQ4KGJhZCkgPCBjaGlwLT5iYWRibG9ja2JpdHM7CisKKwlpZiAoZ2V0Y2hpcCkKIAkJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwotCX0KIAogCXJldHVybiByZXM7CiB9CkBAIC00NzAsMjIgKzM5OCw1MyBAQAogKi8KIHN0YXRpYyBpbnQgbmFuZF9kZWZhdWx0X2Jsb2NrX21hcmtiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl1X2NoYXIgYnVmWzJdID0gezAsIDB9OwotCXNpemVfdAlyZXRsZW47Ci0JaW50IGJsb2NrOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJdWludDhfdCBidWZbMl0gPSB7IDAsIDAgfTsKKwlpbnQgYmxvY2ssIHJldCwgaSA9IDA7CisKKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5MQVNUUEFHRSkKKwkJb2ZzICs9IG10ZC0+ZXJhc2VzaXplIC0gbXRkLT53cml0ZXNpemU7CiAKIAkvKiBHZXQgYmxvY2sgbnVtYmVyICovCi0JYmxvY2sgPSAoKGludCkgb2ZzKSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7Ci0JdGhpcy0+YmJ0W2Jsb2NrID4+IDJdIHw9IDB4MDEgPDwgKChibG9jayAmIDB4MDMpIDw8IDEpOworCWJsb2NrID0gKGludCkob2ZzID4+IGNoaXAtPmJidF9lcmFzZV9zaGlmdCk7CisJaWYgKGNoaXAtPmJidCkKKwkJY2hpcC0+YmJ0W2Jsb2NrID4+IDJdIHw9IDB4MDEgPDwgKChibG9jayAmIDB4MDMpIDw8IDEpOwogCiAJLyogRG8gd2UgaGF2ZSBhIGZsYXNoIGJhc2VkIGJhZCBibG9jayB0YWJsZSA/ICovCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX1VTRV9GTEFTSF9CQlQpCi0JCXJldHVybiBuYW5kX3VwZGF0ZV9iYnQgKG10ZCwgb2ZzKTsKKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfVVNFX0ZMQVNIX0JCVCkKKwkJcmV0ID0gbmFuZF91cGRhdGVfYmJ0KG10ZCwgb2ZzKTsKKwllbHNlIHsKKwkJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfV1JJVElORyk7CiAKLQkvKiBXZSB3cml0ZSB0d28gYnl0ZXMsIHNvIHdlIGRvbnQgaGF2ZSB0byBtZXNzIHdpdGggMTYgYml0IGFjY2VzcyAqLwotCW9mcyArPSBtdGQtPm9vYnNpemUgKyAodGhpcy0+YmFkYmxvY2twb3MgJiB+MHgwMSk7Ci0JcmV0dXJuIG5hbmRfd3JpdGVfb29iIChtdGQsIG9mcyAsIDIsICZyZXRsZW4sIGJ1Zik7CisJCS8qIFdyaXRlIHRvIGZpcnN0IHR3byBwYWdlcyBhbmQgdG8gYnl0ZSAxIGFuZCA2IGlmIG5lY2Vzc2FyeS4KKwkJICogSWYgd2Ugd3JpdGUgdG8gbW9yZSB0aGFuIG9uZSBsb2NhdGlvbiwgdGhlIGZpcnN0IGVycm9yCisJCSAqIGVuY291bnRlcmVkIHF1aXRzIHRoZSBwcm9jZWR1cmUuIFdlIHdyaXRlIHR3byBieXRlcyBwZXIKKwkJICogbG9jYXRpb24sIHNvIHdlIGRvbnQgaGF2ZSB0byBtZXNzIHdpdGggMTYgYml0IGFjY2Vzcy4KKwkJICovCisJCWRvIHsKKwkJCWNoaXAtPm9wcy5sZW4gPSBjaGlwLT5vcHMub29ibGVuID0gMjsKKwkJCWNoaXAtPm9wcy5kYXRidWYgPSBOVUxMOworCQkJY2hpcC0+b3BzLm9vYmJ1ZiA9IGJ1ZjsKKwkJCWNoaXAtPm9wcy5vb2JvZmZzID0gY2hpcC0+YmFkYmxvY2twb3MgJiB+MHgwMTsKKworCQkJcmV0ID0gbmFuZF9kb193cml0ZV9vb2IobXRkLCBvZnMsICZjaGlwLT5vcHMpOworCisJCQlpZiAoIXJldCAmJiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5CWVRFMUFORDYpKSB7CisJCQkJY2hpcC0+b3BzLm9vYm9mZnMgPSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUworCQkJCQkmIH4weDAxOworCQkJCXJldCA9IG5hbmRfZG9fd3JpdGVfb29iKG10ZCwgb2ZzLCAmY2hpcC0+b3BzKTsKKwkJCX0KKwkJCWkrKzsKKwkJCW9mcyArPSBtdGQtPndyaXRlc2l6ZTsKKwkJfSB3aGlsZSAoIXJldCAmJiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU4yTkRQQUdFKSAmJgorCQkJCWkgPCAyKTsKKworCQluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CisJfQorCWlmICghcmV0KQorCQltdGQtPmVjY19zdGF0cy5iYWRibG9ja3MrKzsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNDk1LDEyICs0NTQsMTcgQEAKICAqCiAgKiBUaGUgZnVuY3Rpb24gZXhwZWN0cywgdGhhdCB0aGUgZGV2aWNlIGlzIGFscmVhZHkgc2VsZWN0ZWQKICAqLwotc3RhdGljIGludCBuYW5kX2NoZWNrX3dwIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3N0YXRpYyBpbnQgbmFuZF9jaGVja193cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwkvKiBicm9rZW4geEQgY2FyZHMgcmVwb3J0IFdQIGRlc3BpdGUgYmVpbmcgd3JpdGFibGUgKi8KKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlJPS0VOX1hEKQorCQlyZXR1cm4gMDsKKwogCS8qIENoZWNrIHRoZSBXUCBiaXQgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NUQVRVUywgLTEsIC0xKTsKLQlyZXR1cm4gKHRoaXMtPnJlYWRfYnl0ZShtdGQpICYgMHg4MCkgPyAwIDogMTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU1RBVFVTLCAtMSwgLTEpOworCXJldHVybiAoY2hpcC0+cmVhZF9ieXRlKG10ZCkgJiBOQU5EX1NUQVRVU19XUCkgPyAwIDogMTsKIH0KIAogLyoqCkBAIC01MTMsMTUgKzQ3Nyw0MSBAQAogICogQ2hlY2ssIGlmIHRoZSBibG9jayBpcyBiYWQuIEVpdGhlciBieSByZWFkaW5nIHRoZSBiYWQgYmxvY2sgdGFibGUgb3IKICAqIGNhbGxpbmcgb2YgdGhlIHNjYW4gZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF9ibG9ja19jaGVja2JhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwLCBpbnQgYWxsb3diYnQpCitzdGF0aWMgaW50IG5hbmRfYmxvY2tfY2hlY2tiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwLAorCQkJICAgICAgIGludCBhbGxvd2JidCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQlpZiAoIXRoaXMtPmJidCkKLQkJcmV0dXJuIHRoaXMtPmJsb2NrX2JhZChtdGQsIG9mcywgZ2V0Y2hpcCk7CisJaWYgKCEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5ORUQpKSB7CisJCWNoaXAtPm9wdGlvbnMgfD0gTkFORF9CQlRfU0NBTk5FRDsKKwkJY2hpcC0+c2Nhbl9iYnQobXRkKTsKKwl9CisKKwlpZiAoIWNoaXAtPmJidCkKKwkJcmV0dXJuIGNoaXAtPmJsb2NrX2JhZChtdGQsIG9mcywgZ2V0Y2hpcCk7CiAKIAkvKiBSZXR1cm4gaW5mbyBmcm9tIHRoZSB0YWJsZSAqLwotCXJldHVybiBuYW5kX2lzYmFkX2JidCAobXRkLCBvZnMsIGFsbG93YmJ0KTsKKwlyZXR1cm4gbmFuZF9pc2JhZF9iYnQobXRkLCBvZnMsIGFsbG93YmJ0KTsKK30KKworLyoKKyAqIFdhaXQgZm9yIHRoZSByZWFkeSBwaW4sIGFmdGVyIGEgY29tbWFuZAorICogVGhlIHRpbWVvdXQgaXMgY2F0Y2hlZCBsYXRlci4KKyAqLwordm9pZCBuYW5kX3dhaXRfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwl1MzIgdGltZW8gPSAoQ09ORklHX1NZU19IWiAqIDIwKSAvIDEwMDA7CisJdTMyIHRpbWVfc3RhcnQ7CisKKwl0aW1lX3N0YXJ0ID0gZ2V0X3RpbWVyKDApOworCisJLyogd2FpdCB1bnRpbCBjb21tYW5kIGlzIHByb2Nlc3NlZCBvciB0aW1lb3V0IG9jY3VyZXMgKi8KKwl3aGlsZSAoZ2V0X3RpbWVyKHRpbWVfc3RhcnQpIDwgdGltZW8pIHsKKwkJaWYgKGNoaXAtPmRldl9yZWFkeSkKKwkJCWlmIChjaGlwLT5kZXZfcmVhZHkobXRkKSkKKwkJCQlicmVhazsKKwl9CiB9CiAKIC8qKgpAQCAtNTM0LDIxICs1MjQsMjIgQEAKICAqIFNlbmQgY29tbWFuZCB0byBOQU5EIGRldmljZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBzbWFsbCBwYWdlCiAgKiBkZXZpY2VzICgyNTYvNTEyIEJ5dGVzIHBlciBwYWdlKQogICovCi1zdGF0aWMgdm9pZCBuYW5kX2NvbW1hbmQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQorc3RhdGljIHZvaWQgbmFuZF9jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwKKwkJCSBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQogewotCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJcmVnaXN0ZXIgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlpbnQgY3RybCA9IE5BTkRfQ1RSTF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFOworCXVpbnQzMl90IHJzdF9zdHNfY250ID0gQ09ORklHX1NZU19OQU5EX1JFU0VUX0NOVDsKIAotCS8qIEJlZ2luIGNvbW1hbmQgbGF0Y2ggY3ljbGUgKi8KLQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwogCS8qCiAJICogV3JpdGUgb3V0IHRoZSBjb21tYW5kIHRvIHRoZSBkZXZpY2UuCiAJICovCiAJaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfU0VRSU4pIHsKIAkJaW50IHJlYWRjbWQ7CiAKLQkJaWYgKGNvbHVtbiA+PSBtdGQtPm9vYmJsb2NrKSB7CisJCWlmIChjb2x1bW4gPj0gbXRkLT53cml0ZXNpemUpIHsKIAkJCS8qIE9PQiBhcmVhICovCi0JCQljb2x1bW4gLT0gbXRkLT5vb2JibG9jazsKKwkJCWNvbHVtbiAtPSBtdGQtPndyaXRlc2l6ZTsKIAkJCXJlYWRjbWQgPSBOQU5EX0NNRF9SRUFET09COwogCQl9IGVsc2UgaWYgKGNvbHVtbiA8IDI1NikgewogCQkJLyogRmlyc3QgMjU2IGJ5dGVzIC0tPiBSRUFEMCAqLwpAQCAtNTU3LDM4ICs1NDgsMzcgQEAKIAkJCWNvbHVtbiAtPSAyNTY7CiAJCQlyZWFkY21kID0gTkFORF9DTURfUkVBRDE7CiAJCX0KLQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIHJlYWRjbWQpOworCQljaGlwLT5jbWRfY3RybChtdGQsIHJlYWRjbWQsIGN0cmwpOworCQljdHJsICY9IH5OQU5EX0NUUkxfQ0hBTkdFOwogCX0KLQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgY29tbWFuZCk7CisJY2hpcC0+Y21kX2N0cmwobXRkLCBjb21tYW5kLCBjdHJsKTsKIAotCS8qIFNldCBBTEUgYW5kIGNsZWFyIENMRSB0byBzdGFydCBhZGRyZXNzIGN5Y2xlICovCi0JdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKLQotCWlmIChjb2x1bW4gIT0gLTEgfHwgcGFnZV9hZGRyICE9IC0xKSB7Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVEFMRSk7Ci0KLQkJLyogU2VyaWFsbHkgaW5wdXQgYWRkcmVzcyAqLwotCQlpZiAoY29sdW1uICE9IC0xKSB7Ci0JCQkvKiBBZGp1c3QgY29sdW1ucyBmb3IgMTYgYml0IGJ1c3dpZHRoICovCi0JCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCi0JCQkJY29sdW1uID4+PSAxOwotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIGNvbHVtbik7Ci0JCX0KLQkJaWYgKHBhZ2VfYWRkciAhPSAtMSkgewotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAocGFnZV9hZGRyICYgMHhmZikpOwotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpKTsKLQkJCS8qIE9uZSBtb3JlIGFkZHJlc3MgY3ljbGUgZm9yIGRldmljZXMgPiAzMk1pQiAqLwotCQkJaWYgKHRoaXMtPmNoaXBzaXplID4gKDMyIDw8IDIwKSkKLQkJCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVuc2lnbmVkIGNoYXIpICgocGFnZV9hZGRyID4+IDE2KSAmIDB4MGYpKTsKLQkJfQotCQkvKiBMYXRjaCBpbiBhZGRyZXNzICovCi0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkFMRSk7CisJLyoKKwkgKiBBZGRyZXNzIGN5Y2xlLCB3aGVuIG5lY2Vzc2FyeQorCSAqLworCWN0cmwgPSBOQU5EX0NUUkxfQUxFIHwgTkFORF9DVFJMX0NIQU5HRTsKKwkvKiBTZXJpYWxseSBpbnB1dCBhZGRyZXNzICovCisJaWYgKGNvbHVtbiAhPSAtMSkgeworCQkvKiBBZGp1c3QgY29sdW1ucyBmb3IgMTYgYml0IGJ1c3dpZHRoICovCisJCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKKwkJCWNvbHVtbiA+Pj0gMTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBjb2x1bW4sIGN0cmwpOworCQljdHJsICY9IH5OQU5EX0NUUkxfQ0hBTkdFOwogCX0KKwlpZiAocGFnZV9hZGRyICE9IC0xKSB7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyLCBjdHJsKTsKKwkJY3RybCAmPSB+TkFORF9DVFJMX0NIQU5HRTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBwYWdlX2FkZHIgPj4gOCwgY3RybCk7CisJCS8qIE9uZSBtb3JlIGFkZHJlc3MgY3ljbGUgZm9yIGRldmljZXMgPiAzMk1pQiAqLworCQlpZiAoY2hpcC0+Y2hpcHNpemUgPiAoMzIgPDwgMjApKQorCQkJY2hpcC0+Y21kX2N0cmwobXRkLCBwYWdlX2FkZHIgPj4gMTYsIGN0cmwpOworCX0KKwljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX05PTkUsIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAKIAkvKgogCSAqIHByb2dyYW0gYW5kIGVyYXNlIGhhdmUgdGhlaXIgb3duIGJ1c3kgaGFuZGxlcnMKIAkgKiBzdGF0dXMgYW5kIHNlcXVlbnRpYWwgaW4gbmVlZHMgbm8gZGVsYXkKLQkqLworCSAqLwogCXN3aXRjaCAoY29tbWFuZCkgewogCiAJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKQEAgLTU5OSwzMiArNTg5LDMzIEBACiAJCXJldHVybjsKIAogCWNhc2UgTkFORF9DTURfUkVTRVQ6Ci0JCWlmICh0aGlzLT5kZXZfcmVhZHkpCisJCWlmIChjaGlwLT5kZXZfcmVhZHkpCiAJCQlicmVhazsKLQkJdWRlbGF5KHRoaXMtPmNoaXBfZGVsYXkpOwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgTkFORF9DTURfU1RBVFVTKTsKLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKLQkJd2hpbGUgKCAhKHRoaXMtPnJlYWRfYnl0ZShtdGQpICYgMHg0MCkpOworCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfU1RBVFVTLAorCQkJICAgICAgIE5BTkRfQ1RSTF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLAorCQkJICAgICAgIE5BTkRfQ01EX05PTkUsIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CisJCXdoaWxlICghKGNoaXAtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpICYmCisJCQkocnN0X3N0c19jbnQtLSkpOwogCQlyZXR1cm47CiAKLQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLworCQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIElmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBidXN5IHBpbiwgd2UgYXBwbHkgdGhlIGdpdmVuCiAJCSAqIGNvbW1hbmQgZGVsYXkKLQkJKi8KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpIHsKLQkJCXVkZWxheSAodGhpcy0+Y2hpcF9kZWxheSk7CisJCSAqLworCQlpZiAoIWNoaXAtPmRldl9yZWFkeSkgeworCQkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCiAJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KIAkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KLQluZGVsYXkgKDEwMCk7Ci0JLyogd2FpdCB1bnRpbCBjb21tYW5kIGlzIHByb2Nlc3NlZCAqLwotCXdoaWxlICghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpOworCW5kZWxheSgxMDApOworCisJbmFuZF93YWl0X3JlYWR5KG10ZCk7CiB9CiAKIC8qKgpAQCAtNjM0LDU1ICs2MjUsNTQgQEAKICAqIEBjb2x1bW46CXRoZSBjb2x1bW4gYWRkcmVzcyBmb3IgdGhpcyBjb21tYW5kLCAtMSBpZiBub25lCiAgKiBAcGFnZV9hZGRyOgl0aGUgcGFnZSBhZGRyZXNzIGZvciB0aGlzIGNvbW1hbmQsIC0xIGlmIG5vbmUKICAqCi0gKiBTZW5kIGNvbW1hbmQgdG8gTkFORCBkZXZpY2UuIFRoaXMgaXMgdGhlIHZlcnNpb24gZm9yIHRoZSBuZXcgbGFyZ2UgcGFnZSBkZXZpY2VzCi0gKiBXZSBkb250IGhhdmUgdGhlIHNlcGVyYXRlIHJlZ2lvbnMgYXMgd2UgaGF2ZSBpbiB0aGUgc21hbGwgcGFnZSBkZXZpY2VzLgotICogV2UgbXVzdCBlbXVsYXRlIE5BTkRfQ01EX1JFQURPT0IgdG8ga2VlcCB0aGUgY29kZSBjb21wYXRpYmxlLgotICoKKyAqIFNlbmQgY29tbWFuZCB0byBOQU5EIGRldmljZS4gVGhpcyBpcyB0aGUgdmVyc2lvbiBmb3IgdGhlIG5ldyBsYXJnZSBwYWdlCisgKiBkZXZpY2VzIFdlIGRvbnQgaGF2ZSB0aGUgc2VwYXJhdGUgcmVnaW9ucyBhcyB3ZSBoYXZlIGluIHRoZSBzbWFsbCBwYWdlCisgKiBkZXZpY2VzLiAgV2UgbXVzdCBlbXVsYXRlIE5BTkRfQ01EX1JFQURPT0IgdG8ga2VlcCB0aGUgY29kZSBjb21wYXRpYmxlLgogICovCi1zdGF0aWMgdm9pZCBuYW5kX2NvbW1hbmRfbHAgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQorc3RhdGljIHZvaWQgbmFuZF9jb21tYW5kX2xwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwKKwkJCSAgICBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQogewotCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJcmVnaXN0ZXIgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwl1aW50MzJfdCByc3Rfc3RzX2NudCA9IENPTkZJR19TWVNfTkFORF9SRVNFVF9DTlQ7CiAKIAkvKiBFbXVsYXRlIE5BTkRfQ01EX1JFQURPT0IgKi8KIAlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFET09CKSB7Ci0JCWNvbHVtbiArPSBtdGQtPm9vYmJsb2NrOworCQljb2x1bW4gKz0gbXRkLT53cml0ZXNpemU7CiAJCWNvbW1hbmQgPSBOQU5EX0NNRF9SRUFEMDsKIAl9CiAKLQotCS8qIEJlZ2luIGNvbW1hbmQgbGF0Y2ggY3ljbGUgKi8KLQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCS8qIFdyaXRlIG91dCB0aGUgY29tbWFuZCB0byB0aGUgZGV2aWNlLiAqLwotCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb21tYW5kKTsKLQkvKiBFbmQgY29tbWFuZCBsYXRjaCBjeWNsZSAqLwotCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7CisJLyogQ29tbWFuZCBsYXRjaCBjeWNsZSAqLworCWNoaXAtPmNtZF9jdHJsKG10ZCwgY29tbWFuZCAmIDB4ZmYsCisJCSAgICAgICBOQU5EX05DRSB8IE5BTkRfQ0xFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAKIAlpZiAoY29sdW1uICE9IC0xIHx8IHBhZ2VfYWRkciAhPSAtMSkgewotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRBTEUpOworCQlpbnQgY3RybCA9IE5BTkRfQ1RSTF9DSEFOR0UgfCBOQU5EX05DRSB8IE5BTkRfQUxFOwogCiAJCS8qIFNlcmlhbGx5IGlucHV0IGFkZHJlc3MgKi8KIAkJaWYgKGNvbHVtbiAhPSAtMSkgewogCQkJLyogQWRqdXN0IGNvbHVtbnMgZm9yIDE2IGJpdCBidXN3aWR0aCAqLwotCQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQogCQkJCWNvbHVtbiA+Pj0gMTsKLQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb2x1bW4gJiAweGZmKTsKLQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb2x1bW4gPj4gOCk7CisJCQljaGlwLT5jbWRfY3RybChtdGQsIGNvbHVtbiwgY3RybCk7CisJCQljdHJsICY9IH5OQU5EX0NUUkxfQ0hBTkdFOworCQkJY2hpcC0+Y21kX2N0cmwobXRkLCBjb2x1bW4gPj4gOCwgY3RybCk7CiAJCX0KIAkJaWYgKHBhZ2VfYWRkciAhPSAtMSkgewotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAocGFnZV9hZGRyICYgMHhmZikpOwotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpKTsKKwkJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyLCBjdHJsKTsKKwkJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyID4+IDgsCisJCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9BTEUpOwogCQkJLyogT25lIG1vcmUgYWRkcmVzcyBjeWNsZSBmb3IgZGV2aWNlcyA+IDEyOE1pQiAqLwotCQkJaWYgKHRoaXMtPmNoaXBzaXplID4gKDEyOCA8PCAyMCkpCi0JCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmKSk7CisJCQlpZiAoY2hpcC0+Y2hpcHNpemUgPiAoMTI4IDw8IDIwKSkKKwkJCQljaGlwLT5jbWRfY3RybChtdGQsIHBhZ2VfYWRkciA+PiAxNiwKKwkJCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9BTEUpOwogCQl9Ci0JCS8qIExhdGNoIGluIGFkZHJlc3MgKi8KLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKIAl9CisJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLCBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCiAJLyoKIAkgKiBwcm9ncmFtIGFuZCBlcmFzZSBoYXZlIHRoZWlyIG93biBidXN5IGhhbmRsZXJzCi0JICogc3RhdHVzIGFuZCBzZXF1ZW50aWFsIGluIG5lZWRzIG5vIGRlbGF5Ci0JKi8KKwkgKiBzdGF0dXMsIHNlcXVlbnRpYWwgaW4sIGFuZCBkZXBsZXRlMSBuZWVkIG5vIGRlbGF5CisJICovCiAJc3dpdGNoIChjb21tYW5kKSB7CiAKIAljYXNlIE5BTkRfQ01EX0NBQ0hFRFBST0c6CkBAIC02OTAsNjQ3ICs2ODAsNjI3IEBACiAJY2FzZSBOQU5EX0NNRF9FUkFTRTE6CiAJY2FzZSBOQU5EX0NNRF9FUkFTRTI6CiAJY2FzZSBOQU5EX0NNRF9TRVFJTjoKKwljYXNlIE5BTkRfQ01EX1JORElOOgogCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCWNhc2UgTkFORF9DTURfREVQTEVURTE6CiAJCXJldHVybjsKIAorCQkvKgorCQkgKiByZWFkIGVycm9yIHN0YXR1cyBjb21tYW5kcyByZXF1aXJlIG9ubHkgYSBzaG9ydCBkZWxheQorCQkgKi8KKwljYXNlIE5BTkRfQ01EX1NUQVRVU19FUlJPUjoKKwljYXNlIE5BTkRfQ01EX1NUQVRVU19FUlJPUjA6CisJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IxOgorCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SMjoKKwljYXNlIE5BTkRfQ01EX1NUQVRVU19FUlJPUjM6CisJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKKwkJcmV0dXJuOwogCiAJY2FzZSBOQU5EX0NNRF9SRVNFVDoKLQkJaWYgKHRoaXMtPmRldl9yZWFkeSkKKwkJaWYgKGNoaXAtPmRldl9yZWFkeSkKIAkJCWJyZWFrOwotCQl1ZGVsYXkodGhpcy0+Y2hpcF9kZWxheSk7Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7Ci0JCXRoaXMtPndyaXRlX2J5dGUobXRkLCBOQU5EX0NNRF9TVEFUVVMpOwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOwotCQl3aGlsZSAoICEodGhpcy0+cmVhZF9ieXRlKG10ZCkgJiAweDQwKSk7CisJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9TVEFUVVMsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX05PTkUsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJd2hpbGUgKCEoY2hpcC0+cmVhZF9ieXRlKG10ZCkgJiBOQU5EX1NUQVRVU19SRUFEWSkgJiYKKwkJCShyc3Rfc3RzX2NudC0tKSk7CisJCXJldHVybjsKKworCWNhc2UgTkFORF9DTURfUk5ET1VUOgorCQkvKiBObyByZWFkeSAvIGJ1c3kgY2hlY2sgbmVjZXNzYXJ5ICovCisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfUk5ET1VUU1RBUlQsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX05PTkUsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAkJcmV0dXJuOwogCiAJY2FzZSBOQU5EX0NNRF9SRUFEMDoKLQkJLyogQmVnaW4gY29tbWFuZCBsYXRjaCBjeWNsZSAqLwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCQkvKiBXcml0ZSBvdXQgdGhlIHN0YXJ0IHJlYWQgY29tbWFuZCAqLwotCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgTkFORF9DTURfUkVBRFNUQVJUKTsKLQkJLyogRW5kIGNvbW1hbmQgbGF0Y2ggY3ljbGUgKi8KLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKLQkJLyogRmFsbCB0aHJvdWdoIGludG8gcmVhZHkgY2hlY2sgKi8KKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9SRUFEU1RBUlQsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX05PTkUsCisJCQkgICAgICAgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAotCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCisJCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCiAJZGVmYXVsdDoKIAkJLyoKIAkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1c3kgcGluLCB3ZSBhcHBseSB0aGUgZ2l2ZW4KIAkJICogY29tbWFuZCBkZWxheQotCQkqLwotCQlpZiAoIXRoaXMtPmRldl9yZWFkeSkgewotCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKKwkJICovCisJCWlmICghY2hpcC0+ZGV2X3JlYWR5KSB7CisJCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAkvKiBBcHBseSB0aGlzIHNob3J0IGRlbGF5IGFsd2F5cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyB3YWl0IHRXQiBpbgogCSAqIGFueSBjYXNlIG9uIGFueSBtYWNoaW5lLiAqLwotCW5kZWxheSAoMTAwKTsKLQkvKiB3YWl0IHVudGlsIGNvbW1hbmQgaXMgcHJvY2Vzc2VkICovCi0Jd2hpbGUgKCF0aGlzLT5kZXZfcmVhZHkobXRkKSk7CisJbmRlbGF5KDEwMCk7CisKKwluYW5kX3dhaXRfcmVhZHkobXRkKTsKIH0KIAogLyoqCiAgKiBuYW5kX2dldF9kZXZpY2UgLSBbR0VORVJJQ10gR2V0IGNoaXAgZm9yIHNlbGVjdGVkIGFjY2VzcwotICogQHRoaXM6CXRoZSBuYW5kIGNoaXAgZGVzY3JpcHRvcgorICogQGNoaXA6CXRoZSBuYW5kIGNoaXAgZGVzY3JpcHRvcgogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBuZXdfc3RhdGU6CXRoZSBzdGF0ZSB3aGljaCBpcyByZXF1ZXN0ZWQKICAqCiAgKiBHZXQgdGhlIGRldmljZSBhbmQgbG9jayBpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcwogICovCi0vKiBYWFggVS1CT09UIFhYWCAqLwotI2lmIDAKLXN0YXRpYyB2b2lkIG5hbmRfZ2V0X2RldmljZSAoc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBuZXdfc3RhdGUpCitzdGF0aWMgaW50CituYW5kX2dldF9kZXZpY2Uoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBuZXdfc3RhdGUpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqYWN0aXZlID0gdGhpczsKLQotCURFQ0xBUkVfV0FJVFFVRVVFICh3YWl0LCBjdXJyZW50KTsKLQotCS8qCi0JICogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlCi0JKi8KLXJldHJ5OgotCS8qIEhhcmR3YXJlIGNvbnRyb2xsZXIgc2hhcmVkIGFtb25nIGluZGVwZW5kZW5kIGRldmljZXMgKi8KLQlpZiAodGhpcy0+Y29udHJvbGxlcikgewotCQlzcGluX2xvY2sgKCZ0aGlzLT5jb250cm9sbGVyLT5sb2NrKTsKLQkJaWYgKHRoaXMtPmNvbnRyb2xsZXItPmFjdGl2ZSkKLQkJCWFjdGl2ZSA9IHRoaXMtPmNvbnRyb2xsZXItPmFjdGl2ZTsKLQkJZWxzZQotCQkJdGhpcy0+Y29udHJvbGxlci0+YWN0aXZlID0gdGhpczsKLQkJc3Bpbl91bmxvY2sgKCZ0aGlzLT5jb250cm9sbGVyLT5sb2NrKTsKLQl9Ci0KLQlpZiAoYWN0aXZlID09IHRoaXMpIHsKLQkJc3Bpbl9sb2NrICgmdGhpcy0+Y2hpcF9sb2NrKTsKLQkJaWYgKHRoaXMtPnN0YXRlID09IEZMX1JFQURZKSB7Ci0JCQl0aGlzLT5zdGF0ZSA9IG5ld19zdGF0ZTsKLQkJCXNwaW5fdW5sb2NrICgmdGhpcy0+Y2hpcF9sb2NrKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlzZXRfY3VycmVudF9zdGF0ZSAoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCWFkZF93YWl0X3F1ZXVlICgmYWN0aXZlLT53cSwgJndhaXQpOwotCXNwaW5fdW5sb2NrICgmYWN0aXZlLT5jaGlwX2xvY2spOwotCXNjaGVkdWxlICgpOwotCXJlbW92ZV93YWl0X3F1ZXVlICgmYWN0aXZlLT53cSwgJndhaXQpOwotCWdvdG8gcmV0cnk7CisJY2hpcC0+c3RhdGUgPSBuZXdfc3RhdGU7CisJcmV0dXJuIDA7CiB9Ci0jZWxzZQotc3RhdGljIHZvaWQgbmFuZF9nZXRfZGV2aWNlIChzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG5ld19zdGF0ZSkge30KLSNlbmRpZgogCiAvKioKICAqIG5hbmRfd2FpdCAtIFtERUZBVUxUXSAgd2FpdCB1bnRpbCB0aGUgY29tbWFuZCBpcyBkb25lCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRoaXM6CU5BTkQgY2hpcCBzdHJ1Y3R1cmUKLSAqIEBzdGF0ZToJc3RhdGUgdG8gc2VsZWN0IHRoZSBtYXguIHRpbWVvdXQgdmFsdWUKKyAqIEBjaGlwOglOQU5EIGNoaXAgc3RydWN0dXJlCiAgKgogICogV2FpdCBmb3IgY29tbWFuZCBkb25lLiBUaGlzIGFwcGxpZXMgdG8gZXJhc2UgYW5kIHByb2dyYW0gb25seQogICogRXJhc2UgY2FuIHRha2UgdXAgdG8gNDAwbXMgYW5kIHByb2dyYW0gdXAgdG8gMjBtcyBhY2NvcmRpbmcgdG8KICAqIGdlbmVyYWwgTkFORCBhbmQgU21hcnRNZWRpYSBzcGVjcwotICoKLSovCi0vKiBYWFggVS1CT09UIFhYWCAqLwotI2lmIDAKLXN0YXRpYyBpbnQgbmFuZF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZwl0aW1lbyA9IGppZmZpZXM7Ci0JaW50CXN0YXR1czsKLQotCWlmIChzdGF0ZSA9PSBGTF9FUkFTSU5HKQotCQkgdGltZW8gKz0gKEhaICogNDAwKSAvIDEwMDA7Ci0JZWxzZQotCQkgdGltZW8gKz0gKEhaICogMjApIC8gMTAwMDsKLQotCS8qIEFwcGx5IHRoaXMgc2hvcnQgZGVsYXkgYWx3YXlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvIHdhaXQgdFdCIGluCi0JICogYW55IGNhc2Ugb24gYW55IG1hY2hpbmUuICovCi0JbmRlbGF5ICgxMDApOwotCi0JaWYgKChzdGF0ZSA9PSBGTF9FUkFTSU5HKSAmJiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSVNfQU5EKSkKLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVNfTVVMVEksIC0xLCAtMSk7Ci0JZWxzZQotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NUQVRVUywgLTEsIC0xKTsKLQotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lbykpIHsKLQkJLyogQ2hlY2ssIGlmIHdlIHdlcmUgaW50ZXJydXB0ZWQgKi8KLQkJaWYgKHRoaXMtPnN0YXRlICE9IHN0YXRlKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKHRoaXMtPmRldl9yZWFkeSkgewotCQkJaWYgKHRoaXMtPmRldl9yZWFkeShtdGQpKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJaWYgKHRoaXMtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJeWllbGQgKCk7Ci0JfQotCXN0YXR1cyA9IChpbnQpIHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCXJldHVybiBzdGF0dXM7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi1zdGF0aWMgaW50IG5hbmRfd2FpdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHN0YXRlKQorICovCitzdGF0aWMgaW50IG5hbmRfd2FpdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKIHsKIAl1bnNpZ25lZCBsb25nCXRpbWVvOworCWludCBzdGF0ZSA9IGNoaXAtPnN0YXRlOworCXUzMiB0aW1lX3N0YXJ0OwogCiAJaWYgKHN0YXRlID09IEZMX0VSQVNJTkcpCi0JCXRpbWVvID0gQ0ZHX0haICogNDAwOworCQl0aW1lbyA9IChDT05GSUdfU1lTX0haICogNDAwKSAvIDEwMDA7CiAJZWxzZQotCQl0aW1lbyA9IENGR19IWiAqIDIwOworCQl0aW1lbyA9IChDT05GSUdfU1lTX0haICogMjApIC8gMTAwMDsKIAotCWlmICgoc3RhdGUgPT0gRkxfRVJBU0lORykgJiYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0lTX0FORCkpCi0JCXRoaXMtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVNfTVVMVEksIC0xLCAtMSk7CisJaWYgKChzdGF0ZSA9PSBGTF9FUkFTSU5HKSAmJiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfSVNfQU5EKSkKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NUQVRVU19NVUxUSSwgLTEsIC0xKTsKIAllbHNlCi0JCXRoaXMtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7CisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7CiAKLQlyZXNldF90aW1lcigpOworCXRpbWVfc3RhcnQgPSBnZXRfdGltZXIoMCk7CiAKIAl3aGlsZSAoMSkgewotCQlpZiAoZ2V0X3RpbWVyKDApID4gdGltZW8pIHsKKwkJaWYgKGdldF90aW1lcih0aW1lX3N0YXJ0KSA+IHRpbWVvKSB7CiAJCQlwcmludGYoIlRpbWVvdXQhIik7Ci0JCQlyZXR1cm4gMDsKLQkJCX0KKwkJCXJldHVybiAweDAxOworCQl9CiAKLQkJaWYgKHRoaXMtPmRldl9yZWFkeSkgewotCQkJaWYgKHRoaXMtPmRldl9yZWFkeShtdGQpKQorCQlpZiAoY2hpcC0+ZGV2X3JlYWR5KSB7CisJCQlpZiAoY2hpcC0+ZGV2X3JlYWR5KG10ZCkpCiAJCQkJYnJlYWs7CiAJCX0gZWxzZSB7Ci0JCQlpZiAodGhpcy0+cmVhZF9ieXRlKG10ZCkgJiBOQU5EX1NUQVRVU19SRUFEWSkKKwkJCWlmIChjaGlwLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1JFQURZKQogCQkJCWJyZWFrOwogCQl9CiAJfQogI2lmZGVmIFBQQ0hBTUVMT05fTkFORF9USU1FUl9IQUNLCi0JcmVzZXRfdGltZXIoKTsKLQl3aGlsZSAoZ2V0X3RpbWVyKDApIDwgMTApOworCXRpbWVfc3RhcnQgPSBnZXRfdGltZXIoMCk7CisJd2hpbGUgKGdldF90aW1lcih0aW1lX3N0YXJ0KSA8IDEwKQorCQk7CiAjZW5kaWYgLyogIFBQQ0hBTUVMT05fTkFORF9USU1FUl9IQUNLICovCiAKLQlyZXR1cm4gdGhpcy0+cmVhZF9ieXRlKG10ZCk7CisJcmV0dXJuIChpbnQpY2hpcC0+cmVhZF9ieXRlKG10ZCk7CiB9Ci0jZW5kaWYKIAogLyoqCi0gKiBuYW5kX3dyaXRlX3BhZ2UgLSBbR0VORVJJQ10gd3JpdGUgb25lIHBhZ2UKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAdGhpczoJTkFORCBjaGlwIHN0cnVjdHVyZQotICogQHBhZ2U6IAlzdGFydHBhZ2UgaW5zaWRlIHRoZSBjaGlwLCBtdXN0IGJlIGNhbGxlZCB3aXRoIChwYWdlICYgdGhpcy0+cGFnZW1hc2spCi0gKiBAb29iX2J1ZjoJb3V0IG9mIGJhbmQgZGF0YSBidWZmZXIKLSAqIEBvb2JzZWw6CW91dCBvZiBiYW5kIHNlbGVjdHRpb24gc3RydWN0cmUKLSAqIEBjYWNoZWQ6CTEgPSBlbmFibGUgY2FjaGVkIHByb2dyYW1taW5nIGlmIHN1cHBvcnRlZCBieSBjaGlwCisgKiBuYW5kX3JlYWRfcGFnZV9yYXcgLSBbSW50ZXJuXSByZWFkIHJhdyBwYWdlIGRhdGEgd2l0aG91dCBlY2MKKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCi0gKiBOYW5kX3BhZ2VfcHJvZ3JhbSBmdW5jdGlvbiBpcyB1c2VkIGZvciB3cml0ZSBhbmQgd3JpdGV2ICEKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcHJvZ3JhbSBhIGZ1bGwgcGFnZSBvZiBkYXRhCi0gKiBJZiB5b3UgY2FsbCBpdCB3aXRoIGEgbm9uIHBhZ2UgYWxpZ25lZCBidWZmZXIsIHlvdSdyZSBsb3N0IDopCi0gKgotICogQ2FjaGVkIHByb2dyYW1taW5nIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMsIHdoaWNoIHVzZSBhIHNwZWNpYWwgb29iIGxheW91dAogICovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGVfcGFnZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBwYWdlLAotCXVfY2hhciAqb29iX2J1ZiwgIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwgaW50IGNhY2hlZCkKK3N0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2VfcmF3KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJICAgICAgdWludDhfdCAqYnVmLCBpbnQgcGFnZSkKIHsKLQlpbnQgCWksIHN0YXR1czsKLQl1X2NoYXIJZWNjX2NvZGVbMzJdOwotCWludAllY2Ntb2RlID0gb29ic2VsLT51c2VlY2MgPyB0aGlzLT5lY2Ntb2RlIDogTkFORF9FQ0NfTk9ORTsKLQl1aW50ICAJKm9vYl9jb25maWcgPSBvb2JzZWwtPmVjY3BvczsKLQlpbnQJZGF0aWR4ID0gMCwgZWNjaWR4ID0gMCwgZWNjc3RlcHMgPSB0aGlzLT5lY2NzdGVwczsKLQlpbnQJZWNjYnl0ZXMgPSAwOworCWNoaXAtPnJlYWRfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7CisJY2hpcC0+cmVhZF9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworCXJldHVybiAwOworfQogCi0JLyogRklYTUU6IEVuYWJsZSBjYWNoZWQgcHJvZ3JhbW1pbmcgKi8KLQljYWNoZWQgPSAwOworLyoqCisgKiBuYW5kX3JlYWRfcGFnZV9yYXdfc3luZHJvbWUgLSBbSW50ZXJuXSByZWFkIHJhdyBwYWdlIGRhdGEgd2l0aG91dCBlY2MKKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKKyAqCisgKiBXZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZyBldmVuIHdoZW4gT09CIGlzbid0IHVzZWQuCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2VfcmF3X3N5bmRyb21lKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQl1aW50OF90ICpidWYsIGludCBwYWdlKQoreworCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCXVpbnQ4X3QgKm9vYiA9IGNoaXAtPm9vYl9wb2k7CisJaW50IHN0ZXBzLCBzaXplOwogCi0JLyogU2VuZCBjb21tYW5kIHRvIGJlZ2luIGF1dG8gcGFnZSBwcm9ncmFtbWluZyAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfU0VRSU4sIDB4MDAsIHBhZ2UpOworCWZvciAoc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7IHN0ZXBzID4gMDsgc3RlcHMtLSkgeworCQljaGlwLT5yZWFkX2J1ZihtdGQsIGJ1ZiwgZWNjc2l6ZSk7CisJCWJ1ZiArPSBlY2NzaXplOwogCi0JLyogV3JpdGUgb3V0IGNvbXBsZXRlIHBhZ2Ugb2YgZGF0YSwgdGFrZSBjYXJlIG9mIGVjY21vZGUgKi8KLQlzd2l0Y2ggKGVjY21vZGUpIHsKLQkvKiBObyBlY2MsIHdyaXRlIGFsbCAqLwotCWNhc2UgTkFORF9FQ0NfTk9ORToKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIldyaXRpbmcgZGF0YSB3aXRob3V0IEVDQyB0byBOQU5ELUZMQVNIIGlzIG5vdCByZWNvbW1lbmRlZFxuIik7Ci0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIHRoaXMtPmRhdGFfcG9pLCBtdGQtPm9vYmJsb2NrKTsKLQkJYnJlYWs7Ci0KLQkvKiBTb2Z0d2FyZSBlY2MgMy8yNTYsIHdyaXRlIGFsbCAqLwotCWNhc2UgTkFORF9FQ0NfU09GVDoKLQkJZm9yICg7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tKSB7Ci0JCQl0aGlzLT5jYWxjdWxhdGVfZWNjKG10ZCwgJnRoaXMtPmRhdGFfcG9pW2RhdGlkeF0sIGVjY19jb2RlKTsKLQkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIGVjY2lkeCsrKQotCQkJCW9vYl9idWZbb29iX2NvbmZpZ1tlY2NpZHhdXSA9IGVjY19jb2RlW2ldOwotCQkJZGF0aWR4ICs9IHRoaXMtPmVjY3NpemU7CisJCWlmIChjaGlwLT5lY2MucHJlcGFkKSB7CisJCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnByZXBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnByZXBhZDsKIAkJfQotCQl0aGlzLT53cml0ZV9idWYobXRkLCB0aGlzLT5kYXRhX3BvaSwgbXRkLT5vb2JibG9jayk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVjY2J5dGVzID0gdGhpcy0+ZWNjYnl0ZXM7Ci0JCWZvciAoOyBlY2NzdGVwczsgZWNjc3RlcHMtLSkgewotCQkJLyogZW5hYmxlIGhhcmR3YXJlIGVjYyBsb2dpYyBmb3Igd3JpdGUgKi8KLQkJCXRoaXMtPmVuYWJsZV9od2VjYyhtdGQsIE5BTkRfRUNDX1dSSVRFKTsKLQkJCXRoaXMtPndyaXRlX2J1ZihtdGQsICZ0aGlzLT5kYXRhX3BvaVtkYXRpZHhdLCB0aGlzLT5lY2NzaXplKTsKLQkJCXRoaXMtPmNhbGN1bGF0ZV9lY2MobXRkLCAmdGhpcy0+ZGF0YV9wb2lbZGF0aWR4XSwgZWNjX2NvZGUpOwotCQkJZm9yIChpID0gMDsgaSA8IGVjY2J5dGVzOyBpKyssIGVjY2lkeCsrKQotCQkJCW9vYl9idWZbb29iX2NvbmZpZ1tlY2NpZHhdXSA9IGVjY19jb2RlW2ldOwotCQkJLyogSWYgdGhlIGhhcmR3YXJlIGVjYyBwcm92aWRlcyBzeW5kcm9tZXMgdGhlbgotCQkJICogdGhlIGVjYyBjb2RlIG11c3QgYmUgd3JpdHRlbiBpbW1pZGlhdGVseSBhZnRlcgotCQkJICogdGhlIGRhdGEgYnl0ZXMgKHdvcmRzKSAqLwotCQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0hXRUNDX1NZTkRST01FKQotCQkJCXRoaXMtPndyaXRlX2J1ZihtdGQsIGVjY19jb2RlLCBlY2NieXRlcyk7Ci0JCQlkYXRpZHggKz0gdGhpcy0+ZWNjc2l6ZTsKKworCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgZWNjYnl0ZXMpOworCQlvb2IgKz0gZWNjYnl0ZXM7CisKKwkJaWYgKGNoaXAtPmVjYy5wb3N0cGFkKSB7CisJCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnBvc3RwYWQpOworCQkJb29iICs9IGNoaXAtPmVjYy5wb3N0cGFkOwogCQl9Ci0JCWJyZWFrOwogCX0KIAotCS8qIFdyaXRlIG91dCBPT0IgZGF0YSAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9IV0VDQ19TWU5EUk9NRSkKLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgJm9vYl9idWZbb29ic2VsLT5lY2NieXRlc10sIG10ZC0+b29ic2l6ZSAtIG9vYnNlbC0+ZWNjYnl0ZXMpOwotCWVsc2UKLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgb29iX2J1ZiwgbXRkLT5vb2JzaXplKTsKKwlzaXplID0gbXRkLT5vb2JzaXplIC0gKG9vYiAtIGNoaXAtPm9vYl9wb2kpOworCWlmIChzaXplKQorCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgc2l6ZSk7CiAKLQkvKiBTZW5kIGNvbW1hbmQgdG8gYWN0dWFsbHkgcHJvZ3JhbSB0aGUgZGF0YSAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgY2FjaGVkID8gTkFORF9DTURfQ0FDSEVEUFJPRyA6IE5BTkRfQ01EX1BBR0VQUk9HLCAtMSwgLTEpOworCXJldHVybiAwOworfQogCi0JaWYgKCFjYWNoZWQpIHsKLQkJLyogY2FsbCB3YWl0IHJlYWR5IGZ1bmN0aW9uICovCi0JCXN0YXR1cyA9IHRoaXMtPndhaXRmdW5jIChtdGQsIHRoaXMsIEZMX1dSSVRJTkcpOwotCQkvKiBTZWUgaWYgZGV2aWNlIHRoaW5rcyBpdCBzdWNjZWVkZWQgKi8KLQkJaWYgKHN0YXR1cyAmIDB4MDEpIHsKLQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAiJXM6ICIgIkZhaWxlZCB3cml0ZSwgcGFnZSAweCUwOHgsICIsIF9fRlVOQ1RJT05fXywgcGFnZSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEZJWE1FOiBJbXBsZW1lbnQgY2FjaGVkIHByb2dyYW1taW5nICEgKi8KLQkJLyogd2FpdCB1bnRpbCBjYWNoZSBpcyByZWFkeSovCi0JCS8qIHN0YXR1cyA9IHRoaXMtPndhaXRmdW5jIChtdGQsIHRoaXMsIEZMX0NBQ0hFRFJQRyk7ICovCisvKioKKyAqIG5hbmRfcmVhZF9wYWdlX3N3ZWNjIC0gW1JFUExBQ0FCTEVdIHNvZnR3YXJlIGVjYyBiYXNlZCBwYWdlIHJlYWQgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfcGFnZV9zd2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQl1aW50OF90ICpidWYsIGludCBwYWdlKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXVpbnQ4X3QgKmVjY19jYWxjID0gY2hpcC0+YnVmZmVycy0+ZWNjY2FsYzsKKwl1aW50OF90ICplY2NfY29kZSA9IGNoaXAtPmJ1ZmZlcnMtPmVjY2NvZGU7CisJdWludDMyX3QgKmVjY3BvcyA9IGNoaXAtPmVjYy5sYXlvdXQtPmVjY3BvczsKKworCWNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3KG10ZCwgY2hpcCwgYnVmLCBwYWdlKTsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCisJCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbaV0pOworCisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy50b3RhbDsgaSsrKQorCQllY2NfY29kZVtpXSA9IGNoaXAtPm9vYl9wb2lbZWNjcG9zW2ldXTsKKworCWVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXAgPSBidWY7CisKKwlmb3IgKGkgPSAwIDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQlpbnQgc3RhdDsKKworCQlzdGF0ID0gY2hpcC0+ZWNjLmNvcnJlY3QobXRkLCBwLCAmZWNjX2NvZGVbaV0sICZlY2NfY2FsY1tpXSk7CisJCWlmIChzdGF0IDwgMCkKKwkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQllbHNlCisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gc3RhdDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFCiAvKioKLSAqIG5hbmRfdmVyaWZ5X3BhZ2VzIC0gW0dFTkVSSUNdIHZlcmlmeSB0aGUgY2hpcCBjb250ZW50cyBhZnRlciBhIHdyaXRlCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRoaXM6CU5BTkQgY2hpcCBzdHJ1Y3R1cmUKLSAqIEBwYWdlOiAJc3RhcnRwYWdlIGluc2lkZSB0aGUgY2hpcCwgbXVzdCBiZSBjYWxsZWQgd2l0aCAocGFnZSAmIHRoaXMtPnBhZ2VtYXNrKQotICogQG51bXBhZ2VzOgludW1iZXIgb2YgcGFnZXMgdG8gdmVyaWZ5Ci0gKiBAb29iX2J1ZjoJb3V0IG9mIGJhbmQgZGF0YSBidWZmZXIKLSAqIEBvb2JzZWw6CW91dCBvZiBiYW5kIHNlbGVjdHRpb24gc3RydWN0cmUKLSAqIEBjaGlwbnI6CW51bWJlciBvZiB0aGUgY3VycmVudCBjaGlwCi0gKiBAb29ibW9kZToJMSA9IGZ1bGwgYnVmZmVyIHZlcmlmeSwgMCA9IGVjYyBvbmx5Ci0gKgotICogVGhlIE5BTkQgZGV2aWNlIGFzc3VtZXMgdGhhdCBpdCBpcyBhbHdheXMgd3JpdGluZyB0byBhIGNsZWFubHkgZXJhc2VkIHBhZ2UuCi0gKiBIZW5jZSwgaXQgcGVyZm9ybXMgaXRzIGludGVybmFsIHdyaXRlIHZlcmlmaWNhdGlvbiBvbmx5IG9uIGJpdHMgdGhhdAotICogdHJhbnNpdGlvbmVkIGZyb20gMSB0byAwLiBUaGUgZGV2aWNlIGRvZXMgTk9UIHZlcmlmeSB0aGUgd2hvbGUgcGFnZSBvbiBhCi0gKiBieXRlIGJ5IGJ5dGUgYmFzaXMuIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIHBhZ2Ugd2FzIG5vdCBjb21wbGV0ZWx5IGVyYXNlZAotICogb3IgdGhlIHBhZ2UgaXMgYmVjb21pbmcgdW51c2FibGUgZHVlIHRvIHdlYXIuIFRoZSByZWFkIHdpdGggRUNDIHdvdWxkIGNhdGNoCi0gKiB0aGUgZXJyb3IgbGF0ZXIgd2hlbiB0aGUgRUNDIHBhZ2UgY2hlY2sgZmFpbHMsIGJ1dCB3ZSB3b3VsZCByYXRoZXIgY2F0Y2gKLSAqIGl0IGVhcmx5IGluIHRoZSBwYWdlIHdyaXRlIHN0YWdlLiBCZXR0ZXIgdG8gd3JpdGUgbm8gZGF0YSB0aGFuIGludmFsaWQgZGF0YS4KKyAqIG5hbmRfcmVhZF9zdWJwYWdlIC0gW1JFUExBQ0FCTEVdIHNvZnR3YXJlIGVjYyBiYXNlZCBzdWItcGFnZSByZWFkIGZ1bmN0aW9uCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBkYXRhX29mZnM6CW9mZnNldCBvZiByZXF1ZXN0ZWQgZGF0YSB3aXRoaW4gdGhlIHBhZ2UKKyAqIEByZWFkbGVuOglkYXRhIGxlbmd0aAorICogQGJ1ZnBvaToJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQogICovCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X3BhZ2VzIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHBhZ2UsIGludCBudW1wYWdlcywKLQl1X2NoYXIgKm9vYl9idWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwgaW50IGNoaXBuciwgaW50IG9vYm1vZGUpCitzdGF0aWMgaW50IG5hbmRfcmVhZF9zdWJwYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJdWludDMyX3QgZGF0YV9vZmZzLCB1aW50MzJfdCByZWFkbGVuLCB1aW50OF90ICpidWZwb2kpCiB7Ci0JaW50IAlpLCBqLCBkYXRpZHggPSAwLCBvb2JvZnMgPSAwLCByZXMgPSAtRUlPOwotCWludAllY2NzdGVwcyA9IHRoaXMtPmVjY3N0ZXBzOwotCWludAlod2VjY2J5dGVzOwotCXVfY2hhciAJb29iZGF0YVs2NF07CisJaW50IHN0YXJ0X3N0ZXAsIGVuZF9zdGVwLCBudW1fc3RlcHM7CisJdWludDMyX3QgKmVjY3BvcyA9IGNoaXAtPmVjYy5sYXlvdXQtPmVjY3BvczsKKwl1aW50OF90ICpwOworCWludCBkYXRhX2NvbF9hZGRyLCBpLCBnYXBzID0gMDsKKwlpbnQgZGF0YWZyYWdfbGVuLCBlY2NmcmFnX2xlbiwgYWxpZ25lZF9sZW4sIGFsaWduZWRfcG9zOworCWludCBidXN3ID0gKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSA/IDIgOiAxOworCWludCBpbmRleCA9IDA7CiAKLQlod2VjY2J5dGVzID0gKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0hXRUNDX1NZTkRST01FKSA/IChvb2JzZWwtPmVjY2J5dGVzIC8gZWNjc3RlcHMpIDogMDsKKwkvKiBDb2x1bW4gYWRkcmVzcyB3aWhpbiB0aGUgcGFnZSBhbGlnbmVkIHRvIEVDQyBzaXplICgyNTZieXRlcykuICovCisJc3RhcnRfc3RlcCA9IGRhdGFfb2ZmcyAvIGNoaXAtPmVjYy5zaXplOworCWVuZF9zdGVwID0gKGRhdGFfb2ZmcyArIHJlYWRsZW4gLSAxKSAvIGNoaXAtPmVjYy5zaXplOworCW51bV9zdGVwcyA9IGVuZF9zdGVwIC0gc3RhcnRfc3RlcCArIDE7CiAKLQkvKiBTZW5kIGNvbW1hbmQgdG8gcmVhZCBiYWNrIHRoZSBmaXJzdCBwYWdlICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFEMCwgMCwgcGFnZSk7CisJLyogRGF0YSBzaXplIGFsaWduZWQgdG8gRUNDIGVjYy5zaXplKi8KKwlkYXRhZnJhZ19sZW4gPSBudW1fc3RlcHMgKiBjaGlwLT5lY2Muc2l6ZTsKKwllY2NmcmFnX2xlbiA9IG51bV9zdGVwcyAqIGNoaXAtPmVjYy5ieXRlczsKIAotCWZvcig7OykgewotCQlmb3IgKGogPSAwOyBqIDwgZWNjc3RlcHM7IGorKykgewotCQkJLyogTG9vcCB0aHJvdWdoIGFuZCB2ZXJpZnkgdGhlIGRhdGEgKi8KLQkJCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgJnRoaXMtPmRhdGFfcG9pW2RhdGlkeF0sIG10ZC0+ZWNjc2l6ZSkpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiAiICJGYWlsZWQgd3JpdGUgdmVyaWZ5LCBwYWdlIDB4JTA4eCAiLCBfX0ZVTkNUSU9OX18sIHBhZ2UpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJZGF0aWR4ICs9IG10ZC0+ZWNjc2l6ZTsKLQkJCS8qIEhhdmUgd2UgYSBodyBnZW5lcmF0b3IgbGF5b3V0ID8gKi8KLQkJCWlmICghaHdlY2NieXRlcykKLQkJCQljb250aW51ZTsKLQkJCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgJnRoaXMtPm9vYl9idWZbb29ib2ZzXSwgaHdlY2NieXRlcykpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiAiICJGYWlsZWQgd3JpdGUgdmVyaWZ5LCBwYWdlIDB4JTA4eCAiLCBfX0ZVTkNUSU9OX18sIHBhZ2UpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJb29ib2ZzICs9IGh3ZWNjYnl0ZXM7CisJZGF0YV9jb2xfYWRkciA9IHN0YXJ0X3N0ZXAgKiBjaGlwLT5lY2Muc2l6ZTsKKwkvKiBJZiB3ZSByZWFkIG5vdCBhIHBhZ2UgYWxpZ25lZCBkYXRhICovCisJaWYgKGRhdGFfY29sX2FkZHIgIT0gMCkKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JORE9VVCwgZGF0YV9jb2xfYWRkciwgLTEpOworCisJcCA9IGJ1ZnBvaSArIGRhdGFfY29sX2FkZHI7CisJY2hpcC0+cmVhZF9idWYobXRkLCBwLCBkYXRhZnJhZ19sZW4pOworCisJLyogQ2FsY3VsYXRlICBFQ0MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZWNjZnJhZ19sZW4gOyBpICs9IGNoaXAtPmVjYy5ieXRlcywgcCArPSBjaGlwLT5lY2Muc2l6ZSkKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsICZjaGlwLT5idWZmZXJzLT5lY2NjYWxjW2ldKTsKKworCS8qIFRoZSBwZXJmb3JtYW5jZSBpcyBmYXN0ZXIgaWYgdG8gcG9zaXRpb24gb2Zmc2V0cworCSAgIGFjY29yZGluZyB0byBlY2MucG9zLiBMZXQgbWFrZSBzdXJlIGhlcmUgdGhhdAorCSAgIHRoZXJlIGFyZSBubyBnYXBzIGluIGVjYyBwb3NpdGlvbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZWNjZnJhZ19sZW4gLSAxOyBpKyspIHsKKwkJaWYgKGVjY3Bvc1tpICsgc3RhcnRfc3RlcCAqIGNoaXAtPmVjYy5ieXRlc10gKyAxICE9CisJCQllY2Nwb3NbaSArIHN0YXJ0X3N0ZXAgKiBjaGlwLT5lY2MuYnl0ZXMgKyAxXSkgeworCQkJZ2FwcyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZ2FwcykgeworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUk5ET1VULCBtdGQtPndyaXRlc2l6ZSwgLTEpOworCQljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CisJfSBlbHNlIHsKKwkJLyogc2VuZCB0aGUgY29tbWFuZCB0byByZWFkIHRoZSBwYXJ0aWN1bGFyIGVjYyBieXRlcyAqLworCQkvKiB0YWtlIGNhcmUgYWJvdXQgYnVzd2lkdGggYWxpZ25tZW50IGluIHJlYWRfYnVmICovCisJCWluZGV4ID0gc3RhcnRfc3RlcCAqIGNoaXAtPmVjYy5ieXRlczsKKworCQlhbGlnbmVkX3BvcyA9IGVjY3Bvc1tpbmRleF0gJiB+KGJ1c3cgLSAxKTsKKwkJYWxpZ25lZF9sZW4gPSBlY2NmcmFnX2xlbjsKKwkJaWYgKGVjY3Bvc1tpbmRleF0gJiAoYnVzdyAtIDEpKQorCQkJYWxpZ25lZF9sZW4rKzsKKwkJaWYgKGVjY3Bvc1tpbmRleCArIChudW1fc3RlcHMgKiBjaGlwLT5lY2MuYnl0ZXMpXSAmIChidXN3IC0gMSkpCisJCQlhbGlnbmVkX2xlbisrOworCisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9STkRPVVQsCisJCQkJCW10ZC0+d3JpdGVzaXplICsgYWxpZ25lZF9wb3MsIC0xKTsKKwkJY2hpcC0+cmVhZF9idWYobXRkLCAmY2hpcC0+b29iX3BvaVthbGlnbmVkX3Bvc10sIGFsaWduZWRfbGVuKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZWNjZnJhZ19sZW47IGkrKykKKwkJY2hpcC0+YnVmZmVycy0+ZWNjY29kZVtpXSA9IGNoaXAtPm9vYl9wb2lbZWNjcG9zW2kgKyBpbmRleF1dOworCisJcCA9IGJ1ZnBvaSArIGRhdGFfY29sX2FkZHI7CisJZm9yIChpID0gMDsgaSA8IGVjY2ZyYWdfbGVuIDsgaSArPSBjaGlwLT5lY2MuYnl0ZXMsIHAgKz0gY2hpcC0+ZWNjLnNpemUpIHsKKwkJaW50IHN0YXQ7CisKKwkJc3RhdCA9IGNoaXAtPmVjYy5jb3JyZWN0KG10ZCwgcCwKKwkJCSZjaGlwLT5idWZmZXJzLT5lY2Njb2RlW2ldLCAmY2hpcC0+YnVmZmVycy0+ZWNjY2FsY1tpXSk7CisJCWlmIChzdGF0IDwgMCkKKwkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQllbHNlCisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gc3RhdDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmFuZF9yZWFkX3BhZ2VfaHdlY2MgLSBbUkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIGJhc2VkIHBhZ2UgcmVhZCBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAorICoKKyAqIE5vdCBmb3Igc3luZHJvbWUgY2FsY3VsYXRpbmcgZWNjIGNvbnRyb2xsZXJzIHdoaWNoIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQKKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQl1aW50OF90ICpidWYsIGludCBwYWdlKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXVpbnQ4X3QgKmVjY19jYWxjID0gY2hpcC0+YnVmZmVycy0+ZWNjY2FsYzsKKwl1aW50OF90ICplY2NfY29kZSA9IGNoaXAtPmJ1ZmZlcnMtPmVjY2NvZGU7CisJdWludDMyX3QgKmVjY3BvcyA9IGNoaXAtPmVjYy5sYXlvdXQtPmVjY3BvczsKKworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJY2hpcC0+ZWNjLmh3Y3RsKG10ZCwgTkFORF9FQ0NfUkVBRCk7CisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7CisJCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbaV0pOworCX0KKwljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnRvdGFsOyBpKyspCisJCWVjY19jb2RlW2ldID0gY2hpcC0+b29iX3BvaVtlY2Nwb3NbaV1dOworCisJZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJcCA9IGJ1ZjsKKworCWZvciAoaSA9IDAgOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWludCBzdGF0OworCisJCXN0YXQgPSBjaGlwLT5lY2MuY29ycmVjdChtdGQsIHAsICZlY2NfY29kZVtpXSwgJmVjY19jYWxjW2ldKTsKKwkJaWYgKHN0YXQgPCAwKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCWVsc2UKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuYW5kX3JlYWRfcGFnZV9od2VjY19vb2JfZmlyc3QgLSBbUkVQTEFDQUJMRV0gaHcgZWNjLCByZWFkIG9vYiBmaXJzdAorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAorICoKKyAqIEhhcmR3YXJlIEVDQyBmb3IgbGFyZ2UgcGFnZSBjaGlwcywgcmVxdWlyZSBPT0IgdG8gYmUgcmVhZCBmaXJzdC4KKyAqIEZvciB0aGlzIEVDQyBtb2RlLCB0aGUgd3JpdGVfcGFnZSBtZXRob2QgaXMgcmUtdXNlZCBmcm9tIEVDQ19IVy4KKyAqIFRoZXNlIG1ldGhvZHMgcmVhZC93cml0ZSBFQ0MgZnJvbSB0aGUgT09CIGFyZWEsIHVubGlrZSB0aGUKKyAqIEVDQ19IV19TWU5EUk9NRSBzdXBwb3J0IHdpdGggbXVsdGlwbGUgRUNDIHN0ZXBzLCBmb2xsb3dzIHRoZQorICogImluZml4IEVDQyIgc2NoZW1lIGFuZCByZWFkcy93cml0ZXMgRUNDIGZyb20gdGhlIGRhdGEgYXJlYSwgYnkKKyAqIG92ZXJ3cml0aW5nIHRoZSBOQU5EIG1hbnVmYWN0dXJlciBiYWQgYmxvY2sgbWFya2luZ3MuCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2VfaHdlY2Nfb29iX2ZpcnN0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpCit7CisJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXVpbnQ4X3QgKnAgPSBidWY7CisJdWludDhfdCAqZWNjX2NvZGUgPSBjaGlwLT5idWZmZXJzLT5lY2Njb2RlOworCXVpbnQzMl90ICplY2Nwb3MgPSBjaGlwLT5lY2MubGF5b3V0LT5lY2Nwb3M7CisJdWludDhfdCAqZWNjX2NhbGMgPSBjaGlwLT5idWZmZXJzLT5lY2NjYWxjOworCisJLyogUmVhZCB0aGUgT09CIGFyZWEgZmlyc3QgKi8KKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgMCwgcGFnZSk7CisJY2hpcC0+cmVhZF9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFEMCwgMCwgcGFnZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnRvdGFsOyBpKyspCisJCWVjY19jb2RlW2ldID0gY2hpcC0+b29iX3BvaVtlY2Nwb3NbaV1dOworCisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQlpbnQgc3RhdDsKKworCQljaGlwLT5lY2MuaHdjdGwobXRkLCBOQU5EX0VDQ19SRUFEKTsKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBwLCBlY2NzaXplKTsKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsICZlY2NfY2FsY1tpXSk7CisKKwkJc3RhdCA9IGNoaXAtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmVjY19jb2RlW2ldLCBOVUxMKTsKKwkJaWYgKHN0YXQgPCAwKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCWVsc2UKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuYW5kX3JlYWRfcGFnZV9zeW5kcm9tZSAtIFtSRVBMQUNBQkxFXSBoYXJkd2FyZSBlY2Mgc3luZHJvbSBiYXNlZCBwYWdlIHJlYWQKKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKKyAqCisgKiBUaGUgaHcgZ2VuZXJhdG9yIGNhbGN1bGF0ZXMgdGhlIGVycm9yIHN5bmRyb21lIGF1dG9tYXRpY2FsbHkuIFRoZXJlZm9yCisgKiB3ZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZy4KKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfcGFnZV9zeW5kcm9tZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQkgICB1aW50OF90ICpidWYsIGludCBwYWdlKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXVpbnQ4X3QgKm9vYiA9IGNoaXAtPm9vYl9wb2k7CisKKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWludCBzdGF0OworCisJCWNoaXAtPmVjYy5od2N0bChtdGQsIE5BTkRfRUNDX1JFQUQpOworCQljaGlwLT5yZWFkX2J1ZihtdGQsIHAsIGVjY3NpemUpOworCisJCWlmIChjaGlwLT5lY2MucHJlcGFkKSB7CisJCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnByZXBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnByZXBhZDsKIAkJfQogCi0JCS8qIGNoZWNrLCBpZiB3ZSBtdXN0IGNvbXBhcmUgYWxsIGRhdGEgb3IgaWYgd2UganVzdCBoYXZlIHRvCi0JCSAqIGNvbXBhcmUgdGhlIGVjYyBieXRlcwotCQkgKi8KLQkJaWYgKG9vYm1vZGUpIHsKLQkJCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgJm9vYl9idWZbb29ib2ZzXSwgbXRkLT5vb2JzaXplIC0gaHdlY2NieXRlcyAqIGVjY3N0ZXBzKSkgewotCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAiJXM6ICIgIkZhaWxlZCB3cml0ZSB2ZXJpZnksIHBhZ2UgMHglMDh4ICIsIF9fRlVOQ1RJT05fXywgcGFnZSk7Ci0JCQkJZ290byBvdXQ7CisJCWNoaXAtPmVjYy5od2N0bChtdGQsIE5BTkRfRUNDX1JFQURTWU4pOworCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgZWNjYnl0ZXMpOworCQlzdGF0ID0gY2hpcC0+ZWNjLmNvcnJlY3QobXRkLCBwLCBvb2IsIE5VTEwpOworCisJCWlmIChzdGF0IDwgMCkKKwkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQllbHNlCisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gc3RhdDsKKworCQlvb2IgKz0gZWNjYnl0ZXM7CisKKwkJaWYgKGNoaXAtPmVjYy5wb3N0cGFkKSB7CisJCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnBvc3RwYWQpOworCQkJb29iICs9IGNoaXAtPmVjYy5wb3N0cGFkOworCQl9CisJfQorCisJLyogQ2FsY3VsYXRlIHJlbWFpbmluZyBvb2IgYnl0ZXMgKi8KKwlpID0gbXRkLT5vb2JzaXplIC0gKG9vYiAtIGNoaXAtPm9vYl9wb2kpOworCWlmIChpKQorCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgaSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuYW5kX3RyYW5zZmVyX29vYiAtIFtJbnRlcm5hbF0gVHJhbnNmZXIgb29iIHRvIGNsaWVudCBidWZmZXIKKyAqIEBjaGlwOgluYW5kIGNoaXAgc3RydWN0dXJlCisgKiBAb29iOglvb2IgZGVzdGluYXRpb24gYWRkcmVzcworICogQG9wczoJb29iIG9wcyBzdHJ1Y3R1cmUKKyAqIEBsZW46CXNpemUgb2Ygb29iIHRvIHRyYW5zZmVyCisgKi8KK3N0YXRpYyB1aW50OF90ICpuYW5kX3RyYW5zZmVyX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50OF90ICpvb2IsCisJCQkJICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcywgc2l6ZV90IGxlbikKK3sKKwlzd2l0Y2ggKG9wcy0+bW9kZSkgeworCisJY2FzZSBNVERfT09CX1BMQUNFOgorCWNhc2UgTVREX09PQl9SQVc6CisJCW1lbWNweShvb2IsIGNoaXAtPm9vYl9wb2kgKyBvcHMtPm9vYm9mZnMsIGxlbik7CisJCXJldHVybiBvb2IgKyBsZW47CisKKwljYXNlIE1URF9PT0JfQVVUTzogeworCQlzdHJ1Y3QgbmFuZF9vb2JmcmVlICpmcmVlID0gY2hpcC0+ZWNjLmxheW91dC0+b29iZnJlZTsKKwkJdWludDMyX3QgYm9mZnMgPSAwLCByb2ZmcyA9IG9wcy0+b29ib2ZmczsKKwkJc2l6ZV90IGJ5dGVzID0gMDsKKworCQlmb3IgKDsgZnJlZS0+bGVuZ3RoICYmIGxlbjsgZnJlZSsrLCBsZW4gLT0gYnl0ZXMpIHsKKwkJCS8qIFJlYWQgcmVxdWVzdCBub3QgZnJvbSBvZmZzZXQgMCA/ICovCisJCQlpZiAodW5saWtlbHkocm9mZnMpKSB7CisJCQkJaWYgKHJvZmZzID49IGZyZWUtPmxlbmd0aCkgeworCQkJCQlyb2ZmcyAtPSBmcmVlLT5sZW5ndGg7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlib2ZmcyA9IGZyZWUtPm9mZnNldCArIHJvZmZzOworCQkJCWJ5dGVzID0gbWluX3Qoc2l6ZV90LCBsZW4sCisJCQkJCSAgICAgIChmcmVlLT5sZW5ndGggLSByb2ZmcykpOworCQkJCXJvZmZzID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJYnl0ZXMgPSBtaW5fdChzaXplX3QsIGxlbiwgZnJlZS0+bGVuZ3RoKTsKKwkJCQlib2ZmcyA9IGZyZWUtPm9mZnNldDsKKwkJCX0KKwkJCW1lbWNweShvb2IsIGNoaXAtPm9vYl9wb2kgKyBib2ZmcywgYnl0ZXMpOworCQkJb29iICs9IGJ5dGVzOworCQl9CisJCXJldHVybiBvb2I7CisJfQorCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBuYW5kX2RvX3JlYWRfb3BzIC0gW0ludGVybmFsXSBSZWFkIGRhdGEgd2l0aCBFQ0MKKyAqCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KKyAqIEBvcHM6CW9vYiBvcHMgc3RydWN0dXJlCisgKgorICogSW50ZXJuYWwgZnVuY3Rpb24uIENhbGxlZCB3aXRoIGNoaXAgaGVsZC4KKyAqLworc3RhdGljIGludCBuYW5kX2RvX3JlYWRfb3BzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlpbnQgY2hpcG5yLCBwYWdlLCByZWFscGFnZSwgY29sLCBieXRlcywgYWxpZ25lZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBtdGRfZWNjX3N0YXRzIHN0YXRzOworCWludCBibGtjaGVjayA9ICgxIDw8IChjaGlwLT5waHlzX2VyYXNlX3NoaWZ0IC0gY2hpcC0+cGFnZV9zaGlmdCkpIC0gMTsKKwlpbnQgc25kY21kID0gMTsKKwlpbnQgcmV0ID0gMDsKKwl1aW50MzJfdCByZWFkbGVuID0gb3BzLT5sZW47CisJdWludDMyX3Qgb29icmVhZGxlbiA9IG9wcy0+b29ibGVuOworCXVpbnQzMl90IG1heF9vb2JzaXplID0gb3BzLT5tb2RlID09IE1URF9PT0JfQVVUTyA/CisJCW10ZC0+b29iYXZhaWwgOiBtdGQtPm9vYnNpemU7CisKKwl1aW50OF90ICpidWZwb2ksICpvb2IsICpidWY7CisKKy8vCXByaW50ayhLRVJOX0lORk8gInNpemUgb2YgbG9mZl90ID0gJWQgXG4iLCBzaXplb2YobG9mZl90KSk7CisKKwlzdGF0cyA9IG10ZC0+ZWNjX3N0YXRzOworCisJY2hpcG5yID0gKGludCkoZnJvbSA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisKKwlyZWFscGFnZSA9IChpbnQpKGZyb20gPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisJcGFnZSA9IHJlYWxwYWdlICYgY2hpcC0+cGFnZW1hc2s7CisKKwljb2wgPSAoaW50KShmcm9tICYgKG10ZC0+d3JpdGVzaXplIC0gMSkpOworCisJYnVmID0gb3BzLT5kYXRidWY7CisJb29iID0gb3BzLT5vb2JidWY7CisKKwl3aGlsZSAoMSkgeworCQlXQVRDSERPR19SRVNFVCgpOworCisJCWJ5dGVzID0gbWluKG10ZC0+d3JpdGVzaXplIC0gY29sLCByZWFkbGVuKTsKKwkJYWxpZ25lZCA9IChieXRlcyA9PSBtdGQtPndyaXRlc2l6ZSk7CisKKwkJLyogSXMgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgYnVmZmVyID8gKi8KKwkJaWYgKHJlYWxwYWdlICE9IGNoaXAtPnBhZ2VidWYgfHwgb29iKSB7CisJCQlidWZwb2kgPSBhbGlnbmVkID8gYnVmIDogY2hpcC0+YnVmZmVycy0+ZGF0YWJ1ZjsKKworCQkJaWYgKGxpa2VseShzbmRjbWQpKSB7CisJCQkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQUQwLCAweDAwLCBwYWdlKTsKKwkJCQlzbmRjbWQgPSAwOworCQkJfQorCisJCQkvKiBOb3cgcmVhZCB0aGUgcGFnZSBpbnRvIHRoZSBidWZmZXIgKi8KKwkJCWlmICh1bmxpa2VseShvcHMtPm1vZGUgPT0gTVREX09PQl9SQVcpKQorCQkJCXJldCA9IGNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3KG10ZCwgY2hpcCwKKwkJCQkJCQkgICAgICBidWZwb2ksIHBhZ2UpOworCQkJZWxzZSBpZiAoIWFsaWduZWQgJiYgTkFORF9TVUJQQUdFX1JFQUQoY2hpcCkgJiYgIW9vYikKKwkJCQlyZXQgPSBjaGlwLT5lY2MucmVhZF9zdWJwYWdlKG10ZCwgY2hpcCwKKwkJCQkJCQljb2wsIGJ5dGVzLCBidWZwb2kpOworCQkJZWxzZQorCQkJCXJldCA9IGNoaXAtPmVjYy5yZWFkX3BhZ2UobXRkLCBjaGlwLCBidWZwb2ksCisJCQkJCQkJICBwYWdlKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCisJCQkvKiBUcmFuc2ZlciBub3QgYWxpZ25lZCBkYXRhICovCisJCQlpZiAoIWFsaWduZWQpIHsKKwkJCQlpZiAoIU5BTkRfU1VCUEFHRV9SRUFEKGNoaXApICYmICFvb2IgJiYKKwkJCQkgICAgIShtdGQtPmVjY19zdGF0cy5mYWlsZWQgLSBzdGF0cy5mYWlsZWQpKQorCQkJCQljaGlwLT5wYWdlYnVmID0gcmVhbHBhZ2U7CisJCQkJbWVtY3B5KGJ1ZiwgY2hpcC0+YnVmZmVycy0+ZGF0YWJ1ZiArIGNvbCwgYnl0ZXMpOworCQkJfQorCisJCQlidWYgKz0gYnl0ZXM7CisKKwkJCWlmICh1bmxpa2VseShvb2IpKSB7CisKKwkJCQlpbnQgdG9yZWFkID0gbWluKG9vYnJlYWRsZW4sIG1heF9vb2JzaXplKTsKKworCQkJCWlmICh0b3JlYWQpIHsKKwkJCQkJb29iID0gbmFuZF90cmFuc2Zlcl9vb2IoY2hpcCwKKwkJCQkJCW9vYiwgb3BzLCB0b3JlYWQpOworCQkJCQlvb2JyZWFkbGVuIC09IHRvcmVhZDsKKwkJCQl9CisJCQl9CisKKwkJCWlmICghKGNoaXAtPm9wdGlvbnMgJiBOQU5EX05PX1JFQURSRFkpKSB7CisJCQkJLyoKKwkJCQkgKiBBcHBseSBkZWxheSBvciB3YWl0IGZvciByZWFkeS9idXN5IHBpbi4gRG8KKwkJCQkgKiB0aGlzIGJlZm9yZSB0aGUgQVVUT0lOQ1IgY2hlY2ssIHNvIG5vCisJCQkJICogcHJvYmxlbXMgYXJpc2UgaWYgYSBjaGlwIHdoaWNoIGRvZXMgYXV0bworCQkJCSAqIGluY3JlbWVudCBpcyBtYXJrZWQgYXMgTk9BVVRPSU5DUiBieSB0aGUKKwkJCQkgKiBib2FyZCBkcml2ZXIuCisJCQkJICovCisJCQkJaWYgKCFjaGlwLT5kZXZfcmVhZHkpCisJCQkJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKKwkJCQllbHNlCisJCQkJCW5hbmRfd2FpdF9yZWFkeShtdGQpOwogCQkJfQogCQl9IGVsc2UgewotCQkJLyogUmVhZCBhbHdheXMsIGVsc2UgYXV0b2luY3JlbWVudCBmYWlscyAqLwotCQkJdGhpcy0+cmVhZF9idWYobXRkLCBvb2JkYXRhLCBtdGQtPm9vYnNpemUgLSBod2VjY2J5dGVzICogZWNjc3RlcHMpOwotCi0JCQlpZiAob29ic2VsLT51c2VlY2MgIT0gTVREX05BTkRFQ0NfT0ZGICYmICFod2VjY2J5dGVzKSB7Ci0JCQkJaW50IGVjY2NudCA9IG9vYnNlbC0+ZWNjYnl0ZXM7Ci0KLQkJCQlmb3IgKGkgPSAwOyBpIDwgZWNjY250OyBpKyspIHsKLQkJCQkJaW50IGlkeCA9IG9vYnNlbC0+ZWNjcG9zW2ldOwotCQkJCQlpZiAob29iZGF0YVtpZHhdICE9IG9vYl9idWZbb29ib2ZzICsgaWR4XSApIHsKLQkJCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLAotCQkJCQkgICAgICAgCSIlczogRmFpbGVkIEVDQyB3cml0ZSAiCi0JCQkJCQkidmVyaWZ5LCBwYWdlIDB4JTA4eCwgIiAiJTZpIGJ5dGVzIHdlcmUgc3VjY2VzZnVsXG4iLCBfX0ZVTkNUSU9OX18sIHBhZ2UsIGkpOwotCQkJCQkJZ290byBvdXQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJb29ib2ZzICs9IG10ZC0+b29ic2l6ZSAtIGh3ZWNjYnl0ZXMgKiBlY2NzdGVwczsKLQkJcGFnZSsrOwotCQludW1wYWdlcy0tOwotCi0JCS8qIEFwcGx5IGRlbGF5IG9yIHdhaXQgZm9yIHJlYWR5L2J1c3kgcGluCi0JCSAqIERvIHRoaXMgYmVmb3JlIHRoZSBBVVRPSU5DUiBjaGVjaywgc28gbm8gcHJvYmxlbXMKLQkJICogYXJpc2UgaWYgYSBjaGlwIHdoaWNoIGRvZXMgYXV0byBpbmNyZW1lbnQKLQkJICogaXMgbWFya2VkIGFzIE5PQVVUT0lOQ1IgYnkgdGhlIGJvYXJkIGRyaXZlci4KLQkJICogRG8gdGhpcyBhbHNvIGJlZm9yZSByZXR1cm5pbmcsIHNvIHRoZSBjaGlwIGlzCi0JCSAqIHJlYWR5IGZvciB0aGUgbmV4dCBjb21tYW5kLgotCQkqLwotCQlpZiAoIXRoaXMtPmRldl9yZWFkeSkKLQkJCXVkZWxheSAodGhpcy0+Y2hpcF9kZWxheSk7Ci0JCWVsc2UKLQkJCXdoaWxlICghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpOwotCi0JCS8qIEFsbCBkb25lLCByZXR1cm4gaGFwcHkgKi8KLQkJaWYgKCFudW1wYWdlcykKLQkJCXJldHVybiAwOwotCi0KLQkJLyogQ2hlY2ssIGlmIHRoZSBjaGlwIHN1cHBvcnRzIGF1dG8gcGFnZSBpbmNyZW1lbnQgKi8KLQkJaWYgKCFOQU5EX0NBTkFVVE9JTkNSKHRoaXMpKQotCQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFEMCwgMHgwMCwgcGFnZSk7Ci0JfQotCS8qCi0JICogVGVybWluYXRlIHRoZSByZWFkIGNvbW1hbmQuIFdlIGNvbWUgaGVyZSBpbiBjYXNlIG9mIGFuIGVycm9yCi0JICogU28gd2UgbXVzdCBpc3N1ZSBhIHJlc2V0IGNvbW1hbmQuCi0JICovCi1vdXQ6Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKLQlyZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLS8qKgotICogbmFuZF9yZWFkIC0gW01URCBJbnRlcmZhY2VdIE1URCBjb21wYWJpbGl0eSBmdW5jdGlvbiBmb3IgbmFuZF9yZWFkX2VjYwotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAotICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKLSAqIEBidWY6CXRoZSBkYXRhYnVmZmVyIHRvIHB1dCBkYXRhCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FsbHMgbmFuZF9yZWFkX2VjYyB3aXRoIG9vYiBidWZmZXIgYW5kIG9vYnNlbCA9IE5VTEwKLSovCi1zdGF0aWMgaW50IG5hbmRfcmVhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZikKLXsKLQlyZXR1cm4gbmFuZF9yZWFkX2VjYyAobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmLCBOVUxMLCBOVUxMKTsKLX0KLQotCi0vKioKLSAqIG5hbmRfcmVhZF9lY2MgLSBbTVREIEludGVyZmFjZV0gUmVhZCBkYXRhIHdpdGggRUNDCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byByZWFkCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcwotICogQGJ1ZjoJdGhlIGRhdGFidWZmZXIgdG8gcHV0IGRhdGEKLSAqIEBvb2JfYnVmOglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQG9vYnNlbDoJb29iIHNlbGVjdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBOQU5EIHJlYWQgd2l0aCBFQ0MKLSAqLwotc3RhdGljIGludCBuYW5kX3JlYWRfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCQkgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBvb2JfYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCi17Ci0JaW50IGksIGosIGNvbCwgcmVhbHBhZ2UsIHBhZ2UsIGVuZCwgZWNjLCBjaGlwbnIsIHNuZGNtZCA9IDE7Ci0JaW50IHJlYWQgPSAwLCBvb2IgPSAwLCBlY2Nfc3RhdHVzID0gMCwgZWNjX2ZhaWxlZCA9IDA7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl1X2NoYXIgKmRhdGFfcG9pLCAqb29iX2RhdGEgPSBvb2JfYnVmOwotCXVfY2hhciBlY2NfY2FsY1szMl07Ci0JdV9jaGFyIGVjY19jb2RlWzMyXTsKLQlpbnQgZWNjbW9kZSwgZWNjc3RlcHM7Ci0JdW5zaWduZWQgKm9vYl9jb25maWc7Ci0JaW50CWRhdGlkeDsKLQlpbnQJYmxvY2tjaGVjayA9ICgxIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpIC0gMTsKLQlpbnQJZWNjYnl0ZXM7Ci0JaW50CWNvbXBhcmVlY2MgPSAxOwotCWludAlvb2JyZWFkbGVuOwotCi0KLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfcmVhZF9lY2M6IGZyb20gPSAweCUwOHgsIGxlbiA9ICVpXG4iLCAodW5zaWduZWQgaW50KSBmcm9tLCAoaW50KSBsZW4pOwotCi0JLyogRG8gbm90IGFsbG93IHJlYWRzIHBhc3QgZW5kIG9mIGRldmljZSAqLwotCWlmICgoZnJvbSArIGxlbikgPiBtdGQtPnNpemUpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3JlYWRfZWNjOiBBdHRlbXB0IHJlYWQgYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIpOwotCQkqcmV0bGVuID0gMDsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQgLEZMX1JFQURJTkcpOwotCi0JLyogdXNlIHVzZXJzcGFjZSBzdXBwbGllZCBvb2JpbmZvLCBpZiB6ZXJvICovCi0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOwotCi0JLyogQXV0b3BsYWNlIG9mIG9vYiBkYXRhID8gVXNlIHRoZSBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWUgKi8KLQlpZiAob29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFKQotCQlvb2JzZWwgPSB0aGlzLT5hdXRvb29iOwotCi0JZWNjbW9kZSA9IG9vYnNlbC0+dXNlZWNjID8gdGhpcy0+ZWNjbW9kZSA6IE5BTkRfRUNDX05PTkU7Ci0Jb29iX2NvbmZpZyA9IG9vYnNlbC0+ZWNjcG9zOwotCi0JLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCWNoaXBuciA9IChpbnQpKGZyb20gPj4gdGhpcy0+Y2hpcF9zaGlmdCk7Ci0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwotCi0JLyogRmlyc3Qgd2UgY2FsY3VsYXRlIHRoZSBzdGFydGluZyBwYWdlICovCi0JcmVhbHBhZ2UgPSAoaW50KSAoZnJvbSA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQlwYWdlID0gcmVhbHBhZ2UgJiB0aGlzLT5wYWdlbWFzazsKLQotCS8qIEdldCByYXcgc3RhcnRpbmcgY29sdW1uICovCi0JY29sID0gZnJvbSAmIChtdGQtPm9vYmJsb2NrIC0gMSk7Ci0KLQllbmQgPSBtdGQtPm9vYmJsb2NrOwotCWVjYyA9IHRoaXMtPmVjY3NpemU7Ci0JZWNjYnl0ZXMgPSB0aGlzLT5lY2NieXRlczsKLQotCWlmICgoZWNjbW9kZSA9PSBOQU5EX0VDQ19OT05FKSB8fCAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSFdFQ0NfU1lORFJPTUUpKQotCQljb21wYXJlZWNjID0gMDsKLQotCW9vYnJlYWRsZW4gPSBtdGQtPm9vYnNpemU7Ci0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0hXRUNDX1NZTkRST01FKQotCQlvb2JyZWFkbGVuIC09IG9vYnNlbC0+ZWNjYnl0ZXM7Ci0KLQkvKiBMb29wIHVudGlsIGFsbCBkYXRhIHJlYWQgKi8KLQl3aGlsZSAocmVhZCA8IGxlbikgewotCi0JCWludCBhbGlnbmVkID0gKCFjb2wgJiYgKGxlbiAtIHJlYWQpID49IGVuZCk7Ci0JCS8qCi0JCSAqIElmIHRoZSByZWFkIGlzIG5vdCBwYWdlIGFsaWduZWQsIHdlIGhhdmUgdG8gcmVhZCBpbnRvIGRhdGEgYnVmZmVyCi0JCSAqIGR1ZSB0byBlY2MsIGVsc2Ugd2UgcmVhZCBpbnRvIHJldHVybiBidWZmZXIgZGlyZWN0Ci0JCSAqLwotCQlpZiAoYWxpZ25lZCkKLQkJCWRhdGFfcG9pID0gJmJ1ZltyZWFkXTsKLQkJZWxzZQotCQkJZGF0YV9wb2kgPSB0aGlzLT5kYXRhX2J1ZjsKLQotCQkvKiBDaGVjaywgaWYgd2UgaGF2ZSB0aGlzIHBhZ2UgaW4gdGhlIGJ1ZmZlcgotCQkgKgotCQkgKiBGSVhNRTogTWFrZSBpdCB3b3JrIHdoZW4gd2UgbXVzdCBwcm92aWRlIG9vYiBkYXRhIHRvbywKLQkJICogY2hlY2sgdGhlIHVzYWdlIG9mIGRhdGFfYnVmIG9vYiBmaWVsZAotCQkgKi8KLQkJaWYgKHJlYWxwYWdlID09IHRoaXMtPnBhZ2VidWYgJiYgIW9vYl9idWYpIHsKLQkJCS8qIGFsaWduZWQgcmVhZCA/ICovCi0JCQlpZiAoYWxpZ25lZCkKLQkJCQltZW1jcHkgKGRhdGFfcG9pLCB0aGlzLT5kYXRhX2J1ZiwgZW5kKTsKLQkJCWdvdG8gcmVhZGRhdGE7CisJCQltZW1jcHkoYnVmLCBjaGlwLT5idWZmZXJzLT5kYXRhYnVmICsgY29sLCBieXRlcyk7CisJCQlidWYgKz0gYnl0ZXM7CiAJCX0KIAotCQkvKiBDaGVjaywgaWYgd2UgbXVzdCBzZW5kIHRoZSByZWFkIGNvbW1hbmQgKi8KLQkJaWYgKHNuZGNtZCkgewotCQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFEMCwgMHgwMCwgcGFnZSk7Ci0JCQlzbmRjbWQgPSAwOwotCQl9CisJCXJlYWRsZW4gLT0gYnl0ZXM7CiAKLQkJLyogZ2V0IG9vYiBhcmVhLCBpZiB3ZSBoYXZlIG5vIG9vYiBidWZmZXIgZnJvbSBmcy1kcml2ZXIgKi8KLQkJaWYgKCFvb2JfYnVmIHx8IG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSB8fAotCQkJb29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMX1VTUikKLQkJCW9vYl9kYXRhID0gJnRoaXMtPmRhdGFfYnVmW2VuZF07Ci0KLQkJZWNjc3RlcHMgPSB0aGlzLT5lY2NzdGVwczsKLQotCQlzd2l0Y2ggKGVjY21vZGUpIHsKLQkJY2FzZSBOQU5EX0VDQ19OT05FOiB7CS8qIE5vIEVDQywgUmVhZCBpbiBhIHBhZ2UgKi8KLS8qIFhYWCBVLUJPT1QgWFhYICovCi0jaWYgMAotCQkJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdHdoaW5nZSA9IDA7Ci0JCQlpZiAoKGxhc3R3aGluZ2UgLyBIWikgIT0gKGppZmZpZXMgLyBIWikpIHsKLQkJCQlwcmludGsgKEtFUk5fV0FSTklORyAiUmVhZGluZyBkYXRhIGZyb20gTkFORCBGTEFTSCB3aXRob3V0IEVDQyBpcyBub3QgcmVjb21tZW5kZWRcbiIpOwotCQkJCWxhc3R3aGluZ2UgPSBqaWZmaWVzOwotCQkJfQotI2Vsc2UKLQkJCXB1dHMoIlJlYWRpbmcgZGF0YSBmcm9tIE5BTkQgRkxBU0ggd2l0aG91dCBFQ0MgaXMgbm90IHJlY29tbWVuZGVkXG4iKTsKLSNlbmRpZgotCQkJdGhpcy0+cmVhZF9idWYobXRkLCBkYXRhX3BvaSwgZW5kKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY2FzZSBOQU5EX0VDQ19TT0ZUOgkvKiBTb2Z0d2FyZSBFQ0MgMy8yNTY6IFJlYWQgaW4gYSBwYWdlICsgb29iIGRhdGEgKi8KLQkJCXRoaXMtPnJlYWRfYnVmKG10ZCwgZGF0YV9wb2ksIGVuZCk7Ci0JCQlmb3IgKGkgPSAwLCBkYXRpZHggPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSs9MywgZGF0aWR4ICs9IGVjYykKLQkJCQl0aGlzLT5jYWxjdWxhdGVfZWNjKG10ZCwgJmRhdGFfcG9pW2RhdGlkeF0sICZlY2NfY2FsY1tpXSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZm9yIChpID0gMCwgZGF0aWR4ID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkrPWVjY2J5dGVzLCBkYXRpZHggKz0gZWNjKSB7Ci0JCQkJdGhpcy0+ZW5hYmxlX2h3ZWNjKG10ZCwgTkFORF9FQ0NfUkVBRCk7Ci0JCQkJdGhpcy0+cmVhZF9idWYobXRkLCAmZGF0YV9wb2lbZGF0aWR4XSwgZWNjKTsKLQotCQkJCS8qIEhXIGVjYyB3aXRoIHN5bmRyb21lIGNhbGN1bGF0aW9uIG11c3QgcmVhZCB0aGUKLQkJCQkgKiBzeW5kcm9tZSBmcm9tIGZsYXNoIGltbWlkaWF0ZWx5IGFmdGVyIHRoZSBkYXRhICovCi0JCQkJaWYgKCFjb21wYXJlZWNjKSB7Ci0JCQkJCS8qIFNvbWUgaHcgZWNjIGdlbmVyYXRvcnMgbmVlZCB0byBrbm93IHdoZW4gdGhlCi0JCQkJCSAqIHN5bmRyb21lIGlzIHJlYWQgZnJvbSBmbGFzaCAqLwotCQkJCQl0aGlzLT5lbmFibGVfaHdlY2MobXRkLCBOQU5EX0VDQ19SRUFEU1lOKTsKLQkJCQkJdGhpcy0+cmVhZF9idWYobXRkLCAmb29iX2RhdGFbaV0sIGVjY2J5dGVzKTsKLQkJCQkJLyogV2UgY2FsYyBlcnJvciBjb3JyZWN0aW9uIGRpcmVjdGx5LCBpdCBjaGVja3MgdGhlIGh3Ci0JCQkJCSAqIGdlbmVyYXRvciBmb3IgYW4gZXJyb3IsIHJlYWRzIGJhY2sgdGhlIHN5bmRyb21lIGFuZAotCQkJCQkgKiBkb2VzIHRoZSBlcnJvciBjb3JyZWN0aW9uIG9uIHRoZSBmbHkgKi8KLQkJCQkJaWYgKHRoaXMtPmNvcnJlY3RfZGF0YShtdGQsICZkYXRhX3BvaVtkYXRpZHhdLCAmb29iX2RhdGFbaV0sICZlY2NfY29kZVtpXSkgPT0gLTEpIHsKLQkJCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX2VjYzogIgotCQkJCQkJCSJGYWlsZWQgRUNDIHJlYWQsIHBhZ2UgMHglMDh4IG9uIGNoaXAgJWRcbiIsIHBhZ2UsIGNoaXBucik7Ci0JCQkJCQllY2NfZmFpbGVkKys7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQl0aGlzLT5jYWxjdWxhdGVfZWNjKG10ZCwgJmRhdGFfcG9pW2RhdGlkeF0sICZlY2NfY2FsY1tpXSk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiByZWFkIG9vYmRhdGEgKi8KLQkJdGhpcy0+cmVhZF9idWYobXRkLCAmb29iX2RhdGFbbXRkLT5vb2JzaXplIC0gb29icmVhZGxlbl0sIG9vYnJlYWRsZW4pOwotCi0JCS8qIFNraXAgRUNDIGNoZWNrLCBpZiBub3QgcmVxdWVzdGVkIChFQ0NfTk9ORSBvciBIV19FQ0Mgd2l0aCBzeW5kcm9tZXMpICovCi0JCWlmICghY29tcGFyZWVjYykKLQkJCWdvdG8gcmVhZG9vYjsKLQotCQkvKiBQaWNrIHRoZSBFQ0MgYnl0ZXMgb3V0IG9mIHRoZSBvb2IgZGF0YSAqLwotCQlmb3IgKGogPSAwOyBqIDwgb29ic2VsLT5lY2NieXRlczsgaisrKQotCQkJZWNjX2NvZGVbal0gPSBvb2JfZGF0YVtvb2JfY29uZmlnW2pdXTsKLQotCQkvKiBjb3JyZWN0IGRhdGEsIGlmIG5lY2NlY2FyeSAqLwotCQlmb3IgKGkgPSAwLCBqID0gMCwgZGF0aWR4ID0gMDsgaSA8IHRoaXMtPmVjY3N0ZXBzOyBpKyssIGRhdGlkeCArPSBlY2MpIHsKLQkJCWVjY19zdGF0dXMgPSB0aGlzLT5jb3JyZWN0X2RhdGEobXRkLCAmZGF0YV9wb2lbZGF0aWR4XSwgJmVjY19jb2RlW2pdLCAmZWNjX2NhbGNbal0pOwotCi0JCQkvKiBHZXQgbmV4dCBjaHVuayBvZiBlY2MgYnl0ZXMgKi8KLQkJCWogKz0gZWNjYnl0ZXM7Ci0KLQkJCS8qIENoZWNrLCBpZiB3ZSBoYXZlIGEgZnMgc3VwcGxpZWQgb29iLWJ1ZmZlciwKLQkJCSAqIFRoaXMgaXMgdGhlIGxlZ2FjeSBtb2RlLiBVc2VkIGJ5IFlBRkZTMQotCQkJICogU2hvdWxkIGdvIGF3YXkgc29tZSBkYXkKLQkJCSAqLwotCQkJaWYgKG9vYl9idWYgJiYgb29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfUExBQ0UpIHsKLQkJCQlpbnQgKnAgPSAoaW50ICopKCZvb2JfZGF0YVttdGQtPm9vYnNpemVdKTsKLQkJCQlwW2ldID0gZWNjX3N0YXR1czsKLQkJCX0KLQotCQkJaWYgKGVjY19zdGF0dXMgPT0gLTEpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9lY2M6ICIgIkZhaWxlZCBFQ0MgcmVhZCwgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwotCQkJCWVjY19mYWlsZWQrKzsKLQkJCX0KLQkJfQotCi0JcmVhZG9vYjoKLQkJLyogY2hlY2ssIGlmIHdlIGhhdmUgYSBmcyBzdXBwbGllZCBvb2ItYnVmZmVyICovCi0JCWlmIChvb2JfYnVmKSB7Ci0JCQkvKiB3aXRob3V0IGF1dG9wbGFjZS4gTGVnYWN5IG1vZGUgdXNlZCBieSBZQUZGUzEgKi8KLQkJCXN3aXRjaChvb2JzZWwtPnVzZWVjYykgewotCQkJY2FzZSBNVERfTkFOREVDQ19BVVRPUExBQ0U6Ci0JCQljYXNlIE1URF9OQU5ERUNDX0FVVE9QTF9VU1I6Ci0JCQkJLyogV2FsayB0aHJvdWdoIHRoZSBhdXRvcGxhY2UgY2h1bmtzICovCi0JCQkJZm9yIChpID0gMCwgaiA9IDA7IGogPCBtdGQtPm9vYmF2YWlsOyBpKyspIHsKLQkJCQkJaW50IGZyb20gPSBvb2JzZWwtPm9vYmZyZWVbaV1bMF07Ci0JCQkJCWludCBudW0gPSBvb2JzZWwtPm9vYmZyZWVbaV1bMV07Ci0JCQkJCW1lbWNweSgmb29iX2J1Zltvb2JdLCAmb29iX2RhdGFbZnJvbV0sIG51bSk7Ci0JCQkJCWorPSBudW07Ci0JCQkJfQotCQkJCW9vYiArPSBtdGQtPm9vYmF2YWlsOwotCQkJCWJyZWFrOwotCQkJY2FzZSBNVERfTkFOREVDQ19QTEFDRToKLQkJCQkvKiBZQUZGUzEgbGVnYWN5IG1vZGUgKi8KLQkJCQlvb2JfZGF0YSArPSB0aGlzLT5lY2NzdGVwcyAqIHNpemVvZiAoaW50KTsKLQkJCWRlZmF1bHQ6Ci0JCQkJb29iX2RhdGEgKz0gbXRkLT5vb2JzaXplOwotCQkJfQotCQl9Ci0JcmVhZGRhdGE6Ci0JCS8qIFBhcnRpYWwgcGFnZSByZWFkLCB0cmFuc2ZlciBkYXRhIGludG8gZnMgYnVmZmVyICovCi0JCWlmICghYWxpZ25lZCkgewotCQkJZm9yIChqID0gY29sOyBqIDwgZW5kICYmIHJlYWQgPCBsZW47IGorKykKLQkJCQlidWZbcmVhZCsrXSA9IGRhdGFfcG9pW2pdOwotCQkJdGhpcy0+cGFnZWJ1ZiA9IHJlYWxwYWdlOwotCQl9IGVsc2UKLQkJCXJlYWQgKz0gbXRkLT5vb2JibG9jazsKLQotCQkvKiBBcHBseSBkZWxheSBvciB3YWl0IGZvciByZWFkeS9idXN5IHBpbgotCQkgKiBEbyB0aGlzIGJlZm9yZSB0aGUgQVVUT0lOQ1IgY2hlY2ssIHNvIG5vIHByb2JsZW1zCi0JCSAqIGFyaXNlIGlmIGEgY2hpcCB3aGljaCBkb2VzIGF1dG8gaW5jcmVtZW50Ci0JCSAqIGlzIG1hcmtlZCBhcyBOT0FVVE9JTkNSIGJ5IHRoZSBib2FyZCBkcml2ZXIuCi0JCSovCi0JCWlmICghdGhpcy0+ZGV2X3JlYWR5KQotCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKLQkJZWxzZQotCQkJd2hpbGUgKCF0aGlzLT5kZXZfcmVhZHkobXRkKSk7Ci0KLQkJaWYgKHJlYWQgPT0gbGVuKQorCQlpZiAoIXJlYWRsZW4pCiAJCQlicmVhazsKIAogCQkvKiBGb3Igc3Vic2VxdWVudCByZWFkcyBhbGlnbiB0byBwYWdlIGJvdW5kYXJ5LiAqLwpAQCAtMTMzOCw3MDUgKzEzMDgsODc5IEBACiAJCS8qIEluY3JlbWVudCBwYWdlIGFkZHJlc3MgKi8KIAkJcmVhbHBhZ2UrKzsKIAotCQlwYWdlID0gcmVhbHBhZ2UgJiB0aGlzLT5wYWdlbWFzazsKKwkJcGFnZSA9IHJlYWxwYWdlICYgY2hpcC0+cGFnZW1hc2s7CiAJCS8qIENoZWNrLCBpZiB3ZSBjcm9zcyBhIGNoaXAgYm91bmRhcnkgKi8KIAkJaWYgKCFwYWdlKSB7CiAJCQljaGlwbnIrKzsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwotCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAJCX0KKwogCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudAogCQkgKiBvciBpZiB3ZSBoYXZlIGhpdCBhIGJsb2NrIGJvdW5kYXJ5LgotCQkqLwotCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IodGhpcykgfHwgIShwYWdlICYgYmxvY2tjaGVjaykpCisJCSAqLworCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IoY2hpcCkgfHwgIShwYWdlICYgYmxrY2hlY2spKQogCQkJc25kY21kID0gMTsKIAl9CiAKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOworCW9wcy0+cmV0bGVuID0gb3BzLT5sZW4gLSAoc2l6ZV90KSByZWFkbGVuOworCWlmIChvb2IpCisJCW9wcy0+b29icmV0bGVuID0gb3BzLT5vb2JsZW4gLSBvb2JyZWFkbGVuOwogCi0JLyoKLQkgKiBSZXR1cm4gc3VjY2VzcywgaWYgbm8gRUNDIGZhaWx1cmVzLCBlbHNlIC1FQkFETVNHCi0JICogZnMgZHJpdmVyIHdpbGwgdGFrZSBjYXJlIG9mIHRoYXQsIGJlY2F1c2UKLQkgKiByZXRsZW4gPT0gZGVzaXJlZCBsZW4gYW5kIHJlc3VsdCA9PSAtRUJBRE1TRwotCSAqLwotCSpyZXRsZW4gPSByZWFkOwotCXJldHVybiBlY2NfZmFpbGVkID8gLUVCQURNU0cgOiAwOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAobXRkLT5lY2Nfc3RhdHMuZmFpbGVkIC0gc3RhdHMuZmFpbGVkKQorCQlyZXR1cm4gLUVCQURNU0c7CisKKwlyZXR1cm4gIG10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCAtIHN0YXRzLmNvcnJlY3RlZCA/IC1FVUNMRUFOIDogMDsKIH0KIAogLyoqCi0gKiBuYW5kX3JlYWRfb29iIC0gW01URCBJbnRlcmZhY2VdIE5BTkQgcmVhZCBvdXQtb2YtYmFuZAorICogbmFuZF9yZWFkIC0gW01URCBJbnRlcmZhY2VdIE1URCBjb21wYXRpYmlsaXR5IGZ1bmN0aW9uIGZvciBuYW5kX2RvX3JlYWRfZWNjCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KICAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byByZWFkCiAgKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcwogICogQGJ1ZjoJdGhlIGRhdGFidWZmZXIgdG8gcHV0IGRhdGEKICAqCi0gKiBOQU5EIHJlYWQgb3V0LW9mLWJhbmQgZGF0YSBmcm9tIHRoZSBzcGFyZSBhcmVhCisgKiBHZXQgaG9sZCBvZiB0aGUgY2hpcCBhbmQgY2FsbCBuYW5kX2RvX3JlYWQKICAqLwotc3RhdGljIGludCBuYW5kX3JlYWRfb29iIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQorc3RhdGljIGludCBuYW5kX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQkgICAgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpCiB7Ci0JaW50IGksIGNvbCwgcGFnZSwgY2hpcG5yOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50CWJsb2NrY2hlY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKSAtIDE7Ci0KLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfcmVhZF9vb2I6IGZyb20gPSAweCUwOHgsIGxlbiA9ICVpXG4iLCAodW5zaWduZWQgaW50KSBmcm9tLCAoaW50KSBsZW4pOwotCi0JLyogU2hpZnQgdG8gZ2V0IHBhZ2UgKi8KLQlwYWdlID0gKGludCkoZnJvbSA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQljaGlwbnIgPSAoaW50KShmcm9tID4+IHRoaXMtPmNoaXBfc2hpZnQpOwotCi0JLyogTWFzayB0byBnZXQgY29sdW1uICovCi0JY29sID0gZnJvbSAmIChtdGQtPm9vYnNpemUgLSAxKTsKLQotCS8qIEluaXRpYWxpemUgcmV0dXJuIGxlbmd0aCB2YWx1ZSAqLwotCSpyZXRsZW4gPSAwOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IHJldDsKIAogCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAoKGZyb20gKyBsZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX29vYjogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKLQkJKnJldGxlbiA9IDA7CisJaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWlmICghbGVuKQorCQlyZXR1cm4gMDsKIAotCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwotCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkICwgRkxfUkVBRElORyk7CisJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfUkVBRElORyk7CiAKLQkvKiBTZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCWNoaXAtPm9wcy5sZW4gPSBsZW47CisJY2hpcC0+b3BzLmRhdGJ1ZiA9IGJ1ZjsKKwljaGlwLT5vcHMub29iYnVmID0gTlVMTDsKIAotCS8qIFNlbmQgdGhlIHJlYWQgY29tbWFuZCAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgY29sLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCS8qCi0JICogUmVhZCB0aGUgZGF0YSwgaWYgd2UgcmVhZCBtb3JlIHRoYW4gb25lIHBhZ2UKLQkgKiBvb2IgZGF0YSwgbGV0IHRoZSBkZXZpY2UgdHJhbnNmZXIgdGhlIGRhdGEgIQotCSAqLwotCWkgPSAwOwotCXdoaWxlIChpIDwgbGVuKSB7Ci0JCWludCB0aGlzbGVuID0gbXRkLT5vb2JzaXplIC0gY29sOwotCQl0aGlzbGVuID0gbWluX3QoaW50LCB0aGlzbGVuLCBsZW4pOwotCQl0aGlzLT5yZWFkX2J1ZihtdGQsICZidWZbaV0sIHRoaXNsZW4pOwotCQlpICs9IHRoaXNsZW47CisJcmV0ID0gbmFuZF9kb19yZWFkX29wcyhtdGQsIGZyb20sICZjaGlwLT5vcHMpOwogCi0JCS8qIEFwcGx5IGRlbGF5IG9yIHdhaXQgZm9yIHJlYWR5L2J1c3kgcGluCi0JCSAqIERvIHRoaXMgYmVmb3JlIHRoZSBBVVRPSU5DUiBjaGVjaywgc28gbm8gcHJvYmxlbXMKLQkJICogYXJpc2UgaWYgYSBjaGlwIHdoaWNoIGRvZXMgYXV0byBpbmNyZW1lbnQKLQkJICogaXMgbWFya2VkIGFzIE5PQVVUT0lOQ1IgYnkgdGhlIGJvYXJkIGRyaXZlci4KLQkJKi8KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpCi0JCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOwotCQllbHNlCi0JCQl3aGlsZSAoIXRoaXMtPmRldl9yZWFkeShtdGQpKTsKKwkqcmV0bGVuID0gY2hpcC0+b3BzLnJldGxlbjsKIAotCQkvKiBSZWFkIG1vcmUgPyAqLwotCQlpZiAoaSA8IGxlbikgewotCQkJcGFnZSsrOwotCQkJY29sID0gMDsKLQotCQkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLwotCQkJaWYgKCEocGFnZSAmIHRoaXMtPnBhZ2VtYXNrKSkgewotCQkJCWNoaXBucisrOwotCQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwotCQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKLQkJCX0KLQotCQkJLyogQ2hlY2ssIGlmIHRoZSBjaGlwIHN1cHBvcnRzIGF1dG8gcGFnZSBpbmNyZW1lbnQKLQkJCSAqIG9yIGlmIHdlIGhhdmUgaGl0IGEgYmxvY2sgYm91bmRhcnkuCi0JCQkqLwotCQkJaWYgKCFOQU5EX0NBTkFVVE9JTkNSKHRoaXMpIHx8ICEocGFnZSAmIGJsb2NrY2hlY2spKSB7Ci0JCQkJLyogRm9yIHN1YnNlcXVlbnQgcGFnZSByZWFkcyBzZXQgb2Zmc2V0IHRvIDAgKi8KLQkJCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURPT0IsIDB4MCwgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KIAluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiAKLQkvKiBSZXR1cm4gaGFwcHkgKi8KLQkqcmV0bGVuID0gbGVuOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgotICogbmFuZF9yZWFkX3JhdyAtIFtHRU5FUklDXSBSZWFkIHJhdyBkYXRhIGluY2x1ZGluZyBvb2IgaW50byBidWZmZXIKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAYnVmOgl0ZW1wb3JhcnkgYnVmZmVyCi0gKiBAZnJvbToJb2Zmc2V0IHRvIHJlYWQgZnJvbQotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKLSAqIEBvb2JsZW46CW51bWJlciBvZiBvb2IgZGF0YSBieXRlcyB0byByZWFkCi0gKgotICogUmVhZCByYXcgZGF0YSBpbmNsdWRpbmcgb29iIGludG8gYnVmZmVyCisgKiBuYW5kX3JlYWRfb29iX3N0ZCAtIFtSRVBMQUNBQkxFXSB0aGUgbW9zdCBjb21tb24gT09CIGRhdGEgcmVhZCBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAorICogQHNuZGNtZDoJZmxhZyB3aGV0aGVyIHRvIGlzc3VlIHJlYWQgY29tbWFuZCBvciBub3QKICAqLwotaW50IG5hbmRfcmVhZF9yYXcgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3Qgb29ibGVuKQorc3RhdGljIGludCBuYW5kX3JlYWRfb29iX3N0ZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCSAgICAgaW50IHBhZ2UsIGludCBzbmRjbWQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgcGFnZSA9IChpbnQpIChmcm9tID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCWludCBjaGlwID0gKGludCkgKGZyb20gPj4gdGhpcy0+Y2hpcF9zaGlmdCk7Ci0JaW50IHNuZGNtZCA9IDE7Ci0JaW50IGNudCA9IDA7Ci0JaW50IHBhZ2VzaXplID0gbXRkLT5vb2JibG9jayArIG10ZC0+b29ic2l6ZTsKLQlpbnQJYmxvY2tjaGVjayA9ICgxIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpIC0gMTsKKwlpZiAoc25kY21kKSB7CisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFET09CLCAwLCBwYWdlKTsKKwkJc25kY21kID0gMDsKKwl9CisJY2hpcC0+cmVhZF9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworCXJldHVybiBzbmRjbWQ7Cit9CiAKLQkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCi0JaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9yYXc6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CisvKioKKyAqIG5hbmRfcmVhZF9vb2Jfc3luZHJvbWUgLSBbUkVQTEFDQUJMRV0gT09CIGRhdGEgcmVhZCBmdW5jdGlvbiBmb3IgSFcgRUNDCisgKgkJCSAgICB3aXRoIHN5bmRyb21lcworICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAorICogQHNuZGNtZDoJZmxhZyB3aGV0aGVyIHRvIGlzc3VlIHJlYWQgY29tbWFuZCBvciBub3QKKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfb29iX3N5bmRyb21lKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgaW50IHBhZ2UsIGludCBzbmRjbWQpCit7CisJdWludDhfdCAqYnVmID0gY2hpcC0+b29iX3BvaTsKKwlpbnQgbGVuZ3RoID0gbXRkLT5vb2JzaXplOworCWludCBjaHVuayA9IGNoaXAtPmVjYy5ieXRlcyArIGNoaXAtPmVjYy5wcmVwYWQgKyBjaGlwLT5lY2MucG9zdHBhZDsKKwlpbnQgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCXVpbnQ4X3QgKmJ1ZnBvaSA9IGJ1ZjsKKwlpbnQgaSwgdG9yZWFkLCBzbmRybmQgPSAwLCBwb3M7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIGNoaXAtPmVjYy5zaXplLCBwYWdlKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnN0ZXBzOyBpKyspIHsKKwkJaWYgKHNuZHJuZCkgeworCQkJcG9zID0gZWNjc2l6ZSArIGkgKiAoZWNjc2l6ZSArIGNodW5rKTsKKwkJCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikKKwkJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUk5ET1VULCBwb3MsIC0xKTsKKwkJCWVsc2UKKwkJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIHBvcywgcGFnZSk7CisJCX0gZWxzZQorCQkJc25kcm5kID0gMTsKKwkJdG9yZWFkID0gbWluX3QoaW50LCBsZW5ndGgsIGNodW5rKTsKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBidWZwb2ksIHRvcmVhZCk7CisJCWJ1ZnBvaSArPSB0b3JlYWQ7CisJCWxlbmd0aCAtPSB0b3JlYWQ7CisJfQorCWlmIChsZW5ndGggPiAwKQorCQljaGlwLT5yZWFkX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuZ3RoKTsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIG5hbmRfd3JpdGVfb29iX3N0ZCAtIFtSRVBMQUNBQkxFXSB0aGUgbW9zdCBjb21tb24gT09CIGRhdGEgd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHdyaXRlCisgKi8KK3N0YXRpYyBpbnQgbmFuZF93cml0ZV9vb2Jfc3RkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJICAgICAgaW50IHBhZ2UpCit7CisJaW50IHN0YXR1cyA9IDA7CisJY29uc3QgdWludDhfdCAqYnVmID0gY2hpcC0+b29iX3BvaTsKKwlpbnQgbGVuZ3RoID0gbXRkLT5vb2JzaXplOworCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NFUUlOLCBtdGQtPndyaXRlc2l6ZSwgcGFnZSk7CisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmLCBsZW5ndGgpOworCS8qIFNlbmQgY29tbWFuZCB0byBwcm9ncmFtIHRoZSBPT0IgZGF0YSAqLworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKKworCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CisKKwlyZXR1cm4gc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCA/IC1FSU8gOiAwOworfQorCisvKioKKyAqIG5hbmRfd3JpdGVfb29iX3N5bmRyb21lIC0gW1JFUExBQ0FCTEVdIE9PQiBkYXRhIHdyaXRlIGZ1bmN0aW9uIGZvciBIVyBFQ0MKKyAqCQkJICAgICB3aXRoIHN5bmRyb21lIC0gb25seSBmb3IgbGFyZ2UgcGFnZSBmbGFzaCAhCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byB3cml0ZQorICovCitzdGF0aWMgaW50IG5hbmRfd3JpdGVfb29iX3N5bmRyb21lKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCSAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBwYWdlKQoreworCWludCBjaHVuayA9IGNoaXAtPmVjYy5ieXRlcyArIGNoaXAtPmVjYy5wcmVwYWQgKyBjaGlwLT5lY2MucG9zdHBhZDsKKwlpbnQgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplLCBsZW5ndGggPSBtdGQtPm9vYnNpemU7CisJaW50IGksIGxlbiwgcG9zLCBzdGF0dXMgPSAwLCBzbmRjbWQgPSAwLCBzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwljb25zdCB1aW50OF90ICpidWZwb2kgPSBjaGlwLT5vb2JfcG9pOworCisJLyoKKwkgKiBkYXRhLWVjYy1kYXRhLWVjYyAuLi4gZWNjLW9vYgorCSAqIG9yCisJICogZGF0YS1wYWQtZWNjLXBhZC1kYXRhLXBhZCAuLi4uIGVjYy1wYWQtb29iCisJICovCisJaWYgKCFjaGlwLT5lY2MucHJlcGFkICYmICFjaGlwLT5lY2MucG9zdHBhZCkgeworCQlwb3MgPSBzdGVwcyAqIChlY2NzaXplICsgY2h1bmspOworCQlzdGVwcyA9IDA7CisJfSBlbHNlCisJCXBvcyA9IGVjY3NpemU7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU0VRSU4sIHBvcywgcGFnZSk7CisJZm9yIChpID0gMDsgaSA8IHN0ZXBzOyBpKyspIHsKKwkJaWYgKHNuZGNtZCkgeworCQkJaWYgKG10ZC0+d3JpdGVzaXplIDw9IDUxMikgeworCQkJCXVpbnQzMl90IGZpbGwgPSAweEZGRkZGRkZGOworCisJCQkJbGVuID0gZWNjc2l6ZTsKKwkJCQl3aGlsZSAobGVuID4gMCkgeworCQkJCQlpbnQgbnVtID0gbWluX3QoaW50LCBsZW4sIDQpOworCQkJCQljaGlwLT53cml0ZV9idWYobXRkLCAodWludDhfdCAqKSZmaWxsLAorCQkJCQkJCW51bSk7CisJCQkJCWxlbiAtPSBudW07CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlwb3MgPSBlY2NzaXplICsgaSAqIChlY2NzaXplICsgY2h1bmspOworCQkJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9STkRJTiwgcG9zLCAtMSk7CisJCQl9CisJCX0gZWxzZQorCQkJc25kY21kID0gMTsKKwkJbGVuID0gbWluX3QoaW50LCBsZW5ndGgsIGNodW5rKTsKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmcG9pLCBsZW4pOworCQlidWZwb2kgKz0gbGVuOworCQlsZW5ndGggLT0gbGVuOworCX0KKwlpZiAobGVuZ3RoID4gMCkKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmcG9pLCBsZW5ndGgpOworCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLCAtMSwgLTEpOworCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CisKKwlyZXR1cm4gc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCA/IC1FSU8gOiAwOworfQorCisvKioKKyAqIG5hbmRfZG9fcmVhZF9vb2IgLSBbSW50ZXJuXSBOQU5EIHJlYWQgb3V0LW9mLWJhbmQKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZnJvbToJb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQG9wczoJb29iIG9wZXJhdGlvbnMgZGVzY3JpcHRpb24gc3RydWN0dXJlCisgKgorICogTkFORCByZWFkIG91dC1vZi1iYW5kIGRhdGEgZnJvbSB0aGUgc3BhcmUgYXJlYQorICovCitzdGF0aWMgaW50IG5hbmRfZG9fcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCWludCBwYWdlLCByZWFscGFnZSwgY2hpcG5yLCBzbmRjbWQgPSAxOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IGJsa2NoZWNrID0gKDEgPDwgKGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQgLSBjaGlwLT5wYWdlX3NoaWZ0KSkgLSAxOworCWludCByZWFkbGVuID0gb3BzLT5vb2JsZW47CisJaW50IGxlbjsKKwl1aW50OF90ICpidWYgPSBvcHMtPm9vYmJ1ZjsKKworCU1URERFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczogZnJvbSA9IDB4JTA4THgsIGxlbiA9ICVpXG4iLAorCQkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nIGxvbmcpZnJvbSwgcmVhZGxlbik7CisKKwlpZiAob3BzLT5tb2RlID09IE1URF9PT0JfQVVUTykKKwkJbGVuID0gY2hpcC0+ZWNjLmxheW91dC0+b29iYXZhaWw7CisJZWxzZQorCQlsZW4gPSBtdGQtPm9vYnNpemU7CisKKwlpZiAodW5saWtlbHkob3BzLT5vb2JvZmZzID49IGxlbikpIHsKKwkJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiBBdHRlbXB0IHRvIHN0YXJ0IHJlYWQgIgorCQkJCQkib3V0c2lkZSBvb2JcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQgLCBGTF9SRUFESU5HKTsKKwkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKHVubGlrZWx5KGZyb20gPj0gbXRkLT5zaXplIHx8CisJCSAgICAgb3BzLT5vb2JvZmZzICsgcmVhZGxlbiA+ICgobXRkLT5zaXplID4+IGNoaXAtPnBhZ2Vfc2hpZnQpIC0KKwkJCQkJKGZyb20gPj4gY2hpcC0+cGFnZV9zaGlmdCkpICogbGVuKSkgeworCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kICIKKwkJCQkJIm9mIGRldmljZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQl0aGlzLT5zZWxlY3RfY2hpcCAobXRkLCBjaGlwKTsKKwljaGlwbnIgPSAoaW50KShmcm9tID4+IGNoaXAtPmNoaXBfc2hpZnQpOworCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKIAotCS8qIEFkZCByZXF1ZXN0ZWQgb29iIGxlbmd0aCAqLwotCWxlbiArPSBvb2JsZW47CisJLyogU2hpZnQgdG8gZ2V0IHBhZ2UgKi8KKwlyZWFscGFnZSA9IChpbnQpKGZyb20gPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisJcGFnZSA9IHJlYWxwYWdlICYgY2hpcC0+cGFnZW1hc2s7CiAKLQl3aGlsZSAobGVuKSB7Ci0JCWlmIChzbmRjbWQpCi0JCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCQlzbmRjbWQgPSAwOworCXdoaWxlICgxKSB7CisJCVdBVENIRE9HX1JFU0VUKCk7CisJCXNuZGNtZCA9IGNoaXAtPmVjYy5yZWFkX29vYihtdGQsIGNoaXAsIHBhZ2UsIHNuZGNtZCk7CiAKLQkJdGhpcy0+cmVhZF9idWYgKG10ZCwgJmJ1ZltjbnRdLCBwYWdlc2l6ZSk7CisJCWxlbiA9IG1pbihsZW4sIHJlYWRsZW4pOworCQlidWYgPSBuYW5kX3RyYW5zZmVyX29vYihjaGlwLCBidWYsIG9wcywgbGVuKTsKIAotCQlsZW4gLT0gcGFnZXNpemU7Ci0JCWNudCArPSBwYWdlc2l6ZTsKLQkJcGFnZSsrOworCQlpZiAoIShjaGlwLT5vcHRpb25zICYgTkFORF9OT19SRUFEUkRZKSkgeworCQkJLyoKKwkJCSAqIEFwcGx5IGRlbGF5IG9yIHdhaXQgZm9yIHJlYWR5L2J1c3kgcGluLiBEbyB0aGlzCisJCQkgKiBiZWZvcmUgdGhlIEFVVE9JTkNSIGNoZWNrLCBzbyBubyBwcm9ibGVtcyBhcmlzZSBpZiBhCisJCQkgKiBjaGlwIHdoaWNoIGRvZXMgYXV0byBpbmNyZW1lbnQgaXMgbWFya2VkIGFzCisJCQkgKiBOT0FVVE9JTkNSIGJ5IHRoZSBib2FyZCBkcml2ZXIuCisJCQkgKi8KKwkJCWlmICghY2hpcC0+ZGV2X3JlYWR5KQorCQkJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKKwkJCWVsc2UKKwkJCQluYW5kX3dhaXRfcmVhZHkobXRkKTsKKwkJfQogCi0JCWlmICghdGhpcy0+ZGV2X3JlYWR5KQotCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKLQkJZWxzZQotCQkJd2hpbGUgKCF0aGlzLT5kZXZfcmVhZHkobXRkKSk7CisJCXJlYWRsZW4gLT0gbGVuOworCQlpZiAoIXJlYWRsZW4pCisJCQlicmVhazsKIAotCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudCAqLwotCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IodGhpcykgfHwgIShwYWdlICYgYmxvY2tjaGVjaykpCisJCS8qIEluY3JlbWVudCBwYWdlIGFkZHJlc3MgKi8KKwkJcmVhbHBhZ2UrKzsKKworCQlwYWdlID0gcmVhbHBhZ2UgJiBjaGlwLT5wYWdlbWFzazsKKwkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLworCQlpZiAoIXBhZ2UpIHsKKwkJCWNoaXBucisrOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJCX0KKworCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudAorCQkgKiBvciBpZiB3ZSBoYXZlIGhpdCBhIGJsb2NrIGJvdW5kYXJ5LgorCQkgKi8KKwkJaWYgKCFOQU5EX0NBTkFVVE9JTkNSKGNoaXApIHx8ICEocGFnZSAmIGJsa2NoZWNrKSkKIAkJCXNuZGNtZCA9IDE7CiAJfQogCi0JLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKKwlvcHMtPm9vYnJldGxlbiA9IG9wcy0+b29ibGVuOwogCXJldHVybiAwOwogfQogCi0KIC8qKgotICogbmFuZF9wcmVwYXJlX29vYmJ1ZiAtIFtHRU5FUklDXSBQcmVwYXJlIHRoZSBvdXQgb2YgYmFuZCBidWZmZXIKKyAqIG5hbmRfcmVhZF9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCByZWFkIGRhdGEgYW5kL29yIG91dC1vZi1iYW5kCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQGZzYnVmOglidWZmZXIgZ2l2ZW4gYnkgZnMgZHJpdmVyCi0gKiBAb29ic2VsOglvdXQgb2YgYmFuZCBzZWxlY3Rpb24gc3RydWN0cmUKLSAqIEBhdXRvcGxhY2U6CTEgPSBwbGFjZSBnaXZlbiBidWZmZXIgaW50byB0aGUgb29iIGJ5dGVzCi0gKiBAbnVtcGFnZXM6CW51bWJlciBvZiBwYWdlcyB0byBwcmVwYXJlCisgKiBAZnJvbToJb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQG9wczoJb29iIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKICAqCi0gKiBSZXR1cm46Ci0gKiAxLiBGaWxlc3lzdGVtIGJ1ZmZlciBhdmFpbGFibGUgYW5kIGF1dG9wbGFjZW1lbnQgaXMgb2ZmLAotICogICAgcmV0dXJuIGZpbGVzeXN0ZW0gYnVmZmVyCi0gKiAyLiBObyBmaWxlc3lzdGVtIGJ1ZmZlciBvciBhdXRvcGxhY2UgaXMgb2ZmLCByZXR1cm4gaW50ZXJuYWwKLSAqICAgIGJ1ZmZlcgotICogMy4gRmlsZXN5c3RlbSBidWZmZXIgaXMgZ2l2ZW4gYW5kIGF1dG9wbGFjZSBzZWxlY3RlZAotICogICAgcHV0IGRhdGEgZnJvbSBmcyBidWZmZXIgaW50byBpbnRlcm5hbCBidWZmZXIgYW5kCi0gKiAgICByZXRydW4gaW50ZXJuYWwgYnVmZmVyCi0gKgotICogTm90ZTogVGhlIGludGVybmFsIGJ1ZmZlciBpcyBmaWxsZWQgd2l0aCAweGZmLiBUaGlzIG11c3QKLSAqIGJlIGRvbmUgb25seSBvbmNlLCB3aGVuIG5vIGF1dG9wbGFjZW1lbnQgaGFwcGVucwotICogQXV0b3BsYWNlbWVudCBzZXRzIHRoZSBidWZmZXIgZGlydHkgZmxhZywgd2hpY2gKLSAqIGZvcmNlcyB0aGUgMHhmZiBmaWxsIGJlZm9yZSB1c2luZyB0aGUgYnVmZmVyIGFnYWluLgotICoKLSovCi1zdGF0aWMgdV9jaGFyICogbmFuZF9wcmVwYXJlX29vYmJ1ZiAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZnNidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwKLQkJaW50IGF1dG9wbGFjZSwgaW50IG51bXBhZ2VzKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IGksIGxlbiwgb2ZzOwotCi0JLyogWmVybyBjb3B5IGZzIHN1cHBsaWVkIGJ1ZmZlciAqLwotCWlmIChmc2J1ZiAmJiAhYXV0b3BsYWNlKQotCQlyZXR1cm4gZnNidWY7Ci0KLQkvKiBDaGVjaywgaWYgdGhlIGJ1ZmZlciBtdXN0IGJlIGZpbGxlZCB3aXRoIGZmIGFnYWluICovCi0JaWYgKHRoaXMtPm9vYmRpcnR5KSB7Ci0JCW1lbXNldCAodGhpcy0+b29iX2J1ZiwgMHhmZiwKLQkJCW10ZC0+b29ic2l6ZSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKTsKLQkJdGhpcy0+b29iZGlydHkgPSAwOwotCX0KLQotCS8qIElmIHdlIGhhdmUgbm8gYXV0b3BsYWNlbWVudCBvciBubyBmcyBidWZmZXIgdXNlIHRoZSBpbnRlcm5hbCBvbmUgKi8KLQlpZiAoIWF1dG9wbGFjZSB8fCAhZnNidWYpCi0JCXJldHVybiB0aGlzLT5vb2JfYnVmOwotCi0JLyogV2FsayB0aHJvdWdoIHRoZSBwYWdlcyBhbmQgcGxhY2UgdGhlIGRhdGEgKi8KLQl0aGlzLT5vb2JkaXJ0eSA9IDE7Ci0Jb2ZzID0gMDsKLQl3aGlsZSAobnVtcGFnZXMtLSkgewotCQlmb3IgKGkgPSAwLCBsZW4gPSAwOyBsZW4gPCBtdGQtPm9vYmF2YWlsOyBpKyspIHsKLQkJCWludCB0byA9IG9mcyArIG9vYnNlbC0+b29iZnJlZVtpXVswXTsKLQkJCWludCBudW0gPSBvb2JzZWwtPm9vYmZyZWVbaV1bMV07Ci0JCQltZW1jcHkgKCZ0aGlzLT5vb2JfYnVmW3RvXSwgZnNidWYsIG51bSk7Ci0JCQlsZW4gKz0gbnVtOwotCQkJZnNidWYgKz0gbnVtOwotCQl9Ci0JCW9mcyArPSBtdGQtPm9vYmF2YWlsOwotCX0KLQlyZXR1cm4gdGhpcy0+b29iX2J1ZjsKLX0KLQotI2RlZmluZSBOT1RBTElHTkVEKHgpICh4ICYgKG10ZC0+b29iYmxvY2stMSkpICE9IDAKLQotLyoqCi0gKiBuYW5kX3dyaXRlIC0gW01URCBJbnRlcmZhY2VdIGNvbXBhYmlsaXR5IGZ1bmN0aW9uIGZvciBuYW5kX3dyaXRlX2VjYwotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB0bzoJCW9mZnNldCB0byB3cml0ZSB0bwotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcwotICogQGJ1ZjoJdGhlIGRhdGEgdG8gd3JpdGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBjYWxscyBuYW5kX3dyaXRlX2VjYyB3aXRoIG9vYiBidWZmZXIgYW5kIG9vYnNlbCA9IE5VTEwKLSAqCi0qLwotc3RhdGljIGludCBuYW5kX3dyaXRlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIGNvbnN0IHVfY2hhciAqIGJ1ZikKLXsKLQlyZXR1cm4gKG5hbmRfd3JpdGVfZWNjIChtdGQsIHRvLCBsZW4sIHJldGxlbiwgYnVmLCBOVUxMLCBOVUxMKSk7Ci19Ci0KLS8qKgotICogbmFuZF93cml0ZV9lY2MgLSBbTVREIEludGVyZmFjZV0gTkFORCB3cml0ZSB3aXRoIEVDQwotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB0bzoJCW9mZnNldCB0byB3cml0ZSB0bwotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcwotICogQGJ1ZjoJdGhlIGRhdGEgdG8gd3JpdGUKLSAqIEBlY2NidWY6CWZpbGVzeXN0ZW0gc3VwcGxpZWQgb29iIGRhdGEgYnVmZmVyCi0gKiBAb29ic2VsOglvb2Igc2VsZWN0aW9uIHN0cnVjdHVyZQotICoKLSAqIE5BTkQgd3JpdGUgd2l0aCBFQ0MKKyAqIE5BTkQgcmVhZCBkYXRhIGFuZC9vciBvdXQtb2YtYmFuZCBkYXRhCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF93cml0ZV9lY2MgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0JCQkgICBzaXplX3QgKiByZXRsZW4sIGNvbnN0IHVfY2hhciAqIGJ1ZiwgdV9jaGFyICogZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCitzdGF0aWMgaW50IG5hbmRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewotCWludCBzdGFydHBhZ2UsIHBhZ2UsIHJldCA9IC1FSU8sIG9vYiA9IDAsIHdyaXR0ZW4gPSAwLCBjaGlwbnI7Ci0JaW50IGF1dG9wbGFjZSA9IDAsIG51bXBhZ2VzLCB0b3RhbHBhZ2VzOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JdV9jaGFyICpvb2JidWYsICpidWZzdGFydDsKLQlpbnQJcHBibG9jayA9ICgxIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IHJldCA9IC1FTk9UU1VQUDsKIAotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLCAibmFuZF93cml0ZV9lY2M6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgdG8sIChpbnQpIGxlbik7CisJb3BzLT5yZXRsZW4gPSAwOwogCi0JLyogSW5pdGlhbGl6ZSByZXRsZW4sIGluIGNhc2Ugb2YgZWFybHkgZXhpdCAqLwotCSpyZXRsZW4gPSAwOwotCi0JLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIGRldmljZSAqLwotCWlmICgodG8gKyBsZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9lY2M6IEF0dGVtcHQgdG8gd3JpdGUgcGFzdCBlbmQgb2YgcGFnZVxuIik7CisJLyogRG8gbm90IGFsbG93IHJlYWRzIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmIChvcHMtPmRhdGJ1ZiAmJiAoZnJvbSArIG9wcy0+bGVuKSA+IG10ZC0+c2l6ZSkgeworCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IEF0dGVtcHQgcmVhZCAiCisJCQkJImJleW9uZCBlbmQgb2YgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIHJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCi0JaWYgKE5PVEFMSUdORUQgKHRvKSB8fCBOT1RBTElHTkVEKGxlbikpIHsKLQkJcHJpbnRrIChLRVJOX05PVElDRSAibmFuZF93cml0ZV9lY2M6IEF0dGVtcHQgdG8gd3JpdGUgbm90IHBhZ2UgYWxpZ25lZCBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1JFQURJTkcpOwogCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQsIEZMX1dSSVRJTkcpOworCXN3aXRjaCAob3BzLT5tb2RlKSB7CisJY2FzZSBNVERfT09CX1BMQUNFOgorCWNhc2UgTVREX09PQl9BVVRPOgorCWNhc2UgTVREX09PQl9SQVc6CisJCWJyZWFrOwogCi0JLyogQ2FsY3VsYXRlIGNoaXBuciAqLwotCWNoaXBuciA9IChpbnQpKHRvID4+IHRoaXMtPmNoaXBfc2hpZnQpOwotCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7Ci0KLQkvKiBDaGVjaywgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCi0JaWYgKG5hbmRfY2hlY2tfd3AobXRkKSkKKwlkZWZhdWx0OgogCQlnb3RvIG91dDsKLQotCS8qIGlmIG9vYnNlbCBpcyBOVUxMLCB1c2UgY2hpcCBkZWZhdWx0cyAqLwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKLQotCS8qIEF1dG9wbGFjZSBvZiBvb2IgZGF0YSA/IFVzZSB0aGUgZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lICovCi0JaWYgKG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkgewotCQlvb2JzZWwgPSB0aGlzLT5hdXRvb29iOwotCQlhdXRvcGxhY2UgPSAxOwogCX0KLQlpZiAob29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMX1VTUikKLQkJYXV0b3BsYWNlID0gMTsKIAotCS8qIFNldHVwIHZhcmlhYmxlcyBhbmQgb29iIGJ1ZmZlciAqLwotCXRvdGFscGFnZXMgPSBsZW4gPj4gdGhpcy0+cGFnZV9zaGlmdDsKLQlwYWdlID0gKGludCkgKHRvID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIHdyaXRlIHRvIHRoZSBjYWNoZWQgcGFnZSAqLwotCWlmIChwYWdlIDw9IHRoaXMtPnBhZ2VidWYgJiYgdGhpcy0+cGFnZWJ1ZiA8IChwYWdlICsgdG90YWxwYWdlcykpCi0JCXRoaXMtPnBhZ2VidWYgPSAtMTsKLQotCS8qIFNldCBpdCByZWxhdGl2ZSB0byBjaGlwICovCi0JcGFnZSAmPSB0aGlzLT5wYWdlbWFzazsKLQlzdGFydHBhZ2UgPSBwYWdlOwotCS8qIENhbGMgbnVtYmVyIG9mIHBhZ2VzIHdlIGNhbiB3cml0ZSBpbiBvbmUgZ28gKi8KLQludW1wYWdlcyA9IG1pbiAocHBibG9jayAtIChzdGFydHBhZ2UgICYgKHBwYmxvY2sgLSAxKSksIHRvdGFscGFnZXMpOwotCW9vYmJ1ZiA9IG5hbmRfcHJlcGFyZV9vb2JidWYgKG10ZCwgZWNjYnVmLCBvb2JzZWwsIGF1dG9wbGFjZSwgbnVtcGFnZXMpOwotCWJ1ZnN0YXJ0ID0gKHVfY2hhciAqKWJ1ZjsKLQotCS8qIExvb3AgdW50aWwgYWxsIGRhdGEgaXMgd3JpdHRlbiAqLwotCXdoaWxlICh3cml0dGVuIDwgbGVuKSB7Ci0KLQkJdGhpcy0+ZGF0YV9wb2kgPSAodV9jaGFyKikgJmJ1Zlt3cml0dGVuXTsKLQkJLyogV3JpdGUgb25lIHBhZ2UuIElmIHRoaXMgaXMgdGhlIGxhc3QgcGFnZSB0byB3cml0ZQotCQkgKiBvciB0aGUgbGFzdCBwYWdlIGluIHRoaXMgYmxvY2ssIHRoZW4gdXNlIHRoZQotCQkgKiByZWFsIHBhZ2Vwcm9ncmFtIGNvbW1hbmQsIGVsc2Ugc2VsZWN0IGNhY2hlZCBwcm9ncmFtbWluZwotCQkgKiBpZiBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAuCi0JCSAqLwotCQlyZXQgPSBuYW5kX3dyaXRlX3BhZ2UgKG10ZCwgdGhpcywgcGFnZSwgJm9vYmJ1Zltvb2JdLCBvb2JzZWwsICgtLW51bXBhZ2VzID4gMCkpOwotCQlpZiAocmV0KSB7Ci0JCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfd3JpdGVfZWNjOiB3cml0ZV9wYWdlIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCS8qIE5leHQgb29iIHBhZ2UgKi8KLQkJb29iICs9IG10ZC0+b29ic2l6ZTsKLQkJLyogVXBkYXRlIHdyaXR0ZW4gYnl0ZXMgY291bnQgKi8KLQkJd3JpdHRlbiArPSBtdGQtPm9vYmJsb2NrOwotCQlpZiAod3JpdHRlbiA9PSBsZW4pCi0JCQlnb3RvIGNtcDsKLQotCQkvKiBJbmNyZW1lbnQgcGFnZSBhZGRyZXNzICovCi0JCXBhZ2UrKzsKLQotCQkvKiBIYXZlIHdlIGhpdCBhIGJsb2NrIGJvdW5kYXJ5ID8gVGhlbiB3ZSBoYXZlIHRvIHZlcmlmeSBhbmQKLQkJICogaWYgdmVyaWZ5IGlzIG9rLCB3ZSBoYXZlIHRvIHNldHVwIHRoZSBvb2IgYnVmZmVyIGZvcgotCQkgKiB0aGUgbmV4dCBwYWdlcy4KLQkJKi8KLQkJaWYgKCEocGFnZSAmIChwcGJsb2NrIC0gMSkpKXsKLQkJCWludCBvZnM7Ci0JCQl0aGlzLT5kYXRhX3BvaSA9IGJ1ZnN0YXJ0OwotCQkJcmV0ID0gbmFuZF92ZXJpZnlfcGFnZXMgKG10ZCwgdGhpcywgc3RhcnRwYWdlLAotCQkJCXBhZ2UgLSBzdGFydHBhZ2UsCi0JCQkJb29iYnVmLCBvb2JzZWwsIGNoaXBuciwgKGVjY2J1ZiAhPSBOVUxMKSk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX2VjYzogdmVyaWZ5X3BhZ2VzIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCSpyZXRsZW4gPSB3cml0dGVuOwotCi0JCQlvZnMgPSBhdXRvcGxhY2UgPyBtdGQtPm9vYmF2YWlsIDogbXRkLT5vb2JzaXplOwotCQkJaWYgKGVjY2J1ZikKLQkJCQllY2NidWYgKz0gKHBhZ2UgLSBzdGFydHBhZ2UpICogb2ZzOwotCQkJdG90YWxwYWdlcyAtPSBwYWdlIC0gc3RhcnRwYWdlOwotCQkJbnVtcGFnZXMgPSBtaW4gKHRvdGFscGFnZXMsIHBwYmxvY2spOwotCQkJcGFnZSAmPSB0aGlzLT5wYWdlbWFzazsKLQkJCXN0YXJ0cGFnZSA9IHBhZ2U7Ci0JCQlvb2IgPSAwOwotCQkJdGhpcy0+b29iZGlydHkgPSAxOwotCQkJb29iYnVmID0gbmFuZF9wcmVwYXJlX29vYmJ1ZiAobXRkLCBlY2NidWYsIG9vYnNlbCwKLQkJCQkJYXV0b3BsYWNlLCBudW1wYWdlcyk7Ci0JCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCQlpZiAoIXBhZ2UpIHsKLQkJCQljaGlwbnIrKzsKLQkJCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogVmVyaWZ5IHRoZSByZW1haW5pbmcgcGFnZXMgKi8KLWNtcDoKLQl0aGlzLT5kYXRhX3BvaSA9IGJ1ZnN0YXJ0OwotIAlyZXQgPSBuYW5kX3ZlcmlmeV9wYWdlcyAobXRkLCB0aGlzLCBzdGFydHBhZ2UsIHRvdGFscGFnZXMsCi0JCW9vYmJ1Ziwgb29ic2VsLCBjaGlwbnIsIChlY2NidWYgIT0gTlVMTCkpOwotCWlmICghcmV0KQotCQkqcmV0bGVuID0gd3JpdHRlbjsKKwlpZiAoIW9wcy0+ZGF0YnVmKQorCQlyZXQgPSBuYW5kX2RvX3JlYWRfb29iKG10ZCwgZnJvbSwgb3BzKTsKIAllbHNlCi0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9lY2M6IHZlcmlmeV9wYWdlcyBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldCA9IG5hbmRfZG9fcmVhZF9vcHMobXRkLCBmcm9tLCBvcHMpOwogCiBvdXQ6Ci0JLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwogCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIAogLyoqCi0gKiBuYW5kX3dyaXRlX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIG91dC1vZi1iYW5kCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQorICogbmFuZF93cml0ZV9wYWdlX3JhdyAtIFtJbnRlcm5dIHJhdyBwYWdlIHdyaXRlIGZ1bmN0aW9uCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBidWY6CWRhdGEgYnVmZmVyCiAgKgotICogTkFORCB3cml0ZSBvdXQtb2YtYmFuZAorICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMsIHdoaWNoIHVzZSBhIHNwZWNpYWwgb29iIGxheW91dAogICovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGVfb29iIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIGNvbnN0IHVfY2hhciAqIGJ1ZikKK3N0YXRpYyB2b2lkIG5hbmRfd3JpdGVfcGFnZV9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJY29uc3QgdWludDhfdCAqYnVmKQogewotCWludCBjb2x1bW4sIHBhZ2UsIHN0YXR1cywgcmV0ID0gLUVJTywgY2hpcG5yOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7CisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKK30KIAotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLCAibmFuZF93cml0ZV9vb2I6IHRvID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgdG8sIChpbnQpIGxlbik7CisvKioKKyAqIG5hbmRfd3JpdGVfcGFnZV9yYXdfc3luZHJvbWUgLSBbSW50ZXJuXSByYXcgcGFnZSB3cml0ZSBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglkYXRhIGJ1ZmZlcgorICoKKyAqIFdlIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQgYW5kIGhhbmRsaW5nIGV2ZW4gd2hlbiBFQ0MgaXNuJ3QgY2hlY2tlZC4KKyAqLworc3RhdGljIHZvaWQgbmFuZF93cml0ZV9wYWdlX3Jhd19zeW5kcm9tZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQkJY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCXVpbnQ4X3QgKm9vYiA9IGNoaXAtPm9vYl9wb2k7CisJaW50IHN0ZXBzLCBzaXplOwogCi0JLyogU2hpZnQgdG8gZ2V0IHBhZ2UgKi8KLQlwYWdlID0gKGludCkgKHRvID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCWNoaXBuciA9IChpbnQpICh0byA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKKwlmb3IgKHN0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOyBzdGVwcyA+IDA7IHN0ZXBzLS0pIHsKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmLCBlY2NzaXplKTsKKwkJYnVmICs9IGVjY3NpemU7CiAKLQkvKiBNYXNrIHRvIGdldCBjb2x1bW4gKi8KLQljb2x1bW4gPSB0byAmIChtdGQtPm9vYnNpemUgLSAxKTsKKwkJaWYgKGNoaXAtPmVjYy5wcmVwYWQpIHsKKwkJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnByZXBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnByZXBhZDsKKwkJfQogCi0JLyogSW5pdGlhbGl6ZSByZXR1cm4gbGVuZ3RoIHZhbHVlICovCi0JKnJldGxlbiA9IDA7CisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBlY2NieXRlcyk7CisJCW9vYiArPSBlY2NieXRlczsKIAotCS8qIERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlICovCi0JaWYgKChjb2x1bW4gKyBsZW4pID4gbXRkLT5vb2JzaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9vb2I6IEF0dGVtcHQgdG8gd3JpdGUgcGFzdCBlbmQgb2YgcGFnZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlpZiAoY2hpcC0+ZWNjLnBvc3RwYWQpIHsKKwkJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnBvc3RwYWQpOworCQkJb29iICs9IGNoaXAtPmVjYy5wb3N0cGFkOworCQl9CiAJfQogCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQsIEZMX1dSSVRJTkcpOworCXNpemUgPSBtdGQtPm9vYnNpemUgLSAob29iIC0gY2hpcC0+b29iX3BvaSk7CisJaWYgKHNpemUpCisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgc2l6ZSk7Cit9CisvKioKKyAqIG5hbmRfd3JpdGVfcGFnZV9zd2VjYyAtIFtSRVBMQUNBQkxFXSBzb2Z0d2FyZSBlY2MgYmFzZWQgcGFnZSB3cml0ZSBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglkYXRhIGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX3BhZ2Vfc3dlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJICBjb25zdCB1aW50OF90ICpidWYpCit7CisJaW50IGksIGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CisJaW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOworCXVpbnQ4X3QgKmVjY19jYWxjID0gY2hpcC0+YnVmZmVycy0+ZWNjY2FsYzsKKwljb25zdCB1aW50OF90ICpwID0gYnVmOworCXVpbnQzMl90ICplY2Nwb3MgPSBjaGlwLT5lY2MubGF5b3V0LT5lY2Nwb3M7CiAKLQkvKiBTZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCS8qIFNvZnR3YXJlIGVjYyBjYWxjdWxhdGlvbiAqLworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpCisJCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbaV0pOwogCi0JLyogUmVzZXQgdGhlIGNoaXAuIFNvbWUgY2hpcHMgKGxpa2UgdGhlIFRvc2hpYmEgVEM1ODMyREMgZm91bmQKLQkgICBpbiBvbmUgb2YgbXkgRGlza09uQ2hpcCAyMDAwIHRlc3QgdW5pdHMpIHdpbGwgY2xlYXIgdGhlIHdob2xlCi0JICAgZGF0YSBwYWdlIHRvbyBpZiB3ZSBkb24ndCBkbyB0aGlzLiBJIGhhdmUgbm8gY2x1ZSB3aHksIGJ1dAotCSAgIEkgc2VlbSB0byBoYXZlICdmaXhlZCcgaXQgaW4gdGhlIGRvYzIwMDAgZHJpdmVyIGluCi0JICAgQXVndXN0IDE5OTkuICBkd213Mi4gKi8KLQl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVTRVQsIC0xLCAtMSk7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy50b3RhbDsgaSsrKQorCQljaGlwLT5vb2JfcG9pW2VjY3Bvc1tpXV0gPSBlY2NfY2FsY1tpXTsKIAotCS8qIENoZWNrLCBpZiBpdCBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KLQlpZiAobmFuZF9jaGVja193cChtdGQpKQotCQlnb3RvIG91dDsKKwljaGlwLT5lY2Mud3JpdGVfcGFnZV9yYXcobXRkLCBjaGlwLCBidWYpOworfQogCi0JLyogSW52YWxpZGF0ZSB0aGUgcGFnZSBjYWNoZSwgaWYgd2Ugd3JpdGUgdG8gdGhlIGNhY2hlZCBwYWdlICovCi0JaWYgKHBhZ2UgPT0gdGhpcy0+cGFnZWJ1ZikKLQkJdGhpcy0+cGFnZWJ1ZiA9IC0xOworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2VfaHdlY2MgLSBbUkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJZGF0YSBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgbmFuZF93cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmJ1ZmZlcnMtPmVjY2NhbGM7CisJY29uc3QgdWludDhfdCAqcCA9IGJ1ZjsKKwl1aW50MzJfdCAqZWNjcG9zID0gY2hpcC0+ZWNjLmxheW91dC0+ZWNjcG9zOwogCi0JaWYgKE5BTkRfTVVTVF9QQUQodGhpcykpIHsKLQkJLyogV3JpdGUgb3V0IGRlc2lyZWQgZGF0YSAqLwotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NFUUlOLCBtdGQtPm9vYmJsb2NrLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCQkvKiBwcmVwYWQgMHhmZiBmb3IgcGFydGlhbCBwcm9ncmFtbWluZyAqLwotCQl0aGlzLT53cml0ZV9idWYobXRkLCBmZmNoYXJzLCBjb2x1bW4pOwotCQkvKiB3cml0ZSBkYXRhICovCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIGJ1ZiwgbGVuKTsKLQkJLyogcG9zdHBhZCAweGZmIGZvciBwYXJ0aWFsIHByb2dyYW1taW5nICovCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIGZmY2hhcnMsIG10ZC0+b29ic2l6ZSAtIChsZW4rY29sdW1uKSk7CisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQljaGlwLT5lY2MuaHdjdGwobXRkLCBOQU5EX0VDQ19XUklURSk7CisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIHAsIGVjY3NpemUpOworCQljaGlwLT5lY2MuY2FsY3VsYXRlKG10ZCwgcCwgJmVjY19jYWxjW2ldKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnRvdGFsOyBpKyspCisJCWNoaXAtPm9vYl9wb2lbZWNjcG9zW2ldXSA9IGVjY19jYWxjW2ldOworCisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKK30KKworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2Vfc3luZHJvbWUgLSBbUkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIHN5bmRyb20gYmFzZWQgcGFnZSB3cml0ZQorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglkYXRhIGJ1ZmZlcgorICoKKyAqIFRoZSBodyBnZW5lcmF0b3IgY2FsY3VsYXRlcyB0aGUgZXJyb3Igc3luZHJvbWUgYXV0b21hdGljYWxseS4gVGhlcmVmb3IKKyAqIHdlIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQgYW5kIGhhbmRsaW5nLgorICovCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX3BhZ2Vfc3luZHJvbWUoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGNvbnN0IHVpbnQ4X3QgKmJ1ZikKK3sKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJY29uc3QgdWludDhfdCAqcCA9IGJ1ZjsKKwl1aW50OF90ICpvb2IgPSBjaGlwLT5vb2JfcG9pOworCisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCisJCWNoaXAtPmVjYy5od2N0bChtdGQsIE5BTkRfRUNDX1dSSVRFKTsKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7CisKKwkJaWYgKGNoaXAtPmVjYy5wcmVwYWQpIHsKKwkJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnByZXBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnByZXBhZDsKKwkJfQorCisJCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCBvb2IpOworCQljaGlwLT53cml0ZV9idWYobXRkLCBvb2IsIGVjY2J5dGVzKTsKKwkJb29iICs9IGVjY2J5dGVzOworCisJCWlmIChjaGlwLT5lY2MucG9zdHBhZCkgeworCQkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgb29iLCBjaGlwLT5lY2MucG9zdHBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnBvc3RwYWQ7CisJCX0KKwl9CisKKwkvKiBDYWxjdWxhdGUgcmVtYWluaW5nIG9vYiBieXRlcyAqLworCWkgPSBtdGQtPm9vYnNpemUgLSAob29iIC0gY2hpcC0+b29iX3BvaSk7CisJaWYgKGkpCisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgaSk7Cit9CisKKy8qKgorICogbmFuZF93cml0ZV9wYWdlIC0gW1JFUExBQ0VBQkxFXSB3cml0ZSBvbmUgcGFnZQorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBjaGlwOglOQU5EIGNoaXAgZGVzY3JpcHRvcgorICogQGJ1ZjoJdGhlIGRhdGEgdG8gd3JpdGUKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byB3cml0ZQorICogQGNhY2hlZDoJY2FjaGVkIHByb2dyYW1taW5nCisgKiBAcmF3Ogl1c2UgX3JhdyB2ZXJzaW9uIG9mIHdyaXRlX3BhZ2UKKyAqLworc3RhdGljIGludCBuYW5kX3dyaXRlX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkgICBjb25zdCB1aW50OF90ICpidWYsIGludCBwYWdlLCBpbnQgY2FjaGVkLCBpbnQgcmF3KQoreworCWludCBzdGF0dXM7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU0VRSU4sIDB4MDAsIHBhZ2UpOworCisJaWYgKHVubGlrZWx5KHJhdykpCisJCWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdyhtdGQsIGNoaXAsIGJ1Zik7CisJZWxzZQorCQljaGlwLT5lY2Mud3JpdGVfcGFnZShtdGQsIGNoaXAsIGJ1Zik7CisKKwkvKgorCSAqIENhY2hlZCBwcm9nYW1taW5nIGRpc2FibGVkIGZvciBub3csIE5vdCBzdXJlIGlmIGl0cyB3b3J0aCB0aGUKKwkgKiB0cm91YmxlLiBUaGUgc3BlZWQgZ2FpbiBpcyBub3QgdmVyeSBpbXByZXNzaXZlLiAoMi4zLT4yLjZNaWIvcykKKwkgKi8KKwljYWNoZWQgPSAwOworCisJaWYgKCFjYWNoZWQgfHwgIShjaGlwLT5vcHRpb25zICYgTkFORF9DQUNIRVBSRykpIHsKKworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7CisJCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CisJCS8qCisJCSAqIFNlZSBpZiBvcGVyYXRpb24gZmFpbGVkIGFuZCBhZGRpdGlvbmFsIHN0YXR1cyBjaGVja3MgYXJlCisJCSAqIGF2YWlsYWJsZQorCQkgKi8KKwkJaWYgKChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKSAmJiAoY2hpcC0+ZXJyc3RhdCkpCisJCQlzdGF0dXMgPSBjaGlwLT5lcnJzdGF0KG10ZCwgY2hpcCwgRkxfV1JJVElORywgc3RhdHVzLAorCQkJCQkgICAgICAgcGFnZSk7CisKKwkJaWYgKHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwpCisJCQlyZXR1cm4gLUVJTzsKIAl9IGVsc2UgewotCQkvKiBXcml0ZSBvdXQgZGVzaXJlZCBkYXRhICovCi0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfU0VRSU4sIG10ZC0+b29iYmxvY2sgKyBjb2x1bW4sIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7Ci0JCS8qIHdyaXRlIGRhdGEgKi8KLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgYnVmLCBsZW4pOworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfQ0FDSEVEUFJPRywgLTEsIC0xKTsKKwkJc3RhdHVzID0gY2hpcC0+d2FpdGZ1bmMobXRkLCBjaGlwKTsKIAl9Ci0JLyogU2VuZCBjb21tYW5kIHRvIHByb2dyYW0gdGhlIE9PQiBkYXRhICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKLQotCXN0YXR1cyA9IHRoaXMtPndhaXRmdW5jIChtdGQsIHRoaXMsIEZMX1dSSVRJTkcpOwotCi0JLyogU2VlIGlmIGRldmljZSB0aGlua3MgaXQgc3VjY2VlZGVkICovCi0JaWYgKHN0YXR1cyAmIDB4MDEpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX29vYjogIiAiRmFpbGVkIHdyaXRlLCBwYWdlIDB4JTA4eFxuIiwgcGFnZSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQkvKiBSZXR1cm4gaGFwcHkgKi8KLQkqcmV0bGVuID0gbGVuOwogCiAjaWZkZWYgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURQogCS8qIFNlbmQgY29tbWFuZCB0byByZWFkIGJhY2sgdGhlIGRhdGEgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURPT0IsIGNvbHVtbiwgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIDAsIHBhZ2UpOwogCi0JaWYgKHRoaXMtPnZlcmlmeV9idWYobXRkLCBidWYsIGxlbikpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX29vYjogIiAiRmFpbGVkIHdyaXRlIHZlcmlmeSwgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKGNoaXAtPnZlcmlmeV9idWYobXRkLCBidWYsIG10ZC0+d3JpdGVzaXplKSkKKwkJcmV0dXJuIC1FSU87CiAjZW5kaWYKLQlyZXQgPSAwOwotb3V0OgotCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuYW5kX2ZpbGxfb29iIC0gW0ludGVybmFsXSBUcmFuc2ZlciBjbGllbnQgYnVmZmVyIHRvIG9vYgorICogQGNoaXA6CW5hbmQgY2hpcCBzdHJ1Y3R1cmUKKyAqIEBvb2I6CW9vYiBkYXRhIGJ1ZmZlcgorICogQGxlbjoJb29iIGRhdGEgd3JpdGUgbGVuZ3RoCisgKiBAb3BzOglvb2Igb3BzIHN0cnVjdHVyZQorICovCitzdGF0aWMgdWludDhfdCAqbmFuZF9maWxsX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50OF90ICpvb2IsIHNpemVfdCBsZW4sCisJCQkJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlzd2l0Y2ggKG9wcy0+bW9kZSkgeworCisJY2FzZSBNVERfT09CX1BMQUNFOgorCWNhc2UgTVREX09PQl9SQVc6CisJCW1lbWNweShjaGlwLT5vb2JfcG9pICsgb3BzLT5vb2JvZmZzLCBvb2IsIGxlbik7CisJCXJldHVybiBvb2IgKyBsZW47CisKKwljYXNlIE1URF9PT0JfQVVUTzogeworCQlzdHJ1Y3QgbmFuZF9vb2JmcmVlICpmcmVlID0gY2hpcC0+ZWNjLmxheW91dC0+b29iZnJlZTsKKwkJdWludDMyX3QgYm9mZnMgPSAwLCB3b2ZmcyA9IG9wcy0+b29ib2ZmczsKKwkJc2l6ZV90IGJ5dGVzID0gMDsKKworCQlmb3IgKDsgZnJlZS0+bGVuZ3RoICYmIGxlbjsgZnJlZSsrLCBsZW4gLT0gYnl0ZXMpIHsKKwkJCS8qIFdyaXRlIHJlcXVlc3Qgbm90IGZyb20gb2Zmc2V0IDAgPyAqLworCQkJaWYgKHVubGlrZWx5KHdvZmZzKSkgeworCQkJCWlmICh3b2ZmcyA+PSBmcmVlLT5sZW5ndGgpIHsKKwkJCQkJd29mZnMgLT0gZnJlZS0+bGVuZ3RoOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQgKyB3b2ZmczsKKwkJCQlieXRlcyA9IG1pbl90KHNpemVfdCwgbGVuLAorCQkJCQkgICAgICAoZnJlZS0+bGVuZ3RoIC0gd29mZnMpKTsKKwkJCQl3b2ZmcyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWJ5dGVzID0gbWluX3Qoc2l6ZV90LCBsZW4sIGZyZWUtPmxlbmd0aCk7CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQ7CisJCQl9CisJCQltZW1jcHkoY2hpcC0+b29iX3BvaSArIGJvZmZzLCBvb2IsIGJ5dGVzKTsKKwkJCW9vYiArPSBieXRlczsKKwkJfQorCQlyZXR1cm4gb29iOworCX0KKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgTk9UQUxJR05FRCh4KQkoKHggJiAoY2hpcC0+c3VicGFnZXNpemUgLSAxKSkgIT0gMCkKKworLyoqCisgKiBuYW5kX2RvX3dyaXRlX29wcyAtIFtJbnRlcm5hbF0gTkFORCB3cml0ZSB3aXRoIEVDQworICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEB0bzoJCW9mZnNldCB0byB3cml0ZSB0bworICogQG9wczoJb29iIG9wZXJhdGlvbnMgZGVzY3JpcHRpb24gc3RydWN0dXJlCisgKgorICogTkFORCB3cml0ZSB3aXRoIEVDQworICovCitzdGF0aWMgaW50IG5hbmRfZG9fd3JpdGVfb3BzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCWludCBjaGlwbnIsIHJlYWxwYWdlLCBwYWdlLCBibG9ja21hc2ssIGNvbHVtbjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXVpbnQzMl90IHdyaXRlbGVuID0gb3BzLT5sZW47CisKKwl1aW50MzJfdCBvb2J3cml0ZWxlbiA9IG9wcy0+b29ibGVuOworCXVpbnQzMl90IG9vYm1heGxlbiA9IG9wcy0+bW9kZSA9PSBNVERfT09CX0FVVE8gPworCQkJCW10ZC0+b29iYXZhaWwgOiBtdGQtPm9vYnNpemU7CisKKwl1aW50OF90ICpvb2IgPSBvcHMtPm9vYmJ1ZjsKKwl1aW50OF90ICpidWYgPSBvcHMtPmRhdGJ1ZjsKKwlpbnQgcmV0LCBzdWJwYWdlOworCisJb3BzLT5yZXRsZW4gPSAwOworCWlmICghd3JpdGVsZW4pCisJCXJldHVybiAwOworCisJY29sdW1uID0gdG8gJiAobXRkLT53cml0ZXNpemUgLSAxKTsKKwlzdWJwYWdlID0gY29sdW1uIHx8ICh3cml0ZWxlbiAmIChtdGQtPndyaXRlc2l6ZSAtIDEpKTsKKworCWlmIChzdWJwYWdlICYmIG9vYikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljaGlwbnIgPSAoaW50KSh0byA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisKKwkvKiBDaGVjaywgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCisJaWYgKG5hbmRfY2hlY2tfd3AobXRkKSkgeworCQlwcmludGsgKEtFUk5fTk9USUNFICJuYW5kX2RvX3dyaXRlX29wczogRGV2aWNlIGlzIHdyaXRlIHByb3RlY3RlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJlYWxwYWdlID0gKGludCkodG8gPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisJcGFnZSA9IHJlYWxwYWdlICYgY2hpcC0+cGFnZW1hc2s7CisJYmxvY2ttYXNrID0gKDEgPDwgKGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQgLSBjaGlwLT5wYWdlX3NoaWZ0KSkgLSAxOworCisJLyogSW52YWxpZGF0ZSB0aGUgcGFnZSBjYWNoZSwgd2hlbiB3ZSB3cml0ZSB0byB0aGUgY2FjaGVkIHBhZ2UgKi8KKwlpZiAodG8gPD0gKGNoaXAtPnBhZ2VidWYgPDwgY2hpcC0+cGFnZV9zaGlmdCkgJiYKKwkgICAgKGNoaXAtPnBhZ2VidWYgPDwgY2hpcC0+cGFnZV9zaGlmdCkgPCAodG8gKyBvcHMtPmxlbikpCisJCWNoaXAtPnBhZ2VidWYgPSAtMTsKKworCS8qIElmIHdlJ3JlIG5vdCBnaXZlbiBleHBsaWNpdCBPT0IgZGF0YSwgbGV0IGl0IGJlIDB4RkYgKi8KKwlpZiAobGlrZWx5KCFvb2IpKQorCQltZW1zZXQoY2hpcC0+b29iX3BvaSwgMHhmZiwgbXRkLT5vb2JzaXplKTsKKworCS8qIERvbid0IGFsbG93IG11bHRpcGFnZSBvb2Igd3JpdGVzIHdpdGggb2Zmc2V0ICovCisJaWYgKG9vYiAmJiBvcHMtPm9vYm9mZnMgJiYgKG9wcy0+b29ib2ZmcyArIG9wcy0+b29ibGVuID4gb29ibWF4bGVuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoMSkgeworCQlXQVRDSERPR19SRVNFVCgpOworCisJCWludCBieXRlcyA9IG10ZC0+d3JpdGVzaXplOworCQlpbnQgY2FjaGVkID0gd3JpdGVsZW4gPiBieXRlcyAmJiBwYWdlICE9IGJsb2NrbWFzazsKKwkJdWludDhfdCAqd2J1ZiA9IGJ1ZjsKKworCQkvKiBQYXJ0aWFsIHBhZ2Ugd3JpdGUgPyAqLworCQlpZiAodW5saWtlbHkoY29sdW1uIHx8IHdyaXRlbGVuIDwgKG10ZC0+d3JpdGVzaXplIC0gMSkpKSB7CisJCQljYWNoZWQgPSAwOworCQkJYnl0ZXMgPSBtaW5fdChpbnQsIGJ5dGVzIC0gY29sdW1uLCAoaW50KSB3cml0ZWxlbik7CisJCQljaGlwLT5wYWdlYnVmID0gLTE7CisJCQltZW1zZXQoY2hpcC0+YnVmZmVycy0+ZGF0YWJ1ZiwgMHhmZiwgbXRkLT53cml0ZXNpemUpOworCQkJbWVtY3B5KCZjaGlwLT5idWZmZXJzLT5kYXRhYnVmW2NvbHVtbl0sIGJ1ZiwgYnl0ZXMpOworCQkJd2J1ZiA9IGNoaXAtPmJ1ZmZlcnMtPmRhdGFidWY7CisJCX0KKworCQlpZiAodW5saWtlbHkob29iKSkgeworCQkJc2l6ZV90IGxlbiA9IG1pbihvb2J3cml0ZWxlbiwgb29ibWF4bGVuKTsKKwkJCW9vYiA9IG5hbmRfZmlsbF9vb2IoY2hpcCwgb29iLCBsZW4sIG9wcyk7CisJCQlvb2J3cml0ZWxlbiAtPSBsZW47CisJCX0KKworCQlwcmludGYoIiBQYWdlICVkIHdyaXRlc2l6ZSAlZCB3cml0ZWxlbiAlZFxuIixwYWdlLGJ5dGVzLCBjYWNoZWQpOworCisJCXJldCA9IGNoaXAtPndyaXRlX3BhZ2UobXRkLCBjaGlwLCB3YnVmLCBwYWdlLCBjYWNoZWQsCisJCQkJICAgICAgIChvcHMtPm1vZGUgPT0gTVREX09PQl9SQVcpKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCisJCXdyaXRlbGVuIC09IGJ5dGVzOworCQlpZiAoIXdyaXRlbGVuKQorCQkJYnJlYWs7CisKKwkJY29sdW1uID0gMDsKKwkJYnVmICs9IGJ5dGVzOworCQlyZWFscGFnZSsrOworCisJCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOworCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCisJCWlmICghcGFnZSkgeworCQkJY2hpcG5yKys7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKKwkJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwkJfQorCX0KKworCW9wcy0+cmV0bGVuID0gb3BzLT5sZW4gLSB3cml0ZWxlbjsKKwlpZiAodW5saWtlbHkob29iKSkKKwkJb3BzLT5vb2JyZXRsZW4gPSBvcHMtPm9vYmxlbjsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG5hbmRfd3JpdGUgLSBbTVREIEludGVyZmFjZV0gTkFORCB3cml0ZSB3aXRoIEVDQworICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEB0bzoJCW9mZnNldCB0byB3cml0ZSB0bworICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcworICogQGJ1ZjoJdGhlIGRhdGEgdG8gd3JpdGUKKyAqCisgKiBOQU5EIHdyaXRlIHdpdGggRUNDCisgKi8KK3N0YXRpYyBpbnQgbmFuZF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAorCQkJICBzaXplX3QgKnJldGxlbiwgY29uc3QgdWludDhfdCAqYnVmKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IHJldDsKKworCS8qIERvIG5vdCBhbGxvdyB3cml0ZXMgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKCh0byArIGxlbikgPiBtdGQtPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1dSSVRJTkcpOworCisJY2hpcC0+b3BzLmxlbiA9IGxlbjsKKwljaGlwLT5vcHMuZGF0YnVmID0gKHVpbnQ4X3QgKilidWY7CisJY2hpcC0+b3BzLm9vYmJ1ZiA9IE5VTEw7CisKKwlyZXQgPSBuYW5kX2RvX3dyaXRlX29wcyhtdGQsIHRvLCAmY2hpcC0+b3BzKTsKKworCSpyZXRsZW4gPSBjaGlwLT5vcHMucmV0bGVuOworCiAJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotLyogWFhYIFUtQk9PVCBYWFggKi8KLSNpZiAwCiAvKioKLSAqIG5hbmRfd3JpdGV2IC0gW01URCBJbnRlcmZhY2VdIGNvbXBhYmlsdHkgZnVuY3Rpb24gZm9yIG5hbmRfd3JpdGV2X2VjYworICogbmFuZF9kb193cml0ZV9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCB3cml0ZSBvdXQtb2YtYmFuZAogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB2ZWNzOgl0aGUgaW92ZWN0b3JzIHRvIHdyaXRlCi0gKiBAY291bnQ6CW51bWJlciBvZiB2ZWN0b3JzCiAgKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCisgKiBAb3BzOglvb2Igb3BlcmF0aW9uIGRlc2NyaXB0aW9uIHN0cnVjdHVyZQogICoKLSAqIE5BTkQgd3JpdGUgd2l0aCBrdmVjLiBUaGlzIGp1c3QgY2FsbHMgdGhlIGVjYyBmdW5jdGlvbgorICogTkFORCB3cml0ZSBvdXQtb2YtYmFuZAogICovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGV2IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsCi0JCWxvZmZfdCB0bywgc2l6ZV90ICogcmV0bGVuKQorc3RhdGljIGludCBuYW5kX2RvX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAorCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKLQlyZXR1cm4gKG5hbmRfd3JpdGV2X2VjYyAobXRkLCB2ZWNzLCBjb3VudCwgdG8sIHJldGxlbiwgTlVMTCwgTlVMTCkpOwotfQorCWludCBjaGlwbnIsIHBhZ2UsIHN0YXR1cywgbGVuOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLS8qKgotICogbmFuZF93cml0ZXZfZWNjIC0gW01URCBJbnRlcmZhY2VdIHdyaXRlIHdpdGggaW92ZWMgd2l0aCBlY2MKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAdmVjczoJdGhlIGlvdmVjdG9ycyB0byB3cml0ZQotICogQGNvdW50OgludW1iZXIgb2YgdmVjdG9ycwotICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcwotICogQGVjY2J1ZjoJZmlsZXN5c3RlbSBzdXBwbGllZCBvb2IgZGF0YSBidWZmZXIKLSAqIEBvb2JzZWw6CW9vYiBzZWxlY3Rpb24gc3RydWN0dXJlCi0gKgotICogTkFORCB3cml0ZSB3aXRoIGlvdmVjIHdpdGggZWNjCi0gKi8KLXN0YXRpYyBpbnQgbmFuZF93cml0ZXZfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsCi0JCWxvZmZfdCB0bywgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQotewotCWludCBpLCBwYWdlLCBsZW4sIHRvdGFsX2xlbiwgcmV0ID0gLUVJTywgd3JpdHRlbiA9IDAsIGNoaXBucjsKLQlpbnQgb29iLCBudW1wYWdlcywgYXV0b3BsYWNlID0gMCwgc3RhcnRwYWdlOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50CXBwYmxvY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKTsKLQl1X2NoYXIgKm9vYmJ1ZiwgKmJ1ZnN0YXJ0OworCU1URERFQlVHKE1URF9ERUJVR19MRVZFTDMsICIlczogdG8gPSAweCUwOHgsIGxlbiA9ICVpXG4iLAorCQkJIF9fZnVuY19fLCAodW5zaWduZWQgaW50KXRvLCAoaW50KW9wcy0+b29ibGVuKTsKIAotCS8qIFByZXNldCB3cml0dGVuIGxlbiBmb3IgZWFybHkgZXhpdCAqLwotCSpyZXRsZW4gPSAwOwotCi0JLyogQ2FsY3VsYXRlIHRvdGFsIGxlbmd0aCBvZiBkYXRhICovCi0JdG90YWxfbGVuID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQkJdG90YWxfbGVuICs9IChpbnQpIHZlY3NbaV0uaW92X2xlbjsKLQotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLAotCSAgICAgICAibmFuZF93cml0ZXY6IHRvID0gMHglMDh4LCBsZW4gPSAlaSwgY291bnQgPSAlbGRcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAodW5zaWduZWQgaW50KSB0b3RhbF9sZW4sIGNvdW50KTsKKwlpZiAob3BzLT5tb2RlID09IE1URF9PT0JfQVVUTykKKwkJbGVuID0gY2hpcC0+ZWNjLmxheW91dC0+b29iYXZhaWw7CisJZWxzZQorCQlsZW4gPSBtdGQtPm9vYnNpemU7CiAKIAkvKiBEbyBub3QgYWxsb3cgd3JpdGUgcGFzdCBlbmQgb2YgcGFnZSAqLwotCWlmICgodG8gKyB0b3RhbF9sZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZXY6IEF0dGVtcHRlZCB3cml0ZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOworCWlmICgob3BzLT5vb2JvZmZzICsgb3BzLT5vb2JsZW4pID4gbGVuKSB7CisJCU1URERFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlczogQXR0ZW1wdCB0byB3cml0ZSAiCisJCQkJInBhc3QgZW5kIG9mIHBhZ2VcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogcmVqZWN0IHdyaXRlcywgd2hpY2ggYXJlIG5vdCBwYWdlIGFsaWduZWQgKi8KLQlpZiAoTk9UQUxJR05FRCAodG8pIHx8IE5PVEFMSUdORUQodG90YWxfbGVuKSkgewotCQlwcmludGsgKEtFUk5fTk9USUNFICJuYW5kX3dyaXRlX2VjYzogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworCWlmICh1bmxpa2VseShvcHMtPm9vYm9mZnMgPj0gbGVuKSkgeworCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IEF0dGVtcHQgdG8gc3RhcnQgIgorCQkJCSJ3cml0ZSBvdXRzaWRlIG9vYlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfV1JJVElORyk7CisJLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmICh1bmxpa2VseSh0byA+PSBtdGQtPnNpemUgfHwKKwkJICAgICBvcHMtPm9vYm9mZnMgKyBvcHMtPm9vYmxlbiA+CisJCQkoKG10ZC0+c2l6ZSA+PiBjaGlwLT5wYWdlX3NoaWZ0KSAtCisJCQkgKHRvID4+IGNoaXAtPnBhZ2Vfc2hpZnQpKSAqIGxlbikpIHsKKwkJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiBBdHRlbXB0IHdyaXRlIGJleW9uZCAiCisJCQkJImVuZCBvZiBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JLyogR2V0IHRoZSBjdXJyZW50IGNoaXAtbnIgKi8KLQljaGlwbnIgPSAoaW50KSAodG8gPj4gdGhpcy0+Y2hpcF9zaGlmdCk7Ci0JLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwljaGlwbnIgPSAoaW50KSh0byA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisKKwkvKiBTaGlmdCB0byBnZXQgcGFnZSAqLworCXBhZ2UgPSAoaW50KSh0byA+PiBjaGlwLT5wYWdlX3NoaWZ0KTsKKworCS8qCisJICogUmVzZXQgdGhlIGNoaXAuIFNvbWUgY2hpcHMgKGxpa2UgdGhlIFRvc2hpYmEgVEM1ODMyREMgZm91bmQgaW4gb25lCisJICogb2YgbXkgRGlza09uQ2hpcCAyMDAwIHRlc3QgdW5pdHMpIHdpbGwgY2xlYXIgdGhlIHdob2xlIGRhdGEgcGFnZSB0b28KKwkgKiBpZiB3ZSBkb24ndCBkbyB0aGlzLiBJIGhhdmUgbm8gY2x1ZSB3aHksIGJ1dCBJIHNlZW0gdG8gaGF2ZSAnZml4ZWQnCisJICogaXQgaW4gdGhlIGRvYzIwMDAgZHJpdmVyIGluIEF1Z3VzdCAxOTk5LiAgZHdtdzIuCisJICovCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOwogCiAJLyogQ2hlY2ssIGlmIGl0IGlzIHdyaXRlIHByb3RlY3RlZCAqLwogCWlmIChuYW5kX2NoZWNrX3dwKG10ZCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVST0ZTOwogCi0JLyogaWYgb29ic2VsIGlzIE5VTEwsIHVzZSBjaGlwIGRlZmF1bHRzICovCi0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOwotCi0JLyogQXV0b3BsYWNlIG9mIG9vYiBkYXRhID8gVXNlIHRoZSBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWUgKi8KLQlpZiAob29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFKSB7Ci0JCW9vYnNlbCA9IHRoaXMtPmF1dG9vb2I7Ci0JCWF1dG9wbGFjZSA9IDE7Ci0JfQotCWlmIChvb2JzZWwtPnVzZWVjYyA9PSBNVERfTkFOREVDQ19BVVRPUExfVVNSKQotCQlhdXRvcGxhY2UgPSAxOwotCi0JLyogU2V0dXAgc3RhcnQgcGFnZSAqLwotCXBhZ2UgPSAoaW50KSAodG8gPj4gdGhpcy0+cGFnZV9zaGlmdCk7CiAJLyogSW52YWxpZGF0ZSB0aGUgcGFnZSBjYWNoZSwgaWYgd2Ugd3JpdGUgdG8gdGhlIGNhY2hlZCBwYWdlICovCi0JaWYgKHBhZ2UgPD0gdGhpcy0+cGFnZWJ1ZiAmJiB0aGlzLT5wYWdlYnVmIDwgKCh0byArIHRvdGFsX2xlbikgPj4gdGhpcy0+cGFnZV9zaGlmdCkpCi0JCXRoaXMtPnBhZ2VidWYgPSAtMTsKKwlpZiAocGFnZSA9PSBjaGlwLT5wYWdlYnVmKQorCQljaGlwLT5wYWdlYnVmID0gLTE7CiAKLQlzdGFydHBhZ2UgPSBwYWdlICYgdGhpcy0+cGFnZW1hc2s7CisJbWVtc2V0KGNoaXAtPm9vYl9wb2ksIDB4ZmYsIG10ZC0+b29ic2l6ZSk7CisJbmFuZF9maWxsX29vYihjaGlwLCBvcHMtPm9vYmJ1Ziwgb3BzLT5vb2JsZW4sIG9wcyk7CisJc3RhdHVzID0gY2hpcC0+ZWNjLndyaXRlX29vYihtdGQsIGNoaXAsIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CisJbWVtc2V0KGNoaXAtPm9vYl9wb2ksIDB4ZmYsIG10ZC0+b29ic2l6ZSk7CiAKLQkvKiBMb29wIHVudGlsIGFsbCBrdmVjJyBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gKi8KLQlsZW4gPSAwOwotCXdoaWxlIChjb3VudCkgewotCQkvKiBJZiB0aGUgZ2l2ZW4gdHVwbGUgaXMgPj0gcGFnZXNpemUgdGhlbgotCQkgKiB3cml0ZSBpdCBvdXQgZnJvbSB0aGUgaW92Ci0JCSAqLwotCQlpZiAoKHZlY3MtPmlvdl9sZW4gLSBsZW4pID49IG10ZC0+b29iYmxvY2spIHsKLQkJCS8qIENhbGMgbnVtYmVyIG9mIHBhZ2VzIHdlIGNhbiB3cml0ZQotCQkJICogb3V0IG9mIHRoaXMgaW92IGluIG9uZSBnbyAqLwotCQkJbnVtcGFnZXMgPSAodmVjcy0+aW92X2xlbiAtIGxlbikgPj4gdGhpcy0+cGFnZV9zaGlmdDsKLQkJCS8qIERvIG5vdCBjcm9zcyBibG9jayBib3VuZGFyaWVzICovCi0JCQludW1wYWdlcyA9IG1pbiAocHBibG9jayAtIChzdGFydHBhZ2UgJiAocHBibG9jayAtIDEpKSwgbnVtcGFnZXMpOwotCQkJb29iYnVmID0gbmFuZF9wcmVwYXJlX29vYmJ1ZiAobXRkLCBOVUxMLCBvb2JzZWwsIGF1dG9wbGFjZSwgbnVtcGFnZXMpOwotCQkJYnVmc3RhcnQgPSAodV9jaGFyICopdmVjcy0+aW92X2Jhc2U7Ci0JCQlidWZzdGFydCArPSBsZW47Ci0JCQl0aGlzLT5kYXRhX3BvaSA9IGJ1ZnN0YXJ0OwotCQkJb29iID0gMDsKLQkJCWZvciAoaSA9IDE7IGkgPD0gbnVtcGFnZXM7IGkrKykgewotCQkJCS8qIFdyaXRlIG9uZSBwYWdlLiBJZiB0aGlzIGlzIHRoZSBsYXN0IHBhZ2UgdG8gd3JpdGUKLQkJCQkgKiB0aGVuIHVzZSB0aGUgcmVhbCBwYWdlcHJvZ3JhbSBjb21tYW5kLCBlbHNlIHNlbGVjdAotCQkJCSAqIGNhY2hlZCBwcm9ncmFtbWluZyBpZiBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAuCi0JCQkJICovCi0JCQkJcmV0ID0gbmFuZF93cml0ZV9wYWdlIChtdGQsIHRoaXMsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzaywKLQkJCQkJJm9vYmJ1Zltvb2JdLCBvb2JzZWwsIGkgIT0gbnVtcGFnZXMpOwotCQkJCWlmIChyZXQpCi0JCQkJCWdvdG8gb3V0OwotCQkJCXRoaXMtPmRhdGFfcG9pICs9IG10ZC0+b29iYmxvY2s7Ci0JCQkJbGVuICs9IG10ZC0+b29iYmxvY2s7Ci0JCQkJb29iICs9IG10ZC0+b29ic2l6ZTsKLQkJCQlwYWdlKys7Ci0JCQl9Ci0JCQkvKiBDaGVjaywgaWYgd2UgaGF2ZSB0byBzd2l0Y2ggdG8gdGhlIG5leHQgdHVwbGUgKi8KLQkJCWlmIChsZW4gPj0gKGludCkgdmVjcy0+aW92X2xlbikgewotCQkJCXZlY3MrKzsKLQkJCQlsZW4gPSAwOwotCQkJCWNvdW50LS07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBXZSBtdXN0IHVzZSB0aGUgaW50ZXJuYWwgYnVmZmVyLCByZWFkIGRhdGEgb3V0IG9mIGVhY2gKLQkJCSAqIHR1cGxlIHVudGlsIHdlIGhhdmUgYSBmdWxsIHBhZ2UgdG8gd3JpdGUKLQkJCSAqLwotCQkJaW50IGNudCA9IDA7Ci0JCQl3aGlsZSAoY250IDwgbXRkLT5vb2JibG9jaykgewotCQkJCWlmICh2ZWNzLT5pb3ZfYmFzZSAhPSBOVUxMICYmIHZlY3MtPmlvdl9sZW4pCi0JCQkJCXRoaXMtPmRhdGFfYnVmW2NudCsrXSA9ICgodV9jaGFyICopIHZlY3MtPmlvdl9iYXNlKVtsZW4rK107Ci0JCQkJLyogQ2hlY2ssIGlmIHdlIGhhdmUgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IHR1cGxlICovCi0JCQkJaWYgKGxlbiA+PSAoaW50KSB2ZWNzLT5pb3ZfbGVuKSB7Ci0JCQkJCXZlY3MrKzsKLQkJCQkJbGVuID0gMDsKLQkJCQkJY291bnQtLTsKLQkJCQl9Ci0JCQl9Ci0JCQl0aGlzLT5wYWdlYnVmID0gcGFnZTsKLQkJCXRoaXMtPmRhdGFfcG9pID0gdGhpcy0+ZGF0YV9idWY7Ci0JCQlidWZzdGFydCA9IHRoaXMtPmRhdGFfcG9pOwotCQkJbnVtcGFnZXMgPSAxOwotCQkJb29iYnVmID0gbmFuZF9wcmVwYXJlX29vYmJ1ZiAobXRkLCBOVUxMLCBvb2JzZWwsIGF1dG9wbGFjZSwgbnVtcGFnZXMpOwotCQkJcmV0ID0gbmFuZF93cml0ZV9wYWdlIChtdGQsIHRoaXMsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzaywKLQkJCQlvb2JidWYsIG9vYnNlbCwgMCk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gb3V0OwotCQkJcGFnZSsrOwotCQl9CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKIAotCQl0aGlzLT5kYXRhX3BvaSA9IGJ1ZnN0YXJ0OwotCQlyZXQgPSBuYW5kX3ZlcmlmeV9wYWdlcyAobXRkLCB0aGlzLCBzdGFydHBhZ2UsIG51bXBhZ2VzLCBvb2JidWYsIG9vYnNlbCwgY2hpcG5yLCAwKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCW9wcy0+b29icmV0bGVuID0gb3BzLT5vb2JsZW47CiAKLQkJd3JpdHRlbiArPSBtdGQtPm9vYmJsb2NrICogbnVtcGFnZXM7Ci0JCS8qIEFsbCBkb25lID8gKi8KLQkJaWYgKCFjb3VudCkKLQkJCWJyZWFrOworCXJldHVybiAwOworfQogCi0JCXN0YXJ0cGFnZSA9IHBhZ2UgJiB0aGlzLT5wYWdlbWFzazsKLQkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLwotCQlpZiAoIXN0YXJ0cGFnZSkgewotCQkJY2hpcG5yKys7Ci0JCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKLQkJfQorLyoqCisgKiBuYW5kX3dyaXRlX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIGRhdGEgYW5kL29yIG91dC1vZi1iYW5kCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiBAb3BzOglvb2Igb3BlcmF0aW9uIGRlc2NyaXB0aW9uIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IG5hbmRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJaW50IHJldCA9IC1FTk9UU1VQUDsKKworCW9wcy0+cmV0bGVuID0gMDsKKworCS8qIERvIG5vdCBhbGxvdyB3cml0ZXMgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKG9wcy0+ZGF0YnVmICYmICh0byArIG9wcy0+bGVuKSA+IG10ZC0+c2l6ZSkgeworCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IEF0dGVtcHQgd3JpdGUgYmV5b25kICIKKwkJCQkiZW5kIG9mIGRldmljZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmV0ID0gMDsKLW91dDoKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogCi0JKnJldGxlbiA9IHdyaXR0ZW47CisJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfV1JJVElORyk7CisKKwlzd2l0Y2ggKG9wcy0+bW9kZSkgeworCWNhc2UgTVREX09PQl9QTEFDRToKKwljYXNlIE1URF9PT0JfQVVUTzoKKwljYXNlIE1URF9PT0JfUkFXOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gb3V0OworCX0KKworCWlmICghb3BzLT5kYXRidWYpCisJCXJldCA9IG5hbmRfZG9fd3JpdGVfb29iKG10ZCwgdG8sIG9wcyk7CisJZWxzZQorCQlyZXQgPSBuYW5kX2RvX3dyaXRlX29wcyhtdGQsIHRvLCBvcHMpOworCitvdXQ6CisJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogCXJldHVybiByZXQ7CiB9Ci0jZW5kaWYKIAogLyoqCiAgKiBzaW5nbGVfZXJlYXNlX2NtZCAtIFtHRU5FUklDXSBOQU5EIHN0YW5kYXJkIGJsb2NrIGVyYXNlIGNvbW1hbmQgZnVuY3Rpb24KQEAgLTIwNDUsMTIgKzIxODksMTIgQEAKICAqCiAgKiBTdGFuZGFyZCBlcmFzZSBjb21tYW5kIGZvciBOQU5EIGNoaXBzCiAgKi8KLXN0YXRpYyB2b2lkIHNpbmdsZV9lcmFzZV9jbWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZSkKK3N0YXRpYyB2b2lkIHNpbmdsZV9lcmFzZV9jbWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYWdlKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAkvKiBTZW5kIGNvbW1hbmRzIHRvIGVyYXNlIGEgYmxvY2sgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UpOwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfRVJBU0UyLCAtMSwgLTEpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UyLCAtMSwgLTEpOwogfQogCiAvKioKQEAgLTIwNjEsMTUgKzIyMDUsMTUgQEAKICAqIEFORCBtdWx0aSBibG9jayBlcmFzZSBjb21tYW5kIGZ1bmN0aW9uCiAgKiBFcmFzZSA0IGNvbnNlY3V0aXZlIGJsb2NrcwogICovCi1zdGF0aWMgdm9pZCBtdWx0aV9lcmFzZV9jbWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZSkKK3N0YXRpYyB2b2lkIG11bHRpX2VyYXNlX2NtZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2UpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCS8qIFNlbmQgY29tbWFuZHMgdG8gZXJhc2UgYSBibG9jayAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UrKyk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKyspOwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTIsIC0xLCAtMSk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UrKyk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UrKyk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UrKyk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9FUkFTRTIsIC0xLCAtMSk7CiB9CiAKIC8qKgpAQCAtMjA3OSwxMDggKzIyMjMsMTQzIEBACiAgKgogICogRXJhc2Ugb25lIG9yZSBtb3JlIGJsb2NrcwogICovCi1zdGF0aWMgaW50IG5hbmRfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCitzdGF0aWMgaW50IG5hbmRfZXJhc2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKIHsKLQlyZXR1cm4gbmFuZF9lcmFzZV9uYW5kIChtdGQsIGluc3RyLCAwKTsKKwlyZXR1cm4gbmFuZF9lcmFzZV9uYW5kKG10ZCwgaW5zdHIsIDApOwogfQogCisjZGVmaW5lIEJCVF9QQUdFX01BU0sJMHhmZmZmZmYzZgogLyoqCi0gKiBuYW5kX2VyYXNlX2ludGVybiAtIFtOQU5EIEludGVyZmFjZV0gZXJhc2UgYmxvY2socykKKyAqIG5hbmRfZXJhc2VfbmFuZCAtIFtJbnRlcm5hbF0gZXJhc2UgYmxvY2socykKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAaW5zdHI6CWVyYXNlIGluc3RydWN0aW9uCiAgKiBAYWxsb3diYnQ6CWFsbG93IGVyYXNpbmcgdGhlIGJidCBhcmVhCiAgKgogICogRXJhc2Ugb25lIG9yZSBtb3JlIGJsb2NrcwogICovCi1pbnQgbmFuZF9lcmFzZV9uYW5kIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyLCBpbnQgYWxsb3diYnQpCitpbnQgbmFuZF9lcmFzZV9uYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsCisJCSAgICBpbnQgYWxsb3diYnQpCiB7Ci0JaW50IHBhZ2UsIGxlbiwgc3RhdHVzLCBwYWdlc19wZXJfYmxvY2ssIHJldCwgY2hpcG5yOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW50IHBhZ2UsIHN0YXR1cywgcGFnZXNfcGVyX2Jsb2NrLCByZXQsIGNoaXBucjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWxvZmZfdCByZXdyaXRlX2JidFtDT05GSUdfU1lTX05BTkRfTUFYX0NISVBTXSA9IHswfTsKKwl1bnNpZ25lZCBpbnQgYmJ0X21hc2tlZF9wYWdlID0gMHhmZmZmZmZmZjsKKwlsb2ZmX3QgbGVuOwogCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDMsCi0JICAgICAgICJuYW5kX2VyYXNlOiBzdGFydCA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGluc3RyLT5hZGRyLCAodW5zaWduZWQgaW50KSBpbnN0ci0+bGVuKTsKKwlNVERERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiJXM6IHN0YXJ0ID0gMHglMDEybGx4LCBsZW4gPSAlbGx1XG4iLAorCQkJCV9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKWluc3RyLT5hZGRyLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW5zdHItPmxlbik7CiAKLQkvKiBTdGFydCBhZGRyZXNzIG11c3QgYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgKi8KLQlpZiAoaW5zdHItPmFkZHIgJiAoKDEgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6IFVuYWxpZ25lZCBhZGRyZXNzXG4iKTsKKwlpZiAoY2hlY2tfb2Zmc19sZW4obXRkLCBpbnN0ci0+YWRkciwgaW5zdHItPmxlbikpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAotCS8qIExlbmd0aCBtdXN0IGFsaWduIG9uIGJsb2NrIGJvdW5kYXJ5ICovCi0JaWYgKGluc3RyLT5sZW4gJiAoKDEgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6IExlbmd0aCBub3QgYmxvY2sgYWxpZ25lZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIERvIG5vdCBhbGxvdyBlcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAoKGluc3RyLT5sZW4gKyBpbnN0ci0+YWRkcikgPiBtdGQtPnNpemUpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiBFcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpbnN0ci0+ZmFpbF9hZGRyID0gMHhmZmZmZmZmZjsKKwlpbnN0ci0+ZmFpbF9hZGRyID0gTVREX0ZBSUxfQUREUl9VTktOT1dOOwogCiAJLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQsIEZMX0VSQVNJTkcpOworCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX0VSQVNJTkcpOwogCiAJLyogU2hpZnQgdG8gZ2V0IGZpcnN0IHBhZ2UgKi8KLQlwYWdlID0gKGludCkgKGluc3RyLT5hZGRyID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCWNoaXBuciA9IChpbnQpIChpbnN0ci0+YWRkciA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKKwlwYWdlID0gKGludCkoaW5zdHItPmFkZHIgPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisJY2hpcG5yID0gKGludCkoaW5zdHItPmFkZHIgPj4gY2hpcC0+Y2hpcF9zaGlmdCk7CiAKIAkvKiBDYWxjdWxhdGUgcGFnZXMgaW4gZWFjaCBibG9jayAqLwotCXBhZ2VzX3Blcl9ibG9jayA9IDEgPDwgKHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KTsKKwlwYWdlc19wZXJfYmxvY2sgPSAxIDw8IChjaGlwLT5waHlzX2VyYXNlX3NoaWZ0IC0gY2hpcC0+cGFnZV9zaGlmdCk7CiAKIAkvKiBTZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKIAotCS8qIENoZWNrIHRoZSBXUCBiaXQgKi8KIAkvKiBDaGVjaywgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCiAJaWYgKG5hbmRfY2hlY2tfd3AobXRkKSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6IERldmljZSBpcyB3cml0ZSBwcm90ZWN0ZWQhISFcbiIpOworCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IERldmljZSBpcyB3cml0ZSBwcm90ZWN0ZWQhISFcbiIsCisJCQkJCV9fZnVuY19fKTsKIAkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKIAkJZ290byBlcmFzZV9leGl0OwogCX0KIAorCS8qCisJICogSWYgQkJUIHJlcXVpcmVzIHJlZnJlc2gsIHNldCB0aGUgQkJUIHBhZ2UgbWFzayB0byBzZWUgaWYgdGhlIEJCVAorCSAqIHNob3VsZCBiZSByZXdyaXR0ZW4uIE90aGVyd2lzZSB0aGUgbWFzayBpcyBzZXQgdG8gMHhmZmZmZmZmZiB3aGljaAorCSAqIGNhbiBub3QgYmUgbWF0Y2hlZC4gVGhpcyBpcyBhbHNvIGRvbmUgd2hlbiB0aGUgYmJ0IGlzIGFjdHVhbGx5CisJICogZXJhc2VkIHRvIGF2b2lkIHJlY3VzcnNpdmUgdXBkYXRlcworCSAqLworCWlmIChjaGlwLT5vcHRpb25zICYgQkJUX0FVVE9fUkVGUkVTSCAmJiAhYWxsb3diYnQpCisJCWJidF9tYXNrZWRfcGFnZSA9IGNoaXAtPmJidF90ZC0+cGFnZXNbY2hpcG5yXSAmIEJCVF9QQUdFX01BU0s7CisKIAkvKiBMb29wIHRocm91Z2ggdGhlIHBhZ2VzICovCiAJbGVuID0gaW5zdHItPmxlbjsKIAogCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTSU5HOwogCiAJd2hpbGUgKGxlbikgewotI2lmbmRlZiBOQU5EX0FMTE9XX0VSQVNFX0FMTAotCQkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgYmFkIGJsb2NrLCB3ZSBkbyBub3QgZXJhc2UgYmFkIGJsb2NrcyAhICovCi0JCWlmIChuYW5kX2Jsb2NrX2NoZWNrYmFkKG10ZCwgKChsb2ZmX3QpIHBhZ2UpIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsIDAsIGFsbG93YmJ0KSkgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm5hbmRfZXJhc2U6IGF0dGVtcHQgdG8gZXJhc2UgYSBiYWQgYmxvY2sgYXQgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOworCQlXQVRDSERPR19SRVNFVCgpOworCQkvKgorCQkgKiBoZWNrIGlmIHdlIGhhdmUgYSBiYWQgYmxvY2ssIHdlIGRvIG5vdCBlcmFzZSBiYWQgYmxvY2tzICEKKwkJICovCisJCWlmICghaW5zdHItPnNjcnViICYmIG5hbmRfYmxvY2tfY2hlY2tiYWQobXRkLCAoKGxvZmZfdCkgcGFnZSkgPDwKKwkJCQkJY2hpcC0+cGFnZV9zaGlmdCwgMCwgYWxsb3diYnQpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYXR0ZW1wdCB0byBlcmFzZSBhIGJhZCBibG9jayAiCisJCQkJCSJhdCBwYWdlIDB4JTA4eFxuIiwgX19mdW5jX18sIHBhZ2UpOwogCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKIAkJCWdvdG8gZXJhc2VfZXhpdDsKIAkJfQotI2VuZGlmCi0JCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIGVyYXNlIHRoZSBibG9jayB3aGljaCBjb250YWlucwotCQkgICB0aGUgY3VycmVudCBjYWNoZWQgcGFnZSAqLwotCQlpZiAocGFnZSA8PSB0aGlzLT5wYWdlYnVmICYmIHRoaXMtPnBhZ2VidWYgPCAocGFnZSArIHBhZ2VzX3Blcl9ibG9jaykpCi0JCQl0aGlzLT5wYWdlYnVmID0gLTE7CiAKLQkJdGhpcy0+ZXJhc2VfY21kIChtdGQsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7CisJCS8qCisJCSAqIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIGVyYXNlIHRoZSBibG9jayB3aGljaAorCQkgKiBjb250YWlucyB0aGUgY3VycmVudCBjYWNoZWQgcGFnZQorCQkgKi8KKwkJaWYgKHBhZ2UgPD0gY2hpcC0+cGFnZWJ1ZiAmJiBjaGlwLT5wYWdlYnVmIDwKKwkJICAgIChwYWdlICsgcGFnZXNfcGVyX2Jsb2NrKSkKKwkJCWNoaXAtPnBhZ2VidWYgPSAtMTsKIAotCQlzdGF0dXMgPSB0aGlzLT53YWl0ZnVuYyAobXRkLCB0aGlzLCBGTF9FUkFTSU5HKTsKKwkJY2hpcC0+ZXJhc2VfY21kKG10ZCwgcGFnZSAmIGNoaXAtPnBhZ2VtYXNrKTsKKworCQlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOworCisJCS8qCisJCSAqIFNlZSBpZiBvcGVyYXRpb24gZmFpbGVkIGFuZCBhZGRpdGlvbmFsIHN0YXR1cyBjaGVja3MgYXJlCisJCSAqIGF2YWlsYWJsZQorCQkgKi8KKwkJaWYgKChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKSAmJiAoY2hpcC0+ZXJyc3RhdCkpCisJCQlzdGF0dXMgPSBjaGlwLT5lcnJzdGF0KG10ZCwgY2hpcCwgRkxfRVJBU0lORywKKwkJCQkJICAgICAgIHN0YXR1cywgcGFnZSk7CiAKIAkJLyogU2VlIGlmIGJsb2NrIGVyYXNlIHN1Y2NlZWRlZCAqLwotCQlpZiAoc3RhdHVzICYgMHgwMSkgewotCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiAiICJGYWlsZWQgZXJhc2UsIHBhZ2UgMHglMDh4XG4iLCBwYWdlKTsKKwkJaWYgKHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwpIHsKKwkJCU1URERFQlVHKE1URF9ERUJVR19MRVZFTDAsICIlczogRmFpbGVkIGVyYXNlLCAiCisJCQkJCSJwYWdlIDB4JTA4eFxuIiwgX19mdW5jX18sIHBhZ2UpOwogCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKLQkJCWluc3RyLT5mYWlsX2FkZHIgPSAocGFnZSA8PCB0aGlzLT5wYWdlX3NoaWZ0KTsKKwkJCWluc3RyLT5mYWlsX2FkZHIgPQorCQkJCSgobG9mZl90KXBhZ2UgPDwgY2hpcC0+cGFnZV9zaGlmdCk7CiAJCQlnb3RvIGVyYXNlX2V4aXQ7CiAJCX0KIAorCQkvKgorCQkgKiBJZiBCQlQgcmVxdWlyZXMgcmVmcmVzaCwgc2V0IHRoZSBCQlQgcmV3cml0ZSBmbGFnIHRvIHRoZQorCQkgKiBwYWdlIGJlaW5nIGVyYXNlZAorCQkgKi8KKwkJaWYgKGJidF9tYXNrZWRfcGFnZSAhPSAweGZmZmZmZmZmICYmCisJCSAgICAocGFnZSAmIEJCVF9QQUdFX01BU0spID09IGJidF9tYXNrZWRfcGFnZSkKKwkJCXJld3JpdGVfYmJ0W2NoaXBucl0gPQorCQkJCSgobG9mZl90KXBhZ2UgPDwgY2hpcC0+cGFnZV9zaGlmdCk7CisKIAkJLyogSW5jcmVtZW50IHBhZ2UgYWRkcmVzcyBhbmQgZGVjcmVtZW50IGxlbmd0aCAqLwotCQlsZW4gLT0gKDEgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCk7CisJCWxlbiAtPSAoMSA8PCBjaGlwLT5waHlzX2VyYXNlX3NoaWZ0KTsKIAkJcGFnZSArPSBwYWdlc19wZXJfYmxvY2s7CiAKIAkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLwotCQlpZiAobGVuICYmICEocGFnZSAmIHRoaXMtPnBhZ2VtYXNrKSkgeworCQlpZiAobGVuICYmICEocGFnZSAmIGNoaXAtPnBhZ2VtYXNrKSkgewogCQkJY2hpcG5yKys7Ci0JCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwkJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCisJCQkvKgorCQkJICogSWYgQkJUIHJlcXVpcmVzIHJlZnJlc2ggYW5kIEJCVC1QRVJDSElQLCBzZXQgdGhlIEJCVAorCQkJICogcGFnZSBtYXNrIHRvIHNlZSBpZiB0aGlzIEJCVCBzaG91bGQgYmUgcmV3cml0dGVuCisJCQkgKi8KKwkJCWlmIChiYnRfbWFza2VkX3BhZ2UgIT0gMHhmZmZmZmZmZiAmJgorCQkJICAgIChjaGlwLT5iYnRfdGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9QRVJDSElQKSkKKwkJCQliYnRfbWFza2VkX3BhZ2UgPSBjaGlwLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0gJgorCQkJCQlCQlRfUEFHRV9NQVNLOwogCQl9CiAJfQogCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9ET05FOwpAQCAtMjE4OCwxMiArMjM2NywzMCBAQAogZXJhc2VfZXhpdDoKIAogCXJldCA9IGluc3RyLT5zdGF0ZSA9PSBNVERfRVJBU0VfRE9ORSA/IDAgOiAtRUlPOworCisJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLworCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKKwogCS8qIERvIGNhbGwgYmFjayBmdW5jdGlvbiAqLwogCWlmICghcmV0KQogCQltdGRfZXJhc2VfY2FsbGJhY2soaW5zdHIpOwogCi0JLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKKwkvKgorCSAqIElmIEJCVCByZXF1aXJlcyByZWZyZXNoIGFuZCBlcmFzZSB3YXMgc3VjY2Vzc2Z1bCwgcmV3cml0ZSBhbnkKKwkgKiBzZWxlY3RlZCBiYWQgYmxvY2sgdGFibGVzCisJICovCisJaWYgKGJidF9tYXNrZWRfcGFnZSA9PSAweGZmZmZmZmZmIHx8IHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoY2hpcG5yID0gMDsgY2hpcG5yIDwgY2hpcC0+bnVtY2hpcHM7IGNoaXBucisrKSB7CisJCWlmICghcmV3cml0ZV9iYnRbY2hpcG5yXSkKKwkJCWNvbnRpbnVlOworCQkvKiB1cGRhdGUgdGhlIEJCVCBmb3IgY2hpcCAqLworCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IG5hbmRfdXBkYXRlX2JidCAiCisJCQkiKCVkOjB4JTBsbHggMHglMHgpXG4iLCBfX2Z1bmNfXywgY2hpcG5yLAorCQkJcmV3cml0ZV9iYnRbY2hpcG5yXSwgY2hpcC0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdKTsKKwkJbmFuZF91cGRhdGVfYmJ0KG10ZCwgcmV3cml0ZV9iYnRbY2hpcG5yXSk7CisJfQogCiAJLyogUmV0dXJuIG1vcmUgb3IgbGVzcyBoYXBweSAqLwogCXJldHVybiByZXQ7CkBAIC0yMjA1LDUxICsyNDAyLDc5MCBAQAogICoKICAqIFN5bmMgaXMgYWN0dWFsbHkgYSB3YWl0IGZvciBjaGlwIHJlYWR5IGZ1bmN0aW9uCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfc3luYyAoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgdm9pZCBuYW5kX3N5bmMoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3N5bmM6IGNhbGxlZFxuIik7CisJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIiVzOiBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAogCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwotCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9TWU5DSU5HKTsKKwluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9TWU5DSU5HKTsKIAkvKiBSZWxlYXNlIGl0IGFuZCBnbyBiYWNrICovCi0JbmFuZF9yZWxlYXNlX2RldmljZSAobXRkKTsKKwluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiB9CiAKLQogLyoqCi0gKiBuYW5kX2Jsb2NrX2lzYmFkIC0gW01URCBJbnRlcmZhY2VdIENoZWNrIHdoZXRoZXIgdGhlIGJsb2NrIGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgYmFkCisgKiBuYW5kX2Jsb2NrX2lzYmFkIC0gW01URCBJbnRlcmZhY2VdIENoZWNrIGlmIGJsb2NrIGF0IG9mZnNldCBpcyBiYWQKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAb2ZzOglvZmZzZXQgcmVsYXRpdmUgdG8gbXRkIHN0YXJ0CisgKiBAb2ZmczoJb2Zmc2V0IHJlbGF0aXZlIHRvIG10ZCBzdGFydAogICovCi1zdGF0aWMgaW50IG5hbmRfYmxvY2tfaXNiYWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQorc3RhdGljIGludCBuYW5kX2Jsb2NrX2lzYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcykKIHsKIAkvKiBDaGVjayBmb3IgaW52YWxpZCBvZmZzZXQgKi8KLQlpZiAob2ZzID4gbXRkLT5zaXplKQorCWlmIChvZmZzID4gbXRkLT5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBuYW5kX2Jsb2NrX2NoZWNrYmFkIChtdGQsIG9mcywgMSwgMCk7CisJcmV0dXJuIG5hbmRfYmxvY2tfY2hlY2tiYWQobXRkLCBvZmZzLCAxLCAwKTsKIH0KIAogLyoqCi0gKiBuYW5kX2Jsb2NrX21hcmtiYWQgLSBbTVREIEludGVyZmFjZV0gTWFyayB0aGUgYmxvY2sgYXQgdGhlIGdpdmVuIG9mZnNldCBhcyBiYWQKKyAqIG5hbmRfYmxvY2tfbWFya2JhZCAtIFtNVEQgSW50ZXJmYWNlXSBNYXJrIGJsb2NrIGF0IHRoZSBnaXZlbiBvZmZzZXQgYXMgYmFkCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQG9mczoJb2Zmc2V0IHJlbGF0aXZlIHRvIG10ZCBzdGFydAogICovCi1zdGF0aWMgaW50IG5hbmRfYmxvY2tfbWFya2JhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCitzdGF0aWMgaW50IG5hbmRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJaW50IHJldDsKIAotCWlmICgocmV0ID0gbmFuZF9ibG9ja19pc2JhZChtdGQsIG9mcykpKSB7CisJcmV0ID0gbmFuZF9ibG9ja19pc2JhZChtdGQsIG9mcyk7CisJaWYgKHJldCkgewogCQkvKiBJZiBpdCB3YXMgYmFkIGFscmVhZHksIHJldHVybiBzdWNjZXNzIGFuZCBkbyBub3RoaW5nLiAqLwogCQlpZiAocmV0ID4gMCkKIAkJCXJldHVybiAwOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldHVybiB0aGlzLT5ibG9ja19tYXJrYmFkKG10ZCwgb2ZzKTsKKwlyZXR1cm4gY2hpcC0+YmxvY2tfbWFya2JhZChtdGQsIG9mcyk7Cit9CisKKy8qCisgKiBTZXQgZGVmYXVsdCBmdW5jdGlvbnMKKyAqLworc3RhdGljIHZvaWQgbmFuZF9zZXRfZGVmYXVsdHMoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IGJ1c3cpCit7CisJLyogY2hlY2sgZm9yIHByb3BlciBjaGlwX2RlbGF5IHNldHVwLCBzZXQgMjB1cyBpZiBub3QgKi8KKwlpZiAoIWNoaXAtPmNoaXBfZGVsYXkpCisJCWNoaXAtPmNoaXBfZGVsYXkgPSAyMDsKKworCS8qIGNoZWNrLCBpZiBhIHVzZXIgc3VwcGxpZWQgY29tbWFuZCBmdW5jdGlvbiBnaXZlbiAqLworCWlmIChjaGlwLT5jbWRmdW5jID09IE5VTEwpCisJCWNoaXAtPmNtZGZ1bmMgPSBuYW5kX2NvbW1hbmQ7CisKKwkvKiBjaGVjaywgaWYgYSB1c2VyIHN1cHBsaWVkIHdhaXQgZnVuY3Rpb24gZ2l2ZW4gKi8KKwlpZiAoY2hpcC0+d2FpdGZ1bmMgPT0gTlVMTCkKKwkJY2hpcC0+d2FpdGZ1bmMgPSBuYW5kX3dhaXQ7CisKKwlpZiAoIWNoaXAtPnNlbGVjdF9jaGlwKQorCQljaGlwLT5zZWxlY3RfY2hpcCA9IG5hbmRfc2VsZWN0X2NoaXA7CisJaWYgKCFjaGlwLT5yZWFkX2J5dGUpCisJCWNoaXAtPnJlYWRfYnl0ZSA9IGJ1c3cgPyBuYW5kX3JlYWRfYnl0ZTE2IDogbmFuZF9yZWFkX2J5dGU7CisJaWYgKCFjaGlwLT5yZWFkX3dvcmQpCisJCWNoaXAtPnJlYWRfd29yZCA9IG5hbmRfcmVhZF93b3JkOworCWlmICghY2hpcC0+YmxvY2tfYmFkKQorCQljaGlwLT5ibG9ja19iYWQgPSBuYW5kX2Jsb2NrX2JhZDsKKwlpZiAoIWNoaXAtPmJsb2NrX21hcmtiYWQpCisJCWNoaXAtPmJsb2NrX21hcmtiYWQgPSBuYW5kX2RlZmF1bHRfYmxvY2tfbWFya2JhZDsKKwlpZiAoIWNoaXAtPndyaXRlX2J1ZikKKwkJY2hpcC0+d3JpdGVfYnVmID0gYnVzdyA/IG5hbmRfd3JpdGVfYnVmMTYgOiBuYW5kX3dyaXRlX2J1ZjsKKwlpZiAoIWNoaXAtPnJlYWRfYnVmKQorCQljaGlwLT5yZWFkX2J1ZiA9IGJ1c3cgPyBuYW5kX3JlYWRfYnVmMTYgOiBuYW5kX3JlYWRfYnVmOworCWlmICghY2hpcC0+dmVyaWZ5X2J1ZikKKwkJY2hpcC0+dmVyaWZ5X2J1ZiA9IGJ1c3cgPyBuYW5kX3ZlcmlmeV9idWYxNiA6IG5hbmRfdmVyaWZ5X2J1ZjsKKwlpZiAoIWNoaXAtPnNjYW5fYmJ0KQorCQljaGlwLT5zY2FuX2JidCA9IG5hbmRfZGVmYXVsdF9iYnQ7CisJaWYgKCFjaGlwLT5jb250cm9sbGVyKQorCQljaGlwLT5jb250cm9sbGVyID0gJmNoaXAtPmh3Y29udHJvbDsKK30KKworI2lmZGVmIENPTkZJR19TWVNfTkFORF9PTkZJX0RFVEVDVElPTgorLyoKKyAqIHNhbml0aXplIE9ORkkgc3RyaW5ncyBzbyB3ZSBjYW4gc2FmZWx5IHByaW50IHRoZW0KKyAqLworc3RhdGljIHZvaWQgc2FuaXRpemVfc3RyaW5nKGNoYXIgKnMsIHNpemVfdCBsZW4pCit7CisJc3NpemVfdCBpOworCisJLyogbnVsbCB0ZXJtaW5hdGUgKi8KKwlzW2xlbiAtIDFdID0gMDsKKworCS8qIHJlbW92ZSBub24gcHJpbnRhYmxlIGNoYXJzICovCisJZm9yIChpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgeworCQlpZiAoc1tpXSA8ICcgJyB8fCBzW2ldID4gMTI3KQorCQkJc1tpXSA9ICc/JzsKKwl9CisKKwkvKiByZW1vdmUgdHJhaWxpbmcgc3BhY2VzICovCisJc3RyaW0ocyk7Cit9CisKK3N0YXRpYyB1MTYgb25maV9jcmMxNih1MTYgY3JjLCB1OCBjb25zdCAqcCwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaTsKKwl3aGlsZSAobGVuLS0pIHsKKwkJY3JjIF49ICpwKysgPDwgODsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWNyYyA9IChjcmMgPDwgMSkgXiAoKGNyYyAmIDB4ODAwMCkgPyAweDgwMDUgOiAwKTsKKwl9CisKKwlyZXR1cm4gY3JjOworfQorCisvKgorICogQ2hlY2sgaWYgdGhlIE5BTkQgY2hpcCBpcyBPTkZJIGNvbXBsaWFudCwgcmV0dXJucyAxIGlmIGl0IGlzLCAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IG5hbmRfZmxhc2hfZGV0ZWN0X29uZmkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJCWludCAqYnVzdykKK3sKKwlzdHJ1Y3QgbmFuZF9vbmZpX3BhcmFtcyAqcCA9ICZjaGlwLT5vbmZpX3BhcmFtczsKKwlpbnQgaTsKKwlpbnQgdmFsOworCisJLyogdHJ5IE9ORkkgZm9yIHVua25vdyBjaGlwIG9yIExQICovCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgyMCwgLTEpOworCWlmIChjaGlwLT5yZWFkX2J5dGUobXRkKSAhPSAnTycgfHwgY2hpcC0+cmVhZF9ieXRlKG10ZCkgIT0gJ04nIHx8CisJCWNoaXAtPnJlYWRfYnl0ZShtdGQpICE9ICdGJyB8fCBjaGlwLT5yZWFkX2J5dGUobXRkKSAhPSAnSScpCisJCXJldHVybiAwOworCisJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk9ORkkgZmxhc2ggZGV0ZWN0ZWRcbiIpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQVJBTSwgMCwgLTEpOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJY2hpcC0+cmVhZF9idWYobXRkLCAodWludDhfdCAqKXAsIHNpemVvZigqcCkpOworCQlpZiAob25maV9jcmMxNihPTkZJX0NSQ19CQVNFLCAodWludDhfdCAqKXAsIDI1NCkgPT0KKwkJCQlsZTE2X3RvX2NwdShwLT5jcmMpKSB7CisJCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLAorCQkJCSAiT05GSSBwYXJhbSBwYWdlICVkIHZhbGlkXG4iLCBpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gMykKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayB2ZXJzaW9uICovCisJdmFsID0gbGUxNl90b19jcHUocC0+cmV2aXNpb24pOworCWlmICh2YWwgJiAoMSA8PCA1KSkKKwkJY2hpcC0+b25maV92ZXJzaW9uID0gMjM7CisJZWxzZSBpZiAodmFsICYgKDEgPDwgNCkpCisJCWNoaXAtPm9uZmlfdmVyc2lvbiA9IDIyOworCWVsc2UgaWYgKHZhbCAmICgxIDw8IDMpKQorCQljaGlwLT5vbmZpX3ZlcnNpb24gPSAyMTsKKwllbHNlIGlmICh2YWwgJiAoMSA8PCAyKSkKKwkJY2hpcC0+b25maV92ZXJzaW9uID0gMjA7CisJZWxzZSBpZiAodmFsICYgKDEgPDwgMSkpCisJCWNoaXAtPm9uZmlfdmVyc2lvbiA9IDEwOworCWVsc2UKKwkJY2hpcC0+b25maV92ZXJzaW9uID0gMDsKKworCWlmICghY2hpcC0+b25maV92ZXJzaW9uKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bnN1cHBvcnRlZCBPTkZJIHZlcnNpb246ICVkXG4iLAorCQkJCQkJCQlfX2Z1bmNfXywgdmFsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2FuaXRpemVfc3RyaW5nKHAtPm1hbnVmYWN0dXJlciwgc2l6ZW9mKHAtPm1hbnVmYWN0dXJlcikpOworCXNhbml0aXplX3N0cmluZyhwLT5tb2RlbCwgc2l6ZW9mKHAtPm1vZGVsKSk7CisJaWYgKCFtdGQtPm5hbWUpCisJCW10ZC0+bmFtZSA9IHAtPm1vZGVsOworCW10ZC0+d3JpdGVzaXplID0gbGUzMl90b19jcHUocC0+Ynl0ZV9wZXJfcGFnZSk7CisJbXRkLT5lcmFzZXNpemUgPSBsZTMyX3RvX2NwdShwLT5wYWdlc19wZXJfYmxvY2spICogbXRkLT53cml0ZXNpemU7CisJbXRkLT5vb2JzaXplID0gbGUxNl90b19jcHUocC0+c3BhcmVfYnl0ZXNfcGVyX3BhZ2UpOworCWNoaXAtPmNoaXBzaXplID0gKHVpbnQ2NF90KWxlMzJfdG9fY3B1KHAtPmJsb2Nrc19wZXJfbHVuKSAqIG10ZC0+ZXJhc2VzaXplOworCSpidXN3ID0gMDsKKwlpZiAobGUxNl90b19jcHUocC0+ZmVhdHVyZXMpICYgMSkKKwkJKmJ1c3cgPSBOQU5EX0JVU1dJRFRIXzE2OworCisJY2hpcC0+b3B0aW9ucyAmPSB+TkFORF9DSElQT1BUSU9OU19NU0s7CisJY2hpcC0+b3B0aW9ucyB8PSAoTkFORF9OT19SRUFEUkRZIHwKKwkJCU5BTkRfTk9fQVVUT0lOQ1IpICYgTkFORF9DSElQT1BUSU9OU19NU0s7CisKKwlyZXR1cm4gMTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBuYW5kX2ZsYXNoX2RldGVjdF9vbmZpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQlpbnQgKmJ1c3cpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIEdldCB0aGUgZmxhc2ggYW5kIG1hbnVmYWN0dXJlciBpZCBhbmQgbG9va3VwIGlmIHRoZSB0eXBlIGlzIHN1cHBvcnRlZAorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG5hbmRfZmxhc2hfZGV2ICpuYW5kX2dldF9mbGFzaF90eXBlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQkJICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQkJICBpbnQgYnVzdywKKwkJCQkJCSAgaW50ICptYWZfaWQsIGludCAqZGV2X2lkLAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgKnR5cGUpCit7CisJaW50IGksIG1hZl9pZHg7CisJdTggaWRfZGF0YVs4XTsKKwlpbnQgcmV0OworCisJLyogU2VsZWN0IHRoZSBkZXZpY2UgKi8KKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIDApOworCisJLyoKKwkgKiBSZXNldCB0aGUgY2hpcCwgcmVxdWlyZWQgYnkgc29tZSBjaGlwcyAoZS5nLiBNaWNyb24gTVQyOUZ4R3h4eHh4KQorCSAqIGFmdGVyIHBvd2VyLXVwCisJICovCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworCisJLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRElELCAweDAwLCAtMSk7CisKKwkvKiBSZWFkIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEcyAqLworCSptYWZfaWQgPSBjaGlwLT5yZWFkX2J5dGUobXRkKTsKKwkqZGV2X2lkID0gY2hpcC0+cmVhZF9ieXRlKG10ZCk7CisKKwkvKiBUcnkgYWdhaW4gdG8gbWFrZSBzdXJlLCBhcyBzb21lIHN5c3RlbXMgdGhlIGJ1cy1ob2xkIG9yIG90aGVyCisJICogaW50ZXJmYWNlIGNvbmNlcm5zIGNhbiBjYXVzZSByYW5kb20gZGF0YSB3aGljaCBsb29rcyBsaWtlIGEKKwkgKiBwb3NzaWJseSBjcmVkaWJsZSBOQU5EIGZsYXNoIHRvIGFwcGVhci4gSWYgdGhlIHR3byByZXN1bHRzIGRvCisJICogbm90IG1hdGNoLCBpZ25vcmUgdGhlIGRldmljZSBjb21wbGV0ZWx5LgorCSAqLworCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJaWRfZGF0YVtpXSA9IGNoaXAtPnJlYWRfYnl0ZShtdGQpOworCisJaWYgKGlkX2RhdGFbMF0gIT0gKm1hZl9pZCB8fCBpZF9kYXRhWzFdICE9ICpkZXZfaWQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNlY29uZCBJRCByZWFkIGRpZCBub3QgbWF0Y2ggIgorCQkgICAgICAgIiUwMngsJTAyeCBhZ2FpbnN0ICUwMngsJTAyeFxuIiwgX19mdW5jX18sCisJCSAgICAgICAqbWFmX2lkLCAqZGV2X2lkLCBpZF9kYXRhWzBdLCBpZF9kYXRhWzFdKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJfQorCisJaWYgKCF0eXBlKQorCQl0eXBlID0gbmFuZF9mbGFzaF9pZHM7CisKKwlmb3IgKDsgdHlwZS0+bmFtZSAhPSBOVUxMOyB0eXBlKyspCisJCWlmICgqZGV2X2lkID09IHR5cGUtPmlkKQorCQkJYnJlYWs7CisKKwljaGlwLT5vbmZpX3ZlcnNpb24gPSAwOworCWlmICghdHlwZS0+bmFtZSB8fCAhdHlwZS0+cGFnZXNpemUpIHsKKwkJLyogQ2hlY2sgaXMgY2hpcCBpcyBPTkZJIGNvbXBsaWFudCAqLworCQlyZXQgPSBuYW5kX2ZsYXNoX2RldGVjdF9vbmZpKG10ZCwgY2hpcCwgJmJ1c3cpOworCQlpZiAocmV0KQorCQkJZ290byBpZGVudF9kb25lOworCX0KKworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFESUQsIDB4MDAsIC0xKTsKKworCS8qIFJlYWQgZW50aXJlIElEIHN0cmluZyAqLworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaWRfZGF0YVtpXSA9IGNoaXAtPnJlYWRfYnl0ZShtdGQpOworCisJaWYgKCF0eXBlLT5uYW1lKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWlmICghbXRkLT5uYW1lKQorCQltdGQtPm5hbWUgPSB0eXBlLT5uYW1lOworCisJY2hpcC0+Y2hpcHNpemUgPSAodWludDY0X3QpdHlwZS0+Y2hpcHNpemUgPDwgMjA7CisKKwlpZiAoIXR5cGUtPnBhZ2VzaXplICYmIGNoaXAtPmluaXRfc2l6ZSkgeworCQkvKiBzZXQgdGhlIHBhZ2VzaXplLCBvb2JzaXplLCBlcmFzZXNpemUgYnkgdGhlIGRyaXZlciovCisJCWJ1c3cgPSBjaGlwLT5pbml0X3NpemUobXRkLCBjaGlwLCBpZF9kYXRhKTsKKwl9IGVsc2UgaWYgKCF0eXBlLT5wYWdlc2l6ZSkgeworCQlpbnQgZXh0aWQ7CisJCS8qIFRoZSAzcmQgaWQgYnl0ZSBob2xkcyBNTEMgLyBtdWx0aWNoaXAgZGF0YSAqLworCQljaGlwLT5jZWxsaW5mbyA9IGlkX2RhdGFbMl07CisJCS8qIFRoZSA0dGggaWQgYnl0ZSBpcyB0aGUgaW1wb3J0YW50IG9uZSAqLworCQlleHRpZCA9IGlkX2RhdGFbM107CisKKwkJLyoKKwkJICogRmllbGQgZGVmaW5pdGlvbnMgYXJlIGluIHRoZSBmb2xsb3dpbmcgZGF0YXNoZWV0czoKKwkJICogT2xkIHN0eWxlICg0LDUgYnl0ZSBJRCk6IFNhbXN1bmcgSzlHQUcwOFUwTSAocC4zMikKKwkJICogTmV3IHN0eWxlICAgKDYgYnl0ZSBJRCk6IFNhbXN1bmcgSzlHQkcwOFUwTSAocC40MCkKKwkJICoKKwkJICogQ2hlY2sgZm9yIHdyYXBhcm91bmQgKyBTYW1zdW5nIElEICsgbm9uemVybyA2dGggYnl0ZQorCQkgKiB0byBkZWNpZGUgd2hhdCB0byBkby4KKwkJICovCisJCWlmIChpZF9kYXRhWzBdID09IGlkX2RhdGFbNl0gJiYgaWRfZGF0YVsxXSA9PSBpZF9kYXRhWzddICYmCisJCQkJaWRfZGF0YVswXSA9PSBOQU5EX01GUl9TQU1TVU5HICYmCisJCQkJKGNoaXAtPmNlbGxpbmZvICYgTkFORF9DSV9DRUxMVFlQRV9NU0spICYmCisJCQkJaWRfZGF0YVs1XSAhPSAweDAwKSB7CisJCQkvKiBDYWxjIHBhZ2VzaXplICovCisJCQltdGQtPndyaXRlc2l6ZSA9IDIwNDggPDwgKGV4dGlkICYgMHgwMyk7CisJCQlleHRpZCA+Pj0gMjsKKwkJCS8qIENhbGMgb29ic2l6ZSAqLworCQkJc3dpdGNoIChleHRpZCAmIDB4MDMpIHsKKwkJCWNhc2UgMToKKwkJCQltdGQtPm9vYnNpemUgPSAxMjg7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJbXRkLT5vb2JzaXplID0gMjE4OworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCW10ZC0+b29ic2l6ZSA9IDQwMDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbXRkLT5vb2JzaXplID0gNDM2OworCQkJCWJyZWFrOworCQkJfQorCQkJZXh0aWQgPj49IDI7CisJCQkvKiBDYWxjIGJsb2Nrc2l6ZSAqLworCQkJbXRkLT5lcmFzZXNpemUgPSAoMTI4ICogMTAyNCkgPDwKKwkJCQkoKChleHRpZCA+PiAxKSAmIDB4MDQpIHwgKGV4dGlkICYgMHgwMykpOworCQkJYnVzdyA9IDA7CisJCX0gZWxzZSB7CisJCQkvKiBDYWxjIHBhZ2VzaXplICovCisJCQltdGQtPndyaXRlc2l6ZSA9IDEwMjQgPDwgKGV4dGlkICYgMHgwMyk7CisJCQlleHRpZCA+Pj0gMjsKKwkJCS8qIENhbGMgb29ic2l6ZSAqLworCQkJbXRkLT5vb2JzaXplID0gKDggPDwgKGV4dGlkICYgMHgwMSkpICoKKwkJCQkobXRkLT53cml0ZXNpemUgPj4gOSk7CisJCQlleHRpZCA+Pj0gMjsKKwkJCS8qIENhbGMgYmxvY2tzaXplLiBCbG9ja3NpemUgaXMgbXVsdGlwbGVzIG9mIDY0S2lCICovCisJCQltdGQtPmVyYXNlc2l6ZSA9ICg2NCAqIDEwMjQpIDw8IChleHRpZCAmIDB4MDMpOworCQkJZXh0aWQgPj49IDI7CisJCQkvKiBHZXQgYnVzd2lkdGggaW5mb3JtYXRpb24gKi8KKwkJCWJ1c3cgPSAoZXh0aWQgJiAweDAxKSA/IE5BTkRfQlVTV0lEVEhfMTYgOiAwOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogT2xkIGRldmljZXMgaGF2ZSBjaGlwIGRhdGEgaGFyZGNvZGVkIGluIHRoZSBkZXZpY2UgaWQgdGFibGUKKwkJICovCisJCW10ZC0+ZXJhc2VzaXplID0gdHlwZS0+ZXJhc2VzaXplOworCQltdGQtPndyaXRlc2l6ZSA9IHR5cGUtPnBhZ2VzaXplOworCQltdGQtPm9vYnNpemUgPSBtdGQtPndyaXRlc2l6ZSAvIDMyOworCQlidXN3ID0gdHlwZS0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTY7CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIFNwYW5zaW9uL0FNRCBJRCArIHJlcGVhdGluZyA1dGgsIDZ0aCBieXRlIHNpbmNlCisJCSAqIHNvbWUgU3BhbnNpb24gY2hpcHMgaGF2ZSBlcmFzZXNpemUgdGhhdCBjb25mbGljdHMgd2l0aCBzaXplCisJCSAqIGxpc3RlZCBpbiBuYW5kX2lkcyB0YWJsZQorCQkgKiBEYXRhIHNoZWV0ICg1IGJ5dGUgSUQpOiBTcGFuc2lvbiBTMzBNTC1QIE9STkFORCAocC4zOSkKKwkJICovCisJCWlmICgqbWFmX2lkID09IE5BTkRfTUZSX0FNRCAmJiBpZF9kYXRhWzRdICE9IDB4MDAgJiYKKwkJCQlpZF9kYXRhWzVdID09IDB4MDAgJiYgaWRfZGF0YVs2XSA9PSAweDAwICYmCisJCQkJaWRfZGF0YVs3XSA9PSAweDAwICYmIG10ZC0+d3JpdGVzaXplID09IDUxMikgeworCQkJbXRkLT5lcmFzZXNpemUgPSAxMjggKiAxMDI0OworCQkJbXRkLT5lcmFzZXNpemUgPDw9ICgoaWRfZGF0YVszXSAmIDB4MDMpIDw8IDEpOworCQl9CisJfQorCS8qIEdldCBjaGlwIG9wdGlvbnMsIHByZXNlcnZlIG5vbiBjaGlwIGJhc2VkIG9wdGlvbnMgKi8KKwljaGlwLT5vcHRpb25zICY9IH5OQU5EX0NISVBPUFRJT05TX01TSzsKKwljaGlwLT5vcHRpb25zIHw9IHR5cGUtPm9wdGlvbnMgJiBOQU5EX0NISVBPUFRJT05TX01TSzsKKworCS8qIENoZWNrIGlmIGNoaXAgaXMgYSBub3QgYSBzYW1zdW5nIGRldmljZS4gRG8gbm90IGNsZWFyIHRoZQorCSAqIG9wdGlvbnMgZm9yIGNoaXBzIHdoaWNoIGFyZSBub3QgaGF2aW5nIGFuIGV4dGVuZGVkIGlkLgorCSAqLworCWlmICgqbWFmX2lkICE9IE5BTkRfTUZSX1NBTVNVTkcgJiYgIXR5cGUtPnBhZ2VzaXplKQorCQljaGlwLT5vcHRpb25zICY9IH5OQU5EX1NBTVNVTkdfTFBfT1BUSU9OUzsKK2lkZW50X2RvbmU6CisKKwkvKgorCSAqIFNldCBjaGlwIGFzIGEgZGVmYXVsdC4gQm9hcmQgZHJpdmVycyBjYW4gb3ZlcnJpZGUgaXQsIGlmIG5lY2Vzc2FyeQorCSAqLworCWNoaXAtPm9wdGlvbnMgfD0gTkFORF9OT19BVVRPSU5DUjsKKworCS8qIFRyeSB0byBpZGVudGlmeSBtYW51ZmFjdHVyZXIgKi8KKwlmb3IgKG1hZl9pZHggPSAwOyBuYW5kX21hbnVmX2lkc1ttYWZfaWR4XS5pZCAhPSAweDA7IG1hZl9pZHgrKykgeworCQlpZiAobmFuZF9tYW51Zl9pZHNbbWFmX2lkeF0uaWQgPT0gKm1hZl9pZCkKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogQ2hlY2ssIGlmIGJ1c3dpZHRoIGlzIGNvcnJlY3QuIEhhcmR3YXJlIGRyaXZlcnMgc2hvdWxkIHNldAorCSAqIGNoaXAgY29ycmVjdCAhCisJICovCisJaWYgKGJ1c3cgIT0gKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJOQU5EIGRldmljZTogTWFudWZhY3R1cmVyIElEOiIKKwkJICAgICAgICIgMHglMDJ4LCBDaGlwIElEOiAweCUwMnggKCVzICVzKVxuIiwgKm1hZl9pZCwKKwkJICAgICAgICpkZXZfaWQsIG5hbmRfbWFudWZfaWRzW21hZl9pZHhdLm5hbWUsIG10ZC0+bmFtZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5BTkQgYnVzIHdpZHRoICVkIGluc3RlYWQgJWQgYml0XG4iLAorCQkgICAgICAgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSA/IDE2IDogOCwKKwkJICAgICAgIGJ1c3cgPyAxNiA6IDgpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwkvKiBDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgc2hpZnQgZnJvbSB0aGUgcGFnZSBzaXplICovCisJY2hpcC0+cGFnZV9zaGlmdCA9IGZmcyhtdGQtPndyaXRlc2l6ZSkgLSAxOworCS8qIENvbnZlcnQgY2hpcHNpemUgdG8gbnVtYmVyIG9mIHBhZ2VzIHBlciBjaGlwIC0xLiAqLworCWNoaXAtPnBhZ2VtYXNrID0gKGNoaXAtPmNoaXBzaXplID4+IGNoaXAtPnBhZ2Vfc2hpZnQpIC0gMTsKKworCWNoaXAtPmJidF9lcmFzZV9zaGlmdCA9IGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQgPQorCQlmZnMobXRkLT5lcmFzZXNpemUpIC0gMTsKKwlpZiAoY2hpcC0+Y2hpcHNpemUgJiAweGZmZmZmZmZmKQorCQljaGlwLT5jaGlwX3NoaWZ0ID0gZmZzKCh1bnNpZ25lZCljaGlwLT5jaGlwc2l6ZSkgLSAxOworCWVsc2UgeworCQljaGlwLT5jaGlwX3NoaWZ0ID0gZmZzKCh1bnNpZ25lZCkoY2hpcC0+Y2hpcHNpemUgPj4gMzIpKTsKKwkJY2hpcC0+Y2hpcF9zaGlmdCArPSAzMiAtIDE7CisJfQorCisJY2hpcC0+YmFkYmxvY2tiaXRzID0gODsKKworCS8qIFNldCB0aGUgYmFkIGJsb2NrIHBvc2l0aW9uICovCisJaWYgKG10ZC0+d3JpdGVzaXplID4gNTEyIHx8IChidXN3ICYgTkFORF9CVVNXSURUSF8xNikpCisJCWNoaXAtPmJhZGJsb2NrcG9zID0gTkFORF9MQVJHRV9CQURCTE9DS19QT1M7CisJZWxzZQorCQljaGlwLT5iYWRibG9ja3BvcyA9IE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TOworCisJLyoKKwkgKiBCYWQgYmxvY2sgbWFya2VyIGlzIHN0b3JlZCBpbiB0aGUgbGFzdCBwYWdlIG9mIGVhY2ggYmxvY2sKKwkgKiBvbiBTYW1zdW5nIGFuZCBIeW5peCBNTEMgZGV2aWNlczsgc3RvcmVkIGluIGZpcnN0IHR3byBwYWdlcworCSAqIG9mIGVhY2ggYmxvY2sgb24gTWljcm9uIGRldmljZXMgd2l0aCAyS2lCIHBhZ2VzIGFuZCBvbgorCSAqIFNMQyBTYW1zdW5nLCBIeW5peCwgVG9zaGliYSBhbmQgQU1EL1NwYW5zaW9uLiBBbGwgb3RoZXJzIHNjYW4KKwkgKiBvbmx5IHRoZSBmaXJzdCBwYWdlLgorCSAqLworCWlmICgoY2hpcC0+Y2VsbGluZm8gJiBOQU5EX0NJX0NFTExUWVBFX01TSykgJiYKKwkJCSgqbWFmX2lkID09IE5BTkRfTUZSX1NBTVNVTkcgfHwKKwkJCSAqbWFmX2lkID09IE5BTkRfTUZSX0hZTklYKSkKKwkJY2hpcC0+b3B0aW9ucyB8PSBOQU5EX0JCVF9TQ0FOTEFTVFBBR0U7CisJZWxzZSBpZiAoKCEoY2hpcC0+Y2VsbGluZm8gJiBOQU5EX0NJX0NFTExUWVBFX01TSykgJiYKKwkJCQkoKm1hZl9pZCA9PSBOQU5EX01GUl9TQU1TVU5HIHx8CisJCQkJICptYWZfaWQgPT0gTkFORF9NRlJfSFlOSVggfHwKKwkJCQkgKm1hZl9pZCA9PSBOQU5EX01GUl9UT1NISUJBIHx8CisJCQkJICptYWZfaWQgPT0gTkFORF9NRlJfQU1EKSkgfHwKKwkJCShtdGQtPndyaXRlc2l6ZSA9PSAyMDQ4ICYmCisJCQkgKm1hZl9pZCA9PSBOQU5EX01GUl9NSUNST04pKQorCQljaGlwLT5vcHRpb25zIHw9IE5BTkRfQkJUX1NDQU4yTkRQQUdFOworCisJLyoKKwkgKiBOdW1vbnl4L1NUIDJLIHBhZ2VzLCB4OCBidXMgdXNlIEJPVEggYnl0ZSAxIGFuZCA2CisJICovCisJaWYgKCEoYnVzdyAmIE5BTkRfQlVTV0lEVEhfMTYpICYmCisJCQkqbWFmX2lkID09IE5BTkRfTUZSX1NUTUlDUk8gJiYKKwkJCW10ZC0+d3JpdGVzaXplID09IDIwNDgpIHsKKwkJY2hpcC0+b3B0aW9ucyB8PSBOQU5EX0JCVF9TQ0FOQllURTFBTkQ2OworCQljaGlwLT5iYWRibG9ja3BvcyA9IDA7CisJfQorCisJLyogQ2hlY2sgZm9yIEFORCBjaGlwcyB3aXRoIDQgcGFnZSBwbGFuZXMgKi8KKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfNFBBR0VfQVJSQVkpCisJCWNoaXAtPmVyYXNlX2NtZCA9IG11bHRpX2VyYXNlX2NtZDsKKwllbHNlCisJCWNoaXAtPmVyYXNlX2NtZCA9IHNpbmdsZV9lcmFzZV9jbWQ7CisKKwkvKiBEbyBub3QgcmVwbGFjZSB1c2VyIHN1cHBsaWVkIGNvbW1hbmQgZnVuY3Rpb24gISAqLworCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMiAmJiBjaGlwLT5jbWRmdW5jID09IG5hbmRfY29tbWFuZCkKKwkJY2hpcC0+Y21kZnVuYyA9IG5hbmRfY29tbWFuZF9scDsKKworCS8qIFRPRE8gb25maSBmbGFzaCBuYW1lICovCisJTVREREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJOQU5EIGRldmljZTogTWFudWZhY3R1cmVyIElEOiIKKwkJIiAweCUwMngsIENoaXAgSUQ6IDB4JTAyeCAoJXMgJXMpXG4iLCAqbWFmX2lkLCAqZGV2X2lkLAorCQluYW5kX21hbnVmX2lkc1ttYWZfaWR4XS5uYW1lLAorI2lmZGVmIENPTkZJR19TWVNfTkFORF9PTkZJX0RFVEVDVElPTgorCQljaGlwLT5vbmZpX3ZlcnNpb24gPyBjaGlwLT5vbmZpX3BhcmFtcy5tb2RlbCA6IHR5cGUtPm5hbWUpOworI2Vsc2UKKwkJdHlwZS0+bmFtZSk7CisjZW5kaWYKKworCXJldHVybiB0eXBlOworfQorCisvKioKKyAqIG5hbmRfc2Nhbl9pZGVudCAtIFtOQU5EIEludGVyZmFjZV0gU2NhbiBmb3IgdGhlIE5BTkQgZGV2aWNlCisgKiBAbXRkOgkgICAgIE1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAbWF4Y2hpcHM6CSAgICAgTnVtYmVyIG9mIGNoaXBzIHRvIHNjYW4gZm9yCisgKiBAdGFibGU6CSAgICAgQWx0ZXJuYXRpdmUgTkFORCBJRCB0YWJsZQorICoKKyAqIFRoaXMgaXMgdGhlIGZpcnN0IHBoYXNlIG9mIHRoZSBub3JtYWwgbmFuZF9zY2FuKCkgZnVuY3Rpb24uIEl0CisgKiByZWFkcyB0aGUgZmxhc2ggSUQgYW5kIHNldHMgdXAgTVREIGZpZWxkcyBhY2NvcmRpbmdseS4KKyAqCisgKiBUaGUgbXRkLT5vd25lciBmaWVsZCBtdXN0IGJlIHNldCB0byB0aGUgbW9kdWxlIG9mIHRoZSBjYWxsZXIuCisgKi8KK2ludCBuYW5kX3NjYW5faWRlbnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtYXhjaGlwcywKKwkJICAgIGNvbnN0IHN0cnVjdCBuYW5kX2ZsYXNoX2RldiAqdGFibGUpCit7CisJaW50IGksIGJ1c3csIG5hbmRfbWFmX2lkLCBuYW5kX2Rldl9pZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWNvbnN0IHN0cnVjdCBuYW5kX2ZsYXNoX2RldiAqdHlwZTsKKworCS8qIEdldCBidXN3aWR0aCB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZnVuY3Rpb25zICovCisJYnVzdyA9IGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2OworCS8qIFNldCB0aGUgZGVmYXVsdCBmdW5jdGlvbnMgKi8KKwluYW5kX3NldF9kZWZhdWx0cyhjaGlwLCBidXN3KTsKKworCS8qIFJlYWQgdGhlIGZsYXNoIHR5cGUgKi8KKwl0eXBlID0gbmFuZF9nZXRfZmxhc2hfdHlwZShtdGQsIGNoaXAsIGJ1c3csCisJCQkJJm5hbmRfbWFmX2lkLCAmbmFuZF9kZXZfaWQsIHRhYmxlKTsKKworCWlmIChJU19FUlIodHlwZSkpIHsKKyNpZm5kZWYgQ09ORklHX1NZU19OQU5EX1FVSUVUX1RFU1QKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gTkFORCBkZXZpY2UgZm91bmQhISFcbiIpOworI2VuZGlmCisJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCQlyZXR1cm4gUFRSX0VSUih0eXBlKTsKKwl9CisKKwkvKiBDaGVjayBmb3IgYSBjaGlwIGFycmF5ICovCisJZm9yIChpID0gMTsgaSA8IG1heGNoaXBzOyBpKyspIHsKKwkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBpKTsKKwkJLyogU2VlIGNvbW1lbnQgaW4gbmFuZF9nZXRfZmxhc2hfdHlwZSBmb3IgcmVzZXQgKi8KKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworCQkvKiBTZW5kIHRoZSBjb21tYW5kIGZvciByZWFkaW5nIGRldmljZSBJRCAqLworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRElELCAweDAwLCAtMSk7CisJCS8qIFJlYWQgbWFudWZhY3R1cmVyIGFuZCBkZXZpY2UgSURzICovCisJCWlmIChuYW5kX21hZl9pZCAhPSBjaGlwLT5yZWFkX2J5dGUobXRkKSB8fAorCQkgICAgbmFuZF9kZXZfaWQgIT0gY2hpcC0+cmVhZF9ieXRlKG10ZCkpCisJCQlicmVhazsKKwl9CisjaWZkZWYgREVCVUcKKwlpZiAoaSA+IDEpCisJCXByaW50ayhLRVJOX0lORk8gIiVkIE5BTkQgY2hpcHMgZGV0ZWN0ZWRcbiIsIGkpOworI2VuZGlmCisKKwkvKiBTdG9yZSB0aGUgbnVtYmVyIG9mIGNoaXBzIGFuZCBjYWxjIHRvdGFsIHNpemUgZm9yIG10ZCAqLworCWNoaXAtPm51bWNoaXBzID0gaTsKKwltdGQtPnNpemUgPSBpICogY2hpcC0+Y2hpcHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIG5hbmRfc2Nhbl90YWlsIC0gW05BTkQgSW50ZXJmYWNlXSBTY2FuIGZvciB0aGUgTkFORCBkZXZpY2UKKyAqIEBtdGQ6CSAgICBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgaXMgdGhlIHNlY29uZCBwaGFzZSBvZiB0aGUgbm9ybWFsIG5hbmRfc2NhbigpIGZ1bmN0aW9uLiBJdAorICogZmlsbHMgb3V0IGFsbCB0aGUgdW5pbml0aWFsaXplZCBmdW5jdGlvbiBwb2ludGVycyB3aXRoIHRoZSBkZWZhdWx0cworICogYW5kIHNjYW5zIGZvciBhIGJhZCBibG9jayB0YWJsZSBpZiBhcHByb3ByaWF0ZS4KKyAqLworaW50IG5hbmRfc2Nhbl90YWlsKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCWludCBpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwlpZiAoIShjaGlwLT5vcHRpb25zICYgTkFORF9PV05fQlVGRkVSUykpCisJCWNoaXAtPmJ1ZmZlcnMgPSBrbWFsbG9jKHNpemVvZigqY2hpcC0+YnVmZmVycyksIEdGUF9LRVJORUwpOworCWlmICghY2hpcC0+YnVmZmVycykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTZXQgdGhlIGludGVybmFsIG9vYiBidWZmZXIgbG9jYXRpb24sIGp1c3QgYWZ0ZXIgdGhlIHBhZ2UgZGF0YSAqLworCWNoaXAtPm9vYl9wb2kgPSBjaGlwLT5idWZmZXJzLT5kYXRhYnVmICsgbXRkLT53cml0ZXNpemU7CisKKwkvKgorCSAqIElmIG5vIGRlZmF1bHQgcGxhY2VtZW50IHNjaGVtZSBpcyBnaXZlbiwgc2VsZWN0IGFuIGFwcHJvcHJpYXRlIG9uZQorCSAqLworCWlmICghY2hpcC0+ZWNjLmxheW91dCAmJiAoY2hpcC0+ZWNjLm1vZGUgIT0gTkFORF9FQ0NfU09GVF9CQ0gpKSB7CisJCXN3aXRjaCAobXRkLT5vb2JzaXplKSB7CisJCWNhc2UgODoKKwkJCWNoaXAtPmVjYy5sYXlvdXQgPSAmbmFuZF9vb2JfODsKKwkJCWJyZWFrOworCQljYXNlIDE2OgorCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZuYW5kX29vYl8xNjsKKwkJCWJyZWFrOworCQljYXNlIDY0OgorCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZuYW5kX29vYl82NDsKKwkJCWJyZWFrOworCQljYXNlIDEyODoKKwkJCWNoaXAtPmVjYy5sYXlvdXQgPSAmbmFuZF9vb2JfMTI4OworCQkJYnJlYWs7CisJCWNhc2UgMjI0OgorCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZuYW5kX29vYl8xMjg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIG9vYiBzY2hlbWUgZGVmaW5lZCBmb3IgIgorCQkJICAgICAgICJvb2JzaXplICVkXG4iLCBtdGQtPm9vYnNpemUpOworCQl9CisJfQorCisJaWYgKCFjaGlwLT53cml0ZV9wYWdlKQorCQljaGlwLT53cml0ZV9wYWdlID0gbmFuZF93cml0ZV9wYWdlOworCisJLyoKKwkgKiBjaGVjayBFQ0MgbW9kZSwgZGVmYXVsdCB0byBzb2Z0d2FyZSBpZiAzYnl0ZS81MTJieXRlIGhhcmR3YXJlIEVDQyBpcworCSAqIHNlbGVjdGVkIGFuZCB3ZSBoYXZlIDI1NiBieXRlIHBhZ2VzaXplIGZhbGxiYWNrIHRvIHNvZnR3YXJlIEVDQworCSAqLworCisJc3dpdGNoIChjaGlwLT5lY2MubW9kZSkgeworCWNhc2UgTkFORF9FQ0NfSFdfT09CX0ZJUlNUOgorCQkvKiBTaW1pbGFyIHRvIE5BTkRfRUNDX0hXLCBidXQgYSBzZXBhcmF0ZSByZWFkX3BhZ2UgaGFuZGxlICovCisJCWlmICghY2hpcC0+ZWNjLmNhbGN1bGF0ZSB8fCAhY2hpcC0+ZWNjLmNvcnJlY3QgfHwKKwkJICAgICAhY2hpcC0+ZWNjLmh3Y3RsKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBFQ0MgZnVuY3Rpb25zIHN1cHBsaWVkOyAiCisJCQkgICAgICAgIkhhcmR3YXJlIEVDQyBub3QgcG9zc2libGVcbiIpOworCQkJQlVHKCk7CisJCX0KKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9wYWdlKQorCQkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IG5hbmRfcmVhZF9wYWdlX2h3ZWNjX29vYl9maXJzdDsKKworCWNhc2UgTkFORF9FQ0NfSFc6CisJCS8qIFVzZSBzdGFuZGFyZCBod2VjYyByZWFkIHBhZ2UgZnVuY3Rpb24gPyAqLworCQlpZiAoIWNoaXAtPmVjYy5yZWFkX3BhZ2UpCisJCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2VfaHdlY2M7CisJCWlmICghY2hpcC0+ZWNjLndyaXRlX3BhZ2UpCisJCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9od2VjYzsKKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9wYWdlX3JhdykKKwkJCWNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gbmFuZF9yZWFkX3BhZ2VfcmF3OworCQlpZiAoIWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdykKKwkJCWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdyA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CisJCWlmICghY2hpcC0+ZWNjLnJlYWRfb29iKQorCQkJY2hpcC0+ZWNjLnJlYWRfb29iID0gbmFuZF9yZWFkX29vYl9zdGQ7CisJCWlmICghY2hpcC0+ZWNjLndyaXRlX29vYikKKwkJCWNoaXAtPmVjYy53cml0ZV9vb2IgPSBuYW5kX3dyaXRlX29vYl9zdGQ7CisKKwljYXNlIE5BTkRfRUNDX0hXX1NZTkRST01FOgorCQlpZiAoKCFjaGlwLT5lY2MuY2FsY3VsYXRlIHx8ICFjaGlwLT5lY2MuY29ycmVjdCB8fAorCQkgICAgICFjaGlwLT5lY2MuaHdjdGwpICYmCisJCSAgICAoIWNoaXAtPmVjYy5yZWFkX3BhZ2UgfHwKKwkJICAgICBjaGlwLT5lY2MucmVhZF9wYWdlID09IG5hbmRfcmVhZF9wYWdlX2h3ZWNjIHx8CisJCSAgICAgIWNoaXAtPmVjYy53cml0ZV9wYWdlIHx8CisJCSAgICAgY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPT0gbmFuZF93cml0ZV9wYWdlX2h3ZWNjKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gRUNDIGZ1bmN0aW9ucyBzdXBwbGllZDsgIgorCQkJICAgICAgICJIYXJkd2FyZSBFQ0Mgbm90IHBvc3NpYmxlXG4iKTsKKwkJCUJVRygpOworCQl9CisJCS8qIFVzZSBzdGFuZGFyZCBzeW5kcm9tZSByZWFkL3dyaXRlIHBhZ2UgZnVuY3Rpb24gPyAqLworCQlpZiAoIWNoaXAtPmVjYy5yZWFkX3BhZ2UpCisJCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2Vfc3luZHJvbWU7CisJCWlmICghY2hpcC0+ZWNjLndyaXRlX3BhZ2UpCisJCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9zeW5kcm9tZTsKKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9wYWdlX3JhdykKKwkJCWNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gbmFuZF9yZWFkX3BhZ2VfcmF3X3N5bmRyb21lOworCQlpZiAoIWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdykKKwkJCWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdyA9IG5hbmRfd3JpdGVfcGFnZV9yYXdfc3luZHJvbWU7CisJCWlmICghY2hpcC0+ZWNjLnJlYWRfb29iKQorCQkJY2hpcC0+ZWNjLnJlYWRfb29iID0gbmFuZF9yZWFkX29vYl9zeW5kcm9tZTsKKwkJaWYgKCFjaGlwLT5lY2Mud3JpdGVfb29iKQorCQkJY2hpcC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N5bmRyb21lOworCisJCWlmIChtdGQtPndyaXRlc2l6ZSA+PSBjaGlwLT5lY2Muc2l6ZSkKKwkJCWJyZWFrOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlZCBieXRlIEhXIEVDQyBub3QgcG9zc2libGUgb24gIgorCQkgICAgICAgIiVkIGJ5dGUgcGFnZSBzaXplLCBmYWxsYmFjayB0byBTVyBFQ0NcbiIsCisJCSAgICAgICBjaGlwLT5lY2Muc2l6ZSwgbXRkLT53cml0ZXNpemUpOworCQljaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwljYXNlIE5BTkRfRUNDX1NPRlQ6CisJCWNoaXAtPmVjYy5jYWxjdWxhdGUgPSBuYW5kX2NhbGN1bGF0ZV9lY2M7CisJCWNoaXAtPmVjYy5jb3JyZWN0ID0gbmFuZF9jb3JyZWN0X2RhdGE7CisJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBuYW5kX3JlYWRfcGFnZV9zd2VjYzsKKwkJY2hpcC0+ZWNjLnJlYWRfc3VicGFnZSA9IG5hbmRfcmVhZF9zdWJwYWdlOworCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9zd2VjYzsKKwkJY2hpcC0+ZWNjLnJlYWRfcGFnZV9yYXcgPSBuYW5kX3JlYWRfcGFnZV9yYXc7CisJCWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdyA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CisJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3RkOworCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOworCQlpZiAoIWNoaXAtPmVjYy5zaXplKQorCQkJY2hpcC0+ZWNjLnNpemUgPSAyNTY7CisJCWNoaXAtPmVjYy5ieXRlcyA9IDM7CisJCWJyZWFrOworI2lmIGRlZmluZWQgQ09ORklHX0JDSAorCWNhc2UgTkFORF9FQ0NfU09GVF9CQ0g6CisJCWlmICghbXRkX25hbmRfaGFzX2JjaCgpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDT05GSUdfTVREX0VDQ19CQ0ggbm90IGVuYWJsZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IG5hbmRfYmNoX2NhbGN1bGF0ZV9lY2M7CisJCWNoaXAtPmVjYy5jb3JyZWN0ID0gbmFuZF9iY2hfY29ycmVjdF9kYXRhOworCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2Vfc3dlY2M7CisJCWNoaXAtPmVjYy5yZWFkX3N1YnBhZ2UgPSBuYW5kX3JlYWRfc3VicGFnZTsKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSBuYW5kX3dyaXRlX3BhZ2Vfc3dlY2M7CisJCWNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gbmFuZF9yZWFkX3BhZ2VfcmF3OworCQljaGlwLT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBuYW5kX3dyaXRlX3BhZ2VfcmF3OworCQljaGlwLT5lY2MucmVhZF9vb2IgPSBuYW5kX3JlYWRfb29iX3N0ZDsKKwkJY2hpcC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N0ZDsKKwkJLyoKKwkJICogQm9hcmQgZHJpdmVyIHNob3VsZCBzdXBwbHkgZWNjLnNpemUgYW5kIGVjYy5ieXRlcyB2YWx1ZXMgdG8KKwkJICogc2VsZWN0IGhvdyBtYW55IGJpdHMgYXJlIGNvcnJlY3RhYmxlOyBzZWUgbmFuZF9iY2hfaW5pdCgpCisJCSAqIGZvciBkZXRhaWxzLgorCQkgKiBPdGhlcndpc2UsIGRlZmF1bHQgdG8gNCBiaXRzIGZvciBsYXJnZSBwYWdlIGRldmljZXMKKwkJICovCisJCWlmICghY2hpcC0+ZWNjLnNpemUgJiYgKG10ZC0+b29ic2l6ZSA+PSA2NCkpIHsKKwkJCWNoaXAtPmVjYy5zaXplID0gNTEyOworCQkJY2hpcC0+ZWNjLmJ5dGVzID0gNzsKKwkJfQorCQljaGlwLT5lY2MucHJpdiA9IG5hbmRfYmNoX2luaXQobXRkLAorCQkJCQkgICAgICAgY2hpcC0+ZWNjLnNpemUsCisJCQkJCSAgICAgICBjaGlwLT5lY2MuYnl0ZXMsCisJCQkJCSAgICAgICAmY2hpcC0+ZWNjLmxheW91dCk7CisJCWlmICghY2hpcC0+ZWNjLnByaXYpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJCQ0ggRUNDIGluaXRpYWxpemF0aW9uIGZhaWxlZCFcbiIpOworCisJCWJyZWFrOworI2VuZGlmCisKKwljYXNlIE5BTkRfRUNDX05PTkU6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5BTkRfRUNDX05PTkUgc2VsZWN0ZWQgYnkgYm9hcmQgZHJpdmVyLiAiCisJCSAgICAgICAiVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgISFcbiIpOworCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2VfcmF3OworCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CisJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3RkOworCQljaGlwLT5lY2MucmVhZF9wYWdlX3JhdyA9IG5hbmRfcmVhZF9wYWdlX3JhdzsKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2VfcmF3ID0gbmFuZF93cml0ZV9wYWdlX3JhdzsKKwkJY2hpcC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N0ZDsKKwkJY2hpcC0+ZWNjLnNpemUgPSBtdGQtPndyaXRlc2l6ZTsKKwkJY2hpcC0+ZWNjLmJ5dGVzID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIE5BTkRfRUNDX01PREUgJWRcbiIsCisJCSAgICAgICBjaGlwLT5lY2MubW9kZSk7CisJCUJVRygpOworCX0KKworCS8qCisJICogVGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgZm9yIGEgY2xpZW50IHRvIHBsYWNlIGRhdGEgaW50bworCSAqIHRoZSBvdXQgb2YgYmFuZCBhcmVhCisJICovCisJY2hpcC0+ZWNjLmxheW91dC0+b29iYXZhaWwgPSAwOworCWZvciAoaSA9IDA7IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmZyZWVbaV0ubGVuZ3RoCisJCQkmJiBpIDwgQVJSQVlfU0laRShjaGlwLT5lY2MubGF5b3V0LT5vb2JmcmVlKTsgaSsrKQorCQljaGlwLT5lY2MubGF5b3V0LT5vb2JhdmFpbCArPQorCQkJY2hpcC0+ZWNjLmxheW91dC0+b29iZnJlZVtpXS5sZW5ndGg7CisJbXRkLT5vb2JhdmFpbCA9IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmF2YWlsOworCisJLyoKKwkgKiBTZXQgdGhlIG51bWJlciBvZiByZWFkIC8gd3JpdGUgc3RlcHMgZm9yIG9uZSBwYWdlIGRlcGVuZGluZyBvbiBFQ0MKKwkgKiBtb2RlCisJICovCisJY2hpcC0+ZWNjLnN0ZXBzID0gbXRkLT53cml0ZXNpemUgLyBjaGlwLT5lY2Muc2l6ZTsKKwlpZiAoY2hpcC0+ZWNjLnN0ZXBzICogY2hpcC0+ZWNjLnNpemUgIT0gbXRkLT53cml0ZXNpemUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCBlY2MgcGFyYW1ldGVyc1xuIik7CisJCUJVRygpOworCX0KKwljaGlwLT5lY2MudG90YWwgPSBjaGlwLT5lY2Muc3RlcHMgKiBjaGlwLT5lY2MuYnl0ZXM7CisKKwkvKgorCSAqIEFsbG93IHN1YnBhZ2Ugd3JpdGVzIHVwIHRvIGVjYy5zdGVwcy4gTm90IHBvc3NpYmxlIGZvciBNTEMKKwkgKiBGTEFTSC4KKwkgKi8KKwlpZiAoIShjaGlwLT5vcHRpb25zICYgTkFORF9OT19TVUJQQUdFX1dSSVRFKSAmJgorCSAgICAhKGNoaXAtPmNlbGxpbmZvICYgTkFORF9DSV9DRUxMVFlQRV9NU0spKSB7CisJCXN3aXRjaCAoY2hpcC0+ZWNjLnN0ZXBzKSB7CisJCWNhc2UgMjoKKwkJCW10ZC0+c3VicGFnZV9zZnQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJY2FzZSA4OgorCQljYXNlIDE2OgorCQkJbXRkLT5zdWJwYWdlX3NmdCA9IDI7CisJCQlicmVhazsKKwkJfQorCX0KKwljaGlwLT5zdWJwYWdlc2l6ZSA9IG10ZC0+d3JpdGVzaXplID4+IG10ZC0+c3VicGFnZV9zZnQ7CisKKwkvKiBJbml0aWFsaXplIHN0YXRlICovCisJY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKKworCS8qIERlLXNlbGVjdCB0aGUgZGV2aWNlICovCisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisKKwkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlYnVmZmVyIHJlZmVyZW5jZSAqLworCWNoaXAtPnBhZ2VidWYgPSAtMTsKKworCS8qIEZpbGwgaW4gcmVtYWluaW5nIE1URCBkcml2ZXIgZGF0YSAqLworCW10ZC0+dHlwZSA9IE1URF9OQU5ERkxBU0g7CisJbXRkLT5mbGFncyA9IChjaGlwLT5vcHRpb25zICYgTkFORF9ST00pID8gTVREX0NBUF9ST00gOgorCQkJCQkJTVREX0NBUF9OQU5ERkxBU0g7CisJbXRkLT5lcmFzZSA9IG5hbmRfZXJhc2U7CisJbXRkLT5wb2ludCA9IE5VTEw7CisJbXRkLT51bnBvaW50ID0gTlVMTDsKKwltdGQtPnJlYWQgPSBuYW5kX3JlYWQ7CisJbXRkLT53cml0ZSA9IG5hbmRfd3JpdGU7CisJbXRkLT5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2I7CisJbXRkLT53cml0ZV9vb2IgPSBuYW5kX3dyaXRlX29vYjsKKwltdGQtPnN5bmMgPSBuYW5kX3N5bmM7CisJbXRkLT5sb2NrID0gTlVMTDsKKwltdGQtPnVubG9jayA9IE5VTEw7CisJbXRkLT5ibG9ja19pc2JhZCA9IG5hbmRfYmxvY2tfaXNiYWQ7CisJbXRkLT5ibG9ja19tYXJrYmFkID0gbmFuZF9ibG9ja19tYXJrYmFkOworCisJLyogcHJvcGFnYXRlIGVjYy5sYXlvdXQgdG8gbXRkX2luZm8gKi8KKwltdGQtPmVjY2xheW91dCA9IGNoaXAtPmVjYy5sYXlvdXQ7CisKKwkvKiBDaGVjaywgaWYgd2Ugc2hvdWxkIHNraXAgdGhlIGJhZCBibG9jayB0YWJsZSBzY2FuICovCisJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1NLSVBfQkJUU0NBTikKKwkJY2hpcC0+b3B0aW9ucyB8PSBOQU5EX0JCVF9TQ0FOTkVEOworCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjI1Nyw0MDkgKzMxOTMsNDggQEAKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAbWF4Y2hpcHM6CU51bWJlciBvZiBjaGlwcyB0byBzY2FuIGZvcgogICoKLSAqIFRoaXMgZmlsbHMgb3V0IGFsbCB0aGUgbm90IGluaXRpYWxpemVkIGZ1bmN0aW9uIHBvaW50ZXJzCisgKiBUaGlzIGZpbGxzIG91dCBhbGwgdGhlIHVuaW5pdGlhbGl6ZWQgZnVuY3Rpb24gcG9pbnRlcnMKICAqIHdpdGggdGhlIGRlZmF1bHRzLgogICogVGhlIGZsYXNoIElEIGlzIHJlYWQgYW5kIHRoZSBtdGQvY2hpcCBzdHJ1Y3R1cmVzIGFyZQotICogZmlsbGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIHZhbHVlcy4gQnVmZmVycyBhcmUgYWxsb2NhdGVkIGlmCi0gKiB0aGV5IGFyZSBub3QgcHJvdmlkZWQgYnkgdGhlIGJvYXJkIGRyaXZlcgorICogZmlsbGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAqIFRoZSBtdGQtPm93bmVyIGZpZWxkIG11c3QgYmUgc2V0IHRvIHRoZSBtb2R1bGUgb2YgdGhlIGNhbGxlcgogICoKICAqLwotaW50IG5hbmRfc2NhbiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtYXhjaGlwcykKK2ludCBuYW5kX3NjYW4oc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtYXhjaGlwcykKIHsKLQlpbnQgaSwgaiwgbmFuZF9tYWZfaWQsIG5hbmRfZGV2X2lkLCBidXN3OwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW50IHJldDsKIAotCS8qIEdldCBidXN3aWR0aCB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZnVuY3Rpb25zKi8KLQlidXN3ID0gdGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTY7Ci0KLQkvKiBjaGVjayBmb3IgcHJvcGVyIGNoaXBfZGVsYXkgc2V0dXAsIHNldCAyMHVzIGlmIG5vdCAqLwotCWlmICghdGhpcy0+Y2hpcF9kZWxheSkKLQkJdGhpcy0+Y2hpcF9kZWxheSA9IDIwOwotCi0JLyogY2hlY2ssIGlmIGEgdXNlciBzdXBwbGllZCBjb21tYW5kIGZ1bmN0aW9uIGdpdmVuICovCi0JaWYgKHRoaXMtPmNtZGZ1bmMgPT0gTlVMTCkKLQkJdGhpcy0+Y21kZnVuYyA9IG5hbmRfY29tbWFuZDsKLQotCS8qIGNoZWNrLCBpZiBhIHVzZXIgc3VwcGxpZWQgd2FpdCBmdW5jdGlvbiBnaXZlbiAqLwotCWlmICh0aGlzLT53YWl0ZnVuYyA9PSBOVUxMKQotCQl0aGlzLT53YWl0ZnVuYyA9IG5hbmRfd2FpdDsKLQotCWlmICghdGhpcy0+c2VsZWN0X2NoaXApCi0JCXRoaXMtPnNlbGVjdF9jaGlwID0gbmFuZF9zZWxlY3RfY2hpcDsKLQlpZiAoIXRoaXMtPndyaXRlX2J5dGUpCi0JCXRoaXMtPndyaXRlX2J5dGUgPSBidXN3ID8gbmFuZF93cml0ZV9ieXRlMTYgOiBuYW5kX3dyaXRlX2J5dGU7Ci0JaWYgKCF0aGlzLT5yZWFkX2J5dGUpCi0JCXRoaXMtPnJlYWRfYnl0ZSA9IGJ1c3cgPyBuYW5kX3JlYWRfYnl0ZTE2IDogbmFuZF9yZWFkX2J5dGU7Ci0JaWYgKCF0aGlzLT53cml0ZV93b3JkKQotCQl0aGlzLT53cml0ZV93b3JkID0gbmFuZF93cml0ZV93b3JkOwotCWlmICghdGhpcy0+cmVhZF93b3JkKQotCQl0aGlzLT5yZWFkX3dvcmQgPSBuYW5kX3JlYWRfd29yZDsKLQlpZiAoIXRoaXMtPmJsb2NrX2JhZCkKLQkJdGhpcy0+YmxvY2tfYmFkID0gbmFuZF9ibG9ja19iYWQ7Ci0JaWYgKCF0aGlzLT5ibG9ja19tYXJrYmFkKQotCQl0aGlzLT5ibG9ja19tYXJrYmFkID0gbmFuZF9kZWZhdWx0X2Jsb2NrX21hcmtiYWQ7Ci0JaWYgKCF0aGlzLT53cml0ZV9idWYpCi0JCXRoaXMtPndyaXRlX2J1ZiA9IGJ1c3cgPyBuYW5kX3dyaXRlX2J1ZjE2IDogbmFuZF93cml0ZV9idWY7Ci0JaWYgKCF0aGlzLT5yZWFkX2J1ZikKLQkJdGhpcy0+cmVhZF9idWYgPSBidXN3ID8gbmFuZF9yZWFkX2J1ZjE2IDogbmFuZF9yZWFkX2J1ZjsKLQlpZiAoIXRoaXMtPnZlcmlmeV9idWYpCi0JCXRoaXMtPnZlcmlmeV9idWYgPSBidXN3ID8gbmFuZF92ZXJpZnlfYnVmMTYgOiBuYW5kX3ZlcmlmeV9idWY7Ci0JaWYgKCF0aGlzLT5zY2FuX2JidCkKLQkJdGhpcy0+c2Nhbl9iYnQgPSBuYW5kX2RlZmF1bHRfYmJ0OwotCi0JLyogU2VsZWN0IHRoZSBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIDApOwotCi0JLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwotCi0JLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgKi8KLQluYW5kX21hZl9pZCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCW5hbmRfZGV2X2lkID0gdGhpcy0+cmVhZF9ieXRlKG10ZCk7Ci0KLQkvKiBQcmludCBhbmQgc3RvcmUgZmxhc2ggZGV2aWNlIGluZm9ybWF0aW9uICovCi0JZm9yIChpID0gMDsgbmFuZF9mbGFzaF9pZHNbaV0ubmFtZSAhPSBOVUxMOyBpKyspIHsKLQotCQlpZiAobmFuZF9kZXZfaWQgIT0gbmFuZF9mbGFzaF9pZHNbaV0uaWQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIW10ZC0+bmFtZSkgbXRkLT5uYW1lID0gbmFuZF9mbGFzaF9pZHNbaV0ubmFtZTsKLQkJdGhpcy0+Y2hpcHNpemUgPSBuYW5kX2ZsYXNoX2lkc1tpXS5jaGlwc2l6ZSA8PCAyMDsKLQotCQkvKiBOZXcgZGV2aWNlcyBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gYWRkaXRpb25hbCBpZCBieXRlcyAqLwotCQlpZiAoIW5hbmRfZmxhc2hfaWRzW2ldLnBhZ2VzaXplKSB7Ci0JCQlpbnQgZXh0aWQ7Ci0JCQkvKiBUaGUgM3JkIGlkIGJ5dGUgY29udGFpbnMgbm9uIHJlbGV2YW50IGRhdGEgQVRNICovCi0JCQlleHRpZCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCQkJLyogVGhlIDR0aCBpZCBieXRlIGlzIHRoZSBpbXBvcnRhbnQgb25lICovCi0JCQlleHRpZCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCQkJLyogQ2FsYyBwYWdlc2l6ZSAqLwotCQkJbXRkLT5vb2JibG9jayA9IDEwMjQgPDwgKGV4dGlkICYgMHgzKTsKLQkJCWV4dGlkID4+PSAyOwotCQkJLyogQ2FsYyBvb2JzaXplICovCi0JCQltdGQtPm9vYnNpemUgPSAoOCA8PCAoZXh0aWQgJiAweDAzKSkgKiAobXRkLT5vb2JibG9jayAvIDUxMik7Ci0JCQlleHRpZCA+Pj0gMjsKLQkJCS8qIENhbGMgYmxvY2tzaXplLiBCbG9ja3NpemUgaXMgbXVsdGlwbGVzIG9mIDY0S2lCICovCi0JCQltdGQtPmVyYXNlc2l6ZSA9ICg2NCAqIDEwMjQpICA8PCAoZXh0aWQgJiAweDAzKTsKLQkJCWV4dGlkID4+PSAyOwotCQkJLyogR2V0IGJ1c3dpZHRoIGluZm9ybWF0aW9uICovCi0JCQlidXN3ID0gKGV4dGlkICYgMHgwMSkgPyBOQU5EX0JVU1dJRFRIXzE2IDogMDsKLQotCQl9IGVsc2UgewotCQkJLyogT2xkIGRldmljZXMgaGF2ZSB0aGlzIGRhdGEgaGFyZGNvZGVkIGluIHRoZQotCQkJICogZGV2aWNlIGlkIHRhYmxlICovCi0JCQltdGQtPmVyYXNlc2l6ZSA9IG5hbmRfZmxhc2hfaWRzW2ldLmVyYXNlc2l6ZTsKLQkJCW10ZC0+b29iYmxvY2sgPSBuYW5kX2ZsYXNoX2lkc1tpXS5wYWdlc2l6ZTsKLQkJCW10ZC0+b29ic2l6ZSA9IG10ZC0+b29iYmxvY2sgLyAzMjsKLQkJCWJ1c3cgPSBuYW5kX2ZsYXNoX2lkc1tpXS5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNjsKLQkJfQotCi0JCS8qIENoZWNrLCBpZiBidXN3aWR0aCBpcyBjb3JyZWN0LiBIYXJkd2FyZSBkcml2ZXJzIHNob3VsZCBzZXQKLQkJICogdGhpcyBjb3JyZWN0ICEgKi8KLQkJaWYgKGJ1c3cgIT0gKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSkgewotCQkJcHJpbnRrIChLRVJOX0lORk8gIk5BTkQgZGV2aWNlOiBNYW51ZmFjdHVyZXIgSUQ6IgotCQkJCSIgMHglMDJ4LCBDaGlwIElEOiAweCUwMnggKCVzICVzKVxuIiwgbmFuZF9tYWZfaWQsIG5hbmRfZGV2X2lkLAotCQkJCW5hbmRfbWFudWZfaWRzW2ldLm5hbWUgLCBtdGQtPm5hbWUpOwotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCQkiTkFORCBidXMgd2lkdGggJWQgaW5zdGVhZCAlZCBiaXRcbiIsCi0JCQkJCSh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgPyAxNiA6IDgsCi0JCQkJCWJ1c3cgPyAxNiA6IDgpOwotCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCS8qIENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBzaGlmdCBmcm9tIHRoZSBwYWdlIHNpemUgKi8KLQkJdGhpcy0+cGFnZV9zaGlmdCA9IGZmcyhtdGQtPm9vYmJsb2NrKSAtIDE7Ci0JCXRoaXMtPmJidF9lcmFzZV9zaGlmdCA9IHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQgPSBmZnMobXRkLT5lcmFzZXNpemUpIC0gMTsKLQkJdGhpcy0+Y2hpcF9zaGlmdCA9IGZmcyh0aGlzLT5jaGlwc2l6ZSkgLSAxOwotCi0JCS8qIFNldCB0aGUgYmFkIGJsb2NrIHBvc2l0aW9uICovCi0JCXRoaXMtPmJhZGJsb2NrcG9zID0gbXRkLT5vb2JibG9jayA+IDUxMiA/Ci0JCQlOQU5EX0xBUkdFX0JBREJMT0NLX1BPUyA6IE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TOwotCi0JCS8qIEdldCBjaGlwIG9wdGlvbnMsIHByZXNlcnZlIG5vbiBjaGlwIGJhc2VkIG9wdGlvbnMgKi8KLQkJdGhpcy0+b3B0aW9ucyAmPSB+TkFORF9DSElQT1BUSU9OU19NU0s7Ci0JCXRoaXMtPm9wdGlvbnMgfD0gbmFuZF9mbGFzaF9pZHNbaV0ub3B0aW9ucyAmIE5BTkRfQ0hJUE9QVElPTlNfTVNLOwotCQkvKiBTZXQgdGhpcyBhcyBhIGRlZmF1bHQuIEJvYXJkIGRyaXZlcnMgY2FuIG92ZXJyaWRlIGl0LCBpZiBuZWNjZWNhcnkgKi8KLQkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX05PX0FVVE9JTkNSOwotCQkvKiBDaGVjayBpZiB0aGlzIGlzIGEgbm90IGEgc2Ftc3VuZyBkZXZpY2UuIERvIG5vdCBjbGVhciB0aGUgb3B0aW9ucwotCQkgKiBmb3IgY2hpcHMgd2hpY2ggYXJlIG5vdCBoYXZpbmcgYW4gZXh0ZW5kZWQgaWQuCi0JCSAqLwotCQlpZiAobmFuZF9tYWZfaWQgIT0gTkFORF9NRlJfU0FNU1VORyAmJiAhbmFuZF9mbGFzaF9pZHNbaV0ucGFnZXNpemUpCi0JCQl0aGlzLT5vcHRpb25zICY9IH5OQU5EX1NBTVNVTkdfTFBfT1BUSU9OUzsKLQotCQkvKiBDaGVjayBmb3IgQU5EIGNoaXBzIHdpdGggNCBwYWdlIHBsYW5lcyAqLwotCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfNFBBR0VfQVJSQVkpCi0JCQl0aGlzLT5lcmFzZV9jbWQgPSBtdWx0aV9lcmFzZV9jbWQ7Ci0JCWVsc2UKLQkJCXRoaXMtPmVyYXNlX2NtZCA9IHNpbmdsZV9lcmFzZV9jbWQ7Ci0KLQkJLyogRG8gbm90IHJlcGxhY2UgdXNlciBzdXBwbGllZCBjb21tYW5kIGZ1bmN0aW9uICEgKi8KLQkJaWYgKG10ZC0+b29iYmxvY2sgPiA1MTIgJiYgdGhpcy0+Y21kZnVuYyA9PSBuYW5kX2NvbW1hbmQpCi0JCQl0aGlzLT5jbWRmdW5jID0gbmFuZF9jb21tYW5kX2xwOwotCi0JCS8qIFRyeSB0byBpZGVudGlmeSBtYW51ZmFjdHVyZXIgKi8KLQkJZm9yIChqID0gMDsgbmFuZF9tYW51Zl9pZHNbal0uaWQgIT0gMHgwOyBqKyspIHsKLQkJCWlmIChuYW5kX21hbnVmX2lkc1tqXS5pZCA9PSBuYW5kX21hZl9pZCkKLQkJCQlicmVhazsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlpZiAoIW5hbmRfZmxhc2hfaWRzW2ldLm5hbWUpIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIk5vIE5BTkQgZGV2aWNlIGZvdW5kISEhXG4iKTsKLQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7Ci0JCXJldHVybiAxOwotCX0KLQotCWZvciAoaT0xOyBpIDwgbWF4Y2hpcHM7IGkrKykgewotCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGkpOwotCi0JCS8qIFNlbmQgdGhlIGNvbW1hbmQgZm9yIHJlYWRpbmcgZGV2aWNlIElEICovCi0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRElELCAweDAwLCAtMSk7Ci0KLQkJLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgKi8KLQkJaWYgKG5hbmRfbWFmX2lkICE9IHRoaXMtPnJlYWRfYnl0ZShtdGQpIHx8Ci0JCSAgICBuYW5kX2Rldl9pZCAhPSB0aGlzLT5yZWFkX2J5dGUobXRkKSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoaSA+IDEpCi0JCXByaW50ayhLRVJOX0lORk8gIiVkIE5BTkQgY2hpcHMgZGV0ZWN0ZWRcbiIsIGkpOwotCi0JLyogQWxsb2NhdGUgYnVmZmVycywgaWYgbmVjY2VjYXJ5ICovCi0JaWYgKCF0aGlzLT5vb2JfYnVmKSB7Ci0JCXNpemVfdCBsZW47Ci0JCWxlbiA9IG10ZC0+b29ic2l6ZSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwotCQl0aGlzLT5vb2JfYnVmID0ga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aGlzLT5vb2JfYnVmKSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3NjYW4oKTogQ2Fubm90IGFsbG9jYXRlIG9vYl9idWZcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX09PQkJVRl9BTExPQzsKLQl9Ci0KLQlpZiAoIXRoaXMtPmRhdGFfYnVmKSB7Ci0JCXNpemVfdCBsZW47Ci0JCWxlbiA9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7Ci0JCXRoaXMtPmRhdGFfYnVmID0ga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aGlzLT5kYXRhX2J1ZikgewotCQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX09PQkJVRl9BTExPQykKLQkJCQlrZnJlZSAodGhpcy0+b29iX2J1Zik7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3NjYW4oKTogQ2Fubm90IGFsbG9jYXRlIGRhdGFfYnVmXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCXRoaXMtPm9wdGlvbnMgfD0gTkFORF9EQVRBQlVGX0FMTE9DOwotCX0KLQotCS8qIFN0b3JlIHRoZSBudW1iZXIgb2YgY2hpcHMgYW5kIGNhbGMgdG90YWwgc2l6ZSBmb3IgbXRkICovCi0JdGhpcy0+bnVtY2hpcHMgPSBpOwotCW10ZC0+c2l6ZSA9IGkgKiB0aGlzLT5jaGlwc2l6ZTsKLQkvKiBDb252ZXJ0IGNoaXBzaXplIHRvIG51bWJlciBvZiBwYWdlcyBwZXIgY2hpcCAtMS4gKi8KLQl0aGlzLT5wYWdlbWFzayA9ICh0aGlzLT5jaGlwc2l6ZSA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAtIDE7Ci0JLyogUHJlc2V0IHRoZSBpbnRlcm5hbCBvb2IgYnVmZmVyICovCi0JbWVtc2V0KHRoaXMtPm9vYl9idWYsIDB4ZmYsIG10ZC0+b29ic2l6ZSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKTsKLQotCS8qIElmIG5vIGRlZmF1bHQgcGxhY2VtZW50IHNjaGVtZSBpcyBnaXZlbiwgc2VsZWN0IGFuCi0JICogYXBwcm9wcmlhdGUgb25lICovCi0JaWYgKCF0aGlzLT5hdXRvb29iKSB7Ci0JCS8qIFNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZGVmYXVsdCBvb2IgcGxhY2VtZW50IHNjaGVtZSBmb3IKLQkJICogcGxhY2VtZW50IGFnbm9zdGljIGZpbGVzeXN0ZW1zICovCi0JCXN3aXRjaCAobXRkLT5vb2JzaXplKSB7Ci0JCWNhc2UgODoKLQkJCXRoaXMtPmF1dG9vb2IgPSAmbmFuZF9vb2JfODsKLQkJCWJyZWFrOwotCQljYXNlIDE2OgotCQkJdGhpcy0+YXV0b29vYiA9ICZuYW5kX29vYl8xNjsKLQkJCWJyZWFrOwotCQljYXNlIDY0OgotCQkJdGhpcy0+YXV0b29vYiA9ICZuYW5kX29vYl82NDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIk5vIG9vYiBzY2hlbWUgZGVmaW5lZCBmb3Igb29ic2l6ZSAlZFxuIiwKLQkJCQltdGQtPm9vYnNpemUpOwotLyoJCQlCVUcoKTsgKi8KLQkJfQotCX0KLQotCS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGZvciB0aGUgZmlsZXN5c3RlbSB0byBwbGFjZSBmcyBkZXBlbmRlbmQKLQkgKiBvb2IgZGF0YSAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgewotCQltdGQtPm9vYmF2YWlsID0gbXRkLT5vb2JzaXplIC0gKHRoaXMtPmF1dG9vb2ItPmVjY2J5dGVzICsgMik7Ci0JCWlmICh0aGlzLT5hdXRvb29iLT5lY2NieXRlcyAmIDB4MDEpCi0JCQltdGQtPm9vYmF2YWlsLS07Ci0JfSBlbHNlCi0JCW10ZC0+b29iYXZhaWwgPSBtdGQtPm9vYnNpemUgLSAodGhpcy0+YXV0b29vYi0+ZWNjYnl0ZXMgKyAxKTsKLQotCS8qCi0JICogY2hlY2sgRUNDIG1vZGUsIGRlZmF1bHQgdG8gc29mdHdhcmUKLQkgKiBpZiAzYnl0ZS81MTJieXRlIGhhcmR3YXJlIEVDQyBpcyBzZWxlY3RlZCBhbmQgd2UgaGF2ZSAyNTYgYnl0ZSBwYWdlc2l6ZQotCSAqIGZhbGxiYWNrIHRvIHNvZnR3YXJlIEVDQwotCSovCi0JdGhpcy0+ZWNjc2l6ZSA9IDI1NjsJLyogc2V0IGRlZmF1bHQgZWNjc2l6ZSAqLwotCXRoaXMtPmVjY2J5dGVzID0gMzsKLQotCXN3aXRjaCAodGhpcy0+ZWNjbW9kZSkgewotCWNhc2UgTkFORF9FQ0NfSFcxMl8yMDQ4OgotCQlpZiAobXRkLT5vb2JibG9jayA8IDIwNDgpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIjIwNDggYnl0ZSBIVyBFQ0Mgbm90IHBvc3NpYmxlIG9uICVkIGJ5dGUgcGFnZSBzaXplLCBmYWxsYmFjayB0byBTVyBFQ0NcbiIsCi0JCQkgICAgICAgbXRkLT5vb2JibG9jayk7Ci0JCQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKLQkJCXRoaXMtPmNhbGN1bGF0ZV9lY2MgPSBuYW5kX2NhbGN1bGF0ZV9lY2M7Ci0JCQl0aGlzLT5jb3JyZWN0X2RhdGEgPSBuYW5kX2NvcnJlY3RfZGF0YTsKLQkJfSBlbHNlCi0JCQl0aGlzLT5lY2NzaXplID0gMjA0ODsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfRUNDX0hXM181MTI6Ci0JY2FzZSBOQU5EX0VDQ19IVzZfNTEyOgotCWNhc2UgTkFORF9FQ0NfSFc4XzUxMjoKLQkJaWYgKG10ZC0+b29iYmxvY2sgPT0gMjU2KSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAiNTEyIGJ5dGUgSFcgRUNDIG5vdCBwb3NzaWJsZSBvbiAyNTYgQnl0ZSBwYWdlc2l6ZSwgZmFsbGJhY2sgdG8gU1cgRUNDIFxuIik7Ci0JCQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKLQkJCXRoaXMtPmNhbGN1bGF0ZV9lY2MgPSBuYW5kX2NhbGN1bGF0ZV9lY2M7Ci0JCQl0aGlzLT5jb3JyZWN0X2RhdGEgPSBuYW5kX2NvcnJlY3RfZGF0YTsKLQkJfSBlbHNlCi0JCQl0aGlzLT5lY2NzaXplID0gNTEyOyAvKiBzZXQgZWNjc2l6ZSB0byA1MTIgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfRUNDX0hXM18yNTY6Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0VDQ19OT05FOgotCQlwcmludGsgKEtFUk5fV0FSTklORyAiTkFORF9FQ0NfTk9ORSBzZWxlY3RlZCBieSBib2FyZCBkcml2ZXIuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkICEhXG4iKTsKLQkJdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX05PTkU7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0VDQ19TT0ZUOgotCQl0aGlzLT5jYWxjdWxhdGVfZWNjID0gbmFuZF9jYWxjdWxhdGVfZWNjOwotCQl0aGlzLT5jb3JyZWN0X2RhdGEgPSBuYW5kX2NvcnJlY3RfZGF0YTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwcmludGsgKEtFUk5fV0FSTklORyAiSW52YWxpZCBOQU5EX0VDQ19NT0RFICVkXG4iLCB0aGlzLT5lY2Ntb2RlKTsKLS8qCQlCVUcoKTsgKi8KLQl9Ci0KLQkvKiBDaGVjayBoYXJkd2FyZSBlY2MgZnVuY3Rpb24gYXZhaWxhYmlsaXR5IGFuZCBhZGp1c3QgbnVtYmVyIG9mIGVjYyBieXRlcyBwZXIKLQkgKiBjYWxjdWxhdGlvbiBzdGVwCi0JKi8KLQlzd2l0Y2ggKHRoaXMtPmVjY21vZGUpIHsKLQljYXNlIE5BTkRfRUNDX0hXMTJfMjA0ODoKLQkJdGhpcy0+ZWNjYnl0ZXMgKz0gNDsKLQljYXNlIE5BTkRfRUNDX0hXOF81MTI6Ci0JCXRoaXMtPmVjY2J5dGVzICs9IDI7Ci0JY2FzZSBOQU5EX0VDQ19IVzZfNTEyOgotCQl0aGlzLT5lY2NieXRlcyArPSAzOwotCWNhc2UgTkFORF9FQ0NfSFczXzUxMjoKLQljYXNlIE5BTkRfRUNDX0hXM18yNTY6Ci0JCWlmICh0aGlzLT5jYWxjdWxhdGVfZWNjICYmIHRoaXMtPmNvcnJlY3RfZGF0YSAmJiB0aGlzLT5lbmFibGVfaHdlY2MpCi0JCQlicmVhazsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIk5vIEVDQyBmdW5jdGlvbnMgc3VwcGxpZWQsIEhhcmR3YXJlIEVDQyBub3QgcG9zc2libGVcbiIpOwotLyoJCUJVRygpOwkqLwotCX0KLQotCW10ZC0+ZWNjc2l6ZSA9IHRoaXMtPmVjY3NpemU7Ci0KLQkvKiBTZXQgdGhlIG51bWJlciBvZiByZWFkIC8gd3JpdGUgc3RlcHMgZm9yIG9uZSBwYWdlIHRvIGVuc3VyZSBFQ0MgZ2VuZXJhdGlvbiAqLwotCXN3aXRjaCAodGhpcy0+ZWNjbW9kZSkgewotCWNhc2UgTkFORF9FQ0NfSFcxMl8yMDQ4OgotCQl0aGlzLT5lY2NzdGVwcyA9IG10ZC0+b29iYmxvY2sgLyAyMDQ4OwotCQlicmVhazsKLQljYXNlIE5BTkRfRUNDX0hXM181MTI6Ci0JY2FzZSBOQU5EX0VDQ19IVzZfNTEyOgotCWNhc2UgTkFORF9FQ0NfSFc4XzUxMjoKLQkJdGhpcy0+ZWNjc3RlcHMgPSBtdGQtPm9vYmJsb2NrIC8gNTEyOwotCQlicmVhazsKLQljYXNlIE5BTkRfRUNDX0hXM18yNTY6Ci0JY2FzZSBOQU5EX0VDQ19TT0ZUOgotCQl0aGlzLT5lY2NzdGVwcyA9IG10ZC0+b29iYmxvY2sgLyAyNTY7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0VDQ19OT05FOgotCQl0aGlzLT5lY2NzdGVwcyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotLyogWFhYIFUtQk9PVCBYWFggKi8KLSNpZiAwCi0JLyogSW5pdGlhbGl6ZSBzdGF0ZSwgd2FpdHF1ZXVlIGFuZCBzcGlubG9jayAqLwotCXRoaXMtPnN0YXRlID0gRkxfUkVBRFk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCAoJnRoaXMtPndxKTsKLQlzcGluX2xvY2tfaW5pdCAoJnRoaXMtPmNoaXBfbG9jayk7Ci0jZW5kaWYKLQotCS8qIERlLXNlbGVjdCB0aGUgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7Ci0KLQkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlYnVmZmVyIHJlZmVyZW5jZSAqLwotCXRoaXMtPnBhZ2VidWYgPSAtMTsKLQotCS8qIEZpbGwgaW4gcmVtYWluaW5nIE1URCBkcml2ZXIgZGF0YSAqLwotCW10ZC0+dHlwZSA9IE1URF9OQU5ERkxBU0g7Ci0JbXRkLT5mbGFncyA9IE1URF9DQVBfTkFOREZMQVNIIHwgTVREX0VDQzsKLQltdGQtPmVjY3R5cGUgPSBNVERfRUNDX1NXOwotCW10ZC0+ZXJhc2UgPSBuYW5kX2VyYXNlOwotCW10ZC0+cG9pbnQgPSBOVUxMOwotCW10ZC0+dW5wb2ludCA9IE5VTEw7Ci0JbXRkLT5yZWFkID0gbmFuZF9yZWFkOwotCW10ZC0+d3JpdGUgPSBuYW5kX3dyaXRlOwotCW10ZC0+cmVhZF9lY2MgPSBuYW5kX3JlYWRfZWNjOwotCW10ZC0+d3JpdGVfZWNjID0gbmFuZF93cml0ZV9lY2M7Ci0JbXRkLT5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2I7Ci0JbXRkLT53cml0ZV9vb2IgPSBuYW5kX3dyaXRlX29vYjsKLS8qIFhYWCBVLUJPT1QgWFhYICovCi0jaWYgMAotCW10ZC0+cmVhZHYgPSBOVUxMOwotCW10ZC0+d3JpdGV2ID0gbmFuZF93cml0ZXY7Ci0JbXRkLT53cml0ZXZfZWNjID0gbmFuZF93cml0ZXZfZWNjOwotI2VuZGlmCi0JbXRkLT5zeW5jID0gbmFuZF9zeW5jOwotLyogWFhYIFUtQk9PVCBYWFggKi8KLSNpZiAwCi0JbXRkLT5sb2NrID0gTlVMTDsKLQltdGQtPnVubG9jayA9IE5VTEw7Ci0JbXRkLT5zdXNwZW5kID0gTlVMTDsKLQltdGQtPnJlc3VtZSA9IE5VTEw7Ci0jZW5kaWYKLQltdGQtPmJsb2NrX2lzYmFkID0gbmFuZF9ibG9ja19pc2JhZDsKLQltdGQtPmJsb2NrX21hcmtiYWQgPSBuYW5kX2Jsb2NrX21hcmtiYWQ7Ci0KLQkvKiBhbmQgbWFrZSB0aGUgYXV0b29vYiB0aGUgZGVmYXVsdCBvbmUgKi8KLQltZW1jcHkoJm10ZC0+b29iaW5mbywgdGhpcy0+YXV0b29vYiwgc2l6ZW9mKG10ZC0+b29iaW5mbykpOwotLyogWFhYIFUtQk9PVCBYWFggKi8KLSNpZiAwCi0JbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwotI2VuZGlmCi0JLyogQnVpbGQgYmFkIGJsb2NrIHRhYmxlICovCi0JcmV0dXJuIHRoaXMtPnNjYW5fYmJ0IChtdGQpOworCXJldCA9IG5hbmRfc2Nhbl9pZGVudChtdGQsIG1heGNoaXBzLCBOVUxMKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gbmFuZF9zY2FuX3RhaWwobXRkKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKICAqIG5hbmRfcmVsZWFzZSAtIFtOQU5EIEludGVyZmFjZV0gRnJlZSByZXNvdXJjZXMgaGVsZCBieSB0aGUgTkFORCBkZXZpY2UKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKi8KLXZvaWQgbmFuZF9yZWxlYXNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKKyovCit2b2lkIG5hbmRfcmVsZWFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKyNpZiBkZWZpbmVkIENPTkZJR19CQ0gKKwlpZiAoY2hpcC0+ZWNjLm1vZGUgPT0gTkFORF9FQ0NfU09GVF9CQ0gpCisJCW5hbmRfYmNoX2ZyZWUoKHN0cnVjdCBuYW5kX2JjaF9jb250cm9sICopY2hpcC0+ZWNjLnByaXYpOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAkvKiBEZXJlZ2lzdGVyIHBhcnRpdGlvbnMgKi8KLQlkZWxfbXRkX3BhcnRpdGlvbnMgKG10ZCk7CisJZGVsX210ZF9wYXJ0aXRpb25zKG10ZCk7CiAjZW5kaWYKLQkvKiBEZXJlZ2lzdGVyIHRoZSBkZXZpY2UgKi8KLS8qIFhYWCBVLUJPT1QgWFhYICovCi0jaWYgMAotCWRlbF9tdGRfZGV2aWNlIChtdGQpOwotI2VuZGlmCi0JLyogRnJlZSBiYWQgYmxvY2sgdGFibGUgbWVtb3J5LCBpZiBhbGxvY2F0ZWQgKi8KLQlpZiAodGhpcy0+YmJ0KQotCQlrZnJlZSAodGhpcy0+YmJ0KTsKLQkvKiBCdWZmZXIgYWxsb2NhdGVkIGJ5IG5hbmRfc2NhbiA/ICovCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX09PQkJVRl9BTExPQykKLQkJa2ZyZWUgKHRoaXMtPm9vYl9idWYpOwotCS8qIEJ1ZmZlciBhbGxvY2F0ZWQgYnkgbmFuZF9zY2FuID8gKi8KLQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfREFUQUJVRl9BTExPQykKLQkJa2ZyZWUgKHRoaXMtPmRhdGFfYnVmKTsKLX0KIAotI2VuZGlmCisJLyogRnJlZSBiYWQgYmxvY2sgdGFibGUgbWVtb3J5ICovCisJa2ZyZWUoY2hpcC0+YmJ0KTsKKwlpZiAoIShjaGlwLT5vcHRpb25zICYgTkFORF9PV05fQlVGRkVSUykpCisJCWtmcmVlKGNoaXAtPmJ1ZmZlcnMpOworCisJLyogRnJlZSBiYWQgYmxvY2sgZGVzY3JpcHRvciBtZW1vcnkgKi8KKwlpZiAoY2hpcC0+YmFkYmxvY2tfcGF0dGVybiAmJiBjaGlwLT5iYWRibG9ja19wYXR0ZXJuLT5vcHRpb25zCisJCQkmIE5BTkRfQkJUX0RZTkFNSUNTVFJVQ1QpCisJCWtmcmVlKGNoaXAtPmJhZGJsb2NrX3BhdHRlcm4pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uYW5kL25hbmRfYmJ0LmMgYi9kcml2ZXJzL25hbmQvbmFuZF9iYnQuYwppbmRleCBhYWE5NDAwLi4xZGI4ZjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25hbmQvbmFuZF9iYnQuYworKysgYi9kcml2ZXJzL25hbmQvbmFuZF9iYnQuYwpAQCAtNiw4ICs2LDYgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFRob21hcyBHbGVpeG5lciAodGdseEBsaW51dHJvbml4LmRlKQogICoKLSAqICRJZDogbmFuZF9iYnQuYyx2IDEuMjggMjAwNC8xMS8xMyAxMDoxOTowOSBnbGVpeG5lciBFeHAgJAotICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC0xNSwyOCArMTMsMzcgQEAKICAqIERlc2NyaXB0aW9uOgogICoKICAqIFdoZW4gbmFuZF9zY2FuX2JidCBpcyBjYWxsZWQsIHRoZW4gaXQgdHJpZXMgdG8gZmluZCB0aGUgYmFkIGJsb2NrIHRhYmxlCi0gKiBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMgaW4gdGhlIGJidCBkZXNjcmlwdG9yKHMpLiBJZiBhIGJidCBpcyBmb3VuZAotICogdGhlbiB0aGUgY29udGVudHMgYXJlIHJlYWQgYW5kIHRoZSBtZW1vcnkgYmFzZWQgYmJ0IGlzIGNyZWF0ZWQuIElmIGEKLSAqIG1pcnJvcmVkIGJidCBpcyBzZWxlY3RlZCB0aGVuIHRoZSBtaXJyb3IgaXMgc2VhcmNoZWQgdG9vIGFuZCB0aGUKLSAqIHZlcnNpb25zIGFyZSBjb21wYXJlZC4gSWYgdGhlIG1pcnJvciBoYXMgYSBncmVhdGVyIHZlcnNpb24gbnVtYmVyCi0gKiB0aGFuIHRoZSBtaXJyb3IgYmJ0IGlzIHVzZWQgdG8gYnVpbGQgdGhlIG1lbW9yeSBiYXNlZCBiYnQuCisgKiBkZXBlbmRpbmcgb24gdGhlIG9wdGlvbnMgaW4gdGhlIEJCVCBkZXNjcmlwdG9yKHMpLiBJZiBubyBmbGFzaCBiYXNlZCBCQlQKKyAqIChOQU5EX1VTRV9GTEFTSF9CQlQpIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBkZXZpY2UgaXMgc2Nhbm5lZCBmb3IgZmFjdG9yeQorICogbWFya2VkIGdvb2QgLyBiYWQgYmxvY2tzLiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIGEgbWVtb3J5IEJCVC4KKyAqIE9uY2UgYSBuZXcgYmFkIGJsb2NrIGlzIGRpc2NvdmVyZWQgdGhlbiB0aGUgImZhY3RvcnkiIGluZm9ybWF0aW9uIGlzIHVwZGF0ZWQKKyAqIG9uIHRoZSBkZXZpY2UuCisgKiBJZiBhIGZsYXNoIGJhc2VkIEJCVCBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZnVuY3Rpb24gZmlyc3QgdHJpZXMgdG8gZmluZCB0aGUKKyAqIEJCVCBvbiBmbGFzaC4gSWYgYSBCQlQgaXMgZm91bmQgdGhlbiB0aGUgY29udGVudHMgYXJlIHJlYWQgYW5kIHRoZSBtZW1vcnkKKyAqIGJhc2VkIEJCVCBpcyBjcmVhdGVkLiBJZiBhIG1pcnJvcmVkIEJCVCBpcyBzZWxlY3RlZCB0aGVuIHRoZSBtaXJyb3IgaXMKKyAqIHNlYXJjaGVkIHRvbyBhbmQgdGhlIHZlcnNpb25zIGFyZSBjb21wYXJlZC4gSWYgdGhlIG1pcnJvciBoYXMgYSBncmVhdGVyCisgKiB2ZXJzaW9uIG51bWJlciB0aGFuIHRoZSBtaXJyb3IgQkJUIGlzIHVzZWQgdG8gYnVpbGQgdGhlIG1lbW9yeSBiYXNlZCBCQlQuCiAgKiBJZiB0aGUgdGFibGVzIGFyZSBub3QgdmVyc2lvbmVkLCB0aGVuIHdlICJvciIgdGhlIGJhZCBibG9jayBpbmZvcm1hdGlvbi4KLSAqIElmIG9uZSBvZiB0aGUgYmJ0J3MgaXMgb3V0IG9mIGRhdGUgb3IgZG9lcyBub3QgZXhpc3QgaXQgaXMgKHJlKWNyZWF0ZWQuCi0gKiBJZiBubyBiYnQgZXhpc3RzIGF0IGFsbCB0aGVuIHRoZSBkZXZpY2UgaXMgc2Nhbm5lZCBmb3IgZmFjdG9yeSBtYXJrZWQKKyAqIElmIG9uZSBvZiB0aGUgQkJUcyBpcyBvdXQgb2YgZGF0ZSBvciBkb2VzIG5vdCBleGlzdCBpdCBpcyAocmUpY3JlYXRlZC4KKyAqIElmIG5vIEJCVCBleGlzdHMgYXQgYWxsIHRoZW4gdGhlIGRldmljZSBpcyBzY2FubmVkIGZvciBmYWN0b3J5IG1hcmtlZAogICogZ29vZCAvIGJhZCBibG9ja3MgYW5kIHRoZSBiYWQgYmxvY2sgdGFibGVzIGFyZSBjcmVhdGVkLgogICoKLSAqIEZvciBtYW51ZmFjdHVyZXIgY3JlYXRlZCBiYnRzIGxpa2UgdGhlIG9uZSBmb3VuZCBvbiBNLVNZUyBET0MgZGV2aWNlcwotICogdGhlIGJidCBpcyBzZWFyY2hlZCBhbmQgcmVhZCBidXQgbmV2ZXIgY3JlYXRlZAorICogRm9yIG1hbnVmYWN0dXJlciBjcmVhdGVkIEJCVHMgbGlrZSB0aGUgb25lIGZvdW5kIG9uIE0tU1lTIERPQyBkZXZpY2VzCisgKiB0aGUgQkJUIGlzIHNlYXJjaGVkIGFuZCByZWFkIGJ1dCBuZXZlciBjcmVhdGVkCiAgKgotICogVGhlIGF1dG9nZW5lcmF0ZWQgYmFkIGJsb2NrIHRhYmxlIGlzIGxvY2F0ZWQgaW4gdGhlIGxhc3QgZ29vZCBibG9ja3MKKyAqIFRoZSBhdXRvIGdlbmVyYXRlZCBiYWQgYmxvY2sgdGFibGUgaXMgbG9jYXRlZCBpbiB0aGUgbGFzdCBnb29kIGJsb2NrcwogICogb2YgdGhlIGRldmljZS4gVGhlIHRhYmxlIGlzIG1pcnJvcmVkLCBzbyBpdCBjYW4gYmUgdXBkYXRlZCBldmVudHVhbGx5LgotICogVGhlIHRhYmxlIGlzIG1hcmtlZCBpbiB0aGUgb29iIGFyZWEgd2l0aCBhbiBpZGVudCBwYXR0ZXJuIGFuZCBhIHZlcnNpb24KLSAqIG51bWJlciB3aGljaCBpbmRpY2F0ZXMgd2hpY2ggb2YgYm90aCB0YWJsZXMgaXMgbW9yZSB1cCB0byBkYXRlLgorICogVGhlIHRhYmxlIGlzIG1hcmtlZCBpbiB0aGUgT09CIGFyZWEgd2l0aCBhbiBpZGVudCBwYXR0ZXJuIGFuZCBhIHZlcnNpb24KKyAqIG51bWJlciB3aGljaCBpbmRpY2F0ZXMgd2hpY2ggb2YgYm90aCB0YWJsZXMgaXMgbW9yZSB1cCB0byBkYXRlLiBJZiB0aGUgTkFORAorICogY29udHJvbGxlciBuZWVkcyB0aGUgY29tcGxldGUgT09CIGFyZWEgZm9yIHRoZSBFQ0MgaW5mb3JtYXRpb24gdGhlbiB0aGUKKyAqIG9wdGlvbiBOQU5EX1VTRV9GTEFTSF9CQlRfTk9fT09CIHNob3VsZCBiZSB1c2VkOiBpdCBtb3ZlcyB0aGUgaWRlbnQgcGF0dGVybgorICogYW5kIHRoZSB2ZXJzaW9uIGJ5dGUgaW50byB0aGUgZGF0YSBhcmVhIGFuZCB0aGUgT09CIGFyZWEgd2lsbCByZW1haW4KKyAqIHVudG91Y2hlZC4KICAqCiAgKiBUaGUgdGFibGUgdXNlcyAyIGJpdHMgcGVyIGJsb2NrCi0gKiAxMWI6IAlibG9jayBpcyBnb29kCi0gKiAwMGI6IAlibG9jayBpcyBmYWN0b3J5IG1hcmtlZCBiYWQKLSAqIDAxYiwgMTBiOiAJYmxvY2sgaXMgbWFya2VkIGJhZCBkdWUgdG8gd2VhcgorICogMTFiOgkJYmxvY2sgaXMgZ29vZAorICogMDBiOgkJYmxvY2sgaXMgZmFjdG9yeSBtYXJrZWQgYmFkCisgKiAwMWIsIDEwYjoJYmxvY2sgaXMgbWFya2VkIGJhZCBkdWUgdG8gd2VhcgogICoKICAqIFRoZSBtZW1vcnkgYmFkIGJsb2NrIHRhYmxlIHVzZXMgdGhlIGZvbGxvd2luZyBzY2hlbWU6CiAgKiAwMGI6CQlibG9jayBpcyBnb29kCkBAIC00OCwyMSArNTUsMzEgQEAKICAqCiAgKiBGb2xsb3dpbmcgYXNzdW1wdGlvbnMgYXJlIG1hZGU6CiAgKiAtIGJidHMgc3RhcnQgYXQgYSBwYWdlIGJvdW5kYXJ5LCBpZiBhdXRvbG9jYXRlZCBvbiBhIGJsb2NrIGJvdW5kYXJ5Ci0gKiAtIHRoZSBzcGFjZSBuZWNjZWNhcnkgZm9yIGEgYmJ0IGluIEZMQVNIIGRvZXMgbm90IGV4Y2VlZCBhIGJsb2NrIGJvdW5kYXJ5CisgKiAtIHRoZSBzcGFjZSBuZWNlc3NhcnkgZm9yIGEgYmJ0IGluIEZMQVNIIGRvZXMgbm90IGV4Y2VlZCBhIGJsb2NrIGJvdW5kYXJ5CiAgKgogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpICYmICFkZWZpbmVkKENGR19OQU5EX0xFR0FDWSkKLQogI2luY2x1ZGUgPG1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAKK3N0YXRpYyBpbnQgY2hlY2tfcGF0dGVybl9ub19vb2IodWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtZW1jbXAoYnVmLCB0ZC0+cGF0dGVybiwgdGQtPmxlbik7CisJaWYgKCFyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIC0xOworfQorCiAvKioKICAqIGNoZWNrX3BhdHRlcm4gLSBbR0VORVJJQ10gY2hlY2sgaWYgYSBwYXR0ZXJuIGlzIGluIHRoZSBidWZmZXIKICAqIEBidWY6CXRoZSBidWZmZXIgdG8gc2VhcmNoCkBAIC03NiwxMSArOTMsMTQgQEAKICAqIHBhdHRlcm4gYXJlYSBjb250YWluIDB4ZmYKICAqCiAqLwotc3RhdGljIGludCBjaGVja19wYXR0ZXJuICh1aW50OF90ICpidWYsIGludCBsZW4sIGludCBwYWdsZW4sIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCitzdGF0aWMgaW50IGNoZWNrX3BhdHRlcm4odWludDhfdCAqYnVmLCBpbnQgbGVuLCBpbnQgcGFnbGVuLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQogewotCWludCBpLCBlbmQ7CisJaW50IGksIGVuZCA9IDA7CiAJdWludDhfdCAqcCA9IGJ1ZjsKIAorCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX05PX09PQikKKwkJcmV0dXJuIGNoZWNrX3BhdHRlcm5fbm9fb29iKGJ1ZiwgdGQpOworCiAJZW5kID0gcGFnbGVuICsgdGQtPm9mZnM7CiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkVNUFRZKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBlbmQ7IGkrKykgewpAQCAtOTYsOSArMTE2LDMxIEBACiAJCQlyZXR1cm4gLTE7CiAJfQogCi0JcCArPSB0ZC0+bGVuOwotCWVuZCArPSB0ZC0+bGVuOworCS8qIENoZWNrIGJvdGggcG9zaXRpb25zIDEgYW5kIDYgZm9yIHBhdHRlcm4/ICovCisJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkJZVEUxQU5ENikgeworCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FORU1QVFkpIHsKKwkJCXAgKz0gdGQtPmxlbjsKKwkJCWVuZCArPSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUyAtIHRkLT5vZmZzOworCQkJLyogQ2hlY2sgcmVnaW9uIGJldHdlZW4gcG9zaXRpb25zIDEgYW5kIDYgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUyAtIHRkLT5vZmZzIC0gdGQtPmxlbjsKKwkJCQkJaSsrKSB7CisJCQkJaWYgKCpwKysgIT0gMHhmZikKKwkJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJcCArPSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUyAtIHRkLT5vZmZzOworCQl9CisJCS8qIENvbXBhcmUgdGhlIHBhdHRlcm4gKi8KKwkJZm9yIChpID0gMDsgaSA8IHRkLT5sZW47IGkrKykgeworCQkJaWYgKHBbaV0gIT0gdGQtPnBhdHRlcm5baV0pCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkVNUFRZKSB7CisJCXAgKz0gdGQtPmxlbjsKKwkJZW5kICs9IHRkLT5sZW47CiAJCWZvciAoaSA9IGVuZDsgaSA8IGxlbjsgaSsrKSB7CiAJCQlpZiAoKnArKyAhPSAweGZmKQogCQkJCXJldHVybiAtMTsKQEAgLTEwOCwzOSArMTUwLDEwMCBAQAogfQogCiAvKioKKyAqIGNoZWNrX3Nob3J0X3BhdHRlcm4gLSBbR0VORVJJQ10gY2hlY2sgaWYgYSBwYXR0ZXJuIGlzIGluIHRoZSBidWZmZXIKKyAqIEBidWY6CXRoZSBidWZmZXIgdG8gc2VhcmNoCisgKiBAdGQ6CQlzZWFyY2ggcGF0dGVybiBkZXNjcmlwdG9yCisgKgorICogQ2hlY2sgZm9yIGEgcGF0dGVybiBhdCB0aGUgZ2l2ZW4gcGxhY2UuIFVzZWQgdG8gc2VhcmNoIGJhZCBibG9jaworICogdGFibGVzIGFuZCBnb29kIC8gYmFkIGJsb2NrIGlkZW50aWZpZXJzLiBTYW1lIGFzIGNoZWNrX3BhdHRlcm4sIGJ1dAorICogbm8gb3B0aW9uYWwgZW1wdHkgY2hlY2sKKyAqCisqLworc3RhdGljIGludCBjaGVja19zaG9ydF9wYXR0ZXJuKHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKK3sKKwlpbnQgaTsKKwl1aW50OF90ICpwID0gYnVmOworCisJLyogQ29tcGFyZSB0aGUgcGF0dGVybiAqLworCWZvciAoaSA9IDA7IGkgPCB0ZC0+bGVuOyBpKyspIHsKKwkJaWYgKHBbdGQtPm9mZnMgKyBpXSAhPSB0ZC0+cGF0dGVybltpXSkKKwkJCXJldHVybiAtMTsKKwl9CisJLyogTmVlZCB0byBjaGVjayBsb2NhdGlvbiAxIEFORCA2PyAqLworCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5CWVRFMUFORDYpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRkLT5sZW47IGkrKykgeworCQkJaWYgKHBbTkFORF9TTUFMTF9CQURCTE9DS19QT1MgKyBpXSAhPSB0ZC0+cGF0dGVybltpXSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWRkX21hcmtlcl9sZW4gLSBjb21wdXRlIHRoZSBsZW5ndGggb2YgdGhlIG1hcmtlciBpbiBkYXRhIGFyZWEKKyAqIEB0ZDoJCUJCVCBkZXNjcmlwdG9yIHVzZWQgZm9yIGNvbXB1dGF0aW9uCisgKgorICogVGhlIGxlbmd0aCB3aWxsIGJlIDAgaWYgdGhlIG1hcmtlcmlzIGxvY2F0ZWQgaW4gT09CIGFyZWEuCisgKi8KK3N0YXRpYyB1MzIgYWRkX21hcmtlcl9sZW4oc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKK3sKKwl1MzIgbGVuOworCisJaWYgKCEodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9OT19PT0IpKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHRkLT5sZW47CisJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikKKwkJbGVuKys7CisJcmV0dXJuIGxlbjsKK30KKworLyoqCiAgKiByZWFkX2JidCAtIFtHRU5FUklDXSBSZWFkIHRoZSBiYWQgYmxvY2sgdGFibGUgc3RhcnRpbmcgZnJvbSBwYWdlCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGJ1ZjoJdGVtcG9yYXJ5IGJ1ZmZlcgogICogQHBhZ2U6CXRoZSBzdGFydGluZyBwYWdlCiAgKiBAbnVtOgl0aGUgbnVtYmVyIG9mIGJidCBkZXNjcmlwdG9ycyB0byByZWFkCi0gKiBAYml0czoJbnVtYmVyIG9mIGJpdHMgcGVyIGJsb2NrCisgKiBAdGQ6CQl0aGUgYmJ0IGRlc2NyaWJ0aW9uIHRhYmxlCiAgKiBAb2ZmczoJb2Zmc2V0IGluIHRoZSBtZW1vcnkgdGFibGUKLSAqIEByZXNlcnZlZF9ibG9ja19jb2RlOglQYXR0ZXJuIHRvIGlkZW50aWZ5IHJlc2VydmVkIGJsb2NrcwogICoKICAqIFJlYWQgdGhlIGJhZCBibG9jayB0YWJsZSBzdGFydGluZyBmcm9tIHBhZ2UuCiAgKgogICovCi1zdGF0aWMgaW50IHJlYWRfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBpbnQgcGFnZSwgaW50IG51bSwKLQlpbnQgYml0cywgaW50IG9mZnMsIGludCByZXNlcnZlZF9ibG9ja19jb2RlKQorc3RhdGljIGludCByZWFkX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBpbnQgcGFnZSwgaW50IG51bSwKKwkJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwgaW50IG9mZnMpCiB7CiAJaW50IHJlcywgaSwgaiwgYWN0ID0gMDsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXNpemVfdCByZXRsZW4sIGxlbiwgdG90bGVuOwogCWxvZmZfdCBmcm9tOworCWludCBiaXRzID0gdGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9OUkJJVFNfTVNLOwogCXVpbnQ4X3QgbXNrID0gKHVpbnQ4X3QpICgoMSA8PCBiaXRzKSAtIDEpOworCXUzMiBtYXJrZXJfbGVuOworCWludCByZXNlcnZlZF9ibG9ja19jb2RlID0gdGQtPnJlc2VydmVkX2Jsb2NrX2NvZGU7CiAKIAl0b3RsZW4gPSAobnVtICogYml0cykgPj4gMzsKLQlmcm9tID0gKChsb2ZmX3QpcGFnZSkgPDwgdGhpcy0+cGFnZV9zaGlmdDsKKwltYXJrZXJfbGVuID0gYWRkX21hcmtlcl9sZW4odGQpOworCWZyb20gPSAoKGxvZmZfdCkgcGFnZSkgPDwgdGhpcy0+cGFnZV9zaGlmdDsKIAogCXdoaWxlICh0b3RsZW4pIHsKLQkJbGVuID0gbWluICh0b3RsZW4sIChzaXplX3QpICgxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCkpOwotCQlyZXMgPSBtdGQtPnJlYWRfZWNjIChtdGQsIGZyb20sIGxlbiwgJnJldGxlbiwgYnVmLCBOVUxMLCB0aGlzLT5hdXRvb29iKTsKKwkJbGVuID0gbWluKHRvdGxlbiwgKHNpemVfdCkgKDEgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KSk7CisJCWlmIChtYXJrZXJfbGVuKSB7CisJCQkvKgorCQkJICogSW4gY2FzZSB0aGUgQkJUIG1hcmtlciBpcyBub3QgaW4gdGhlIE9PQiBhcmVhIGl0CisJCQkgKiB3aWxsIGJlIGp1c3QgaW4gdGhlIGZpcnN0IHBhZ2UuCisJCQkgKi8KKwkJCWxlbiAtPSBtYXJrZXJfbGVuOworCQkJZnJvbSArPSBtYXJrZXJfbGVuOworCQkJbWFya2VyX2xlbiA9IDA7CisJCX0KKwkJcmVzID0gbXRkLT5yZWFkKG10ZCwgZnJvbSwgbGVuLCAmcmV0bGVuLCBidWYpOwogCQlpZiAocmVzIDwgMCkgewogCQkJaWYgKHJldGxlbiAhPSBsZW4pIHsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyAibmFuZF9iYnQ6IEVycm9yIHJlYWRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJuYW5kX2JidDogRXJyb3IgcmVhZGluZyBiYWQgYmxvY2sgdGFibGVcbiIpOwogCQkJCXJldHVybiByZXM7CiAJCQl9Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAibmFuZF9iYnQ6IEVDQyBlcnJvciB3aGlsZSByZWFkaW5nIGJhZCBibG9jayB0YWJsZVxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKIAkJfQogCiAJCS8qIEFuYWx5c2UgZGF0YSAqLwpAQCAtMTUwLDIyICsyNTMsMjMgQEAKIAkJCQl1aW50OF90IHRtcCA9IChkYXQgPj4gaikgJiBtc2s7CiAJCQkJaWYgKHRtcCA9PSBtc2spCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChyZXNlcnZlZF9ibG9ja19jb2RlICYmCi0JCQkJICAgICh0bXAgPT0gcmVzZXJ2ZWRfYmxvY2tfY29kZSkpIHsKLQkJCQkJcHJpbnRrIChLRVJOX0RFQlVHICJuYW5kX3JlYWRfYmJ0OiBSZXNlcnZlZCBibG9jayBhdCAweCUwOHhcbiIsCi0JCQkJCQkoKG9mZnMgPDwgMikgKyAoYWN0ID4+IDEpKSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOworCQkJCWlmIChyZXNlcnZlZF9ibG9ja19jb2RlICYmICh0bXAgPT0gcmVzZXJ2ZWRfYmxvY2tfY29kZSkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIm5hbmRfcmVhZF9iYnQ6IFJlc2VydmVkIGJsb2NrIGF0IDB4JTAxMmxseFxuIiwKKwkJCQkJICAgICAgIChsb2ZmX3QpKChvZmZzIDw8IDIpICsgKGFjdCA+PiAxKSkgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAkJCQkJdGhpcy0+YmJ0W29mZnMgKyAoYWN0ID4+IDMpXSB8PSAweDIgPDwgKGFjdCAmIDB4MDYpOworCQkJCQltdGQtPmVjY19zdGF0cy5iYnRibG9ja3MrKzsKIAkJCQkJY29udGludWU7CiAJCQkJfQotCQkJCS8qIExlYXZlIGl0IGZvciBub3csIGlmIGl0cyBtYXR1cmVkIHdlIGNhbiBtb3ZlIHRoaXMKLQkJCQkgKiBtZXNzYWdlIHRvIE1URF9ERUJVR19MRVZFTDAgKi8KLQkJCQlwcmludGsgKEtFUk5fREVCVUcgIm5hbmRfcmVhZF9iYnQ6IEJhZCBibG9jayBhdCAweCUwOHhcbiIsCi0JCQkJCSgob2ZmcyA8PCAyKSArIChhY3QgPj4gMSkpIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CisJCQkJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9iYnQ6ICIgXAorCQkJCQkiQmFkIGJsb2NrIGF0IDB4JTAxMmxseFxuIiwKKwkJCQkJKGxvZmZfdCkoKG9mZnMgPDwgMikgKyAoYWN0ID4+IDEpKQorCQkJCQk8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOwogCQkJCS8qIEZhY3RvcnkgbWFya2VkIGJhZCBvciB3b3JuIG91dCA/ICovCiAJCQkJaWYgKHRtcCA9PSAwKQogCQkJCQl0aGlzLT5iYnRbb2ZmcyArIChhY3QgPj4gMyldIHw9IDB4MyA8PCAoYWN0ICYgMHgwNik7CiAJCQkJZWxzZQogCQkJCQl0aGlzLT5iYnRbb2ZmcyArIChhY3QgPj4gMyldIHw9IDB4MSA8PCAoYWN0ICYgMHgwNik7CisJCQkJbXRkLT5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CiAJCQl9CiAJCX0KIAkJdG90bGVuIC09IGxlbjsKQEAgLTE4NSwzMCArMjg5LDExOSBAQAogICogUmVhZCB0aGUgYmFkIGJsb2NrIHRhYmxlIGZvciBhbGwgY2hpcHMgc3RhcnRpbmcgYXQgYSBnaXZlbiBwYWdlCiAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgYmJ0IGJpdHMgYXJlIGluIGNvbnNlY3V0aXZlIG9yZGVyLgogKi8KLXN0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBpbnQgY2hpcCkKK3N0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsIGludCBjaGlwKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHJlcyA9IDAsIGk7Ci0JaW50IGJpdHM7CiAKLQliaXRzID0gdGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9OUkJJVFNfTVNLOwogCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1BFUkNISVApIHsKIAkJaW50IG9mZnMgPSAwOwogCQlmb3IgKGkgPSAwOyBpIDwgdGhpcy0+bnVtY2hpcHM7IGkrKykgewogCQkJaWYgKGNoaXAgPT0gLTEgfHwgY2hpcCA9PSBpKQotCQkJCXJlcyA9IHJlYWRfYmJ0IChtdGQsIGJ1ZiwgdGQtPnBhZ2VzW2ldLCB0aGlzLT5jaGlwc2l6ZSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQsIGJpdHMsIG9mZnMsIHRkLT5yZXNlcnZlZF9ibG9ja19jb2RlKTsKKwkJCQlyZXMgPSByZWFkX2JidChtdGQsIGJ1ZiwgdGQtPnBhZ2VzW2ldLAorCQkJCQl0aGlzLT5jaGlwc2l6ZSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQsCisJCQkJCXRkLCBvZmZzKTsKIAkJCWlmIChyZXMpCiAJCQkJcmV0dXJuIHJlczsKIAkJCW9mZnMgKz0gdGhpcy0+Y2hpcHNpemUgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCArIDIpOwogCQl9CiAJfSBlbHNlIHsKLQkJcmVzID0gcmVhZF9iYnQgKG10ZCwgYnVmLCB0ZC0+cGFnZXNbMF0sIG10ZC0+c2l6ZSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQsIGJpdHMsIDAsIHRkLT5yZXNlcnZlZF9ibG9ja19jb2RlKTsKKwkJcmVzID0gcmVhZF9iYnQobXRkLCBidWYsIHRkLT5wYWdlc1swXSwKKwkJCQltdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0LCB0ZCwgMCk7CiAJCWlmIChyZXMpCiAJCQlyZXR1cm4gcmVzOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEJCVCBtYXJrZXIgaXMgaW4gdGhlIGZpcnN0IHBhZ2UsIG5vIE9PQi4KKyAqLworc3RhdGljIGludCBzY2FuX3JlYWRfcmF3X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgbG9mZl90IG9mZnMsCisJCQkgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKK3sKKwlzaXplX3QgcmV0bGVuOworCXNpemVfdCBsZW47CisKKwlsZW4gPSB0ZC0+bGVuOworCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1ZFUlNJT04pCisJCWxlbisrOworCisJcmV0dXJuIG10ZC0+cmVhZChtdGQsIG9mZnMsIGxlbiwgJnJldGxlbiwgYnVmKTsKK30KKworLyoKKyAqIFNjYW4gcmVhZCByYXcgZGF0YSBmcm9tIGZsYXNoCisgKi8KK3N0YXRpYyBpbnQgc2Nhbl9yZWFkX3Jhd19vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgbG9mZl90IG9mZnMsCisJCQkgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCByZXM7CisKKwlvcHMubW9kZSA9IE1URF9PT0JfUkFXOworCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCisKKwl3aGlsZSAobGVuID4gMCkgeworCQlpZiAobGVuIDw9IG10ZC0+d3JpdGVzaXplKSB7CisJCQlvcHMub29iYnVmID0gYnVmICsgbGVuOworCQkJb3BzLmRhdGJ1ZiA9IGJ1ZjsKKwkJCW9wcy5sZW4gPSBsZW47CisJCQlyZXR1cm4gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMsICZvcHMpOworCQl9IGVsc2UgeworCQkJb3BzLm9vYmJ1ZiA9IGJ1ZiArIG10ZC0+d3JpdGVzaXplOworCQkJb3BzLmRhdGJ1ZiA9IGJ1ZjsKKwkJCW9wcy5sZW4gPSBtdGQtPndyaXRlc2l6ZTsKKwkJCXJlcyA9IG10ZC0+cmVhZF9vb2IobXRkLCBvZmZzLCAmb3BzKTsKKworCQkJaWYgKHJlcykKKwkJCQlyZXR1cm4gcmVzOworCQl9CisKKwkJYnVmICs9IG10ZC0+b29ic2l6ZSArIG10ZC0+d3JpdGVzaXplOworCQlsZW4gLT0gbXRkLT53cml0ZXNpemU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjYW5fcmVhZF9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgbG9mZl90IG9mZnMsCisJCQkgc2l6ZV90IGxlbiwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKK3sKKwlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9OT19PT0IpCisJCXJldHVybiBzY2FuX3JlYWRfcmF3X2RhdGEobXRkLCBidWYsIG9mZnMsIHRkKTsKKwllbHNlCisJCXJldHVybiBzY2FuX3JlYWRfcmF3X29vYihtdGQsIGJ1Ziwgb2ZmcywgbGVuKTsKK30KKworLyoKKyAqIFNjYW4gd3JpdGUgZGF0YSB3aXRoIG9vYiB0byBmbGFzaAorICovCitzdGF0aWMgaW50IHNjYW5fd3JpdGVfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJCSAgdWludDhfdCAqYnVmLCB1aW50OF90ICpvb2IpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKwlvcHMub29ib2ZmcyA9IDA7CisJb3BzLm9vYmxlbiA9IG10ZC0+b29ic2l6ZTsKKwlvcHMuZGF0YnVmID0gYnVmOworCW9wcy5vb2JidWYgPSBvb2I7CisJb3BzLmxlbiA9IGxlbjsKKworCXJldHVybiBtdGQtPndyaXRlX29vYihtdGQsIG9mZnMsICZvcHMpOworfQorCitzdGF0aWMgdTMyIGJidF9nZXRfdmVyX29mZnMoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCit7CisJdTMyIHZlcl9vZmZzID0gdGQtPnZlcm9mZnM7CisKKwlpZiAoISh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX05PX09PQikpCisJCXZlcl9vZmZzICs9IG10ZC0+d3JpdGVzaXplOworCXJldHVybiB2ZXJfb2ZmczsKK30KKwogLyoqCiAgKiByZWFkX2Fic19iYnRzIC0gW0dFTkVSSUNdIFJlYWQgdGhlIGJhZCBibG9jayB0YWJsZShzKSBmb3IgYWxsIGNoaXBzIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gcGFnZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTIyMCwyOCArNDEzLDg0IEBACiAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgYmJ0IGJpdHMgYXJlIGluIGNvbnNlY3V0aXZlIG9yZGVyLgogICoKICovCi1zdGF0aWMgaW50IHJlYWRfYWJzX2JidHMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsCi0Jc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCkKK3N0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0cyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLAorCQkJIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqbWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAogCS8qIFJlYWQgdGhlIHByaW1hcnkgdmVyc2lvbiwgaWYgYXZhaWxhYmxlICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikgewotCQluYW5kX3JlYWRfcmF3IChtdGQsIGJ1ZiwgdGQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsIG10ZC0+b29iYmxvY2ssIG10ZC0+b29ic2l6ZSk7Ci0JCXRkLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+b29iYmxvY2sgKyB0ZC0+dmVyb2Zmc107Ci0JCXByaW50ayAoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLCB0ZC0+cGFnZXNbMF0sIHRkLT52ZXJzaW9uWzBdKTsKKwkJc2Nhbl9yZWFkX3JhdyhtdGQsIGJ1ZiwgKGxvZmZfdCl0ZC0+cGFnZXNbMF0gPDwgdGhpcy0+cGFnZV9zaGlmdCwKKwkJCSAgICAgIG10ZC0+d3JpdGVzaXplLCB0ZCk7CisJCXRkLT52ZXJzaW9uWzBdID0gYnVmW2JidF9nZXRfdmVyX29mZnMobXRkLCB0ZCldOworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLAorCQkgICAgICAgdGQtPnBhZ2VzWzBdLCB0ZC0+dmVyc2lvblswXSk7CiAJfQogCiAJLyogUmVhZCB0aGUgbWlycm9yIHZlcnNpb24sIGlmIGF2YWlsYWJsZSAqLwogCWlmIChtZCAmJiAobWQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKSkgewotCQluYW5kX3JlYWRfcmF3IChtdGQsIGJ1ZiwgbWQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsIG10ZC0+b29iYmxvY2ssIG10ZC0+b29ic2l6ZSk7Ci0JCW1kLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+b29iYmxvY2sgKyBtZC0+dmVyb2Zmc107Ci0JCXByaW50ayAoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLCBtZC0+cGFnZXNbMF0sIG1kLT52ZXJzaW9uWzBdKTsKKwkJc2Nhbl9yZWFkX3JhdyhtdGQsIGJ1ZiwgKGxvZmZfdCltZC0+cGFnZXNbMF0gPDwgdGhpcy0+cGFnZV9zaGlmdCwKKwkJCSAgICAgIG10ZC0+d3JpdGVzaXplLCB0ZCk7CisJCW1kLT52ZXJzaW9uWzBdID0gYnVmW2JidF9nZXRfdmVyX29mZnMobXRkLCBtZCldOworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLAorCQkgICAgICAgbWQtPnBhZ2VzWzBdLCBtZC0+dmVyc2lvblswXSk7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBTY2FuIGEgZ2l2ZW4gYmxvY2sgZnVsbAorICovCitzdGF0aWMgaW50IHNjYW5fYmxvY2tfZnVsbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCwKKwkJCSAgIGxvZmZfdCBvZmZzLCB1aW50OF90ICpidWYsIHNpemVfdCByZWFkbGVuLAorCQkJICAgaW50IHNjYW5sZW4sIGludCBsZW4pCit7CisJaW50IHJldCwgajsKKworCXJldCA9IHNjYW5fcmVhZF9yYXdfb29iKG10ZCwgYnVmLCBvZmZzLCByZWFkbGVuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrLCBidWYgKz0gc2NhbmxlbikgeworCQlpZiAoY2hlY2tfcGF0dGVybihidWYsIHNjYW5sZW4sIG10ZC0+d3JpdGVzaXplLCBiZCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTY2FuIGEgZ2l2ZW4gYmxvY2sgcGFydGlhbGx5CisgKi8KK3N0YXRpYyBpbnQgc2Nhbl9ibG9ja19mYXN0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkLAorCQkJICAgbG9mZl90IG9mZnMsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCBqLCByZXQ7CisKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCW9wcy5vb2JidWYgPSBidWY7CisJb3BzLm9vYm9mZnMgPSAwOworCW9wcy5kYXRidWYgPSBOVUxMOworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKworCWZvciAoaiA9IDA7IGogPCBsZW47IGorKykgeworCQkvKgorCQkgKiBSZWFkIHRoZSBmdWxsIG9vYiB1bnRpbCByZWFkX29vYiBpcyBmaXhlZCB0bworCQkgKiBoYW5kbGUgc2luZ2xlIGJ5dGUgcmVhZHMgZm9yIDE2IGJpdAorCQkgKiBidXN3aWR0aAorCQkgKi8KKwkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMsICZvcHMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoY2hlY2tfc2hvcnRfcGF0dGVybihidWYsIGJkKSkKKwkJCXJldHVybiAxOworCisJCW9mZnMgKz0gbXRkLT53cml0ZXNpemU7CisJfQorCXJldHVybiAwOworfQorCiAvKioKICAqIGNyZWF0ZV9iYnQgLSBbR0VORVJJQ10gQ3JlYXRlIGEgYmFkIGJsb2NrIHRhYmxlIGJ5IHNjYW5uaW5nIHRoZSBkZXZpY2UKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yNTMsNTUgKzUwMiw4NCBAQAogICogQ3JlYXRlIGEgYmFkIGJsb2NrIHRhYmxlIGJ5IHNjYW5uaW5nIHRoZSBkZXZpY2UKICAqIGZvciB0aGUgZ2l2ZW4gZ29vZC9iYWQgYmxvY2sgaWRlbnRpZnkgcGF0dGVybgogICovCi1zdGF0aWMgdm9pZCBjcmVhdGVfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkLCBpbnQgY2hpcCkKK3N0YXRpYyBpbnQgY3JlYXRlX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLAorCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQsIGludCBjaGlwKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IGksIGosIG51bWJsb2NrcywgbGVuLCBzY2FubGVuOworCWludCBpLCBudW1ibG9ja3MsIGxlbiwgc2NhbmxlbjsKIAlpbnQgc3RhcnRibG9jazsKIAlsb2ZmX3QgZnJvbTsKLQlzaXplX3QgcmVhZGxlbiwgb29ibGVuOworCXNpemVfdCByZWFkbGVuOworCisJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIlNjYW5uaW5nIGRldmljZSBmb3IgYmFkIGJsb2Nrc1xuIik7CisKKy8vCXByaW50Zigic2l6ZSBvZiBsb2ZmX3QgPSAlZCBcbiIsIHNpemVvZihmcm9tKSk7CiAKIAlpZiAoYmQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMpCiAJCWxlbiA9IDEgPDwgKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwotCWVsc2UgewotCQlpZiAoYmQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FOMk5EUEFHRSkKLQkJCWxlbiA9IDI7Ci0JCWVsc2UKLQkJCWxlbiA9IDE7CisJZWxzZSBpZiAoYmQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FOMk5EUEFHRSkKKwkJbGVuID0gMjsKKwllbHNlCisJCWxlbiA9IDE7CisKKwlpZiAoIShiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5FTVBUWSkpIHsKKwkJLyogV2UgbmVlZCBvbmx5IHJlYWQgZmV3IGJ5dGVzIGZyb20gdGhlIE9PQiBhcmVhICovCisJCXNjYW5sZW4gPSAwOworCQlyZWFkbGVuID0gYmQtPmxlbjsKKwl9IGVsc2UgeworCQkvKiBGdWxsIHBhZ2UgY29udGVudCBzaG91bGQgYmUgcmVhZCAqLworCQlzY2FubGVuID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7CisJCXJlYWRsZW4gPSBsZW4gKiBtdGQtPndyaXRlc2l6ZTsKIAl9Ci0Jc2Nhbmxlbgk9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7Ci0JcmVhZGxlbiA9IGxlbiAqIG10ZC0+b29iYmxvY2s7Ci0Jb29ibGVuID0gbGVuICogbXRkLT5vb2JzaXplOwogCiAJaWYgKGNoaXAgPT0gLTEpIHsKLQkJLyogTm90ZSB0aGF0IG51bWJsb2NrcyBpcyAyICogKHJlYWwgbnVtYmxvY2tzKSBoZXJlLCBzZWUgaSs9MiBiZWxvdyBhcyBpdAotCQkgKiBtYWtlcyBzaGlmdGluZyBhbmQgbWFza2luZyBsZXNzIHBhaW5mdWwgKi8KKwkJLyogTm90ZSB0aGF0IG51bWJsb2NrcyBpcyAyICogKHJlYWwgbnVtYmxvY2tzKSBoZXJlLCBzZWUgaSs9MgorCQkgKiBiZWxvdyBhcyBpdCBtYWtlcyBzaGlmdGluZyBhbmQgbWFza2luZyBsZXNzIHBhaW5mdWwgKi8KIAkJbnVtYmxvY2tzID0gbXRkLT5zaXplID4+ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKTsKIAkJc3RhcnRibG9jayA9IDA7CiAJCWZyb20gPSAwOwogCX0gZWxzZSB7CiAJCWlmIChjaGlwID49IHRoaXMtPm51bWNoaXBzKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAiY3JlYXRlX2JidCgpOiBjaGlwbnIgKCVkKSA+IGF2YWlsYWJsZSBjaGlwcyAoJWQpXG4iLAotCQkJCWNoaXAgKyAxLCB0aGlzLT5udW1jaGlwcyk7Ci0JCQlyZXR1cm47CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjcmVhdGVfYmJ0KCk6IGNoaXBuciAoJWQpID4gYXZhaWxhYmxlIGNoaXBzICglZClcbiIsCisJCQkgICAgICAgY2hpcCArIDEsIHRoaXMtPm51bWNoaXBzKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCW51bWJsb2NrcyA9IHRoaXMtPmNoaXBzaXplID4+ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKTsKIAkJc3RhcnRibG9jayA9IGNoaXAgKiBudW1ibG9ja3M7CiAJCW51bWJsb2NrcyArPSBzdGFydGJsb2NrOwotCQlmcm9tID0gc3RhcnRibG9jayA8PCAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gMSk7CisJCWZyb20gPSAobG9mZl90KXN0YXJ0YmxvY2sgPDwgKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpOwogCX0KIAorCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkxBU1RQQUdFKQorCQlmcm9tICs9IG10ZC0+ZXJhc2VzaXplIC0gKG10ZC0+d3JpdGVzaXplICogbGVuKTsKKwogCWZvciAoaSA9IHN0YXJ0YmxvY2s7IGkgPCBudW1ibG9ja3M7KSB7Ci0JCW5hbmRfcmVhZF9yYXcgKG10ZCwgYnVmLCBmcm9tLCByZWFkbGVuLCBvb2JsZW4pOwotCQlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLQkJCWlmIChjaGVja19wYXR0ZXJuICgmYnVmW2ogKiBzY2FubGVuXSwgc2NhbmxlbiwgbXRkLT5vb2JibG9jaywgYmQpKSB7Ci0JCQkJdGhpcy0+YmJ0W2kgPj4gM10gfD0gMHgwMyA8PCAoaSAmIDB4Nik7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCWludCByZXQ7CisKKwkJQlVHX09OKGJkLT5vcHRpb25zICYgTkFORF9CQlRfTk9fT09CKTsKKworCQlpZiAoYmQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMpCisJCQlyZXQgPSBzY2FuX2Jsb2NrX2Z1bGwobXRkLCBiZCwgZnJvbSwgYnVmLCByZWFkbGVuLAorCQkJCQkgICAgICBzY2FubGVuLCBsZW4pOworCQllbHNlCisJCQlyZXQgPSBzY2FuX2Jsb2NrX2Zhc3QobXRkLCBiZCwgZnJvbSwgYnVmLCBsZW4pOworCisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworLy8JCXByaW50ZigiUHJpbnRpbmcgQkFEIGVyYXNlIGJsb2NrIGJ5IENKISEhISEhXG4iKTsKKwkJaWYgKHJldCkgeworCQkJdGhpcy0+YmJ0W2kgPj4gM10gfD0gMHgwMyA8PCAoaSAmIDB4Nik7CisJCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLAorCQkJCSAgIkJhZCBlcmFzZWJsb2NrICVkIGF0IDB4JTAxMmxseFxuIiwKKwkJCQkgIGkgPj4gMSwgKHVuc2lnbmVkIGxvbmcgbG9uZylmcm9tKTsKKwkJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOwogCQl9CisKIAkJaSArPSAyOwogCQlmcm9tICs9ICgxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTMxNiwyMiArNTk0LDIzIEBACiAgKiBibG9jay4KICAqIElmIHRoZSBvcHRpb24gTkFORF9CQlRfUEVSQ0hJUCBpcyBnaXZlbiwgZWFjaCBjaGlwIGlzIHNlYXJjaGVkCiAgKiBmb3IgYSBiYnQsIHdoaWNoIGNvbnRhaW5zIHRoZSBiYWQgYmxvY2sgaW5mb3JtYXRpb24gb2YgdGhpcyBjaGlwLgotICogVGhpcyBpcyBuZWNjZWNhcnkgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBjZXJ0YWluIERPQyBkZXZpY2VzLgorICogVGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBjZXJ0YWluIERPQyBkZXZpY2VzLgogICoKICAqIFRoZSBiYnQgaWRlbnQgcGF0dGVybiByZXNpZGVzIGluIHRoZSBvb2IgYXJlYSBvZiB0aGUgZmlyc3QgcGFnZQogICogaW4gYSBibG9jay4KICAqLwotc3RhdGljIGludCBzZWFyY2hfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQorc3RhdGljIGludCBzZWFyY2hfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgaSwgY2hpcHM7Ci0JaW50IGJpdHMsIHN0YXJ0YmxvY2ssIGJsb2NrLCBkaXI7Ci0JaW50IHNjYW5sZW4gPSBtdGQtPm9vYmJsb2NrICsgbXRkLT5vb2JzaXplOworCWludCBzdGFydGJsb2NrLCBibG9jaywgZGlyOworCWludCBzY2FubGVuID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7CiAJaW50IGJidGJsb2NrczsKKwlpbnQgYmxvY2t0b3BhZ2UgPSB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0OwogCiAJLyogU2VhcmNoIGRpcmVjdGlvbiB0b3AgLT4gZG93biA/ICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfTEFTVEJMT0NLKSB7Ci0JCXN0YXJ0YmxvY2sgPSAobXRkLT5zaXplID4+IHRoaXMtPmJidF9lcmFzZV9zaGlmdCkgLTE7CisJCXN0YXJ0YmxvY2sgPSAobXRkLT5zaXplID4+IHRoaXMtPmJidF9lcmFzZV9zaGlmdCkgLSAxOwogCQlkaXIgPSAtMTsKIAl9IGVsc2UgewogCQlzdGFydGJsb2NrID0gMDsKQEAgLTM0OCwyMiArNjI3LDIzIEBACiAJCWJidGJsb2NrcyA9IG10ZC0+c2l6ZSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7CiAJfQogCi0JLyogTnVtYmVyIG9mIGJpdHMgZm9yIGVhY2ggZXJhc2UgYmxvY2sgaW4gdGhlIGJidCAqLwotCWJpdHMgPSB0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX05SQklUU19NU0s7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY2hpcHM7IGkrKykgewogCQkvKiBSZXNldCB2ZXJzaW9uIGluZm9ybWF0aW9uICovCiAJCXRkLT52ZXJzaW9uW2ldID0gMDsKIAkJdGQtPnBhZ2VzW2ldID0gLTE7CiAJCS8qIFNjYW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyAqLwogCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCB0ZC0+bWF4YmxvY2tzOyBibG9jaysrKSB7CisKIAkJCWludCBhY3RibG9jayA9IHN0YXJ0YmxvY2sgKyBkaXIgKiBibG9jazsKKwkJCWxvZmZfdCBvZmZzID0gKGxvZmZfdClhY3RibG9jayA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7CisKIAkJCS8qIFJlYWQgZmlyc3QgcGFnZSAqLwotCQkJbmFuZF9yZWFkX3JhdyAobXRkLCBidWYsIGFjdGJsb2NrIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCwgbXRkLT5vb2JibG9jaywgbXRkLT5vb2JzaXplKTsKLQkJCWlmICghY2hlY2tfcGF0dGVybihidWYsIHNjYW5sZW4sIG10ZC0+b29iYmxvY2ssIHRkKSkgewotCQkJCXRkLT5wYWdlc1tpXSA9IGFjdGJsb2NrIDw8ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KTsKKwkJCXNjYW5fcmVhZF9yYXcobXRkLCBidWYsIG9mZnMsIG10ZC0+d3JpdGVzaXplLCB0ZCk7CisJCQlpZiAoIWNoZWNrX3BhdHRlcm4oYnVmLCBzY2FubGVuLCBtdGQtPndyaXRlc2l6ZSwgdGQpKSB7CisJCQkJdGQtPnBhZ2VzW2ldID0gYWN0YmxvY2sgPDwgYmxvY2t0b3BhZ2U7CiAJCQkJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikgewotCQkJCQl0ZC0+dmVyc2lvbltpXSA9IGJ1ZlttdGQtPm9vYmJsb2NrICsgdGQtPnZlcm9mZnNdOworCQkJCQlvZmZzID0gYmJ0X2dldF92ZXJfb2ZmcyhtdGQsIHRkKTsKKwkJCQkJdGQtPnZlcnNpb25baV0gPSBidWZbb2Zmc107CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzczLDkgKzY1MywxMSBAQAogCS8qIENoZWNrLCBpZiB3ZSBmb3VuZCBhIGJidCBmb3IgZWFjaCByZXF1ZXN0ZWQgY2hpcCAqLwogCWZvciAoaSA9IDA7IGkgPCBjaGlwczsgaSsrKSB7CiAJCWlmICh0ZC0+cGFnZXNbaV0gPT0gLTEpCi0JCQlwcmludGsgKEtFUk5fV0FSTklORyAiQmFkIGJsb2NrIHRhYmxlIG5vdCBmb3VuZCBmb3IgY2hpcCAlZFxuIiwgaSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJCYWQgYmxvY2sgdGFibGUgbm90IGZvdW5kIGZvciBjaGlwICVkXG4iLCBpKTsKIAkJZWxzZQotCQkJcHJpbnRrIChLRVJOX0RFQlVHICJCYWQgYmxvY2sgdGFibGUgZm91bmQgYXQgcGFnZSAlZCwgdmVyc2lvbiAweCUwMlhcbiIsIHRkLT5wYWdlc1tpXSwgdGQtPnZlcnNpb25baV0pOworCQkJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIkJhZCBibG9jayB0YWJsZSBmb3VuZCAiIFwKKwkJCQkiYXQgcGFnZSAlZCwgdmVyc2lvbiAweCUwMlhcbiIsIHRkLT5wYWdlc1tpXSwKKwkJCQl0ZC0+dmVyc2lvbltpXSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzg5LDIxICs2NzEsMTkgQEAKICAqCiAgKiBTZWFyY2ggYW5kIHJlYWQgdGhlIGJhZCBibG9jayB0YWJsZShzKQogKi8KLXN0YXRpYyBpbnQgc2VhcmNoX3JlYWRfYmJ0cyAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwKLQlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKm1kKQorc3RhdGljIGludCBzZWFyY2hfcmVhZF9iYnRzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICogYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKm1kKQogewogCS8qIFNlYXJjaCB0aGUgcHJpbWFyeSB0YWJsZSAqLwotCXNlYXJjaF9iYnQgKG10ZCwgYnVmLCB0ZCk7CisJc2VhcmNoX2JidChtdGQsIGJ1ZiwgdGQpOwogCiAJLyogU2VhcmNoIHRoZSBtaXJyb3IgdGFibGUgKi8KIAlpZiAobWQpCi0JCXNlYXJjaF9iYnQgKG10ZCwgYnVmLCBtZCk7CisJCXNlYXJjaF9iYnQobXRkLCBidWYsIG1kKTsKIAogCS8qIEZvcmNlIHJlc3VsdCBjaGVjayAqLwogCXJldHVybiAxOwogfQogCi0KIC8qKgogICogd3JpdGVfYmJ0IC0gW0dFTkVSSUNdIChSZSl3cml0ZSB0aGUgYmFkIGJsb2NrIHRhYmxlCiAgKgpAQCAtNDE2LDI1ICs2OTYsMzEgQEAKICAqIChSZSl3cml0ZSB0aGUgYmFkIGJsb2NrIHRhYmxlCiAgKgogKi8KLXN0YXRpYyBpbnQgd3JpdGVfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLAotCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqbWQsIGludCBjaGlwc2VsKQorc3RhdGljIGludCB3cml0ZV9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwKKwkJICAgICBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKm1kLAorCQkgICAgIGludCBjaGlwc2VsKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jc3RydWN0IG5hbmRfb29iaW5mbyBvb2JpbmZvOwogCXN0cnVjdCBlcmFzZV9pbmZvIGVpbmZvOwogCWludCBpLCBqLCByZXMsIGNoaXAgPSAwOwogCWludCBiaXRzLCBzdGFydGJsb2NrLCBkaXIsIHBhZ2UsIG9mZnMsIG51bWJsb2Nrcywgc2Z0LCBzZnRtc2s7Ci0JaW50IG5yY2hpcHMsIGJidG9mZnMsIHBhZ2VvZmZzOworCWludCBucmNoaXBzLCBiYnRvZmZzLCBwYWdlb2Zmcywgb29ib2ZmczsKIAl1aW50OF90IG1za1s0XTsKIAl1aW50OF90IHJjb2RlID0gdGQtPnJlc2VydmVkX2Jsb2NrX2NvZGU7CiAJc2l6ZV90IHJldGxlbiwgbGVuID0gMDsKIAlsb2ZmX3QgdG87CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKworCW9wcy5vb2JsZW4gPSBtdGQtPm9vYnNpemU7CisJb3BzLm9vYm9mZnMgPSAwOworCW9wcy5kYXRidWYgPSBOVUxMOworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKIAogCWlmICghcmNvZGUpCiAJCXJjb2RlID0gMHhmZjsKIAkvKiBXcml0ZSBiYWQgYmxvY2sgdGFibGUgcGVyIGNoaXAgcmF0aGVyIHRoYW4gcGVyIGRldmljZSA/ICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkgewotCQludW1ibG9ja3MgPSAoaW50KSAodGhpcy0+Y2hpcHNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKKwkJbnVtYmxvY2tzID0gKGludCkodGhpcy0+Y2hpcHNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAkJLyogRnVsbCBkZXZpY2Ugd3JpdGUgb3Igc3BlY2lmaWMgY2hpcCA/ICovCiAJCWlmIChjaGlwc2VsID09IC0xKSB7CiAJCQlucmNoaXBzID0gdGhpcy0+bnVtY2hpcHM7CkBAIC00NDMsNyArNzI5LDcgQEAKIAkJCWNoaXAgPSBjaGlwc2VsOwogCQl9CiAJfSBlbHNlIHsKLQkJbnVtYmxvY2tzID0gKGludCkgKG10ZC0+c2l6ZSA+PiB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOworCQludW1ibG9ja3MgPSAoaW50KShtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAkJbnJjaGlwcyA9IDE7CiAJfQogCkBAIC00NzIsMjcgKzc1OCwzOCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgdGQtPm1heGJsb2NrczsgaSsrKSB7CiAJCQlpbnQgYmxvY2sgPSBzdGFydGJsb2NrICsgZGlyICogaTsKIAkJCS8qIENoZWNrLCBpZiB0aGUgYmxvY2sgaXMgYmFkICovCi0JCQlzd2l0Y2ggKCh0aGlzLT5iYnRbYmxvY2sgPj4gMl0gPj4gKDIgKiAoYmxvY2sgJiAweDAzKSkpICYgMHgwMykgeworCQkJc3dpdGNoICgodGhpcy0+YmJ0W2Jsb2NrID4+IDJdID4+CisJCQkJICgyICogKGJsb2NrICYgMHgwMykpKSAmIDB4MDMpIHsKIAkJCWNhc2UgMHgwMToKIAkJCWNhc2UgMHgwMzoKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCXBhZ2UgPSBibG9jayA8PCAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CisJCQlwYWdlID0gYmxvY2sgPDwKKwkJCQkodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CiAJCQkvKiBDaGVjaywgaWYgdGhlIGJsb2NrIGlzIHVzZWQgYnkgdGhlIG1pcnJvciB0YWJsZSAqLwogCQkJaWYgKCFtZCB8fCBtZC0+cGFnZXNbY2hpcF0gIT0gcGFnZSkKIAkJCQlnb3RvIHdyaXRlOwogCQl9Ci0JCXByaW50ayAoS0VSTl9FUlIgIk5vIHNwYWNlIGxlZnQgdG8gd3JpdGUgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBzcGFjZSBsZWZ0IHRvIHdyaXRlIGJhZCBibG9jayB0YWJsZVxuIik7CiAJCXJldHVybiAtRU5PU1BDOwotd3JpdGU6CisJd3JpdGU6CiAKIAkJLyogU2V0IHVwIHNoaWZ0IGNvdW50IGFuZCBtYXNrcyBmb3IgdGhlIGZsYXNoIHRhYmxlICovCiAJCWJpdHMgPSB0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX05SQklUU19NU0s7CisJCW1za1syXSA9IH5yY29kZTsKIAkJc3dpdGNoIChiaXRzKSB7Ci0JCWNhc2UgMTogc2Z0ID0gMzsgc2Z0bXNrID0gMHgwNzsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwMTsgbXNrWzJdID0gfnJjb2RlOyBtc2tbM10gPSAweDAxOyBicmVhazsKLQkJY2FzZSAyOiBzZnQgPSAyOyBzZnRtc2sgPSAweDA2OyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDAxOyBtc2tbMl0gPSB+cmNvZGU7IG1za1szXSA9IDB4MDM7IGJyZWFrOwotCQljYXNlIDQ6IHNmdCA9IDE7IHNmdG1zayA9IDB4MDQ7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MEM7IG1za1syXSA9IH5yY29kZTsgbXNrWzNdID0gMHgwZjsgYnJlYWs7Ci0JCWNhc2UgODogc2Z0ID0gMDsgc2Z0bXNrID0gMHgwMDsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwRjsgbXNrWzJdID0gfnJjb2RlOyBtc2tbM10gPSAweGZmOyBicmVhazsKKwkJY2FzZSAxOiBzZnQgPSAzOyBzZnRtc2sgPSAweDA3OyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDAxOworCQkJbXNrWzNdID0gMHgwMTsKKwkJCWJyZWFrOworCQljYXNlIDI6IHNmdCA9IDI7IHNmdG1zayA9IDB4MDY7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MDE7CisJCQltc2tbM10gPSAweDAzOworCQkJYnJlYWs7CisJCWNhc2UgNDogc2Z0ID0gMTsgc2Z0bXNrID0gMHgwNDsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwQzsKKwkJCW1za1szXSA9IDB4MGY7CisJCQlicmVhazsKKwkJY2FzZSA4OiBzZnQgPSAwOyBzZnRtc2sgPSAweDAwOyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDBGOworCQkJbXNrWzNdID0gMHhmZjsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC01MDAsODIgKzc5NywxMDggQEAKIAogCQl0byA9ICgobG9mZl90KSBwYWdlKSA8PCB0aGlzLT5wYWdlX3NoaWZ0OwogCi0JCW1lbWNweSAoJm9vYmluZm8sIHRoaXMtPmF1dG9vb2IsIHNpemVvZihvb2JpbmZvKSk7Ci0JCW9vYmluZm8udXNlZWNjID0gTVREX05BTkRFQ0NfUExBQ0VPTkxZOwotCiAJCS8qIE11c3Qgd2Ugc2F2ZSB0aGUgYmxvY2sgY29udGVudHMgPyAqLwogCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQVZFQ09OVEVOVCkgewogCQkJLyogTWFrZSBpdCBibG9jayBhbGlnbmVkICovCiAJCQl0byAmPSB+KChsb2ZmX3QpICgoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpIC0gMSkpOwogCQkJbGVuID0gMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7Ci0JCQlyZXMgPSBtdGQtPnJlYWRfZWNjIChtdGQsIHRvLCBsZW4sICZyZXRsZW4sIGJ1ZiwgJmJ1ZltsZW5dLCAmb29iaW5mbyk7CisJCQlyZXMgPSBtdGQtPnJlYWQobXRkLCB0bywgbGVuLCAmcmV0bGVuLCBidWYpOwogCQkJaWYgKHJlcyA8IDApIHsKIAkJCQlpZiAocmV0bGVuICE9IGxlbikgewotCQkJCQlwcmludGsgKEtFUk5fSU5GTyAibmFuZF9iYnQ6IEVycm9yIHJlYWRpbmcgYmxvY2sgZm9yIHdyaXRpbmcgdGhlIGJhZCBibG9jayB0YWJsZVxuIik7CisJCQkJCXByaW50ayhLRVJOX0lORk8gIm5hbmRfYmJ0OiBFcnJvciAiCisJCQkJCSAgICAgICAicmVhZGluZyBibG9jayBmb3Igd3JpdGluZyAiCisJCQkJCSAgICAgICAidGhlIGJhZCBibG9jayB0YWJsZVxuIik7CiAJCQkJCXJldHVybiByZXM7CiAJCQkJfQotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yIHdoaWxlIHJlYWRpbmcgYmxvY2sgZm9yIHdyaXRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yICIKKwkJCQkgICAgICAgIndoaWxlIHJlYWRpbmcgYmxvY2sgZm9yIHdyaXRpbmcgIgorCQkJCSAgICAgICAiYmFkIGJsb2NrIHRhYmxlXG4iKTsKIAkJCX0KKwkJCS8qIFJlYWQgb29iIGRhdGEgKi8KKwkJCW9wcy5vb2JsZW4gPSAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpICogbXRkLT5vb2JzaXplOworCQkJb3BzLm9vYmJ1ZiA9ICZidWZbbGVuXTsKKwkJCXJlcyA9IG10ZC0+cmVhZF9vb2IobXRkLCB0byArIG10ZC0+d3JpdGVzaXplLCAmb3BzKTsKKwkJCWlmIChyZXMgPCAwIHx8IG9wcy5vb2JyZXRsZW4gIT0gb3BzLm9vYmxlbikKKwkJCQlnb3RvIG91dGVycjsKKwogCQkJLyogQ2FsYyB0aGUgYnl0ZSBvZmZzZXQgaW4gdGhlIGJ1ZmZlciAqLwogCQkJcGFnZW9mZnMgPSBwYWdlIC0gKGludCkodG8gPj4gdGhpcy0+cGFnZV9zaGlmdCk7CiAJCQlvZmZzID0gcGFnZW9mZnMgPDwgdGhpcy0+cGFnZV9zaGlmdDsKIAkJCS8qIFByZXNldCB0aGUgYmJ0IGFyZWEgd2l0aCAweGZmICovCi0JCQltZW1zZXQgKCZidWZbb2Zmc10sIDB4ZmYsIChzaXplX3QpKG51bWJsb2NrcyA+PiBzZnQpKTsKLQkJCS8qIFByZXNldCB0aGUgYmJ0J3Mgb29iIGFyZWEgd2l0aCAweGZmICovCi0JCQltZW1zZXQgKCZidWZbbGVuICsgcGFnZW9mZnMgKiBtdGQtPm9vYnNpemVdLCAweGZmLAotCQkJCSgobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpIC0gcGFnZW9mZnMpICogbXRkLT5vb2JzaXplKTsKLQkJCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1ZFUlNJT04pIHsKLQkJCQlidWZbbGVuICsgKHBhZ2VvZmZzICogbXRkLT5vb2JzaXplKSArIHRkLT52ZXJvZmZzXSA9IHRkLT52ZXJzaW9uW2NoaXBdOwotCQkJfQorCQkJbWVtc2V0KCZidWZbb2Zmc10sIDB4ZmYsIChzaXplX3QpIChudW1ibG9ja3MgPj4gc2Z0KSk7CisJCQlvb2JvZmZzID0gbGVuICsgKHBhZ2VvZmZzICogbXRkLT5vb2JzaXplKTsKKworCQl9IGVsc2UgaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfTk9fT09CKSB7CisJCQlvb2JvZmZzID0gMDsKKwkJCW9mZnMgPSB0ZC0+bGVuOworCQkJLyogdGhlIHZlcnNpb24gYnl0ZSAqLworCQkJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikKKwkJCQlvZmZzKys7CisJCQkvKiBDYWxjIGxlbmd0aCAqLworCQkJbGVuID0gKHNpemVfdCkgKG51bWJsb2NrcyA+PiBzZnQpOworCQkJbGVuICs9IG9mZnM7CisJCQkvKiBNYWtlIGl0IHBhZ2UgYWxpZ25lZCAhICovCisJCQlsZW4gPSBBTElHTihsZW4sIG10ZC0+d3JpdGVzaXplKTsKKwkJCS8qIFByZXNldCB0aGUgYnVmZmVyIHdpdGggMHhmZiAqLworCQkJbWVtc2V0KGJ1ZiwgMHhmZiwgbGVuKTsKKwkJCS8qIFBhdHRlcm4gaXMgbG9jYXRlZCBhdCB0aGUgYmVnaW4gb2YgZmlyc3QgcGFnZSAqLworCQkJbWVtY3B5KGJ1ZiwgdGQtPnBhdHRlcm4sIHRkLT5sZW4pOwogCQl9IGVsc2UgewogCQkJLyogQ2FsYyBsZW5ndGggKi8KIAkJCWxlbiA9IChzaXplX3QpIChudW1ibG9ja3MgPj4gc2Z0KTsKIAkJCS8qIE1ha2UgaXQgcGFnZSBhbGlnbmVkICEgKi8KLQkJCWxlbiA9IChsZW4gKyAobXRkLT5vb2JibG9jay0xKSkgJiB+KG10ZC0+b29iYmxvY2stMSk7CisJCQlsZW4gPSBBTElHTihsZW4sIG10ZC0+d3JpdGVzaXplKTsKIAkJCS8qIFByZXNldCB0aGUgYnVmZmVyIHdpdGggMHhmZiAqLwotCQkJbWVtc2V0IChidWYsIDB4ZmYsIGxlbiArIChsZW4gPj4gdGhpcy0+cGFnZV9zaGlmdCkgKiBtdGQtPm9vYnNpemUpOworCQkJbWVtc2V0KGJ1ZiwgMHhmZiwgbGVuICsKKwkJCSAgICAgICAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpKiBtdGQtPm9vYnNpemUpOwogCQkJb2ZmcyA9IDA7CisJCQlvb2JvZmZzID0gbGVuOwogCQkJLyogUGF0dGVybiBpcyBsb2NhdGVkIGluIG9vYiBhcmVhIG9mIGZpcnN0IHBhZ2UgKi8KLQkJCW1lbWNweSAoJmJ1ZltsZW4gKyB0ZC0+b2Zmc10sIHRkLT5wYXR0ZXJuLCB0ZC0+bGVuKTsKLQkJCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1ZFUlNJT04pIHsKLQkJCQlidWZbbGVuICsgdGQtPnZlcm9mZnNdID0gdGQtPnZlcnNpb25bY2hpcF07Ci0JCQl9CisJCQltZW1jcHkoJmJ1Zltvb2JvZmZzICsgdGQtPm9mZnNdLCB0ZC0+cGF0dGVybiwgdGQtPmxlbik7CiAJCX0KIAorCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKQorCQkJYnVmW29vYm9mZnMgKyB0ZC0+dmVyb2Zmc10gPSB0ZC0+dmVyc2lvbltjaGlwXTsKKwogCQkvKiB3YWxrIHRocm91Z2ggdGhlIG1lbW9yeSB0YWJsZSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmxvY2tzOyApIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bWJsb2NrczspIHsKIAkJCXVpbnQ4X3QgZGF0OwogCQkJZGF0ID0gdGhpcy0+YmJ0W2JidG9mZnMgKyAoaSA+PiAyKV07Ci0JCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrICwgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrLCBpKyspIHsKIAkJCQlpbnQgc2Z0Y250ID0gKGkgPDwgKDMgLSBzZnQpKSAmIHNmdG1zazsKIAkJCQkvKiBEbyBub3Qgc3RvcmUgdGhlIHJlc2VydmVkIGJidCBibG9ja3MgISAqLwotCQkJCWJ1ZltvZmZzICsgKGkgPj4gc2Z0KV0gJj0gfihtc2tbZGF0ICYgMHgwM10gPDwgc2Z0Y250KTsKKwkJCQlidWZbb2ZmcyArIChpID4+IHNmdCldICY9CisJCQkJCX4obXNrW2RhdCAmIDB4MDNdIDw8IHNmdGNudCk7CiAJCQkJZGF0ID4+PSAyOwogCQkJfQogCQl9CiAKLQkJbWVtc2V0ICgmZWluZm8sIDAsIHNpemVvZiAoZWluZm8pKTsKKwkJbWVtc2V0KCZlaW5mbywgMCwgc2l6ZW9mKGVpbmZvKSk7CiAJCWVpbmZvLm10ZCA9IG10ZDsKLQkJZWluZm8uYWRkciA9ICh1bnNpZ25lZCBsb25nKSB0bzsKKwkJZWluZm8uYWRkciA9IHRvOwogCQllaW5mby5sZW4gPSAxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdDsKLQkJcmVzID0gbmFuZF9lcmFzZV9uYW5kIChtdGQsICZlaW5mbywgMSk7Ci0JCWlmIChyZXMgPCAwKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAibmFuZF9iYnQ6IEVycm9yIGR1cmluZyBibG9jayBlcmFzZTogJWRcbiIsIHJlcyk7Ci0JCQlyZXR1cm4gcmVzOwotCQl9CisJCXJlcyA9IG5hbmRfZXJhc2VfbmFuZChtdGQsICZlaW5mbywgMSk7CisJCWlmIChyZXMgPCAwKQorCQkJZ290byBvdXRlcnI7CiAKLQkJcmVzID0gbXRkLT53cml0ZV9lY2MgKG10ZCwgdG8sIGxlbiwgJnJldGxlbiwgYnVmLCAmYnVmW2xlbl0sICZvb2JpbmZvKTsKLQkJaWYgKHJlcyA8IDApIHsKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRXJyb3Igd2hpbGUgd3JpdGluZyBiYWQgYmxvY2sgdGFibGUgJWRcbiIsIHJlcyk7Ci0JCQlyZXR1cm4gcmVzOwotCQl9Ci0JCXByaW50ayAoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIHdyaXR0ZW4gdG8gMHglMDh4LCB2ZXJzaW9uIDB4JTAyWFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpIHRvLCB0ZC0+dmVyc2lvbltjaGlwXSk7CisJCXJlcyA9IHNjYW5fd3JpdGVfYmJ0KG10ZCwgdG8sIGxlbiwgYnVmLAorCQkJCXRkLT5vcHRpb25zICYgTkFORF9CQlRfTk9fT09CID8gTlVMTCA6CisJCQkJJmJ1ZltsZW5dKTsKKwkJaWYgKHJlcyA8IDApCisJCQlnb3RvIG91dGVycjsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIHdyaXR0ZW4gdG8gMHglMDEybGx4LCB2ZXJzaW9uICIKKwkJICAgICAgICIweCUwMlhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpdG8sIHRkLT52ZXJzaW9uW2NoaXBdKTsKIAogCQkvKiBNYXJrIGl0IGFzIHVzZWQgKi8KIAkJdGQtPnBhZ2VzW2NoaXBdID0gcGFnZTsKIAl9CiAJcmV0dXJuIDA7CisKKyBvdXRlcnI6CisJcHJpbnRrKEtFUk5fV0FSTklORworCSAgICAgICAibmFuZF9iYnQ6IEVycm9yIHdoaWxlIHdyaXRpbmcgYmFkIGJsb2NrIHRhYmxlICVkXG4iLCByZXMpOworCXJldHVybiByZXM7CiB9CiAKIC8qKgpAQCAtNTg2LDI5ICs5MDksMjcgQEAKICAqIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgbWVtb3J5IGJhc2VkIGJidCBieSBzY2FubmluZyB0aGUgZGV2aWNlCiAgKiBmb3IgbWFudWZhY3R1cmVyIC8gc29mdHdhcmUgbWFya2VkIGdvb2QgLyBiYWQgYmxvY2tzCiAqLwotc3RhdGljIGludCBuYW5kX21lbW9yeV9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQorc3RhdGljIGlubGluZSBpbnQgbmFuZF9tZW1vcnlfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAKLQkvKiBFbnN1cmUgdGhhdCB3ZSBvbmx5IHNjYW4gZm9yIHRoZSBwYXR0ZXJuIGFuZCBub3RoaW5nIGVsc2UgKi8KLQliZC0+b3B0aW9ucyA9IDA7Ci0JY3JlYXRlX2JidCAobXRkLCB0aGlzLT5kYXRhX2J1ZiwgYmQsIC0xKTsKLQlyZXR1cm4gMDsKKwliZC0+b3B0aW9ucyAmPSB+TkFORF9CQlRfU0NBTkVNUFRZOworCXJldHVybiBjcmVhdGVfYmJ0KG10ZCwgdGhpcy0+YnVmZmVycy0+ZGF0YWJ1ZiwgYmQsIC0xKTsKIH0KIAogLyoqCi0gKiBjaGVja19jcmVhdGUgLSBbR0VORVJJQ10gY3JlYXRlIGFuZCB3cml0ZSBiYnQocykgaWYgbmVjY2VjYXJ5CisgKiBjaGVja19jcmVhdGUgLSBbR0VORVJJQ10gY3JlYXRlIGFuZCB3cml0ZSBiYnQocykgaWYgbmVjZXNzYXJ5CiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGJ1ZjoJdGVtcG9yYXJ5IGJ1ZmZlcgogICogQGJkOgkJZGVzY3JpcHRvciBmb3IgdGhlIGdvb2QvYmFkIGJsb2NrIHNlYXJjaCBwYXR0ZXJuCiAgKgogICogVGhlIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgY2FsbCB0byByZWFkX2JidAotICogYW5kIGNyZWF0ZXMgLyB1cGRhdGVzIHRoZSBiYnQocykgaWYgbmVjY2VjYXJ5Ci0gKiBDcmVhdGlvbiBpcyBuZWNjZWNhcnkgaWYgbm8gYmJ0IHdhcyBmb3VuZCBmb3IgdGhlIGNoaXAvZGV2aWNlCi0gKiBVcGRhdGUgaXMgbmVjY2VjYXJ5IGlmIG9uZSBvZiB0aGUgdGFibGVzIGlzIG1pc3Npbmcgb3IgdGhlCisgKiBhbmQgY3JlYXRlcyAvIHVwZGF0ZXMgdGhlIGJidChzKSBpZiBuZWNlc3NhcnkKKyAqIENyZWF0aW9uIGlzIG5lY2Vzc2FyeSBpZiBubyBiYnQgd2FzIGZvdW5kIGZvciB0aGUgY2hpcC9kZXZpY2UKKyAqIFVwZGF0ZSBpcyBuZWNlc3NhcnkgaWYgb25lIG9mIHRoZSB0YWJsZXMgaXMgbWlzc2luZyBvciB0aGUKICAqIHZlcnNpb24gbnIuIG9mIG9uZSB0YWJsZSBpcyBsZXNzIHRoYW4gdGhlIG90aGVyCiAqLwotc3RhdGljIGludCBjaGVja19jcmVhdGUgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpCitzdGF0aWMgaW50IGNoZWNrX2NyZWF0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQogewogCWludCBpLCBjaGlwcywgd3JpdGVvcHMsIGNoaXBzZWwsIHJlczsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwpAQCAtNjI4LDcgKzk0OSw3IEBACiAJCXJkMiA9IE5VTEw7CiAJCS8qIFBlciBjaGlwIG9yIHBlciBkZXZpY2UgPyAqLwogCQljaGlwc2VsID0gKHRkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkgPyBpIDogLTE7Ci0JCS8qIE1pcnJvcmVkIHRhYmxlIGF2aWxhYmxlID8gKi8KKwkJLyogTWlycm9yZWQgdGFibGUgYXZhaWxhYmxlID8gKi8KIAkJaWYgKG1kKSB7CiAJCQlpZiAodGQtPnBhZ2VzW2ldID09IC0xICYmIG1kLT5wYWdlc1tpXSA9PSAtMSkgewogCQkJCXdyaXRlb3BzID0gMHgwMzsKQEAgLTY3NiwzNSArOTk3LDM2IEBACiAJCQlyZCA9IHRkOwogCQkJZ290byB3cml0ZWNoZWNrOwogCQl9Ci1jcmVhdGU6CisJY3JlYXRlOgogCQkvKiBDcmVhdGUgdGhlIGJhZCBibG9jayB0YWJsZSBieSBzY2FubmluZyB0aGUgZGV2aWNlID8gKi8KIAkJaWYgKCEodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9DUkVBVEUpKQogCQkJY29udGludWU7CiAKIAkJLyogQ3JlYXRlIHRoZSB0YWJsZSBpbiBtZW1vcnkgYnkgc2Nhbm5pbmcgdGhlIGNoaXAocykgKi8KLQkJY3JlYXRlX2JidCAobXRkLCBidWYsIGJkLCBjaGlwc2VsKTsKKwkJaWYgKCEodGhpcy0+b3B0aW9ucyAmIE5BTkRfQ1JFQVRFX0VNUFRZX0JCVCkpCisJCQljcmVhdGVfYmJ0KG10ZCwgYnVmLCBiZCwgY2hpcHNlbCk7CiAKIAkJdGQtPnZlcnNpb25baV0gPSAxOwogCQlpZiAobWQpCiAJCQltZC0+dmVyc2lvbltpXSA9IDE7Ci13cml0ZWNoZWNrOgorCXdyaXRlY2hlY2s6CiAJCS8qIHJlYWQgYmFjayBmaXJzdCA/ICovCiAJCWlmIChyZCkKLQkJCXJlYWRfYWJzX2JidCAobXRkLCBidWYsIHJkLCBjaGlwc2VsKTsKKwkJCXJlYWRfYWJzX2JidChtdGQsIGJ1ZiwgcmQsIGNoaXBzZWwpOwogCQkvKiBJZiB0aGV5IHdlcmVuJ3QgdmVyc2lvbmVkLCByZWFkIGJvdGguICovCiAJCWlmIChyZDIpCi0JCQlyZWFkX2Fic19iYnQgKG10ZCwgYnVmLCByZDIsIGNoaXBzZWwpOworCQkJcmVhZF9hYnNfYmJ0KG10ZCwgYnVmLCByZDIsIGNoaXBzZWwpOwogCiAJCS8qIFdyaXRlIHRoZSBiYWQgYmxvY2sgdGFibGUgdG8gdGhlIGRldmljZSA/ICovCiAJCWlmICgod3JpdGVvcHMgJiAweDAxKSAmJiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9XUklURSkpIHsKLQkJCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIHRkLCBtZCwgY2hpcHNlbCk7CisJCQlyZXMgPSB3cml0ZV9iYnQobXRkLCBidWYsIHRkLCBtZCwgY2hpcHNlbCk7CiAJCQlpZiAocmVzIDwgMCkKIAkJCQlyZXR1cm4gcmVzOwogCQl9CiAKIAkJLyogV3JpdGUgdGhlIG1pcnJvciBiYWQgYmxvY2sgdGFibGUgdG8gdGhlIGRldmljZSA/ICovCiAJCWlmICgod3JpdGVvcHMgJiAweDAyKSAmJiBtZCAmJiAobWQtPm9wdGlvbnMgJiBOQU5EX0JCVF9XUklURSkpIHsKLQkJCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CisJCQlyZXMgPSB3cml0ZV9iYnQobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CiAJCQlpZiAocmVzIDwgMCkKIAkJCQlyZXR1cm4gcmVzOwogCQl9CkBAIC03MjEsNyArMTA0Myw3IEBACiAgKiBhY2NpZGVudGFsIGVyYXN1cmVzIC8gd3JpdGVzLiBUaGUgcmVnaW9ucyBhcmUgaWRlbnRpZmllZCBieQogICogdGhlIG1hcmsgMHgwMi4KICovCi1zdGF0aWMgdm9pZCBtYXJrX2JidF9yZWdpb24gKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQorc3RhdGljIHZvaWQgbWFya19iYnRfcmVnaW9uKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IGksIGosIGNoaXBzLCBibG9jaywgbnJibG9ja3MsIHVwZGF0ZTsKQEAgLTczOSwxNCArMTA2MSwxNSBAQAogCWZvciAoaSA9IDA7IGkgPCBjaGlwczsgaSsrKSB7CiAJCWlmICgodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9BQlNQQUdFKSB8fAogCQkgICAgISh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1dSSVRFKSkgewotCQkgICAgCWlmICh0ZC0+cGFnZXNbaV0gPT0gLTEpIGNvbnRpbnVlOworCQkJaWYgKHRkLT5wYWdlc1tpXSA9PSAtMSkKKwkJCQljb250aW51ZTsKIAkJCWJsb2NrID0gdGQtPnBhZ2VzW2ldID4+ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KTsKIAkJCWJsb2NrIDw8PSAxOwogCQkJb2xkdmFsID0gdGhpcy0+YmJ0WyhibG9jayA+PiAzKV07CiAJCQluZXd2YWwgPSBvbGR2YWwgfCAoMHgyIDw8IChibG9jayAmIDB4MDYpKTsKIAkJCXRoaXMtPmJidFsoYmxvY2sgPj4gMyldID0gbmV3dmFsOwogCQkJaWYgKChvbGR2YWwgIT0gbmV3dmFsKSAmJiB0ZC0+cmVzZXJ2ZWRfYmxvY2tfY29kZSkKLQkJCQluYW5kX3VwZGF0ZV9iYnQobXRkLCBibG9jayA8PCAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gMSkpOworCQkJCW5hbmRfdXBkYXRlX2JidChtdGQsIChsb2ZmX3QpYmxvY2sgPDwgKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXVwZGF0ZSA9IDA7CkBAIC03NTksMTggKzEwODIsNjcgQEAKIAkJCW9sZHZhbCA9IHRoaXMtPmJidFsoYmxvY2sgPj4gMyldOwogCQkJbmV3dmFsID0gb2xkdmFsIHwgKDB4MiA8PCAoYmxvY2sgJiAweDA2KSk7CiAJCQl0aGlzLT5iYnRbKGJsb2NrID4+IDMpXSA9IG5ld3ZhbDsKLQkJCWlmIChvbGR2YWwgIT0gbmV3dmFsKSB1cGRhdGUgPSAxOworCQkJaWYgKG9sZHZhbCAhPSBuZXd2YWwpCisJCQkJdXBkYXRlID0gMTsKIAkJCWJsb2NrICs9IDI7CiAJCX0KIAkJLyogSWYgd2Ugd2FudCByZXNlcnZlZCBibG9ja3MgdG8gYmUgcmVjb3JkZWQgdG8gZmxhc2gsIGFuZCBzb21lCiAJCSAgIG5ldyBvbmVzIGhhdmUgYmVlbiBtYXJrZWQsIHRoZW4gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0b3JlZAogCQkgICBiYnRzLiAgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gb25jZS4gKi8KIAkJaWYgKHVwZGF0ZSAmJiB0ZC0+cmVzZXJ2ZWRfYmxvY2tfY29kZSkKLQkJCW5hbmRfdXBkYXRlX2JidChtdGQsIChibG9jayAtIDIpIDw8ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKSk7CisJCQluYW5kX3VwZGF0ZV9iYnQobXRkLCAobG9mZl90KShibG9jayAtIDIpIDw8ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKSk7CiAJfQogfQogCiAvKioKKyAqIHZlcmlmeV9iYnRfZGVzY3IgLSB2ZXJpZnkgdGhlIGJhZCBibG9jayBkZXNjcmlwdGlvbgorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBiZDoJCXRoZSB0YWJsZSB0byB2ZXJpZnkKKyAqCisgKiBUaGlzIGZ1bmN0aW9ucyBwZXJmb3JtcyBhIGZldyBzYW5pdHkgY2hlY2tzIG9uIHRoZSBiYWQgYmxvY2sgZGVzY3JpcHRpb24KKyAqIHRhYmxlLgorICovCitzdGF0aWMgdm9pZCB2ZXJpZnlfYmJ0X2Rlc2NyKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdTMyIHBhdHRlcm5fbGVuOworCXUzMiBiaXRzOworCXUzMiB0YWJsZV9zaXplOworCisJaWYgKCFiZCkKKwkJcmV0dXJuOworCisJcGF0dGVybl9sZW4gPSBiZC0+bGVuOworCWJpdHMgPSBiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX05SQklUU19NU0s7CisKKwlCVUdfT04oKHRoaXMtPm9wdGlvbnMgJiBOQU5EX1VTRV9GTEFTSF9CQlRfTk9fT09CKSAmJgorCQkJISh0aGlzLT5vcHRpb25zICYgTkFORF9VU0VfRkxBU0hfQkJUKSk7CisJQlVHX09OKCFiaXRzKTsKKworCWlmIChiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1ZFUlNJT04pCisJCXBhdHRlcm5fbGVuKys7CisKKwlpZiAoYmQtPm9wdGlvbnMgJiBOQU5EX0JCVF9OT19PT0IpIHsKKwkJQlVHX09OKCEodGhpcy0+b3B0aW9ucyAmIE5BTkRfVVNFX0ZMQVNIX0JCVCkpOworCQlCVUdfT04oISh0aGlzLT5vcHRpb25zICYgTkFORF9VU0VfRkxBU0hfQkJUX05PX09PQikpOworCQlCVUdfT04oYmQtPm9mZnMpOworCQlpZiAoYmQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKQorCQkJQlVHX09OKGJkLT52ZXJvZmZzICE9IGJkLT5sZW4pOworCQlCVUdfT04oYmQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQVZFQ09OVEVOVCk7CisJfQorCisJaWYgKGJkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkKKwkJdGFibGVfc2l6ZSA9IHRoaXMtPmNoaXBzaXplID4+IHRoaXMtPmJidF9lcmFzZV9zaGlmdDsKKwllbHNlCisJCXRhYmxlX3NpemUgPSBtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0OworCXRhYmxlX3NpemUgPj49IDM7CisJdGFibGVfc2l6ZSAqPSBiaXRzOworCWlmIChiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX05PX09PQikKKwkJdGFibGVfc2l6ZSArPSBwYXR0ZXJuX2xlbjsKKwlCVUdfT04odGFibGVfc2l6ZSA+ICgxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCkpOworfQorCisvKioKICAqIG5hbmRfc2Nhbl9iYnQgLSBbTkFORCBJbnRlcmZhY2VdIHNjYW4sIGZpbmQsIHJlYWQgYW5kIG1heWJlIGNyZWF0ZSBiYWQgYmxvY2sgdGFibGUocykKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAYmQ6CQlkZXNjcmlwdG9yIGZvciB0aGUgZ29vZC9iYWQgYmxvY2sgc2VhcmNoIHBhdHRlcm4KQEAgLTc4NCw3ICsxMTU2LDcgQEAKICAqIGJ5IGNhbGxpbmcgdGhlIG5hbmRfZnJlZV9iYnQgZnVuY3Rpb24uCiAgKgogKi8KLWludCBuYW5kX3NjYW5fYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCkKK2ludCBuYW5kX3NjYW5fYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IGxlbiwgcmVzID0gMDsKQEAgLTc5Myw1MyArMTE2NSw1OCBAQAogCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqbWQgPSB0aGlzLT5iYnRfbWQ7CiAKIAlsZW4gPSBtdGQtPnNpemUgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCArIDIpOwotCS8qIEFsbG9jYXRlIG1lbW9yeSAoMmJpdCBwZXIgYmxvY2spICovCi0JdGhpcy0+YmJ0ID0ga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgKDJiaXQgcGVyIGJsb2NrKSBhbmQgY2xlYXIgdGhlIG1lbW9yeSBiYWQgYmxvY2sgdGFibGUgKi8KKwl0aGlzLT5iYnQgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0aGlzLT5iYnQpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAibmFuZF9zY2FuX2JidDogT3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAibmFuZF9zY2FuX2JidDogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQkvKiBDbGVhciB0aGUgbWVtb3J5IGJhZCBibG9jayB0YWJsZSAqLwotCW1lbXNldCAodGhpcy0+YmJ0LCAweDAwLCBsZW4pOwogCiAJLyogSWYgbm8gcHJpbWFyeSB0YWJsZSBkZWNyaXB0b3IgaXMgZ2l2ZW4sIHNjYW4gdGhlIGRldmljZQogCSAqIHRvIGJ1aWxkIGEgbWVtb3J5IGJhc2VkIGJhZCBibG9jayB0YWJsZQogCSAqLwotCWlmICghdGQpCi0JCXJldHVybiBuYW5kX21lbW9yeV9iYnQobXRkLCBiZCk7CisJaWYgKCF0ZCkgeworCQlpZiAoKHJlcyA9IG5hbmRfbWVtb3J5X2JidChtdGQsIGJkKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibmFuZF9iYnQ6IENhbid0IHNjYW4gZmxhc2ggYW5kIGJ1aWxkIHRoZSBSQU0tYmFzZWQgQkJUXG4iKTsKKwkJCWtmcmVlKHRoaXMtPmJidCk7CisJCQl0aGlzLT5iYnQgPSBOVUxMOworCQl9CisJCXJldHVybiByZXM7CisJfQorCXZlcmlmeV9iYnRfZGVzY3IobXRkLCB0ZCk7CisJdmVyaWZ5X2JidF9kZXNjcihtdGQsIG1kKTsKIAogCS8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3Igb25lIGVyYXNlYmxvY2sgaW5jbC4gb29iICovCiAJbGVuID0gKDEgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAlsZW4gKz0gKGxlbiA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAqIG10ZC0+b29ic2l6ZTsKLQlidWYgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOworCWJ1ZiA9IHZtYWxsb2MobGVuKTsKIAlpZiAoIWJ1ZikgewotCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX2JidDogT3V0IG9mIG1lbW9yeVxuIik7Ci0JCWtmcmVlICh0aGlzLT5iYnQpOworCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfYmJ0OiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJa2ZyZWUodGhpcy0+YmJ0KTsKIAkJdGhpcy0+YmJ0ID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogSXMgdGhlIGJidCBhdCBhIGdpdmVuIHBhZ2UgPyAqLwogCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX0FCU1BBR0UpIHsKLQkJcmVzID0gcmVhZF9hYnNfYmJ0cyAobXRkLCBidWYsIHRkLCBtZCk7CisJCXJlcyA9IHJlYWRfYWJzX2JidHMobXRkLCBidWYsIHRkLCBtZCk7CiAJfSBlbHNlIHsKIAkJLyogU2VhcmNoIHRoZSBiYWQgYmxvY2sgdGFibGUgdXNpbmcgYSBwYXR0ZXJuIGluIG9vYiAqLwotCQlyZXMgPSBzZWFyY2hfcmVhZF9iYnRzIChtdGQsIGJ1ZiwgdGQsIG1kKTsKKwkJcmVzID0gc2VhcmNoX3JlYWRfYmJ0cyhtdGQsIGJ1ZiwgdGQsIG1kKTsKIAl9CiAKIAlpZiAocmVzKQotCQlyZXMgPSBjaGVja19jcmVhdGUgKG10ZCwgYnVmLCBiZCk7CisJCXJlcyA9IGNoZWNrX2NyZWF0ZShtdGQsIGJ1ZiwgYmQpOwogCiAJLyogUHJldmVudCB0aGUgYmJ0IHJlZ2lvbnMgZnJvbSBlcmFzaW5nIC8gd3JpdGluZyAqLwotCW1hcmtfYmJ0X3JlZ2lvbiAobXRkLCB0ZCk7CisJbWFya19iYnRfcmVnaW9uKG10ZCwgdGQpOwogCWlmIChtZCkKLQkJbWFya19iYnRfcmVnaW9uIChtdGQsIG1kKTsKKwkJbWFya19iYnRfcmVnaW9uKG10ZCwgbWQpOwogCi0Ja2ZyZWUgKGJ1Zik7CisJdmZyZWUoYnVmKTsKIAlyZXR1cm4gcmVzOwogfQogCi0KIC8qKgogICogbmFuZF91cGRhdGVfYmJ0IC0gW05BTkQgSW50ZXJmYWNlXSB1cGRhdGUgYmFkIGJsb2NrIHRhYmxlKHMpCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtODQ3LDcgKzEyMjQsNyBAQAogICoKICAqIFRoZSBmdW5jdGlvbiB1cGRhdGVzIHRoZSBiYWQgYmxvY2sgdGFibGUocykKICovCi1pbnQgbmFuZF91cGRhdGVfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMpCitpbnQgbmFuZF91cGRhdGVfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcykKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCWludCBsZW4sIHJlcyA9IDAsIHdyaXRlb3BzID0gMDsKQEAgLTg1OSwxMyArMTIzNiwxMiBAQAogCWlmICghdGhpcy0+YmJ0IHx8ICF0ZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlsZW4gPSBtdGQtPnNpemUgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCArIDIpOwogCS8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3Igb25lIGVyYXNlYmxvY2sgaW5jbC4gb29iICovCiAJbGVuID0gKDEgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAlsZW4gKz0gKGxlbiA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAqIG10ZC0+b29ic2l6ZTsKLQlidWYgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3VwZGF0ZV9iYnQ6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfdXBkYXRlX2JidDogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtODczLDcgKzEyNDksNyBAQAogCiAJLyogRG8gd2UgaGF2ZSBhIGJidCBwZXIgY2hpcCA/ICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkgewotCQljaGlwID0gKGludCkgKG9mZnMgPj4gdGhpcy0+Y2hpcF9zaGlmdCk7CisJCWNoaXAgPSAoaW50KShvZmZzID4+IHRoaXMtPmNoaXBfc2hpZnQpOwogCQljaGlwc2VsID0gY2hpcDsKIAl9IGVsc2UgewogCQljaGlwID0gMDsKQEAgLTg4Niw1NSArMTI2MiwyNCBAQAogCiAJLyogV3JpdGUgdGhlIGJhZCBibG9jayB0YWJsZSB0byB0aGUgZGV2aWNlID8gKi8KIAlpZiAoKHdyaXRlb3BzICYgMHgwMSkgJiYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfV1JJVEUpKSB7Ci0JCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIHRkLCBtZCwgY2hpcHNlbCk7CisJCXJlcyA9IHdyaXRlX2JidChtdGQsIGJ1ZiwgdGQsIG1kLCBjaGlwc2VsKTsKIAkJaWYgKHJlcyA8IDApCiAJCQlnb3RvIG91dDsKIAl9CiAJLyogV3JpdGUgdGhlIG1pcnJvciBiYWQgYmxvY2sgdGFibGUgdG8gdGhlIGRldmljZSA/ICovCiAJaWYgKCh3cml0ZW9wcyAmIDB4MDIpICYmIG1kICYmIChtZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1dSSVRFKSkgewotCQlyZXMgPSB3cml0ZV9iYnQgKG10ZCwgYnVmLCBtZCwgdGQsIGNoaXBzZWwpOworCQlyZXMgPSB3cml0ZV9iYnQobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CiAJfQogCi1vdXQ6Ci0Ja2ZyZWUgKGJ1Zik7Cisgb3V0OgorCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJlczsKIH0KIAogLyogRGVmaW5lIHNvbWUgZ2VuZXJpYyBiYWQgLyBnb29kIGJsb2NrIHNjYW4gcGF0dGVybiB3aGljaCBhcmUgdXNlZAotICogd2hpbGUgc2Nhbm5pbmcgYSBkZXZpY2UgZm9yIGZhY3RvcnkgbWFya2VkIGdvb2QgLyBiYWQgYmxvY2tzCi0gKgotICogVGhlIG1lbW9yeSBiYXNlZCBwYXR0ZXJucyBqdXN0Ci0gKi8KKyAqIHdoaWxlIHNjYW5uaW5nIGEgZGV2aWNlIGZvciBmYWN0b3J5IG1hcmtlZCBnb29kIC8gYmFkIGJsb2Nrcy4gKi8KIHN0YXRpYyB1aW50OF90IHNjYW5fZmZfcGF0dGVybltdID0geyAweGZmLCAweGZmIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc21hbGxwYWdlX21lbW9yeWJhc2VkID0gewotCS5vcHRpb25zID0gMCwKLQkub2ZmcyA9IDUsCi0JLmxlbiA9IDEsCi0JLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgbGFyZ2VwYWdlX21lbW9yeWJhc2VkID0gewotCS5vcHRpb25zID0gMCwKLQkub2ZmcyA9IDAsCi0JLmxlbiA9IDIsCi0JLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc21hbGxwYWdlX2ZsYXNoYmFzZWQgPSB7Ci0JLm9wdGlvbnMgPSBOQU5EX0JCVF9TQ0FORU1QVFkgfCBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMsCi0JLm9mZnMgPSA1LAotCS5sZW4gPSAxLAotCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCi19OwotCi1zdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGxhcmdlcGFnZV9mbGFzaGJhc2VkID0gewotCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTkVNUFRZIHwgTkFORF9CQlRfU0NBTkFMTFBBR0VTLAotCS5vZmZzID0gMCwKLQkubGVuID0gMiwKLQkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgotfTsKLQogc3RhdGljIHVpbnQ4X3Qgc2Nhbl9hZ2FuZF9wYXR0ZXJuW10gPSB7IDB4MUMsIDB4NzEsIDB4QzcsIDB4MUMsIDB4NzEsIDB4QzcgfTsKIAogc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBhZ2FuZF9mbGFzaGJhc2VkID0gewpAQCAtOTY5LDYgKzEzMTQsNTkgQEAKIAkucGF0dGVybiA9IG1pcnJvcl9wYXR0ZXJuCiB9OwogCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGJidF9tYWluX25vX2JidF9kZXNjciA9IHsKKwkub3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8IE5BTkRfQkJUX1dSSVRFCisJCXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJT04gfCBOQU5EX0JCVF9QRVJDSElQCisJCXwgTkFORF9CQlRfTk9fT09CLAorCS5sZW4gPSA0LAorCS52ZXJvZmZzID0gNCwKKwkubWF4YmxvY2tzID0gNCwKKwkucGF0dGVybiA9IGJidF9wYXR0ZXJuCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGJidF9taXJyb3Jfbm9fYmJ0X2Rlc2NyID0geworCS5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfQ1JFQVRFIHwgTkFORF9CQlRfV1JJVEUKKwkJfCBOQU5EX0JCVF8yQklUIHwgTkFORF9CQlRfVkVSU0lPTiB8IE5BTkRfQkJUX1BFUkNISVAKKwkJfCBOQU5EX0JCVF9OT19PT0IsCisJLmxlbiA9IDQsCisJLnZlcm9mZnMgPSA0LAorCS5tYXhibG9ja3MgPSA0LAorCS5wYXR0ZXJuID0gbWlycm9yX3BhdHRlcm4KK307CisKKyNkZWZpbmUgQkJUX1NDQU5fT1BUSU9OUyAoTkFORF9CQlRfU0NBTkxBU1RQQUdFIHwgTkFORF9CQlRfU0NBTjJORFBBR0UgfCBcCisJCU5BTkRfQkJUX1NDQU5CWVRFMUFORDYpCisvKioKKyAqIG5hbmRfY3JlYXRlX2RlZmF1bHRfYmJ0X2Rlc2NyIC0gW0ludGVybmFsXSBDcmVhdGVzIGEgQkJUIGRlc2NyaXB0b3Igc3RydWN0dXJlCisgKiBAdGhpczoJTkFORCBjaGlwIHRvIGNyZWF0ZSBkZXNjcmlwdG9yIGZvcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhIG5hbmRfYmJ0X2Rlc2NyIGZvciBCQk0gZGV0ZWN0aW9uCisgKiBiYXNlZCBvbiB0aGUgcHJvcGVydGllcyBvZiAidGhpcyIuIFRoZSBuZXcgZGVzY3JpcHRvciBpcyBzdG9yZWQgaW4KKyAqIHRoaXMtPmJhZGJsb2NrX3BhdHRlcm4uIFRodXMsIHRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gc2hvdWxkIGJlIE5VTEwgd2hlbgorICogcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24uCisgKgorICovCitzdGF0aWMgaW50IG5hbmRfY3JlYXRlX2RlZmF1bHRfYmJ0X2Rlc2NyKHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMpCit7CisJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZDsKKwlpZiAodGhpcy0+YmFkYmxvY2tfcGF0dGVybikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJCQlQgZGVzY3IgYWxyZWFkeSBhbGxvY2F0ZWQ7IG5vdCByZXBsYWNpbmcuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWJkID0ga3phbGxvYyhzaXplb2YoKmJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiZCkgeworCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfY3JlYXRlX2RlZmF1bHRfYmJ0X2Rlc2NyOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJkLT5vcHRpb25zID0gdGhpcy0+b3B0aW9ucyAmIEJCVF9TQ0FOX09QVElPTlM7CisJYmQtPm9mZnMgPSB0aGlzLT5iYWRibG9ja3BvczsKKwliZC0+bGVuID0gKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSA/IDIgOiAxOworCWJkLT5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuOworCWJkLT5vcHRpb25zIHw9IE5BTkRfQkJUX0RZTkFNSUNTVFJVQ1Q7CisJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9IGJkOworCXJldHVybiAwOworfQorCiAvKioKICAqIG5hbmRfZGVmYXVsdF9iYnQgLSBbTkFORCBJbnRlcmZhY2VdIFNlbGVjdCBhIGRlZmF1bHQgYmFkIGJsb2NrIHRhYmxlIGZvciB0aGUgZGV2aWNlCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtOTc3LDcgKzEzNzUsNyBAQAogICogc3VwcG9ydCBmb3IgdGhlIGRldmljZSBhbmQgY2FsbHMgdGhlIG5hbmRfc2Nhbl9iYnQgZnVuY3Rpb24KICAqCiAqLwotaW50IG5hbmRfZGVmYXVsdF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoraW50IG5hbmRfZGVmYXVsdF9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIApAQCAtOTg3LDcgKzEzODUsNyBAQAogCSAqIG9mIHRoZSBnb29kIC8gYmFkIGluZm9ybWF0aW9uLCBzbyB3ZSBfbXVzdF8gc3RvcmUKIAkgKiB0aGlzIGluZm9ybWF0aW9uIGluIGEgZ29vZCAvIGJhZCB0YWJsZSBkdXJpbmcKIAkgKiBzdGFydHVwCi0JKi8KKwkgKi8KIAlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSVNfQU5EKSB7CiAJCS8qIFVzZSB0aGUgZGVmYXVsdCBwYXR0ZXJuIGRlc2NyaXB0b3JzICovCiAJCWlmICghdGhpcy0+YmJ0X3RkKSB7CkBAIC05OTUsMzAgKzEzOTMsMzAgQEAKIAkJCXRoaXMtPmJidF9tZCA9ICZiYnRfbWlycm9yX2Rlc2NyOwogCQl9CiAJCXRoaXMtPm9wdGlvbnMgfD0gTkFORF9VU0VfRkxBU0hfQkJUOwotCQlyZXR1cm4gbmFuZF9zY2FuX2JidCAobXRkLCAmYWdhbmRfZmxhc2hiYXNlZCk7CisJCXJldHVybiBuYW5kX3NjYW5fYmJ0KG10ZCwgJmFnYW5kX2ZsYXNoYmFzZWQpOwogCX0KIAotCiAJLyogSXMgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgcmVxdWVzdGVkID8gKi8KIAlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfVVNFX0ZMQVNIX0JCVCkgewogCQkvKiBVc2UgdGhlIGRlZmF1bHQgcGF0dGVybiBkZXNjcmlwdG9ycyAqLwogCQlpZiAoIXRoaXMtPmJidF90ZCkgewotCQkJdGhpcy0+YmJ0X3RkID0gJmJidF9tYWluX2Rlc2NyOwotCQkJdGhpcy0+YmJ0X21kID0gJmJidF9taXJyb3JfZGVzY3I7Ci0JCX0KLQkJaWYgKCF0aGlzLT5iYWRibG9ja19wYXR0ZXJuKSB7Ci0JCQl0aGlzLT5iYWRibG9ja19wYXR0ZXJuID0gKG10ZC0+b29iYmxvY2sgPiA1MTIpID8KLQkJCQkmbGFyZ2VwYWdlX2ZsYXNoYmFzZWQgOiAmc21hbGxwYWdlX2ZsYXNoYmFzZWQ7CisJCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfVVNFX0ZMQVNIX0JCVF9OT19PT0IpIHsKKwkJCQl0aGlzLT5iYnRfdGQgPSAmYmJ0X21haW5fbm9fYmJ0X2Rlc2NyOworCQkJCXRoaXMtPmJidF9tZCA9ICZiYnRfbWlycm9yX25vX2JidF9kZXNjcjsKKwkJCX0gZWxzZSB7CisJCQkJdGhpcy0+YmJ0X3RkID0gJmJidF9tYWluX2Rlc2NyOworCQkJCXRoaXMtPmJidF9tZCA9ICZiYnRfbWlycm9yX2Rlc2NyOworCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJdGhpcy0+YmJ0X3RkID0gTlVMTDsKIAkJdGhpcy0+YmJ0X21kID0gTlVMTDsKLQkJaWYgKCF0aGlzLT5iYWRibG9ja19wYXR0ZXJuKSB7Ci0JCQl0aGlzLT5iYWRibG9ja19wYXR0ZXJuID0gKG10ZC0+b29iYmxvY2sgPiA1MTIpID8KLQkJCQkmbGFyZ2VwYWdlX21lbW9yeWJhc2VkIDogJnNtYWxscGFnZV9tZW1vcnliYXNlZDsKLQkJfQogCX0KLQlyZXR1cm4gbmFuZF9zY2FuX2JidCAobXRkLCB0aGlzLT5iYWRibG9ja19wYXR0ZXJuKTsKKworCWlmICghdGhpcy0+YmFkYmxvY2tfcGF0dGVybikKKwkJbmFuZF9jcmVhdGVfZGVmYXVsdF9iYnRfZGVzY3IodGhpcyk7CisKKwlyZXR1cm4gbmFuZF9zY2FuX2JidChtdGQsIHRoaXMtPmJhZGJsb2NrX3BhdHRlcm4pOwogfQogCiAvKioKQEAgLTEwMjcsMjYgKzE0MjUsMjcgQEAKICAqIEBvZmZzOglvZmZzZXQgaW4gdGhlIGRldmljZQogICogQGFsbG93YmJ0OglhbGxvdyBhY2Nlc3MgdG8gYmFkIGJsb2NrIHRhYmxlIHJlZ2lvbgogICoKLSAqLwotaW50IG5hbmRfaXNiYWRfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIGludCBhbGxvd2JidCkKKyovCitpbnQgbmFuZF9pc2JhZF9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBpbnQgYWxsb3diYnQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgYmxvY2s7Ci0JdWludDhfdAlyZXM7CisJdWludDhfdCByZXM7CiAKIAkvKiBHZXQgYmxvY2sgbnVtYmVyICogMiAqLwotCWJsb2NrID0gKGludCkgKG9mZnMgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpKTsKKwlibG9jayA9IChpbnQpKG9mZnMgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpKTsKIAlyZXMgPSAodGhpcy0+YmJ0W2Jsb2NrID4+IDNdID4+IChibG9jayAmIDB4MDYpKSAmIDB4MDM7CiAKLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMiwgIm5hbmRfaXNiYWRfYmJ0KCk6IGJidCBpbmZvIGZvciBvZmZzIDB4JTA4eDogKGJsb2NrICVkKSAweCUwMnhcbiIsCi0JCSh1bnNpZ25lZCBpbnQpb2ZmcywgcmVzLCBibG9jayA+PiAxKTsKKwlNVERERUJVRyhNVERfREVCVUdfTEVWRUwyLCAibmFuZF9pc2JhZF9iYnQoKTogYmJ0IGluZm8gZm9yIG9mZnMgMHglMDh4OiAoYmxvY2sgJWQpIDB4JTAyeFxuIiwKKwkgICAgICAodW5zaWduZWQgaW50KW9mZnMsIGJsb2NrID4+IDEsIHJlcyk7CiAKIAlzd2l0Y2ggKChpbnQpcmVzKSB7Ci0JY2FzZSAweDAwOglyZXR1cm4gMDsKLQljYXNlIDB4MDE6CXJldHVybiAxOwotCWNhc2UgMHgwMjoJcmV0dXJuIGFsbG93YmJ0ID8gMCA6IDE7CisJY2FzZSAweDAwOgorCQlyZXR1cm4gMDsKKwljYXNlIDB4MDE6CisJCXJldHVybiAxOworCWNhc2UgMHgwMjoKKwkJcmV0dXJuIGFsbG93YmJ0ID8gMCA6IDE7CiAJfQogCXJldHVybiAxOwogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmFuZC9uYW5kX2JjaC5jIGIvZHJpdmVycy9uYW5kL25hbmRfYmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzNWZjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmFuZC9uYW5kX2JjaC5jCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIEVDQyBjb3JyZWN0aW9uIGZvciBtb3JlIHRoYW4gMSBiaXQgcGVyIGJsb2NrIG9mIGRhdGEsCisgKiB1c2luZyBiaW5hcnkgQkNIIGNvZGVzLiBJdCByZWxpZXMgb24gdGhlIGdlbmVyaWMgQkNIIGxpYnJhcnkgbGliL2JjaC5jLgorICoKKyAqIENvcHlyaWdodCDCqSAyMDExIEl2YW4gRGplbGljIDxpdmFuLmRqZWxpY0BwYXJyb3QuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorLyojaW5jbHVkZSA8YXNtL2lvLmg+Ki8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfYmNoLmg+CisjaW5jbHVkZSA8bGludXgvYmNoLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisKKy8qKgorICogc3RydWN0IG5hbmRfYmNoX2NvbnRyb2wgLSBwcml2YXRlIE5BTkQgQkNIIGNvbnRyb2wgc3RydWN0dXJlCisgKiBAYmNoOiAgICAgICBCQ0ggY29udHJvbCBzdHJ1Y3R1cmUKKyAqIEBlY2NsYXlvdXQ6IHByaXZhdGUgZWNjIGxheW91dCBmb3IgdGhpcyBCQ0ggY29uZmlndXJhdGlvbgorICogQGVycmxvYzogICAgZXJyb3IgbG9jYXRpb24gYXJyYXkKKyAqIEBlY2NtYXNrOiAgIFhPUiBlY2MgbWFzaywgYWxsb3dzIGVyYXNlZCBwYWdlcyB0byBiZSBkZWNvZGVkIGFzIHZhbGlkCisgKi8KK3N0cnVjdCBuYW5kX2JjaF9jb250cm9sIHsKKwlzdHJ1Y3QgYmNoX2NvbnRyb2wgICAqYmNoOworCXN0cnVjdCBuYW5kX2VjY2xheW91dCBlY2NsYXlvdXQ7CisJdW5zaWduZWQgaW50ICAgICAgICAgKmVycmxvYzsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAqZWNjbWFzazsKK307CisKKy8qKgorICogbmFuZF9iY2hfY2FsY3VsYXRlX2VjYyAtIFtOQU5EIEludGVyZmFjZV0gQ2FsY3VsYXRlIEVDQyBmb3IgZGF0YSBibG9jaworICogQG10ZDoJTVREIGJsb2NrIHN0cnVjdHVyZQorICogQGJ1ZjoJaW5wdXQgYnVmZmVyIHdpdGggcmF3IGRhdGEKKyAqIEBjb2RlOglvdXRwdXQgYnVmZmVyIHdpdGggRUNDCisgKi8KK2ludCBuYW5kX2JjaF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgICB1bnNpZ25lZCBjaGFyICpjb2RlKQoreworCWNvbnN0IHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfYmNoX2NvbnRyb2wgKm5iYyA9IGNoaXAtPmVjYy5wcml2OworCXVuc2lnbmVkIGludCBpOworCisJbWVtc2V0KGNvZGUsIDAsIGNoaXAtPmVjYy5ieXRlcyk7CisJZW5jb2RlX2JjaChuYmMtPmJjaCwgYnVmLCBjaGlwLT5lY2Muc2l6ZSwgY29kZSk7CisKKwkvKiBhcHBseSBtYXNrIHNvIHRoYXQgYW4gZXJhc2VkIHBhZ2UgaXMgYSB2YWxpZCBjb2Rld29yZCAqLworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5lY2MuYnl0ZXM7IGkrKykKKwkJY29kZVtpXSBePSBuYmMtPmVjY21hc2tbaV07CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuYW5kX2JjaF9jb3JyZWN0X2RhdGEgLSBbTkFORCBJbnRlcmZhY2VdIERldGVjdCBhbmQgY29ycmVjdCBiaXQgZXJyb3IocykKKyAqIEBtdGQ6CU1URCBibG9jayBzdHJ1Y3R1cmUKKyAqIEBidWY6CXJhdyBkYXRhIHJlYWQgZnJvbSB0aGUgY2hpcAorICogQHJlYWRfZWNjOglFQ0MgZnJvbSB0aGUgY2hpcAorICogQGNhbGNfZWNjOgl0aGUgRUNDIGNhbGN1bGF0ZWQgZnJvbSByYXcgZGF0YQorICoKKyAqIERldGVjdCBhbmQgY29ycmVjdCBiaXQgZXJyb3JzIGZvciBhIGRhdGEgYnl0ZSBibG9jaworICovCitpbnQgbmFuZF9iY2hfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgIHVuc2lnbmVkIGNoYXIgKnJlYWRfZWNjLCB1bnNpZ25lZCBjaGFyICpjYWxjX2VjYykKK3sKKwljb25zdCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2JjaF9jb250cm9sICpuYmMgPSBjaGlwLT5lY2MucHJpdjsKKwl1bnNpZ25lZCBpbnQgKmVycmxvYyA9IG5iYy0+ZXJybG9jOworCWludCBpLCBjb3VudDsKKworCWNvdW50ID0gZGVjb2RlX2JjaChuYmMtPmJjaCwgTlVMTCwgY2hpcC0+ZWNjLnNpemUsIHJlYWRfZWNjLCBjYWxjX2VjYywKKwkJCSAgIE5VTEwsIGVycmxvYyk7CisJaWYgKGNvdW50ID4gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJaWYgKGVycmxvY1tpXSA8IChjaGlwLT5lY2Muc2l6ZSo4KSkKKwkJCQkvKiBlcnJvciBpcyBsb2NhdGVkIGluIGRhdGEsIGNvcnJlY3QgaXQgKi8KKwkJCQlidWZbZXJybG9jW2ldID4+IDNdIF49ICgxIDw8IChlcnJsb2NbaV0gJiA3KSk7CisJCQkvKiBlbHNlIGVycm9yIGluIGVjYywgbm8gYWN0aW9uIG5lZWRlZCAqLworCisJCQlNVERERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiJXM6IGNvcnJlY3RlZCBiaXRmbGlwICV1XG4iLAorCQkJICAgICAgX19mdW5jX18sIGVycmxvY1tpXSk7CisJCX0KKwl9IGVsc2UgaWYgKGNvdW50IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImVjYyB1bnJlY292ZXJhYmxlIGVycm9yXG4iKTsKKwkJY291bnQgPSAtMTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCisvKioKKyAqIG5hbmRfYmNoX2luaXQgLSBbTkFORCBJbnRlcmZhY2VdIEluaXRpYWxpemUgTkFORCBCQ0ggZXJyb3IgY29ycmVjdGlvbgorICogQG10ZDoJTVREIGJsb2NrIHN0cnVjdHVyZQorICogQGVjY3NpemU6CWVjYyBibG9jayBzaXplIGluIGJ5dGVzCisgKiBAZWNjYnl0ZXM6CWVjYyBsZW5ndGggaW4gYnl0ZXMKKyAqIEBlY2NsYXlvdXQ6CW91dHB1dCBkZWZhdWx0IGxheW91dAorICoKKyAqIFJldHVybnM6CisgKiAgYSBwb2ludGVyIHRvIGEgbmV3IE5BTkQgQkNIIGNvbnRyb2wgc3RydWN0dXJlLCBvciBOVUxMIHVwb24gZmFpbHVyZQorICoKKyAqIEluaXRpYWxpemUgTkFORCBCQ0ggZXJyb3IgY29ycmVjdGlvbi4gUGFyYW1ldGVycyBAZWNjc2l6ZSBhbmQgQGVjY2J5dGVzCisgKiBhcmUgdXNlZCB0byBjb21wdXRlIEJDSCBwYXJhbWV0ZXJzIG0gKEdhbG9pcyBmaWVsZCBvcmRlcikgYW5kIHQgKGVycm9yCisgKiBjb3JyZWN0aW9uIGNhcGFiaWxpdHkpLiBAZWNjYnl0ZXMgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMKKyAqIHJlcXVpcmVkIHRvIHN0b3JlIG0qdCBiaXRzLCB3aGVyZSBtIGlzIHN1Y2ggdGhhdCAyXm0tMSA+IEBlY2NzaXplKjguCisgKgorICogRXhhbXBsZTogdG8gY29uZmlndXJlIDQgYml0IGNvcnJlY3Rpb24gcGVyIDUxMiBieXRlcywgeW91IHNob3VsZCBwYXNzCisgKiBAZWNjc2l6ZSA9IDUxMiAgKHRodXMsIG09MTMgaXMgdGhlIHNtYWxsZXN0IGludGVnZXIgc3VjaCB0aGF0IDJebS0xID4gNTEyKjgpCisgKiBAZWNjYnl0ZXMgPSA3ICAgKDcgYnl0ZXMgYXJlIHJlcXVpcmVkIHRvIHN0b3JlIG0qdCA9IDEzKjQgPSA1MiBiaXRzKQorICovCitzdHJ1Y3QgbmFuZF9iY2hfY29udHJvbCAqCituYW5kX2JjaF9pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgZWNjc2l6ZSwgdW5zaWduZWQgaW50IGVjY2J5dGVzLAorCSAgICAgIHN0cnVjdCBuYW5kX2VjY2xheW91dCAqKmVjY2xheW91dCkKK3sKKwl1bnNpZ25lZCBpbnQgbSwgdCwgZWNjc3RlcHMsIGk7CisJc3RydWN0IG5hbmRfZWNjbGF5b3V0ICpsYXlvdXQ7CisJc3RydWN0IG5hbmRfYmNoX2NvbnRyb2wgKm5iYyA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqZXJhc2VkX3BhZ2U7CisKKwlpZiAoIWVjY3NpemUgfHwgIWVjY2J5dGVzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImVjYyBwYXJhbWV0ZXJzIG5vdCBzdXBwbGllZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwltID0gZmxzKDErOCplY2NzaXplKTsKKwl0ID0gKGVjY2J5dGVzKjgpL207CisKKwluYmMgPSBremFsbG9jKHNpemVvZigqbmJjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuYmMpCisJCWdvdG8gZmFpbDsKKworCW5iYy0+YmNoID0gaW5pdF9iY2gobSwgdCwgMCk7CisJaWYgKCFuYmMtPmJjaCkKKwkJZ290byBmYWlsOworCisJLyogdmVyaWZ5IHRoYXQgZWNjYnl0ZXMgaGFzIHRoZSBleHBlY3RlZCB2YWx1ZSAqLworCWlmIChuYmMtPmJjaC0+ZWNjX2J5dGVzICE9IGVjY2J5dGVzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImludmFsaWQgZWNjYnl0ZXMgJXUsIHNob3VsZCBiZSAldVxuIiwKKwkJICAgICAgIGVjY2J5dGVzLCBuYmMtPmJjaC0+ZWNjX2J5dGVzKTsKKwkJZ290byBmYWlsOworCX0KKworCWVjY3N0ZXBzID0gbXRkLT53cml0ZXNpemUvZWNjc2l6ZTsKKworCS8qIGlmIG5vIGVjYyBwbGFjZW1lbnQgc2NoZW1lIHdhcyBwcm92aWRlZCwgYnVpbGQgb25lICovCisJaWYgKCEqZWNjbGF5b3V0KSB7CisKKwkJLyogaGFuZGxlIGxhcmdlIHBhZ2UgZGV2aWNlcyBvbmx5ICovCisJCWlmIChtdGQtPm9vYnNpemUgPCA2NCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXVzdCBwcm92aWRlIGFuIG9vYiBzY2hlbWUgZm9yICIKKwkJCSAgICAgICAib29ic2l6ZSAlZFxuIiwgbXRkLT5vb2JzaXplKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWxheW91dCA9ICZuYmMtPmVjY2xheW91dDsKKwkJbGF5b3V0LT5lY2NieXRlcyA9IGVjY3N0ZXBzKmVjY2J5dGVzOworCisJCS8qIHJlc2VydmUgMiBieXRlcyBmb3IgYmFkIGJsb2NrIG1hcmtlciAqLworCQlpZiAobGF5b3V0LT5lY2NieXRlcysyID4gbXRkLT5vb2JzaXplKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJubyBzdWl0YWJsZSBvb2Igc2NoZW1lIGF2YWlsYWJsZSAiCisJCQkgICAgICAgImZvciBvb2JzaXplICVkIGVjY2J5dGVzICV1XG4iLCBtdGQtPm9vYnNpemUsCisJCQkgICAgICAgZWNjYnl0ZXMpOworCQkJZ290byBmYWlsOworCQl9CisJCS8qIHB1dCBlY2MgYnl0ZXMgYXQgb29iIHRhaWwgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxheW91dC0+ZWNjYnl0ZXM7IGkrKykKKwkJCWxheW91dC0+ZWNjcG9zW2ldID0gbXRkLT5vb2JzaXplLWxheW91dC0+ZWNjYnl0ZXMraTsKKworCQlsYXlvdXQtPm9vYmZyZWVbMF0ub2Zmc2V0ID0gMjsKKwkJbGF5b3V0LT5vb2JmcmVlWzBdLmxlbmd0aCA9IG10ZC0+b29ic2l6ZS0yLWxheW91dC0+ZWNjYnl0ZXM7CisKKwkJKmVjY2xheW91dCA9IGxheW91dDsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2tzICovCisJaWYgKDgqKGVjY3NpemUrZWNjYnl0ZXMpID49ICgxIDw8IG0pKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImVjY3NpemUgJXUgaXMgdG9vIGxhcmdlXG4iLCBlY2NzaXplKTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAoKCplY2NsYXlvdXQpLT5lY2NieXRlcyAhPSAoZWNjc3RlcHMqZWNjYnl0ZXMpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImludmFsaWQgZWNjIGxheW91dFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwluYmMtPmVjY21hc2sgPSBrbWFsbG9jKGVjY2J5dGVzLCBHRlBfS0VSTkVMKTsKKwluYmMtPmVycmxvYyA9IGttYWxsb2ModCpzaXplb2YoKm5iYy0+ZXJybG9jKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuYmMtPmVjY21hc2sgfHwgIW5iYy0+ZXJybG9jKQorCQlnb3RvIGZhaWw7CisJLyoKKwkgKiBjb21wdXRlIGFuZCBzdG9yZSB0aGUgaW52ZXJ0ZWQgZWNjIG9mIGFuIGVyYXNlZCBlY2MgYmxvY2sKKwkgKi8KKwllcmFzZWRfcGFnZSA9IGttYWxsb2MoZWNjc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlcmFzZWRfcGFnZSkKKwkJZ290byBmYWlsOworCisJbWVtc2V0KGVyYXNlZF9wYWdlLCAweGZmLCBlY2NzaXplKTsKKwltZW1zZXQobmJjLT5lY2NtYXNrLCAwLCBlY2NieXRlcyk7CisJZW5jb2RlX2JjaChuYmMtPmJjaCwgZXJhc2VkX3BhZ2UsIGVjY3NpemUsIG5iYy0+ZWNjbWFzayk7CisJa2ZyZWUoZXJhc2VkX3BhZ2UpOworCisJZm9yIChpID0gMDsgaSA8IGVjY2J5dGVzOyBpKyspCisJCW5iYy0+ZWNjbWFza1tpXSBePSAweGZmOworCisJcmV0dXJuIG5iYzsKK2ZhaWw6CisJbmFuZF9iY2hfZnJlZShuYmMpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIG5hbmRfYmNoX2ZyZWUgLSBbTkFORCBJbnRlcmZhY2VdIFJlbGVhc2UgTkFORCBCQ0ggRUNDIHJlc291cmNlcworICogQG5iYzoJTkFORCBCQ0ggY29udHJvbCBzdHJ1Y3R1cmUKKyAqLwordm9pZCBuYW5kX2JjaF9mcmVlKHN0cnVjdCBuYW5kX2JjaF9jb250cm9sICpuYmMpCit7CisJaWYgKG5iYykgeworCQlmcmVlX2JjaChuYmMtPmJjaCk7CisJCWtmcmVlKG5iYy0+ZXJybG9jKTsKKwkJa2ZyZWUobmJjLT5lY2NtYXNrKTsKKwkJa2ZyZWUobmJjKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25hbmQvbmFuZF9lY2MuYyBiL2RyaXZlcnMvbmFuZC9uYW5kX2VjYy5jCmluZGV4IGYzM2JlOTYuLjgxZjBlMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmFuZC9uYW5kX2VjYy5jCisrKyBiL2RyaXZlcnMvbmFuZC9uYW5kX2VjYy5jCkBAIC03LDcgKzcsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDQgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBUb3NoaWJhIEFtZXJpY2EgRWxlY3Ryb25pY3MgQ29tcG9uZW50cywgSW5jLgogICoKLSAqICRJZDogbmFuZF9lY2MuYyx2IDEuMTQgMjAwNC8wNi8xNiAxNTozNDozNyBnbGVpeG5lciBFeHAgJAorICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTM3LDkgKzM3LDIwIEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KIAotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpICYmICFkZWZpbmVkKENGR19OQU5EX0xFR0FDWSkKKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAKLSNpbmNsdWRlPGxpbnV4L210ZC9tdGQuaD4KKy8qIFRoZSBQUEM0eHggTkRGQyB1c2VzIFNtYXJ0IE1lZGlhIChTTUMpIGJ5dGVzIG9yZGVyICovCisjaWZkZWYgQ09ORklHX05BTkRfTkRGQworI2RlZmluZSBDT05GSUdfTVREX05BTkRfRUNDX1NNQworI2VuZGlmCisKKy8qCisgKiBOQU5ELVNQTCBoYXMgbm8gc29md2FyZSBFQ0MgZm9yIG5vdywgc28gZG9uJ3QgaW5jbHVkZSBuYW5kX2NhbGN1bGF0ZV9lY2MoKSwKKyAqIG9ubHkgbmFuZF9jb3JyZWN0X2RhdGEoKSBpcyBuZWVkZWQKKyAqLworCisjaWYgIWRlZmluZWQoQ09ORklHX05BTkRfU1BMKSB8fCBkZWZpbmVkKENPTkZJR19TUExfTkFORF9TT0ZURUNDKQogLyoKICAqIFByZS1jYWxjdWxhdGVkIDI1Ni13YXkgMSBieXRlIGNvbHVtbiBwYXJpdHkKICAqLwpAQCAtNjIsOTAgKzczLDc1IEBACiAJMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwgMHgwMywgMHg1NiwgMHg1NSwgMHgwMAogfTsKIAotCiAvKioKLSAqIG5hbmRfdHJhbnNfcmVzdWx0IC0gW0dFTkVSSUNdIGNyZWF0ZSBub24taW52ZXJ0ZWQgRUNDCi0gKiBAcmVnMjoJbGluZSBwYXJpdHkgcmVnIDIKLSAqIEByZWczOglsaW5lIHBhcml0eSByZWcgMwotICogQGVjY19jb2RlOgllY2MKLSAqCi0gKiBDcmVhdGVzIG5vbi1pbnZlcnRlZCBFQ0MgY29kZSBmcm9tIGxpbmUgcGFyaXR5Ci0gKi8KLXN0YXRpYyB2b2lkIG5hbmRfdHJhbnNfcmVzdWx0KHVfY2hhciByZWcyLCB1X2NoYXIgcmVnMywKLQl1X2NoYXIgKmVjY19jb2RlKQotewotCXVfY2hhciBhLCBiLCBpLCB0bXAxLCB0bXAyOwotCi0JLyogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgKi8KLQlhID0gYiA9IDB4ODA7Ci0JdG1wMSA9IHRtcDIgPSAwOwotCi0JLyogQ2FsY3VsYXRlIGZpcnN0IEVDQyBieXRlICovCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAocmVnMyAmIGEpCQkvKiBMUDE1LDEzLDExLDkgLS0+IGVjY19jb2RlWzBdICovCi0JCQl0bXAxIHw9IGI7Ci0JCWIgPj49IDE7Ci0JCWlmIChyZWcyICYgYSkJCS8qIExQMTQsMTIsMTAsOCAtLT4gZWNjX2NvZGVbMF0gKi8KLQkJCXRtcDEgfD0gYjsKLQkJYiA+Pj0gMTsKLQkJYSA+Pj0gMTsKLQl9Ci0KLQkvKiBDYWxjdWxhdGUgc2Vjb25kIEVDQyBieXRlICovCi0JYiA9IDB4ODA7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAocmVnMyAmIGEpCQkvKiBMUDcsNSwzLDEgLS0+IGVjY19jb2RlWzFdICovCi0JCQl0bXAyIHw9IGI7Ci0JCWIgPj49IDE7Ci0JCWlmIChyZWcyICYgYSkJCS8qIExQNiw0LDIsMCAtLT4gZWNjX2NvZGVbMV0gKi8KLQkJCXRtcDIgfD0gYjsKLQkJYiA+Pj0gMTsKLQkJYSA+Pj0gMTsKLQl9Ci0KLQkvKiBTdG9yZSB0d28gb2YgdGhlIEVDQyBieXRlcyAqLwotCWVjY19jb2RlWzBdID0gdG1wMTsKLQllY2NfY29kZVsxXSA9IHRtcDI7Ci19Ci0KLS8qKgotICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxjdWxhdGUgMyBieXRlIEVDQyBjb2RlIGZvciAyNTYgYnl0ZSBibG9jaworICogbmFuZF9jYWxjdWxhdGVfZWNjIC0gW05BTkQgSW50ZXJmYWNlXSBDYWxjdWxhdGUgMy1ieXRlIEVDQyBmb3IgMjU2LWJ5dGUgYmxvY2sKICAqIEBtdGQ6CU1URCBibG9jayBzdHJ1Y3R1cmUKICAqIEBkYXQ6CXJhdyBkYXRhCiAgKiBAZWNjX2NvZGU6CWJ1ZmZlciBmb3IgRUNDCiAgKi8KLWludCBuYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKQoraW50IG5hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsCisJCSAgICAgICB1X2NoYXIgKmVjY19jb2RlKQogewotCXVfY2hhciBpZHgsIHJlZzEsIHJlZzIsIHJlZzM7Ci0JaW50IGo7CisJdWludDhfdCBpZHgsIHJlZzEsIHJlZzIsIHJlZzMsIHRtcDEsIHRtcDI7CisJaW50IGk7CiAKIAkvKiBJbml0aWFsaXplIHZhcmlhYmxlcyAqLwogCXJlZzEgPSByZWcyID0gcmVnMyA9IDA7Ci0JZWNjX2NvZGVbMF0gPSBlY2NfY29kZVsxXSA9IGVjY19jb2RlWzJdID0gMDsKIAogCS8qIEJ1aWxkIHVwIGNvbHVtbiBwYXJpdHkgKi8KLQlmb3IoaiA9IDA7IGogPCAyNTY7IGorKykgewotCisJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKIAkJLyogR2V0IENQMCAtIENQNSBmcm9tIHRhYmxlICovCi0JCWlkeCA9IG5hbmRfZWNjX3ByZWNhbGNfdGFibGVbZGF0W2pdXTsKKwkJaWR4ID0gbmFuZF9lY2NfcHJlY2FsY190YWJsZVsqZGF0KytdOwogCQlyZWcxIF49IChpZHggJiAweDNmKTsKIAogCQkvKiBBbGwgYml0IFhPUiA9IDEgPyAqLwogCQlpZiAoaWR4ICYgMHg0MCkgewotCQkJcmVnMyBePSAodV9jaGFyKSBqOwotCQkJcmVnMiBePSB+KCh1X2NoYXIpIGopOworCQkJcmVnMyBePSAodWludDhfdCkgaTsKKwkJCXJlZzIgXj0gfigodWludDhfdCkgaSk7CiAJCX0KIAl9CiAKIAkvKiBDcmVhdGUgbm9uLWludmVydGVkIEVDQyBjb2RlIGZyb20gbGluZSBwYXJpdHkgKi8KLQluYW5kX3RyYW5zX3Jlc3VsdChyZWcyLCByZWczLCBlY2NfY29kZSk7CisJdG1wMSAgPSAocmVnMyAmIDB4ODApID4+IDA7IC8qIEI3IC0+IEI3ICovCisJdG1wMSB8PSAocmVnMiAmIDB4ODApID4+IDE7IC8qIEI3IC0+IEI2ICovCisJdG1wMSB8PSAocmVnMyAmIDB4NDApID4+IDE7IC8qIEI2IC0+IEI1ICovCisJdG1wMSB8PSAocmVnMiAmIDB4NDApID4+IDI7IC8qIEI2IC0+IEI0ICovCisJdG1wMSB8PSAocmVnMyAmIDB4MjApID4+IDI7IC8qIEI1IC0+IEIzICovCisJdG1wMSB8PSAocmVnMiAmIDB4MjApID4+IDM7IC8qIEI1IC0+IEIyICovCisJdG1wMSB8PSAocmVnMyAmIDB4MTApID4+IDM7IC8qIEI0IC0+IEIxICovCisJdG1wMSB8PSAocmVnMiAmIDB4MTApID4+IDQ7IC8qIEI0IC0+IEIwICovCisKKwl0bXAyICA9IChyZWczICYgMHgwOCkgPDwgNDsgLyogQjMgLT4gQjcgKi8KKwl0bXAyIHw9IChyZWcyICYgMHgwOCkgPDwgMzsgLyogQjMgLT4gQjYgKi8KKwl0bXAyIHw9IChyZWczICYgMHgwNCkgPDwgMzsgLyogQjIgLT4gQjUgKi8KKwl0bXAyIHw9IChyZWcyICYgMHgwNCkgPDwgMjsgLyogQjIgLT4gQjQgKi8KKwl0bXAyIHw9IChyZWczICYgMHgwMikgPDwgMjsgLyogQjEgLT4gQjMgKi8KKwl0bXAyIHw9IChyZWcyICYgMHgwMikgPDwgMTsgLyogQjEgLT4gQjIgKi8KKwl0bXAyIHw9IChyZWczICYgMHgwMSkgPDwgMTsgLyogQjAgLT4gQjEgKi8KKwl0bXAyIHw9IChyZWcyICYgMHgwMSkgPDwgMDsgLyogQjcgLT4gQjAgKi8KIAogCS8qIENhbGN1bGF0ZSBmaW5hbCBFQ0MgY29kZSAqLwotCWVjY19jb2RlWzBdID0gfmVjY19jb2RlWzBdOwotCWVjY19jb2RlWzFdID0gfmVjY19jb2RlWzFdOworI2lmZGVmIENPTkZJR19NVERfTkFORF9FQ0NfU01DCisJZWNjX2NvZGVbMF0gPSB+dG1wMjsKKwllY2NfY29kZVsxXSA9IH50bXAxOworI2Vsc2UKKwllY2NfY29kZVswXSA9IH50bXAxOworCWVjY19jb2RlWzFdID0gfnRtcDI7CisjZW5kaWYKIAllY2NfY29kZVsyXSA9ICgofnJlZzEpIDw8IDIpIHwgMHgwMzsKKwogCXJldHVybiAwOwogfQorI2VuZGlmIC8qIENPTkZJR19OQU5EX1NQTCAqLworCitzdGF0aWMgaW5saW5lIGludCBjb3VudGJpdHModWludDMyX3QgYnl0ZSkKK3sKKwlpbnQgcmVzID0gMDsKKworCWZvciAoO2J5dGU7IGJ5dGUgPj49IDEpCisJCXJlcyArPSBieXRlICYgMHgwMTsKKwlyZXR1cm4gcmVzOworfQogCiAvKioKICAqIG5hbmRfY29ycmVjdF9kYXRhIC0gW05BTkQgSW50ZXJmYWNlXSBEZXRlY3QgYW5kIGNvcnJlY3QgYml0IGVycm9yKHMpCkBAIC0xNTYsODkgKzE1Miw1MSBAQAogICoKICAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYgYnl0ZSBibG9jawogICovCi1pbnQgbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LCB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQoraW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKKwkJICAgICAgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKIHsKLQl1X2NoYXIgYSwgYiwgYywgZDEsIGQyLCBkMywgYWRkLCBiaXQsIGk7CisJdWludDhfdCBzMCwgczEsIHMyOwogCi0JLyogRG8gZXJyb3IgZGV0ZWN0aW9uICovCi0JZDEgPSBjYWxjX2VjY1swXSBeIHJlYWRfZWNjWzBdOwotCWQyID0gY2FsY19lY2NbMV0gXiByZWFkX2VjY1sxXTsKLQlkMyA9IGNhbGNfZWNjWzJdIF4gcmVhZF9lY2NbMl07Ci0KLQlpZiAoKGQxIHwgZDIgfCBkMykgPT0gMCkgewotCQkvKiBObyBlcnJvcnMgKi8KKyNpZmRlZiBDT05GSUdfTVREX05BTkRfRUNDX1NNQworCXMwID0gY2FsY19lY2NbMF0gXiByZWFkX2VjY1swXTsKKwlzMSA9IGNhbGNfZWNjWzFdIF4gcmVhZF9lY2NbMV07CisJczIgPSBjYWxjX2VjY1syXSBeIHJlYWRfZWNjWzJdOworI2Vsc2UKKwlzMSA9IGNhbGNfZWNjWzBdIF4gcmVhZF9lY2NbMF07CisJczAgPSBjYWxjX2VjY1sxXSBeIHJlYWRfZWNjWzFdOworCXMyID0gY2FsY19lY2NbMl0gXiByZWFkX2VjY1syXTsKKyNlbmRpZgorCWlmICgoczAgfCBzMSB8IHMyKSA9PSAwKQogCQlyZXR1cm4gMDsKLQl9Ci0JZWxzZSB7Ci0JCWEgPSAoZDEgXiAoZDEgPj4gMSkpICYgMHg1NTsKLQkJYiA9IChkMiBeIChkMiA+PiAxKSkgJiAweDU1OwotCQljID0gKGQzIF4gKGQzID4+IDEpKSAmIDB4NTQ7CiAKLQkJLyogRm91bmQgYW5kIHdpbGwgY29ycmVjdCBzaW5nbGUgYml0IGVycm9yIGluIHRoZSBkYXRhICovCi0JCWlmICgoYSA9PSAweDU1KSAmJiAoYiA9PSAweDU1KSAmJiAoYyA9PSAweDU0KSkgewotCQkJYyA9IDB4ODA7Ci0JCQlhZGQgPSAwOwotCQkJYSA9IDB4ODA7Ci0JCQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJCQlpZiAoZDEgJiBjKQotCQkJCQlhZGQgfD0gYTsKLQkJCQljID4+PSAyOwotCQkJCWEgPj49IDE7Ci0JCQl9Ci0JCQljID0gMHg4MDsKLQkJCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQkJCWlmIChkMiAmIGMpCi0JCQkJCWFkZCB8PSBhOwotCQkJCWMgPj49IDI7Ci0JCQkJYSA+Pj0gMTsKLQkJCX0KLQkJCWJpdCA9IDA7Ci0JCQliID0gMHgwNDsKLQkJCWMgPSAweDgwOwotCQkJZm9yIChpPTA7IGk8MzsgaSsrKSB7Ci0JCQkJaWYgKGQzICYgYykKLQkJCQkJYml0IHw9IGI7Ci0JCQkJYyA+Pj0gMjsKLQkJCQliID4+PSAxOwotCQkJfQotCQkJYiA9IDB4MDE7Ci0JCQlhID0gZGF0W2FkZF07Ci0JCQlhIF49IChiIDw8IGJpdCk7Ci0JCQlkYXRbYWRkXSA9IGE7Ci0JCQlyZXR1cm4gMTsKLQkJfSBlbHNlIHsKLQkJCWkgPSAwOwotCQkJd2hpbGUgKGQxKSB7Ci0JCQkJaWYgKGQxICYgMHgwMSkKLQkJCQkJKytpOwotCQkJCWQxID4+PSAxOwotCQkJfQotCQkJd2hpbGUgKGQyKSB7Ci0JCQkJaWYgKGQyICYgMHgwMSkKLQkJCQkJKytpOwotCQkJCWQyID4+PSAxOwotCQkJfQotCQkJd2hpbGUgKGQzKSB7Ci0JCQkJaWYgKGQzICYgMHgwMSkKLQkJCQkJKytpOwotCQkJCWQzID4+PSAxOwotCQkJfQotCQkJaWYgKGkgPT0gMSkgewotCQkJCS8qIEVDQyBDb2RlIEVycm9yIENvcnJlY3Rpb24gKi8KLQkJCQlyZWFkX2VjY1swXSA9IGNhbGNfZWNjWzBdOwotCQkJCXJlYWRfZWNjWzFdID0gY2FsY19lY2NbMV07Ci0JCQkJcmVhZF9lY2NbMl0gPSBjYWxjX2VjY1syXTsKLQkJCQlyZXR1cm4gMjsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8qIFVuY29ycmVjdGFibGUgRXJyb3IgKi8KLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCX0KKwkvKiBDaGVjayBmb3IgYSBzaW5nbGUgYml0IGVycm9yICovCisJaWYoICgoczAgXiAoczAgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgorCSAgICAoKHMxIF4gKHMxID4+IDEpKSAmIDB4NTUpID09IDB4NTUgJiYKKwkgICAgKChzMiBeIChzMiA+PiAxKSkgJiAweDU0KSA9PSAweDU0KSB7CisKKwkJdWludDMyX3QgYnl0ZW9mZnMsIGJpdG51bTsKKworCQlieXRlb2ZmcyA9IChzMSA8PCAwKSAmIDB4ODA7CisJCWJ5dGVvZmZzIHw9IChzMSA8PCAxKSAmIDB4NDA7CisJCWJ5dGVvZmZzIHw9IChzMSA8PCAyKSAmIDB4MjA7CisJCWJ5dGVvZmZzIHw9IChzMSA8PCAzKSAmIDB4MTA7CisKKwkJYnl0ZW9mZnMgfD0gKHMwID4+IDQpICYgMHgwODsKKwkJYnl0ZW9mZnMgfD0gKHMwID4+IDMpICYgMHgwNDsKKwkJYnl0ZW9mZnMgfD0gKHMwID4+IDIpICYgMHgwMjsKKwkJYnl0ZW9mZnMgfD0gKHMwID4+IDEpICYgMHgwMTsKKworCQliaXRudW0gPSAoczIgPj4gNSkgJiAweDA0OworCQliaXRudW0gfD0gKHMyID4+IDQpICYgMHgwMjsKKwkJYml0bnVtIHw9IChzMiA+PiAzKSAmIDB4MDE7CisKKwkJZGF0W2J5dGVvZmZzXSBePSAoMSA8PCBiaXRudW0pOworCisJCXJldHVybiAxOwogCX0KIAotCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQlyZXR1cm4gLTE7CisJaWYoY291bnRiaXRzKHMwIHwgKCh1aW50MzJfdClzMSA8PCA4KSB8ICgodWludDMyX3QpczIgPDwxNikpID09IDEpCisJCXJldHVybiAxOworCisJcmV0dXJuIC1FQkFETVNHOwogfQotCi0jZW5kaWYJLyogQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25hbmQvbmFuZF9pZHMuYyBiL2RyaXZlcnMvbmFuZC9uYW5kX2lkcy5jCmluZGV4IDhiNTg3MzYuLjM3MTUwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmFuZC9uYW5kX2lkcy5jCisrKyBiL2RyaXZlcnMvbmFuZC9uYW5kX2lkcy5jCkBAIC0yLDggKzIsNiBAQAogICogIGRyaXZlcnMvbXRkL25hbmRpZHMuYwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgVGhvbWFzIEdsZWl4bmVyICh0Z2x4QGxpbnV0cm9uaXguZGUpCi0gICoKLSAqICRJZDogbmFuZF9pZHMuYyx2IDEuMTAgMjAwNC8wNS8yNiAxMzo0MDoxMiBnbGVpeG5lciBFeHAgJAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTIsMTAzICsxMCwxNTggQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKSAmJiAhZGVmaW5lZChDRkdfTkFORF9MRUdBQ1kpCi0KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotCiAvKgogKglDaGlwIElEIGxpc3QKICoKICoJTmFtZS4gSUQgY29kZSwgcGFnZXNpemUsIGNoaXBzaXplIGluIE1lZ2FCeXRlLCBlcmFzZWJsb2NrIHNpemUsCiAqCW9wdGlvbnMKICoKLSogCVBhZ2VzaXplOyAwLCAyNTYsIDUxMgotKgkwIAlnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBleHRlbmRlZCBjaGlwIElECisqCVBhZ2VzaXplOyAwLCAyNTYsIDUxMgorKgkwCWdldCB0aGlzIGluZm9ybWF0aW9uIGZyb20gdGhlIGV4dGVuZGVkIGNoaXAgSUQKICsJMjU2CTI1NiBCeXRlIHBhZ2Ugc2l6ZQogKgk1MTIJNTEyIEJ5dGUgcGFnZSBzaXplCiAqLwotc3RydWN0IG5hbmRfZmxhc2hfZGV2IG5hbmRfZmxhc2hfaWRzW10gPSB7Ci0JeyJOQU5EIDFNaUIgNVYgOC1iaXQiLCAJCTB4NmUsIDI1NiwgMSwgMHgxMDAwLCAwfSwKLQl7Ik5BTkQgMk1pQiA1ViA4LWJpdCIsIAkJMHg2NCwgMjU2LCAyLCAweDEwMDAsIDB9LAotCXsiTkFORCA0TWlCIDVWIDgtYml0IiwgCQkweDZiLCA1MTIsIDQsIDB4MjAwMCwgMH0sCi0JeyJOQU5EIDFNaUIgMywzViA4LWJpdCIsIAkweGU4LCAyNTYsIDEsIDB4MTAwMCwgMH0sCi0JeyJOQU5EIDFNaUIgMywzViA4LWJpdCIsIAkweGVjLCAyNTYsIDEsIDB4MTAwMCwgMH0sCi0JeyJOQU5EIDJNaUIgMywzViA4LWJpdCIsIAkweGVhLCAyNTYsIDIsIDB4MTAwMCwgMH0sCitjb25zdCBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgbmFuZF9mbGFzaF9pZHNbXSA9IHsKKworI2lmZGVmIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTCisJeyJOQU5EIDFNaUIgNVYgOC1iaXQiLAkJMHg2ZSwgMjU2LCAxLCAweDEwMDAsIDB9LAorCXsiTkFORCAyTWlCIDVWIDgtYml0IiwJCTB4NjQsIDI1NiwgMiwgMHgxMDAwLCAwfSwKKwl7Ik5BTkQgNE1pQiA1ViA4LWJpdCIsCQkweDZiLCA1MTIsIDQsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDFNaUIgMywzViA4LWJpdCIsCTB4ZTgsIDI1NiwgMSwgMHgxMDAwLCAwfSwKKwl7Ik5BTkQgMU1pQiAzLDNWIDgtYml0IiwJMHhlYywgMjU2LCAxLCAweDEwMDAsIDB9LAorCXsiTkFORCAyTWlCIDMsM1YgOC1iaXQiLAkweGVhLCAyNTYsIDIsIDB4MTAwMCwgMH0sCiAJeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsIAkweGQ1LCA1MTIsIDQsIDB4MjAwMCwgMH0sCi0JeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsIAkweGUzLCA1MTIsIDQsIDB4MjAwMCwgMH0sCi0JeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsIAkweGU1LCA1MTIsIDQsIDB4MjAwMCwgMH0sCi0JeyJOQU5EIDhNaUIgMywzViA4LWJpdCIsIAkweGQ2LCA1MTIsIDgsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsCTB4ZTMsIDUxMiwgNCwgMHgyMDAwLCAwfSwKKwl7Ik5BTkQgNE1pQiAzLDNWIDgtYml0IiwJMHhlNSwgNTEyLCA0LCAweDIwMDAsIDB9LAorCXsiTkFORCA4TWlCIDMsM1YgOC1iaXQiLAkweGQ2LCA1MTIsIDgsIDB4MjAwMCwgMH0sCiAKLQl7Ik5BTkQgOE1pQiAxLDhWIDgtYml0IiwgCTB4MzksIDUxMiwgOCwgMHgyMDAwLCAwfSwKLQl7Ik5BTkQgOE1pQiAzLDNWIDgtYml0IiwgCTB4ZTYsIDUxMiwgOCwgMHgyMDAwLCAwfSwKLQl7Ik5BTkQgOE1pQiAxLDhWIDE2LWJpdCIsIAkweDQ5LCA1MTIsIDgsIDB4MjAwMCwgTkFORF9CVVNXSURUSF8xNn0sCi0JeyJOQU5EIDhNaUIgMywzViAxNi1iaXQiLCAJMHg1OSwgNTEyLCA4LCAweDIwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCA4TWlCIDEsOFYgOC1iaXQiLAkweDM5LCA1MTIsIDgsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDhNaUIgMywzViA4LWJpdCIsCTB4ZTYsIDUxMiwgOCwgMHgyMDAwLCAwfSwKKwl7Ik5BTkQgOE1pQiAxLDhWIDE2LWJpdCIsCTB4NDksIDUxMiwgOCwgMHgyMDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgOE1pQiAzLDNWIDE2LWJpdCIsCTB4NTksIDUxMiwgOCwgMHgyMDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKyNlbmRpZgogCi0JeyJOQU5EIDE2TWlCIDEsOFYgOC1iaXQiLCAJMHgzMywgNTEyLCAxNiwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMTZNaUIgMywzViA4LWJpdCIsIAkweDczLCA1MTIsIDE2LCAweDQwMDAsIDB9LAotCXsiTkFORCAxNk1pQiAxLDhWIDE2LWJpdCIsIAkweDQzLCA1MTIsIDE2LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCAxNk1pQiAzLDNWIDE2LWJpdCIsIAkweDUzLCA1MTIsIDE2LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCAxNk1pQiAxLDhWIDgtYml0IiwJMHgzMywgNTEyLCAxNiwgMHg0MDAwLCAwfSwKKwl7Ik5BTkQgMTZNaUIgMywzViA4LWJpdCIsCTB4NzMsIDUxMiwgMTYsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDE2TWlCIDEsOFYgMTYtYml0IiwJMHg0MywgNTEyLCAxNiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMTZNaUIgMywzViAxNi1iaXQiLAkweDUzLCA1MTIsIDE2LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDMyTWlCIDEsOFYgOC1iaXQiLCAJMHgzNSwgNTEyLCAzMiwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMzJNaUIgMywzViA4LWJpdCIsIAkweDc1LCA1MTIsIDMyLCAweDQwMDAsIDB9LAotCXsiTkFORCAzMk1pQiAxLDhWIDE2LWJpdCIsIAkweDQ1LCA1MTIsIDMyLCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCAzMk1pQiAzLDNWIDE2LWJpdCIsIAkweDU1LCA1MTIsIDMyLCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCAzMk1pQiAxLDhWIDgtYml0IiwJMHgzNSwgNTEyLCAzMiwgMHg0MDAwLCAwfSwKKwl7Ik5BTkQgMzJNaUIgMywzViA4LWJpdCIsCTB4NzUsIDUxMiwgMzIsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDMyTWlCIDEsOFYgMTYtYml0IiwJMHg0NSwgNTEyLCAzMiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMzJNaUIgMywzViAxNi1iaXQiLAkweDU1LCA1MTIsIDMyLCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDY0TWlCIDEsOFYgOC1iaXQiLCAJMHgzNiwgNTEyLCA2NCwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgNjRNaUIgMywzViA4LWJpdCIsIAkweDc2LCA1MTIsIDY0LCAweDQwMDAsIDB9LAotCXsiTkFORCA2NE1pQiAxLDhWIDE2LWJpdCIsIAkweDQ2LCA1MTIsIDY0LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCA2NE1pQiAzLDNWIDE2LWJpdCIsIAkweDU2LCA1MTIsIDY0LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCA2NE1pQiAxLDhWIDgtYml0IiwJMHgzNiwgNTEyLCA2NCwgMHg0MDAwLCAwfSwKKwl7Ik5BTkQgNjRNaUIgMywzViA4LWJpdCIsCTB4NzYsIDUxMiwgNjQsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDY0TWlCIDEsOFYgMTYtYml0IiwJMHg0NiwgNTEyLCA2NCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgNjRNaUIgMywzViAxNi1iaXQiLAkweDU2LCA1MTIsIDY0LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDEyOE1pQiAxLDhWIDgtYml0IiwgCTB4NzgsIDUxMiwgMTI4LCAweDQwMDAsIDB9LAotCXsiTkFORCAxMjhNaUIgMywzViA4LWJpdCIsIAkweDc5LCA1MTIsIDEyOCwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMTI4TWlCIDEsOFYgMTYtYml0IiwgCTB4NzIsIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLCAJMHg3NCwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDgtYml0IiwJMHg3OCwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDgtYml0IiwJMHgzOSwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwJMHg3OSwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsCTB4NzIsIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCAxMjhNaUIgMSw4ViAxNi1iaXQiLAkweDQ5LCA1MTIsIDEyOCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMTI4TWlCIDMsM1YgMTYtYml0IiwJMHg3NCwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDEyOE1pQiAzLDNWIDE2LWJpdCIsCTB4NTksIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDI1Nk1pQiAzLDNWIDgtYml0IiwgCTB4NzEsIDUxMiwgMjU2LCAweDQwMDAsIDB9LAorCXsiTkFORCAyNTZNaUIgMywzViA4LWJpdCIsCTB4NzEsIDUxMiwgMjU2LCAweDQwMDAsIDB9LAogCi0JeyJOQU5EIDUxMk1pQiAzLDNWIDgtYml0IiwgCTB4REMsIDUxMiwgNTEyLCAweDQwMDAsIDB9LAorCS8qCisJICogVGhlc2UgYXJlIHRoZSBuZXcgY2hpcHMgd2l0aCBsYXJnZSBwYWdlIHNpemUuIFRoZSBwYWdlc2l6ZSBhbmQgdGhlCisJICogZXJhc2VzaXplIGlzIGRldGVybWluZWQgZnJvbSB0aGUgZXh0ZW5kZWQgaWQgYnl0ZXMKKwkgKi8KKyNkZWZpbmUgTFBfT1BUSU9OUyAoTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX1JFQURSRFkgfCBOQU5EX05PX0FVVE9JTkNSKQorI2RlZmluZSBMUF9PUFRJT05TMTYgKExQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2KQogCi0JLyogVGhlc2UgYXJlIHRoZSBuZXcgY2hpcHMgd2l0aCBsYXJnZSBwYWdlIHNpemUuIFRoZSBwYWdlc2l6ZQotCSogYW5kIHRoZSBlcmFzZXNpemUgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBleHRlbmRlZCBpZCBieXRlcwotCSovCisJLyo1MTIgTWVnYWJpdCAqLworCXsiTkFORCA2NE1pQiAxLDhWIDgtYml0IiwJMHhBMiwgMCwgIDY0LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgNjRNaUIgMSw4ViA4LWJpdCIsCTB4QTAsIDAsICA2NCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDY0TWlCIDMsM1YgOC1iaXQiLAkweEYyLCAwLCAgNjQsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCA2NE1pQiAzLDNWIDgtYml0IiwJMHhEMCwgMCwgIDY0LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgNjRNaUIgMSw4ViAxNi1iaXQiLAkweEIyLCAwLCAgNjQsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDY0TWlCIDEsOFYgMTYtYml0IiwJMHhCMCwgMCwgIDY0LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCA2NE1pQiAzLDNWIDE2LWJpdCIsCTB4QzIsIDAsICA2NCwgMCwgTFBfT1BUSU9OUzE2fSwKKwl7Ik5BTkQgNjRNaUIgMywzViAxNi1iaXQiLAkweEMwLCAwLCAgNjQsIDAsIExQX09QVElPTlMxNn0sCisKIAkvKiAxIEdpZ2FiaXQgKi8KLQl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLCAJMHhBMSwgMCwgMTI4LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxMjhNaUIgMywzViA4LWJpdCIsIAkweEYxLCAwLCAxMjgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsIAkweEIxLCAwLCAxMjgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLCAJMHhDMSwgMCwgMTI4LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKKwl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLAkweEExLCAwLCAxMjgsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAxMjhNaUIgMywzViA4LWJpdCIsCTB4RjEsIDAsIDEyOCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwJMHhEMSwgMCwgMTI4LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMTI4TWlCIDEsOFYgMTYtYml0IiwJMHhCMSwgMCwgMTI4LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLAkweEMxLCAwLCAxMjgsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsICAgICAweEFELCAwLCAxMjgsIDAsIExQX09QVElPTlMxNn0sCiAKIAkvKiAyIEdpZ2FiaXQgKi8KLQl7Ik5BTkQgMjU2TWlCIDEsOFYgOC1iaXQiLCAJMHhBQSwgMCwgMjU2LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyNTZNaUIgMywzViA4LWJpdCIsIAkweERBLCAwLCAyNTYsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDI1Nk1pQiAxLDhWIDE2LWJpdCIsIAkweEJBLCAwLCAyNTYsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyNTZNaUIgMywzViAxNi1iaXQiLCAJMHhDQSwgMCwgMjU2LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKKwl7Ik5BTkQgMjU2TWlCIDEsOFYgOC1iaXQiLAkweEFBLCAwLCAyNTYsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAyNTZNaUIgMywzViA4LWJpdCIsCTB4REEsIDAsIDI1NiwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDI1Nk1pQiAxLDhWIDE2LWJpdCIsCTB4QkEsIDAsIDI1NiwgMCwgTFBfT1BUSU9OUzE2fSwKKwl7Ik5BTkQgMjU2TWlCIDMsM1YgMTYtYml0IiwJMHhDQSwgMCwgMjU2LCAwLCBMUF9PUFRJT05TMTZ9LAogCiAJLyogNCBHaWdhYml0ICovCi0JeyJOQU5EIDUxMk1pQiAxLDhWIDgtYml0IiwgCTB4QUMsIDAsIDUxMiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNTEyTWlCIDMsM1YgOC1iaXQiLCAJMHhEQywgMCwgNTEyLCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCA1MTJNaUIgMSw4ViAxNi1iaXQiLCAJMHhCQywgMCwgNTEyLCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNTEyTWlCIDMsM1YgMTYtYml0IiwgCTB4Q0MsIDAsIDUxMiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCisJeyJOQU5EIDUxMk1pQiAxLDhWIDgtYml0IiwJMHhBQywgMCwgNTEyLCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgNTEyTWlCIDMsM1YgOC1iaXQiLAkweERDLCAwLCA1MTIsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCA1MTJNaUIgMSw4ViAxNi1iaXQiLAkweEJDLCAwLCA1MTIsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDUxMk1pQiAzLDNWIDE2LWJpdCIsCTB4Q0MsIDAsIDUxMiwgMCwgTFBfT1BUSU9OUzE2fSwKIAogCS8qIDggR2lnYWJpdCAqLwotCXsiTkFORCAxR2lCIDEsOFYgOC1iaXQiLCAJMHhBMywgMCwgMTAyNCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgMUdpQiAzLDNWIDgtYml0IiwgCTB4RDMsIDAsIDEwMjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDFHaUIgMSw4ViAxNi1iaXQiLCAJMHhCMywgMCwgMTAyNCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDFHaUIgMywzViAxNi1iaXQiLCAJMHhDMywgMCwgMTAyNCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCisJeyJOQU5EIDFHaUIgMSw4ViA4LWJpdCIsCTB4QTMsIDAsIDEwMjQsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAxR2lCIDMsM1YgOC1iaXQiLAkweEQzLCAwLCAxMDI0LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMUdpQiAxLDhWIDE2LWJpdCIsCTB4QjMsIDAsIDEwMjQsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDFHaUIgMywzViAxNi1iaXQiLAkweEMzLCAwLCAxMDI0LCAwLCBMUF9PUFRJT05TMTZ9LAogCiAJLyogMTYgR2lnYWJpdCAqLwotCXsiTkFORCAyR2lCIDEsOFYgOC1iaXQiLCAJMHhBNSwgMCwgMjA0OCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgMkdpQiAzLDNWIDgtYml0IiwgCTB4RDUsIDAsIDIwNDgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDJHaUIgMSw4ViAxNi1iaXQiLCAJMHhCNSwgMCwgMjA0OCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDJHaUIgMywzViAxNi1iaXQiLCAJMHhDNSwgMCwgMjA0OCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCisJeyJOQU5EIDJHaUIgMSw4ViA4LWJpdCIsCTB4QTUsIDAsIDIwNDgsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAyR2lCIDMsM1YgOC1iaXQiLAkweEQ1LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMkdpQiAxLDhWIDE2LWJpdCIsCTB4QjUsIDAsIDIwNDgsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDJHaUIgMywzViAxNi1iaXQiLAkweEM1LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TMTZ9LAogCi0JLyogUmVuZXNhcyBBTkQgMSBHaWdhYml0LiBUaG9zZSBjaGlwcyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBpZCBhbmQgaGF2ZSBhIHN0cmFuZ2UgcGFnZS9ibG9jayBsYXlvdXQgIQotCSAqIFRoZSBjaG9zZW4gbWluaW11bSBlcmFzZXNpemUgaXMgNCAqIDIgKiAyMDQ4ID0gMTYzODQgQnl0ZSwgYXMgdGhvc2UgY2hpcHMgaGF2ZSBhbiBhcnJheSBvZiA0IHBhZ2UgcGxhbmVzCi0JICogMSBibG9jayA9IDIgcGFnZXMsIGJ1dCBkdWUgdG8gcGxhbmUgYXJyYW5nZW1lbnQgdGhlIGJsb2NrcyAwLTMgY29uc2lzdHMgb2YgcGFnZSAwICsgNCwxICsgNSwgMiArIDYsIDMgKyA3Ci0JICogQW55d2F5IEpGRlMyIHdvdWxkIGluY3JlYXNlIHRoZSBlcmFzZWJsb2NrIHNpemUgc28gd2UgY2hvc2UgYSBjb21iaW5lZCBvbmUgd2hpY2ggY2FuIGJlIGVyYXNlZCBpbiBvbmUgZ28KLQkgKiBUaGVyZSBhcmUgbW9yZSBzcGVlZCBpbXByb3ZlbWVudHMgZm9yIHJlYWRzIGFuZCB3cml0ZXMgcG9zc2libGUsIGJ1dCBub3QgaW1wbGVtZW50ZWQgbm93CisvLwl7Ik5BTkQgMkdpQiAzLDNWIDgtYml0IiwJMHg0OCwgNDA5NiwgMjA0OCwgMHgxMDAwMDAsIDB9LAorCisJLyogMzIgR2lnYWJpdCAqLworCXsiTkFORCA0R2lCIDEsOFYgOC1iaXQiLAkweEE3LCAwLCA0MDk2LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgNEdpQiAzLDNWIDgtYml0IiwJMHhENywgMCwgNDA5NiwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDRHaUIgMSw4ViAxNi1iaXQiLAkweEI3LCAwLCA0MDk2LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCA0R2lCIDMsM1YgMTYtYml0IiwJMHhDNywgMCwgNDA5NiwgMCwgTFBfT1BUSU9OUzE2fSwKKworCS8qIDY0IEdpZ2FiaXQgKi8KKwl7Ik5BTkQgOEdpQiAxLDhWIDgtYml0IiwJMHhBRSwgMCwgODE5MiwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDhHaUIgMywzViA4LWJpdCIsCTB4REUsIDAsIDgxOTIsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCA4R2lCIDEsOFYgMTYtYml0IiwJMHhCRSwgMCwgODE5MiwgMCwgTFBfT1BUSU9OUzE2fSwKKwl7Ik5BTkQgOEdpQiAzLDNWIDE2LWJpdCIsCTB4Q0UsIDAsIDgxOTIsIDAsIExQX09QVElPTlMxNn0sCisKKwkvKiAxMjggR2lnYWJpdCAqLworCXsiTkFORCAxNkdpQiAxLDhWIDgtYml0IiwJMHgxQSwgMCwgMTYzODQsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAxNkdpQiAzLDNWIDgtYml0IiwJMHgzQSwgMCwgMTYzODQsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAxNkdpQiAxLDhWIDE2LWJpdCIsCTB4MkEsIDAsIDE2Mzg0LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCAxNkdpQiAzLDNWIDE2LWJpdCIsCTB4NEEsIDAsIDE2Mzg0LCAwLCBMUF9PUFRJT05TMTZ9LAorCisJLyogMjU2IEdpZ2FiaXQgKi8KKwl7Ik5BTkQgMzJHaUIgMSw4ViA4LWJpdCIsCTB4MUMsIDAsIDMyNzY4LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMzJHaUIgMywzViA4LWJpdCIsCTB4M0MsIDAsIDMyNzY4LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMzJHaUIgMSw4ViAxNi1iaXQiLAkweDJDLCAwLCAzMjc2OCwgMCwgTFBfT1BUSU9OUzE2fSwKKwl7Ik5BTkQgMzJHaUIgMywzViAxNi1iaXQiLAkweDRDLCAwLCAzMjc2OCwgMCwgTFBfT1BUSU9OUzE2fSwKKworCS8qIDUxMiBHaWdhYml0ICovCisJeyJOQU5EIDY0R2lCIDEsOFYgOC1iaXQiLAkweDFFLCAwLCA2NTUzNiwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDY0R2lCIDMsM1YgOC1iaXQiLAkweDNFLCAwLCA2NTUzNiwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDY0R2lCIDEsOFYgMTYtYml0IiwJMHgyRSwgMCwgNjU1MzYsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDY0R2lCIDMsM1YgMTYtYml0IiwJMHg0RSwgMCwgNjU1MzYsIDAsIExQX09QVElPTlMxNn0sCisKKwkvKgorCSAqIFJlbmVzYXMgQU5EIDEgR2lnYWJpdC4gVGhvc2UgY2hpcHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgaWQgYW5kCisJICogaGF2ZSBhIHN0cmFuZ2UgcGFnZS9ibG9jayBsYXlvdXQgISAgVGhlIGNob3NlbiBtaW5pbXVtIGVyYXNlc2l6ZSBpcworCSAqIDQgKiAyICogMjA0OCA9IDE2Mzg0IEJ5dGUsIGFzIHRob3NlIGNoaXBzIGhhdmUgYW4gYXJyYXkgb2YgNCBwYWdlCisJICogcGxhbmVzIDEgYmxvY2sgPSAyIHBhZ2VzLCBidXQgZHVlIHRvIHBsYW5lIGFycmFuZ2VtZW50IHRoZSBibG9ja3MKKwkgKiAwLTMgY29uc2lzdHMgb2YgcGFnZSAwICsgNCwxICsgNSwgMiArIDYsIDMgKyA3IEFueXdheSBKRkZTMiB3b3VsZAorCSAqIGluY3JlYXNlIHRoZSBlcmFzZWJsb2NrIHNpemUgc28gd2UgY2hvc2UgYSBjb21iaW5lZCBvbmUgd2hpY2ggY2FuIGJlCisJICogZXJhc2VkIGluIG9uZSBnbyBUaGVyZSBhcmUgbW9yZSBzcGVlZCBpbXByb3ZlbWVudHMgZm9yIHJlYWRzIGFuZAorCSAqIHdyaXRlcyBwb3NzaWJsZSwgYnV0IG5vdCBpbXBsZW1lbnRlZCBub3cKIAkgKi8KLQl7IkFORCAxMjhNaUIgMywzViA4LWJpdCIsCTB4MDEsIDIwNDgsIDEyOCwgMHg0MDAwLCBOQU5EX0lTX0FORCB8IE5BTkRfTk9fQVVUT0lOQ1IgfCBOQU5EXzRQQUdFX0FSUkFZfSwKKwl7IkFORCAxMjhNaUIgMywzViA4LWJpdCIsCTB4MDEsIDIwNDgsIDEyOCwgMHg0MDAwLAorCSBOQU5EX0lTX0FORCB8IE5BTkRfTk9fQVVUT0lOQ1IgfE5BTkRfTk9fUkVBRFJEWSB8IE5BTkRfNFBBR0VfQVJSQVkgfAorCSBCQlRfQVVUT19SRUZSRVNICisJfSwKIAogCXtOVUxMLH0KIH07CkBAIC0xMTYsMTMgKzE2OSwxNSBAQAogLyoKICoJTWFudWZhY3R1cmVyIElEIGxpc3QKICovCi1zdHJ1Y3QgbmFuZF9tYW51ZmFjdHVyZXJzIG5hbmRfbWFudWZfaWRzW10gPSB7Citjb25zdCBzdHJ1Y3QgbmFuZF9tYW51ZmFjdHVyZXJzIG5hbmRfbWFudWZfaWRzW10gPSB7CiAJe05BTkRfTUZSX1RPU0hJQkEsICJUb3NoaWJhIn0sCiAJe05BTkRfTUZSX1NBTVNVTkcsICJTYW1zdW5nIn0sCiAJe05BTkRfTUZSX0ZVSklUU1UsICJGdWppdHN1In0sCiAJe05BTkRfTUZSX05BVElPTkFMLCAiTmF0aW9uYWwifSwKIAl7TkFORF9NRlJfUkVORVNBUywgIlJlbmVzYXMifSwKIAl7TkFORF9NRlJfU1RNSUNSTywgIlNUIE1pY3JvIn0sCisJe05BTkRfTUZSX0hZTklYLCAiSHluaXgifSwKKwl7TkFORF9NRlJfTUlDUk9OLCAiTWljcm9uIn0sCisJe05BTkRfTUZSX0FNRCwgIkFNRCJ9LAogCXsweDAsICJVbmtub3duIn0KIH07Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmFuZC9uYW5kX3V0aWwuYyBiL2RyaXZlcnMvbmFuZC9uYW5kX3V0aWwuYwppbmRleCAxMGJmMDM2Li43ZWQ4YjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25hbmQvbmFuZF91dGlsLmMKKysrIGIvZHJpdmVycy9uYW5kL25hbmRfdXRpbC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGRyaXZlcnMvbmFuZC9uYW5kX3V0aWwuYworICogZHJpdmVycy9tdGQvbmFuZC9uYW5kX3V0aWwuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBieSBXZWlzcy1FbGVjdHJvbmljIEdtYkguCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMTEsNiArMTEsOSBAQAogICoJCW5hbmR3cml0ZS5jIGJ5IFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tKQogICoJCQkgICAgICAgYW5kIFRob21hcyBHbGVpeG5lciAodGdseEBsaW51dHJvbml4LmRlKQogICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbjogZHJvcF9mZnMoKSBmdW5jdGlvbiBieQorICogQXJ0ZW0gQml0eXV0c2tpeSA8ZGVkZWtpbmQxQGdtYWlsLmNvbT4gZnJvbSBtdGQtdXRpbHMKKyAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCkBAIC0yOCwxNiArMzEsMjIgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICoKKyAqIENvcHlyaWdodCAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yCisgKiBUaGUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIHdob3NlIGNvcHlyaWdodCBpcyBoZWxkIGJ5IEZyZWVzY2FsZSBhbmQgd2hpY2gKKyAqIGFyZSBub3QgY29uc2lkZXJlZCBhIGRlcml2ZWQgd29yayBvZiBHUEwgdjItb25seSBjb2RlIG1heSBiZSBkaXN0cmlidXRlZAorICogYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKSAmJiAhZGVmaW5lZChDRkdfTkFORF9MRUdBQ1kpCi0KICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8d2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxkaXY2NC5oPgogCisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPG5hbmQuaD4KICNpbmNsdWRlIDxqZmZzMi9qZmZzMi5oPgogCkBAIC00OCwxMiArNTcsNiBAQAogI2RlZmluZSBjcHVfdG9famUxNih4KSAoeCkKICNkZWZpbmUgY3B1X3RvX2plMzIoeCkgKHgpCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgbmFuZF9ibG9ja19iYWRfc2NydWIoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwKQotewotCXJldHVybiAwOwotfQotCiAvKioKICAqIG5hbmRfZXJhc2Vfb3B0czogLSBlcmFzZSBOQU5EIGZsYXNoIHdpdGggc3VwcG9ydCBmb3IgdmFyaW91cyBvcHRpb25zCiAgKgkJICAgICAgKGpmZnMyIGZvcm1hdGluZykKQEAgLTY4LDkyICs3MSw1MSBAQAogaW50IG5hbmRfZXJhc2Vfb3B0cyhuYW5kX2luZm9fdCAqbWVtaW5mbywgY29uc3QgbmFuZF9lcmFzZV9vcHRpb25zX3QgKm9wdHMpCiB7CiAJc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSBjbGVhbm1hcmtlcjsKLQlpbnQgY2xtcG9zID0gMDsKLQlpbnQgY2xtbGVuID0gODsKIAllcmFzZV9pbmZvX3QgZXJhc2U7Ci0JdWxvbmcgZXJhc2VfbGVuZ3RoOwotCWludCBpc05BTkQ7CisJdW5zaWduZWQgbG9uZyBlcmFzZV9sZW5ndGgsIGVyYXNlZF9sZW5ndGg7IC8qIGluIGJsb2NrcyAqLwogCWludCBiYnRlc3QgPSAxOwogCWludCByZXN1bHQ7CiAJaW50IHBlcmNlbnRfY29tcGxldGUgPSAtMTsKLQlpbnQgKCpuYW5kX2Jsb2NrX2JhZF9vbGQpKHN0cnVjdCBtdGRfaW5mbyAqLCBsb2ZmX3QsIGludCkgPSBOVUxMOwogCWNvbnN0IGNoYXIgKm10ZF9kZXZpY2UgPSBtZW1pbmZvLT5uYW1lOworCXN0cnVjdCBtdGRfb29iX29wcyBvb2Jfb3B0czsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbWVtaW5mby0+cHJpdjsKKworCWlmICgob3B0cy0+b2Zmc2V0ICYgKG1lbWluZm8tPndyaXRlc2l6ZSAtIDEpKSAhPSAwKSB7CisJCXByaW50ZigiQXR0ZW1wdCB0byBlcmFzZSBub24gcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCiAJbWVtc2V0KCZlcmFzZSwgMCwgc2l6ZW9mKGVyYXNlKSk7CisJbWVtc2V0KCZvb2Jfb3B0cywgMCwgc2l6ZW9mKG9vYl9vcHRzKSk7CiAKIAllcmFzZS5tdGQgPSBtZW1pbmZvOwogCWVyYXNlLmxlbiAgPSBtZW1pbmZvLT5lcmFzZXNpemU7CiAJZXJhc2UuYWRkciA9IG9wdHMtPm9mZnNldDsKLQllcmFzZV9sZW5ndGggPSBvcHRzLT5sZW5ndGg7CisJZXJhc2VfbGVuZ3RoID0gbGxkaXYob3B0cy0+bGVuZ3RoICsgbWVtaW5mby0+ZXJhc2VzaXplIC0gMSwKKwkJCSAgICAgbWVtaW5mby0+ZXJhc2VzaXplKTsKIAotCWlzTkFORCA9IG1lbWluZm8tPnR5cGUgPT0gTVREX05BTkRGTEFTSCA/IDEgOiAwOwotCi0JaWYgKG9wdHMtPmpmZnMyKSB7Ci0JCWNsZWFubWFya2VyLm1hZ2ljID0gY3B1X3RvX2plMTYgKEpGRlMyX01BR0lDX0JJVE1BU0spOwotCQljbGVhbm1hcmtlci5ub2RldHlwZSA9IGNwdV90b19qZTE2IChKRkZTMl9OT0RFVFlQRV9DTEVBTk1BUktFUik7Ci0JCWlmIChpc05BTkQpIHsKLQkJCXN0cnVjdCBuYW5kX29vYmluZm8gKm9vYmluZm8gPSAmbWVtaW5mby0+b29iaW5mbzsKLQotCQkJLyogY2hlY2sgZm9yIGF1dG9wbGFjZW1lbnQgKi8KLQkJCWlmIChvb2JpbmZvLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFKSB7Ci0JCQkJLyogZ2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJlZSBieXRlcyAqLwotCQkJCWlmICghb29iaW5mby0+b29iZnJlZVswXVsxXSkgewotCQkJCQlwcmludGYoIiBFZWVwLiBBdXRvcGxhY2VtZW50IHNlbGVjdGVkICIKLQkJCQkJICAgICAgICJhbmQgbm8gZW1wdHkgc3BhY2UgaW4gb29iXG4iKTsKLQkJCQkJcmV0dXJuIC0xOwotCQkJCX0KLQkJCQljbG1wb3MgPSBvb2JpbmZvLT5vb2JmcmVlWzBdWzBdOwotCQkJCWNsbWxlbiA9IG9vYmluZm8tPm9vYmZyZWVbMF1bMV07Ci0JCQkJaWYgKGNsbWxlbiA+IDgpCi0JCQkJCWNsbWxlbiA9IDg7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGxlZ2FjeSBtb2RlICovCi0JCQkJc3dpdGNoIChtZW1pbmZvLT5vb2JzaXplKSB7Ci0JCQkJY2FzZSA4OgotCQkJCQljbG1wb3MgPSA2OwotCQkJCQljbG1sZW4gPSAyOwotCQkJCQlicmVhazsKLQkJCQljYXNlIDE2OgotCQkJCQljbG1wb3MgPSA4OwotCQkJCQljbG1sZW4gPSA4OwotCQkJCQlicmVhazsKLQkJCQljYXNlIDY0OgotCQkJCQljbG1wb3MgPSAxNjsKLQkJCQkJY2xtbGVuID0gODsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQljbGVhbm1hcmtlci50b3RsZW4gPSBjcHVfdG9famUzMig4KTsKLQkJfSBlbHNlIHsKLQkJCWNsZWFubWFya2VyLnRvdGxlbiA9Ci0JCQkJY3B1X3RvX2plMzIoc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKTsKLQkJfQotCQljbGVhbm1hcmtlci5oZHJfY3JjID0gIGNwdV90b19qZTMyKAotCQkJY3JjMzJfbm9fY29tcCgwLCAodW5zaWduZWQgY2hhciAqKSAmY2xlYW5tYXJrZXIsCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpIC0gNCkpOwotCX0KKwljbGVhbm1hcmtlci5tYWdpYyA9IGNwdV90b19qZTE2IChKRkZTMl9NQUdJQ19CSVRNQVNLKTsKKwljbGVhbm1hcmtlci5ub2RldHlwZSA9IGNwdV90b19qZTE2IChKRkZTMl9OT0RFVFlQRV9DTEVBTk1BUktFUik7CisJY2xlYW5tYXJrZXIudG90bGVuID0gY3B1X3RvX2plMzIoOCk7CiAKIAkvKiBzY3J1YiBvcHRpb24gYWxsb3dzIHRvIGVyYXNlIGJhZGJsb2NrLiBUbyBwcmV2ZW50IGludGVybmFsCiAJICogY2hlY2sgZnJvbSBlcmFzZSgpIG1ldGhvZCwgc2V0IGJsb2NrIGNoZWNrIG1ldGhvZCB0byBkdW1teQogCSAqIGFuZCBkaXNhYmxlIGJhZCBibG9jayB0YWJsZSB3aGlsZSBlcmFzaW5nLgogCSAqLwogCWlmIChvcHRzLT5zY3J1YikgewotCQlzdHJ1Y3QgbmFuZF9jaGlwICpwcml2X25hbmQgPSBtZW1pbmZvLT5wcml2OwotCi0JCW5hbmRfYmxvY2tfYmFkX29sZCA9IHByaXZfbmFuZC0+YmxvY2tfYmFkOwotCQlwcml2X25hbmQtPmJsb2NrX2JhZCA9IG5hbmRfYmxvY2tfYmFkX3NjcnViOwotCQkvKiB3ZSBkb24ndCBuZWVkIHRoZSBiYWQgYmxvY2sgdGFibGUgYW55bW9yZS4uLgorCQllcmFzZS5zY3J1YiA9IG9wdHMtPnNjcnViOworCQkvKgorCQkgKiBXZSBkb24ndCBuZWVkIHRoZSBiYWQgYmxvY2sgdGFibGUgYW55bW9yZS4uLgogCQkgKiBhZnRlciBzY3J1YiwgdGhlcmUgYXJlIG5vIGJhZCBibG9ja3MgbGVmdCEKIAkJICovCi0JCWlmIChwcml2X25hbmQtPmJidCkgewotCQkJa2ZyZWUocHJpdl9uYW5kLT5iYnQpOworCQlpZiAoY2hpcC0+YmJ0KSB7CisJCQlrZnJlZShjaGlwLT5iYnQpOwogCQl9Ci0JCXByaXZfbmFuZC0+YmJ0ID0gTlVMTDsKKwkJY2hpcC0+YmJ0ID0gTlVMTDsKIAl9CiAKLQlmb3IgKDsKLQkgICAgIGVyYXNlLmFkZHIgPCBvcHRzLT5vZmZzZXQgKyBlcmFzZV9sZW5ndGg7CisJZm9yIChlcmFzZWRfbGVuZ3RoID0gMDsKKwkgICAgIGVyYXNlZF9sZW5ndGggPCBlcmFzZV9sZW5ndGg7CiAJICAgICBlcmFzZS5hZGRyICs9IG1lbWluZm8tPmVyYXNlc2l6ZSkgewogCiAJCVdBVENIRE9HX1JFU0VUICgpOwpAQCAtMTYzLDkgKzEyNSwxMyBAQAogCQkJaWYgKHJldCA+IDApIHsKIAkJCQlpZiAoIW9wdHMtPnF1aWV0KQogCQkJCQlwcmludGYoIlxyU2tpcHBpbmcgYmFkIGJsb2NrIGF0ICAiCi0JCQkJCSAgICAgICAiMHglMDh4ICAgICAgICAgICAgICAgICAgICIKKwkJCQkJICAgICAgICIweCUwOGxseCAgICAgICAgICAgICAgICAgIgogCQkJCQkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIsCiAJCQkJCSAgICAgICBlcmFzZS5hZGRyKTsKKworCQkJCWlmICghb3B0cy0+c3ByZWFkKQorCQkJCQllcmFzZWRfbGVuZ3RoKys7CisKIAkJCQljb250aW51ZTsKIAogCQkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CkBAIC0xNzYsNiArMTQyLDggQEAKIAkJCX0KIAkJfQogCisJCWVyYXNlZF9sZW5ndGgrKzsKKwogCQlyZXN1bHQgPSBtZW1pbmZvLT5lcmFzZShtZW1pbmZvLCAmZXJhc2UpOwogCQlpZiAocmVzdWx0ICE9IDApIHsKIAkJCXByaW50ZigiXG4lczogTVREIEVyYXNlIGZhaWx1cmU6ICVkXG4iLApAQCAtMTg0LDM0ICsxNTIsMjkgQEAKIAkJfQogCiAJCS8qIGZvcm1hdCBmb3IgSkZGUzIgPyAqLwotCQlpZiAob3B0cy0+amZmczIpIHsKKwkJaWYgKG9wdHMtPmpmZnMyICYmIGNoaXAtPmVjYy5sYXlvdXQtPm9vYmF2YWlsID49IDgpIHsKKwkJCWNoaXAtPm9wcy5vb2JsZW4gPSA4OworCQkJY2hpcC0+b3BzLmRhdGJ1ZiA9IE5VTEw7CisJCQljaGlwLT5vcHMub29iYnVmID0gKHVpbnQ4X3QgKikmY2xlYW5tYXJrZXI7CisJCQljaGlwLT5vcHMub29ib2ZmcyA9IDA7CisJCQljaGlwLT5vcHMubW9kZSA9IE1URF9PT0JfQVVUTzsKIAotCQkJLyogd3JpdGUgY2xlYW5tYXJrZXIgKi8KLQkJCWlmIChpc05BTkQpIHsKLQkJCQlzaXplX3Qgd3JpdHRlbjsKLQkJCQlyZXN1bHQgPSBtZW1pbmZvLT53cml0ZV9vb2IobWVtaW5mbywKLQkJCQkJCQkgICAgZXJhc2UuYWRkciArIGNsbXBvcywKLQkJCQkJCQkgICAgY2xtbGVuLAotCQkJCQkJCSAgICAmd3JpdHRlbiwKLQkJCQkJCQkgICAgKHVuc2lnbmVkIGNoYXIgKikKLQkJCQkJCQkgICAgJmNsZWFubWFya2VyKTsKLQkJCQlpZiAocmVzdWx0ICE9IDApIHsKLQkJCQkJcHJpbnRmKCJcbiVzOiBNVEQgd3JpdGVvb2IgZmFpbHVyZTogJWRcbiIsCi0JCQkJCSAgICAgICBtdGRfZGV2aWNlLCByZXN1bHQpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ZigiXG4lczogdGhpcyBlcmFzZSByb3V0aW5lIG9ubHkgc3VwcG9ydHMiCi0JCQkJICAgICAgICIgTkFORCBkZXZpY2VzIVxuIiwKLQkJCQkgICAgICAgbXRkX2RldmljZSk7CisJCQlyZXN1bHQgPSBtZW1pbmZvLT53cml0ZV9vb2IobWVtaW5mbywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcmFzZS5hZGRyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGlwLT5vcHMpOworCQkJaWYgKHJlc3VsdCAhPSAwKSB7CisJCQkJcHJpbnRmKCJcbiVzOiBNVEQgd3JpdGVvb2IgZmFpbHVyZTogJWRcbiIsCisJCQkJICAgICAgIG10ZF9kZXZpY2UsIHJlc3VsdCk7CisJCQkJY29udGludWU7CiAJCQl9CiAJCX0KIAogCQlpZiAoIW9wdHMtPnF1aWV0KSB7Ci0JCQlpbnQgcGVyY2VudCA9IChpbnQpCi0JCQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJIChlcmFzZS5hZGRyK21lbWluZm8tPmVyYXNlc2l6ZS1vcHRzLT5vZmZzZXQpCi0JCQkJICogMTAwIC8gZXJhc2VfbGVuZ3RoKTsKKwkJCXVuc2lnbmVkIGxvbmcgbG9uZyBuID0gZXJhc2VkX2xlbmd0aCAqIDEwMFVMTDsKKwkJCWludCBwZXJjZW50OworCisJCQlkb19kaXYobiwgZXJhc2VfbGVuZ3RoKTsKKwkJCXBlcmNlbnQgPSAoaW50KW47CiAKIAkJCS8qIG91dHB1dCBwcm9ncmVzcyBtZXNzYWdlIG9ubHkgYXQgd2hvbGUgcGVyY2VudAogCQkJICogc3RlcHMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgcHJpbnRlZApAQCAtMjIwLDExICsxODMsMTEgQEAKIAkJCWlmIChwZXJjZW50ICE9IHBlcmNlbnRfY29tcGxldGUpIHsKIAkJCQlwZXJjZW50X2NvbXBsZXRlID0gcGVyY2VudDsKIAotCQkJCXByaW50ZigiXHJFcmFzaW5nIGF0IDB4JXggLS0gJTNkJSUgY29tcGxldGUuIiwKKwkJCQlwcmludGYoIlxyRXJhc2luZyBhdCAweCVsbHggLS0gJTNkJSUgY29tcGxldGUuIiwKIAkJCQkgICAgICAgZXJhc2UuYWRkciwgcGVyY2VudCk7CiAKIAkJCQlpZiAob3B0cy0+amZmczIgJiYgcmVzdWx0ID09IDApCi0JCQkJCXByaW50ZigiIENsZWFubWFya2VyIHdyaXR0ZW4gYXQgMHgleC4iLAorCQkJCQlwcmludGYoIiBDbGVhbm1hcmtlciB3cml0dGVuIGF0IDB4JWxseC4iLAogCQkJCQkgICAgICAgZXJhc2UuYWRkcik7CiAJCQl9CiAJCX0KQEAgLTIzMiw0NTYgKzE5NSwxMyBAQAogCWlmICghb3B0cy0+cXVpZXQpCiAJCXByaW50ZigiXG4iKTsKIAotCWlmIChuYW5kX2Jsb2NrX2JhZF9vbGQpIHsKLQkJc3RydWN0IG5hbmRfY2hpcCAqcHJpdl9uYW5kID0gbWVtaW5mby0+cHJpdjsKLQotCQlwcml2X25hbmQtPmJsb2NrX2JhZCA9IG5hbmRfYmxvY2tfYmFkX29sZDsKLQkJcHJpdl9uYW5kLT5zY2FuX2JidChtZW1pbmZvKTsKLQl9CisJaWYgKG9wdHMtPnNjcnViKQorCQljaGlwLT5zY2FuX2JidChtZW1pbmZvKTsKIAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIE1BWF9QQUdFX1NJWkUJMjA0OAotI2RlZmluZSBNQVhfT09CX1NJWkUJNjQKLQotLyoKLSAqIGJ1ZmZlciBhcnJheSB1c2VkIGZvciB3cml0aW5nIGRhdGEKLSAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZGF0YV9idWZbTUFYX1BBR0VfU0laRV07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBvb2JfYnVmW01BWF9PT0JfU0laRV07Ci0KLS8qIE9PQiBsYXlvdXRzIHRvIHBhc3MgaW50byB0aGUga2VybmVsIGFzIGRlZmF1bHQgKi8KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5vbmVfb29iaW5mbyA9IHsKLQkudXNlZWNjID0gTVREX05BTkRFQ0NfT0ZGLAotfTsKLQotc3RhdGljIHN0cnVjdCBuYW5kX29vYmluZm8gamZmczJfb29iaW5mbyA9IHsKLQkudXNlZWNjID0gTVREX05BTkRFQ0NfUExBQ0UsCi0JLmVjY2J5dGVzID0gNiwKLQkuZWNjcG9zID0geyAwLCAxLCAyLCAzLCA2LCA3IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIHlhZmZzX29vYmluZm8gPSB7Ci0JLnVzZWVjYyA9IE1URF9OQU5ERUNDX1BMQUNFLAotCS5lY2NieXRlcyA9IDYsCi0JLmVjY3BvcyA9IHsgOCwgOSwgMTAsIDEzLCAxNCwgMTV9Ci19OwotCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBhdXRvcGxhY2Vfb29iaW5mbyA9IHsKLQkudXNlZWNjID0gTVREX05BTkRFQ0NfQVVUT1BMQUNFCi19OwotCi0vKioKLSAqIG5hbmRfd3JpdGVfb3B0czogLSB3cml0ZSBpbWFnZSB0byBOQU5EIGZsYXNoIHdpdGggc3VwcG9ydCBmb3IgdmFyaW91cyBvcHRpb25zCi0gKgotICogQHBhcmFtIG1lbWluZm8JTkFORCBkZXZpY2UgdG8gZXJhc2UKLSAqIEBwYXJhbSBvcHRzCQl3cml0ZSBvcHRpb25zIChAc2VlIG5hbmRfd3JpdGVfb3B0aW9ucykKLSAqIEByZXR1cm4JCTAgaW4gY2FzZSBvZiBzdWNjZXNzCi0gKgotICogVGhpcyBjb2RlIGlzIHBvcnRlZCBmcm9tIG5hbmR3cml0ZS5jIGZyb20gTGludXggbXRkIHV0aWxzIGJ5Ci0gKiBTdGV2ZW4gSi4gSGlsbCBhbmQgVGhvbWFzIEdsZWl4bmVyLgotICovCi1pbnQgbmFuZF93cml0ZV9vcHRzKG5hbmRfaW5mb190ICptZW1pbmZvLCBjb25zdCBuYW5kX3dyaXRlX29wdGlvbnNfdCAqb3B0cykKLXsKLQlpbnQgaW1nbGVuID0gMDsKLQlpbnQgcGFnZWxlbjsKLQlpbnQgYmFkZXJhc2VibG9jazsKLQlpbnQgYmxvY2tzdGFydCA9IC0xOwotCWxvZmZfdCBvZmZzOwotCWludCByZWFkbGVuOwotCWludCBvb2JpbmZvY2hhbmdlZCA9IDA7Ci0JaW50IHBlcmNlbnRfY29tcGxldGUgPSAtMTsKLQlzdHJ1Y3QgbmFuZF9vb2JpbmZvIG9sZF9vb2JpbmZvOwotCXVsb25nIG10ZG9mZnNldCA9IG9wdHMtPm9mZnNldDsKLQl1bG9uZyBlcmFzZXNpemVfYmxvY2thbGlnbjsKLQl1X2NoYXIgKmJ1ZmZlciA9IG9wdHMtPmJ1ZmZlcjsKLQlzaXplX3Qgd3JpdHRlbjsKLQlpbnQgcmVzdWx0OwotCi0JaWYgKG9wdHMtPnBhZCAmJiBvcHRzLT53cml0ZW9vYikgewotCQlwcmludGYoIkNhbid0IHBhZCB3aGVuIG9vYiBkYXRhIGlzIHByZXNlbnQuXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIHNldCBlcmFzZXNpemUgdG8gc3BlY2lmaWVkIG51bWJlciBvZiBibG9ja3MgLSB0byBtYXRjaAotCSAqIGpmZnMyICh2aXJ0dWFsKSBibG9jayBzaXplICovCi0JaWYgKG9wdHMtPmJsb2NrYWxpZ24gPT0gMCkgewotCQllcmFzZXNpemVfYmxvY2thbGlnbiA9IG1lbWluZm8tPmVyYXNlc2l6ZTsKLQl9IGVsc2UgewotCQllcmFzZXNpemVfYmxvY2thbGlnbiA9IG1lbWluZm8tPmVyYXNlc2l6ZSAqIG9wdHMtPmJsb2NrYWxpZ247Ci0JfQotCi0JLyogbWFrZSBzdXJlIGRldmljZSBwYWdlIHNpemVzIGFyZSB2YWxpZCAqLwotCWlmICghKG1lbWluZm8tPm9vYnNpemUgPT0gMTYgJiYgbWVtaW5mby0+b29iYmxvY2sgPT0gNTEyKQotCSAgICAmJiAhKG1lbWluZm8tPm9vYnNpemUgPT0gOCAmJiBtZW1pbmZvLT5vb2JibG9jayA9PSAyNTYpCi0JICAgICYmICEobWVtaW5mby0+b29ic2l6ZSA9PSA2NCAmJiBtZW1pbmZvLT5vb2JibG9jayA9PSAyMDQ4KSkgewotCQlwcmludGYoIlVua25vd24gZmxhc2ggKG5vdCBub3JtYWwgTkFORClcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogcmVhZCB0aGUgY3VycmVudCBvb2IgaW5mbyAqLwotCW1lbWNweSgmb2xkX29vYmluZm8sICZtZW1pbmZvLT5vb2JpbmZvLCBzaXplb2Yob2xkX29vYmluZm8pKTsKLQotCS8qIHdyaXRlIHdpdGhvdXQgZWNjPyAqLwotCWlmIChvcHRzLT5ub2VjYykgewotCQltZW1jcHkoJm1lbWluZm8tPm9vYmluZm8sICZub25lX29vYmluZm8sCi0JCSAgICAgICBzaXplb2YobWVtaW5mby0+b29iaW5mbykpOwotCQlvb2JpbmZvY2hhbmdlZCA9IDE7Ci0JfQotCi0JLyogYXV0b3BsYWNlIEVDQz8gKi8KLQlpZiAob3B0cy0+YXV0b3BsYWNlICYmIChvbGRfb29iaW5mby51c2VlY2MgIT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFKSkgewotCi0JCW1lbWNweSgmbWVtaW5mby0+b29iaW5mbywgJmF1dG9wbGFjZV9vb2JpbmZvLAotCQkgICAgICAgc2l6ZW9mKG1lbWluZm8tPm9vYmluZm8pKTsKLQkJb29iaW5mb2NoYW5nZWQgPSAxOwotCX0KLQotCS8qIGZvcmNlIE9PQiBsYXlvdXQgZm9yIGpmZnMyIG9yIHlhZmZzPyAqLwotCWlmIChvcHRzLT5mb3JjZWpmZnMyIHx8IG9wdHMtPmZvcmNleWFmZnMpIHsKLQkJc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsID0KLQkJCW9wdHMtPmZvcmNlamZmczIgPyAmamZmczJfb29iaW5mbyA6ICZ5YWZmc19vb2JpbmZvOwotCi0JCWlmIChtZW1pbmZvLT5vb2JzaXplID09IDgpIHsKLQkJCWlmIChvcHRzLT5mb3JjZXlhZmZzKSB7Ci0JCQkJcHJpbnRmKCJZQUZTUyBjYW5ub3Qgb3BlcmF0ZSBvbiAiCi0JCQkJICAgICAgICIyNTYgQnl0ZSBwYWdlIHNpemVcbiIpOwotCQkJCWdvdG8gcmVzdG9yZW9vYjsKLQkJCX0KLQkJCS8qIEFkanVzdCBudW1iZXIgb2YgZWNjIGJ5dGVzICovCi0JCQlqZmZzMl9vb2JpbmZvLmVjY2J5dGVzID0gMzsKLQkJfQotCi0JCW1lbWNweSgmbWVtaW5mby0+b29iaW5mbywgb29ic2VsLCBzaXplb2YobWVtaW5mby0+b29iaW5mbykpOwotCX0KLQotCS8qIGdldCBpbWFnZSBsZW5ndGggKi8KLQlpbWdsZW4gPSBvcHRzLT5sZW5ndGg7Ci0JcGFnZWxlbiA9IG1lbWluZm8tPm9vYmJsb2NrCi0JCSsgKChvcHRzLT53cml0ZW9vYiAhPSAwKSA/IG1lbWluZm8tPm9vYnNpemUgOiAwKTsKLQotCS8qIGNoZWNrLCBpZiBmaWxlIGlzIHBhZ2VhbGlnbmVkICovCi0JaWYgKCghb3B0cy0+cGFkKSAmJiAoKGltZ2xlbiAlIHBhZ2VsZW4pICE9IDApKSB7Ci0JCXByaW50ZigiSW5wdXQgYmxvY2sgbGVuZ3RoIGlzIG5vdCBwYWdlIGFsaWduZWRcbiIpOwotCQlnb3RvIHJlc3RvcmVvb2I7Ci0JfQotCi0JLyogY2hlY2ssIGlmIGxlbmd0aCBmaXRzIGludG8gZGV2aWNlICovCi0JaWYgKCgoaW1nbGVuIC8gcGFnZWxlbikgKiBtZW1pbmZvLT5vb2JibG9jaykKLQkgICAgID4gKG1lbWluZm8tPnNpemUgLSBvcHRzLT5vZmZzZXQpKSB7Ci0JCXByaW50ZigiSW1hZ2UgJWQgYnl0ZXMsIE5BTkQgcGFnZSAlZCBieXRlcywgIgotCQkgICAgICAgIk9PQiBhcmVhICV1IGJ5dGVzLCBkZXZpY2Ugc2l6ZSAldSBieXRlc1xuIiwKLQkJICAgICAgIGltZ2xlbiwgcGFnZWxlbiwgbWVtaW5mby0+b29iYmxvY2ssIG1lbWluZm8tPnNpemUpOwotCQlwcmludGYoIklucHV0IGJsb2NrIGRvZXMgbm90IGZpdCBpbnRvIGRldmljZVxuIik7Ci0JCWdvdG8gcmVzdG9yZW9vYjsKLQl9Ci0KLQlpZiAoIW9wdHMtPnF1aWV0KQotCQlwcmludGYoIlxuIik7Ci0KLQkvKiBnZXQgZGF0YSBmcm9tIGlucHV0IGFuZCB3cml0ZSB0byB0aGUgZGV2aWNlICovCi0Jd2hpbGUgKGltZ2xlbiAmJiAobXRkb2Zmc2V0IDwgbWVtaW5mby0+c2l6ZSkpIHsKLQotCQlXQVRDSERPR19SRVNFVCAoKTsKLQotCQkvKgotCQkgKiBuZXcgZXJhc2VibG9jaywgY2hlY2sgZm9yIGJhZCBibG9jayhzKS4gU3RheSBpbiB0aGUKLQkJICogbG9vcCB0byBiZSBzdXJlIGlmIHRoZSBvZmZzZXQgY2hhbmdlcyBiZWNhdXNlIG9mCi0JCSAqIGEgYmFkIGJsb2NrLCB0aGF0IHRoZSBuZXh0IGJsb2NrIHRoYXQgd2lsbCBiZQotCQkgKiB3cml0dGVuIHRvIGlzIGFsc28gY2hlY2tlZC4gVGh1cyBhdm9pZGluZyBlcnJvcnMgaWYKLQkJICogdGhlIGJsb2NrKHMpIGFmdGVyIHRoZSBza2lwcGVkIGJsb2NrKHMpIGlzIGFsc28gYmFkCi0JCSAqIChudW1iZXIgb2YgYmxvY2tzIGRlcGVuZGluZyBvbiB0aGUgYmxvY2thbGlnbgotCQkgKi8KLQkJd2hpbGUgKGJsb2Nrc3RhcnQgIT0gKG10ZG9mZnNldCAmICh+ZXJhc2VzaXplX2Jsb2NrYWxpZ24rMSkpKSB7Ci0JCQlibG9ja3N0YXJ0ID0gbXRkb2Zmc2V0ICYgKH5lcmFzZXNpemVfYmxvY2thbGlnbisxKTsKLQkJCW9mZnMgPSBibG9ja3N0YXJ0OwotCQkJYmFkZXJhc2VibG9jayA9IDA7Ci0KLQkJCS8qIGNoZWNrIGFsbCB0aGUgYmxvY2tzIGluIGFuIGVyYXNlIGJsb2NrIGZvcgotCQkJICogYmFkIGJsb2NrcyAqLwotCQkJZG8gewotCQkJCWludCByZXQgPSBtZW1pbmZvLT5ibG9ja19pc2JhZChtZW1pbmZvLCBvZmZzKTsKLQotCQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJCXByaW50ZigiQmFkIGJsb2NrIGNoZWNrIGZhaWxlZFxuIik7Ci0JCQkJCWdvdG8gcmVzdG9yZW9vYjsKLQkJCQl9Ci0JCQkJaWYgKHJldCA9PSAxKSB7Ci0JCQkJCWJhZGVyYXNlYmxvY2sgPSAxOwotCQkJCQlpZiAoIW9wdHMtPnF1aWV0KQotCQkJCQkJcHJpbnRmKCJcckJhZCBibG9jayBhdCAweCVseCAiCi0JCQkJCQkgICAgICAgImluIGVyYXNlIGJsb2NrIGZyb20gIgotCQkJCQkJICAgICAgICIweCV4IHdpbGwgYmUgc2tpcHBlZFxuIiwKLQkJCQkJCSAgICAgICAobG9uZykgb2ZmcywKLQkJCQkJCSAgICAgICBibG9ja3N0YXJ0KTsKLQkJCQl9Ci0KLQkJCQlpZiAoYmFkZXJhc2VibG9jaykgewotCQkJCQltdGRvZmZzZXQgPSBibG9ja3N0YXJ0Ci0JCQkJCQkrIGVyYXNlc2l6ZV9ibG9ja2FsaWduOwotCQkJCX0KLQkJCQlvZmZzICs9CSBlcmFzZXNpemVfYmxvY2thbGlnbgotCQkJCQkvIG9wdHMtPmJsb2NrYWxpZ247Ci0JCQl9IHdoaWxlIChvZmZzIDwgYmxvY2tzdGFydCArIGVyYXNlc2l6ZV9ibG9ja2FsaWduKTsKLQkJfQotCi0JCXJlYWRsZW4gPSBtZW1pbmZvLT5vb2JibG9jazsKLQkJaWYgKG9wdHMtPnBhZCAmJiAoaW1nbGVuIDwgcmVhZGxlbikpIHsKLQkJCXJlYWRsZW4gPSBpbWdsZW47Ci0JCQltZW1zZXQoZGF0YV9idWYgKyByZWFkbGVuLCAweGZmLAotCQkJICAgICAgIG1lbWluZm8tPm9vYmJsb2NrIC0gcmVhZGxlbik7Ci0JCX0KLQotCQkvKiByZWFkIHBhZ2UgZGF0YSBmcm9tIGlucHV0IG1lbW9yeSBidWZmZXIgKi8KLQkJbWVtY3B5KGRhdGFfYnVmLCBidWZmZXIsIHJlYWRsZW4pOwotCQlidWZmZXIgKz0gcmVhZGxlbjsKLQotCQlpZiAob3B0cy0+d3JpdGVvb2IpIHsKLQkJCS8qIHJlYWQgT09CIGRhdGEgZnJvbSBpbnB1dCBtZW1vcnkgYmxvY2ssIGV4aXQKLQkJCSAqIG9uIGZhaWx1cmUgKi8KLQkJCW1lbWNweShvb2JfYnVmLCBidWZmZXIsIG1lbWluZm8tPm9vYnNpemUpOwotCQkJYnVmZmVyICs9IG1lbWluZm8tPm9vYnNpemU7Ci0KLQkJCS8qIHdyaXRlIE9PQiBkYXRhIGZpcnN0LCBhcyBlY2Mgd2lsbCBiZSBwbGFjZWQKLQkJCSAqIGluIHRoZXJlKi8KLQkJCXJlc3VsdCA9IG1lbWluZm8tPndyaXRlX29vYihtZW1pbmZvLAotCQkJCQkJICAgIG10ZG9mZnNldCwKLQkJCQkJCSAgICBtZW1pbmZvLT5vb2JzaXplLAotCQkJCQkJICAgICZ3cml0dGVuLAotCQkJCQkJICAgICh1bnNpZ25lZCBjaGFyICopCi0JCQkJCQkgICAgJm9vYl9idWYpOwotCi0JCQlpZiAocmVzdWx0ICE9IDApIHsKLQkJCQlwcmludGYoIlxuTVREIHdyaXRlb29iIGZhaWx1cmU6ICVkXG4iLAotCQkJCSAgICAgICByZXN1bHQpOwotCQkJCWdvdG8gcmVzdG9yZW9vYjsKLQkJCX0KLQkJCWltZ2xlbiAtPSBtZW1pbmZvLT5vb2JzaXplOwotCQl9Ci0KLQkJLyogd3JpdGUgb3V0IHRoZSBwYWdlIGRhdGEgKi8KLQkJcmVzdWx0ID0gbWVtaW5mby0+d3JpdGUobWVtaW5mbywKLQkJCQkJbXRkb2Zmc2V0LAotCQkJCQltZW1pbmZvLT5vb2JibG9jaywKLQkJCQkJJndyaXR0ZW4sCi0JCQkJCSh1bnNpZ25lZCBjaGFyICopICZkYXRhX2J1Zik7Ci0KLQkJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCQlwcmludGYoIndyaXRpbmcgTkFORCBwYWdlIGF0IG9mZnNldCAweCVseCBmYWlsZWRcbiIsCi0JCQkgICAgICAgbXRkb2Zmc2V0KTsKLQkJCWdvdG8gcmVzdG9yZW9vYjsKLQkJfQotCQlpbWdsZW4gLT0gcmVhZGxlbjsKLQotCQlpZiAoIW9wdHMtPnF1aWV0KSB7Ci0JCQlpbnQgcGVyY2VudCA9IChpbnQpCi0JCQkJKCh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJIChvcHRzLT5sZW5ndGgtaW1nbGVuKSAqIDEwMAotCQkJCSAvIG9wdHMtPmxlbmd0aCk7Ci0JCQkvKiBvdXRwdXQgcHJvZ3Jlc3MgbWVzc2FnZSBvbmx5IGF0IHdob2xlIHBlcmNlbnQKLQkJCSAqIHN0ZXBzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHByaW50ZWQKLQkJCSAqIG9uIChzbG93KSBzZXJpYWwgY29uc29sZXMKLQkJCSAqLwotCQkJaWYgKHBlcmNlbnQgIT0gcGVyY2VudF9jb21wbGV0ZSkgewotCQkJCXByaW50ZigiXHJXcml0aW5nIGRhdGEgYXQgMHgleCAiCi0JCQkJICAgICAgICItLSAlM2QlJSBjb21wbGV0ZS4iLAotCQkJCSAgICAgICBtdGRvZmZzZXQsIHBlcmNlbnQpOwotCQkJCXBlcmNlbnRfY29tcGxldGUgPSBwZXJjZW50OwotCQkJfQotCQl9Ci0KLQkJbXRkb2Zmc2V0ICs9IG1lbWluZm8tPm9vYmJsb2NrOwotCX0KLQotCWlmICghb3B0cy0+cXVpZXQpCi0JCXByaW50ZigiXG4iKTsKLQotcmVzdG9yZW9vYjoKLQlpZiAob29iaW5mb2NoYW5nZWQpIHsKLQkJbWVtY3B5KCZtZW1pbmZvLT5vb2JpbmZvLCAmb2xkX29vYmluZm8sCi0JCSAgICAgICBzaXplb2YobWVtaW5mby0+b29iaW5mbykpOwotCX0KLQotCWlmIChpbWdsZW4gPiAwKSB7Ci0JCXByaW50ZigiRGF0YSBkaWQgbm90IGZpdCBpbnRvIGRldmljZSwgZHVlIHRvIGJhZCBibG9ja3NcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogcmV0dXJuIGhhcHB5ICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogbmFuZF9yZWFkX29wdHM6IC0gcmVhZCBpbWFnZSBmcm9tIE5BTkQgZmxhc2ggd2l0aCBzdXBwb3J0IGZvciB2YXJpb3VzIG9wdGlvbnMKLSAqCi0gKiBAcGFyYW0gbWVtaW5mbwlOQU5EIGRldmljZSB0byBlcmFzZQotICogQHBhcmFtIG9wdHMJCXJlYWQgb3B0aW9ucyAoQHNlZSBzdHJ1Y3QgbmFuZF9yZWFkX29wdGlvbnMpCi0gKiBAcmV0dXJuCQkwIGluIGNhc2Ugb2Ygc3VjY2VzcwotICoKLSAqLwotaW50IG5hbmRfcmVhZF9vcHRzKG5hbmRfaW5mb190ICptZW1pbmZvLCBjb25zdCBuYW5kX3JlYWRfb3B0aW9uc190ICpvcHRzKQotewotCWludCBpbWdsZW4gPSBvcHRzLT5sZW5ndGg7Ci0JaW50IHBhZ2VsZW47Ci0JaW50IGJhZGVyYXNlYmxvY2s7Ci0JaW50IGJsb2Nrc3RhcnQgPSAtMTsKLQlpbnQgcGVyY2VudF9jb21wbGV0ZSA9IC0xOwotCWxvZmZfdCBvZmZzOwotCXNpemVfdCByZWFkbGVuOwotCXVsb25nIG10ZG9mZnNldCA9IG9wdHMtPm9mZnNldDsKLQl1X2NoYXIgKmJ1ZmZlciA9IG9wdHMtPmJ1ZmZlcjsKLQlpbnQgcmVzdWx0OwotCi0JLyogbWFrZSBzdXJlIGRldmljZSBwYWdlIHNpemVzIGFyZSB2YWxpZCAqLwotCWlmICghKG1lbWluZm8tPm9vYnNpemUgPT0gMTYgJiYgbWVtaW5mby0+b29iYmxvY2sgPT0gNTEyKQotCSAgICAmJiAhKG1lbWluZm8tPm9vYnNpemUgPT0gOCAmJiBtZW1pbmZvLT5vb2JibG9jayA9PSAyNTYpCi0JICAgICYmICEobWVtaW5mby0+b29ic2l6ZSA9PSA2NCAmJiBtZW1pbmZvLT5vb2JibG9jayA9PSAyMDQ4KSkgewotCQlwcmludGYoIlVua25vd24gZmxhc2ggKG5vdCBub3JtYWwgTkFORClcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcGFnZWxlbiA9IG1lbWluZm8tPm9vYmJsb2NrCi0JCSsgKChvcHRzLT5yZWFkb29iICE9IDApID8gbWVtaW5mby0+b29ic2l6ZSA6IDApOwotCi0JLyogY2hlY2ssIGlmIGxlbmd0aCBpcyBub3QgbGFyZ2VyIHRoYW4gZGV2aWNlICovCi0JaWYgKCgoaW1nbGVuIC8gcGFnZWxlbikgKiBtZW1pbmZvLT5vb2JibG9jaykKLQkgICAgID4gKG1lbWluZm8tPnNpemUgLSBvcHRzLT5vZmZzZXQpKSB7Ci0JCXByaW50ZigiSW1hZ2UgJWQgYnl0ZXMsIE5BTkQgcGFnZSAlZCBieXRlcywgIgotCQkgICAgICAgIk9PQiBhcmVhICV1IGJ5dGVzLCBkZXZpY2Ugc2l6ZSAldSBieXRlc1xuIiwKLQkJICAgICAgIGltZ2xlbiwgcGFnZWxlbiwgbWVtaW5mby0+b29iYmxvY2ssIG1lbWluZm8tPnNpemUpOwotCQlwcmludGYoIklucHV0IGJsb2NrIGlzIGxhcmdlciB0aGFuIGRldmljZVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoIW9wdHMtPnF1aWV0KQotCQlwcmludGYoIlxuIik7Ci0KLQkvKiBnZXQgZGF0YSBmcm9tIGlucHV0IGFuZCB3cml0ZSB0byB0aGUgZGV2aWNlICovCi0Jd2hpbGUgKGltZ2xlbiAmJiAobXRkb2Zmc2V0IDwgbWVtaW5mby0+c2l6ZSkpIHsKLQotCQlXQVRDSERPR19SRVNFVCAoKTsKLQotCQkvKgotCQkgKiBuZXcgZXJhc2VibG9jaywgY2hlY2sgZm9yIGJhZCBibG9jayhzKS4gU3RheSBpbiB0aGUKLQkJICogbG9vcCB0byBiZSBzdXJlIGlmIHRoZSBvZmZzZXQgY2hhbmdlcyBiZWNhdXNlIG9mCi0JCSAqIGEgYmFkIGJsb2NrLCB0aGF0IHRoZSBuZXh0IGJsb2NrIHRoYXQgd2lsbCBiZQotCQkgKiB3cml0dGVuIHRvIGlzIGFsc28gY2hlY2tlZC4gVGh1cyBhdm9pZGluZyBlcnJvcnMgaWYKLQkJICogdGhlIGJsb2NrKHMpIGFmdGVyIHRoZSBza2lwcGVkIGJsb2NrKHMpIGlzIGFsc28gYmFkCi0JCSAqIChudW1iZXIgb2YgYmxvY2tzIGRlcGVuZGluZyBvbiB0aGUgYmxvY2thbGlnbgotCQkgKi8KLQkJd2hpbGUgKGJsb2Nrc3RhcnQgIT0gKG10ZG9mZnNldCAmICh+bWVtaW5mby0+ZXJhc2VzaXplKzEpKSkgewotCQkJYmxvY2tzdGFydCA9IG10ZG9mZnNldCAmICh+bWVtaW5mby0+ZXJhc2VzaXplKzEpOwotCQkJb2ZmcyA9IGJsb2Nrc3RhcnQ7Ci0JCQliYWRlcmFzZWJsb2NrID0gMDsKLQotCQkJLyogY2hlY2sgYWxsIHRoZSBibG9ja3MgaW4gYW4gZXJhc2UgYmxvY2sgZm9yCi0JCQkgKiBiYWQgYmxvY2tzICovCi0JCQlkbyB7Ci0JCQkJaW50IHJldCA9IG1lbWluZm8tPmJsb2NrX2lzYmFkKG1lbWluZm8sIG9mZnMpOwotCi0JCQkJaWYgKHJldCA8IDApIHsKLQkJCQkJcHJpbnRmKCJCYWQgYmxvY2sgY2hlY2sgZmFpbGVkXG4iKTsKLQkJCQkJcmV0dXJuIC0xOwotCQkJCX0KLQkJCQlpZiAocmV0ID09IDEpIHsKLQkJCQkJYmFkZXJhc2VibG9jayA9IDE7Ci0JCQkJCWlmICghb3B0cy0+cXVpZXQpCi0JCQkJCQlwcmludGYoIlxyQmFkIGJsb2NrIGF0IDB4JWx4ICIKLQkJCQkJCSAgICAgICAiaW4gZXJhc2UgYmxvY2sgZnJvbSAiCi0JCQkJCQkgICAgICAgIjB4JXggd2lsbCBiZSBza2lwcGVkXG4iLAotCQkJCQkJICAgICAgIChsb25nKSBvZmZzLAotCQkJCQkJICAgICAgIGJsb2Nrc3RhcnQpOwotCQkJCX0KLQotCQkJCWlmIChiYWRlcmFzZWJsb2NrKSB7Ci0JCQkJCW10ZG9mZnNldCA9IGJsb2Nrc3RhcnQKLQkJCQkJCSsgbWVtaW5mby0+ZXJhc2VzaXplOwotCQkJCX0KLQkJCQlvZmZzICs9CSBtZW1pbmZvLT5lcmFzZXNpemU7Ci0KLQkJCX0gd2hpbGUgKG9mZnMgPCBibG9ja3N0YXJ0ICsgbWVtaW5mby0+ZXJhc2VzaXplKTsKLQkJfQotCi0KLQkJLyogcmVhZCBwYWdlIGRhdGEgdG8gbWVtb3J5IGJ1ZmZlciAqLwotCQlyZXN1bHQgPSBtZW1pbmZvLT5yZWFkKG1lbWluZm8sCi0JCQkJICAgICAgIG10ZG9mZnNldCwKLQkJCQkgICAgICAgbWVtaW5mby0+b29iYmxvY2ssCi0JCQkJICAgICAgICZyZWFkbGVuLAotCQkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSAmZGF0YV9idWYpOwotCi0JCWlmIChyZXN1bHQgIT0gMCkgewotCQkJcHJpbnRmKCJyZWFkaW5nIE5BTkQgcGFnZSBhdCBvZmZzZXQgMHglbHggZmFpbGVkXG4iLAotCQkJICAgICAgIG10ZG9mZnNldCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlpZiAoaW1nbGVuIDwgcmVhZGxlbikgewotCQkJcmVhZGxlbiA9IGltZ2xlbjsKLQkJfQotCi0JCW1lbWNweShidWZmZXIsIGRhdGFfYnVmLCByZWFkbGVuKTsKLQkJYnVmZmVyICs9IHJlYWRsZW47Ci0JCWltZ2xlbiAtPSByZWFkbGVuOwotCi0JCWlmIChvcHRzLT5yZWFkb29iKSB7Ci0JCQlyZXN1bHQgPSBtZW1pbmZvLT5yZWFkX29vYihtZW1pbmZvLAotCQkJCQkJICAgbXRkb2Zmc2V0LAotCQkJCQkJICAgbWVtaW5mby0+b29ic2l6ZSwKLQkJCQkJCSAgICZyZWFkbGVuLAotCQkJCQkJICAgKHVuc2lnbmVkIGNoYXIgKikKLQkJCQkJCSAgICZvb2JfYnVmKTsKLQotCQkJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCQkJcHJpbnRmKCJcbk1URCByZWFkb29iIGZhaWx1cmU6ICVkXG4iLAotCQkJCSAgICAgICByZXN1bHQpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQotCi0JCQlpZiAoaW1nbGVuIDwgcmVhZGxlbikgewotCQkJCXJlYWRsZW4gPSBpbWdsZW47Ci0JCQl9Ci0KLQkJCW1lbWNweShidWZmZXIsIG9vYl9idWYsIHJlYWRsZW4pOwotCi0JCQlidWZmZXIgKz0gcmVhZGxlbjsKLQkJCWltZ2xlbiAtPSByZWFkbGVuOwotCQl9Ci0KLQkJaWYgKCFvcHRzLT5xdWlldCkgewotCQkJaW50IHBlcmNlbnQgPSAoaW50KQotCQkJCSgodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCSAob3B0cy0+bGVuZ3RoLWltZ2xlbikgKiAxMDAKLQkJCQkgLyBvcHRzLT5sZW5ndGgpOwotCQkJLyogb3V0cHV0IHByb2dyZXNzIG1lc3NhZ2Ugb25seSBhdCB3aG9sZSBwZXJjZW50Ci0JCQkgKiBzdGVwcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBwcmludGVkCi0JCQkgKiBvbiAoc2xvdykgc2VyaWFsIGNvbnNvbGVzCi0JCQkgKi8KLQkJCWlmIChwZXJjZW50ICE9IHBlcmNlbnRfY29tcGxldGUpIHsKLQkJCWlmICghb3B0cy0+cXVpZXQpCi0JCQkJcHJpbnRmKCJcclJlYWRpbmcgZGF0YSBmcm9tIDB4JXggIgotCQkJCSAgICAgICAiLS0gJTNkJSUgY29tcGxldGUuIiwKLQkJCQkgICAgICAgbXRkb2Zmc2V0LCBwZXJjZW50KTsKLQkJCQlwZXJjZW50X2NvbXBsZXRlID0gcGVyY2VudDsKLQkJCX0KLQkJfQotCi0JCW10ZG9mZnNldCArPSBtZW1pbmZvLT5vb2JibG9jazsKLQl9Ci0KLQlpZiAoIW9wdHMtPnF1aWV0KQotCQlwcmludGYoIlxuIik7Ci0KLQlpZiAoaW1nbGVuID4gMCkgewotCQlwcmludGYoIkNvdWxkIG5vdCByZWFkIGVudGlyZSBpbWFnZSBkdWUgdG8gYmFkIGJsb2Nrc1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiByZXR1cm4gaGFwcHkgKi8KLQlyZXR1cm4gMDsKLX0KKyNpZmRlZiBDT05GSUdfQ01EX05BTkRfTE9DS19VTkxPQ0sKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU3VwcG9ydCBmb3IgbG9ja2luZyAvIHVubG9ja2luZyBvcGVyYXRpb25zIG9mIHNvbWUgTkFORCBkZXZpY2VzCkBAIC02OTcsNyArMjE3LDcgQEAKICAqIG5hbmRfbG9jazogU2V0IGFsbCBwYWdlcyBvZiBOQU5EIGZsYXNoIGNoaXAgdG8gdGhlIExPQ0sgb3IgTE9DSy1USUdIVAogICoJICAgICAgc3RhdGUKICAqCi0gKiBAcGFyYW0gbWVtaW5mbwluYW5kIG10ZCBpbnN0YW5jZQorICogQHBhcmFtIG10ZAkJbmFuZCBtdGQgaW5zdGFuY2UKICAqIEBwYXJhbSB0aWdodAkJYnJpbmcgZGV2aWNlIGluIGxvY2sgdGlnaHQgbW9kZQogICoKICAqIEByZXR1cm4JCTAgb24gc3VjY2VzcywgLTEgaW4gY2FzZSBvZiBlcnJvcgpAQCAtNzE0LDIxICsyMzQsMjEgQEAKICAqICAgY2FsbHMgd2lsbCBmYWlsLiBJdCBpcyBvbmx5IHBvc2libGUgdG8gbGVhdmUgbG9jay10aWdodCBzdGF0ZSBieQogICogICBhbiBoYXJkd2FyZSBzaWduYWwgKGxvdyBwdWxzZSBvbiBfV1AgcGluKSBvciBieSBwb3dlciBkb3duLgogICovCi1pbnQgbmFuZF9sb2NrKG5hbmRfaW5mb190ICptZW1pbmZvLCBpbnQgdGlnaHQpCitpbnQgbmFuZF9sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgdGlnaHQpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IHN0YXR1czsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbWVtaW5mby0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCiAJLyogc2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG1lbWluZm8sIDApOworCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgMCk7CiAKLQl0aGlzLT5jbWRmdW5jKG1lbWluZm8sCisJY2hpcC0+Y21kZnVuYyhtdGQsCiAJCSAgICAgICh0aWdodCA/IE5BTkRfQ01EX0xPQ0tfVElHSFQgOiBOQU5EX0NNRF9MT0NLKSwKIAkJICAgICAgLTEsIC0xKTsKIAogCS8qIGNhbGwgd2FpdCByZWFkeSBmdW5jdGlvbiAqLwotCXN0YXR1cyA9IHRoaXMtPndhaXRmdW5jKG1lbWluZm8sIHRoaXMsIEZMX1dSSVRJTkcpOworCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CiAKIAkvKiBzZWUgaWYgZGV2aWNlIHRoaW5rcyBpdCBzdWNjZWVkZWQgKi8KIAlpZiAoc3RhdHVzICYgMHgwMSkgewpAQCAtNzM2LDcgKzI1Niw3IEBACiAJfQogCiAJLyogZGUtc2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCXRoaXMtPnNlbGVjdF9jaGlwKG1lbWluZm8sIC0xKTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NDQsNyArMjY0LDcgQEAKICAqIG5hbmRfZ2V0X2xvY2tfc3RhdHVzOiAtIHF1ZXJ5IGN1cnJlbnQgbG9jayBzdGF0ZSBmcm9tIG9uZSBwYWdlIG9mIE5BTkQKICAqCQkJICAgZmxhc2gKICAqCi0gKiBAcGFyYW0gbWVtaW5mbwluYW5kIG10ZCBpbnN0YW5jZQorICogQHBhcmFtIG10ZAkJbmFuZCBtdGQgaW5zdGFuY2UKICAqIEBwYXJhbSBvZmZzZXQJcGFnZSBhZGRyZXNzIHRvIHF1ZXJ5IChtdXNzIGJlIHBhZ2UgYWxpZ25lZCEpCiAgKgogICogQHJldHVybgkJLTEgaW4gY2FzZSBvZiBlcnJvcgpAQCAtNzU1LDE5ICsyNzUsMTkgQEAKICAqCQkJICBOQU5EX0xPQ0tfU1RBVFVTX1VOTE9DSzogcGFnZSB1bmxvY2tlZAogICoKICAqLwotaW50IG5hbmRfZ2V0X2xvY2tfc3RhdHVzKG5hbmRfaW5mb190ICptZW1pbmZvLCB1bG9uZyBvZmZzZXQpCitpbnQgbmFuZF9nZXRfbG9ja19zdGF0dXMoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzZXQpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IGNoaXBucjsKIAlpbnQgcGFnZTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbWVtaW5mby0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCiAJLyogc2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCWNoaXBuciA9IChpbnQpKG9mZnNldCA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKLQl0aGlzLT5zZWxlY3RfY2hpcChtZW1pbmZvLCBjaGlwbnIpOworCWNoaXBuciA9IChpbnQpKG9mZnNldCA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAKIAotCWlmICgob2Zmc2V0ICYgKG1lbWluZm8tPm9vYmJsb2NrIC0gMSkpICE9IDApIHsKKwlpZiAoKG9mZnNldCAmIChtdGQtPndyaXRlc2l6ZSAtIDEpKSAhPSAwKSB7CiAJCXByaW50ZiAoIm5hbmRfZ2V0X2xvY2tfc3RhdHVzOiAiCiAJCQkiU3RhcnQgYWRkcmVzcyBtdXN0IGJlIGJlZ2lubmluZyBvZiAiCiAJCQkibmFuZCBwYWdlIVxuIik7CkBAIC03NzYsMTYgKzI5NiwxNiBAQAogCX0KIAogCS8qIGNoZWNrIHRoZSBMb2NrIFN0YXR1cyAqLwotCXBhZ2UgPSAoaW50KShvZmZzZXQgPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JdGhpcy0+Y21kZnVuYyhtZW1pbmZvLCBOQU5EX0NNRF9MT0NLX1NUQVRVUywgLTEsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7CisJcGFnZSA9IChpbnQpKG9mZnNldCA+PiBjaGlwLT5wYWdlX3NoaWZ0KTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfTE9DS19TVEFUVVMsIC0xLCBwYWdlICYgY2hpcC0+cGFnZW1hc2spOwogCi0JcmV0ID0gdGhpcy0+cmVhZF9ieXRlKG1lbWluZm8pICYgKE5BTkRfTE9DS19TVEFUVVNfVElHSFQKKwlyZXQgPSBjaGlwLT5yZWFkX2J5dGUobXRkKSAmIChOQU5EX0xPQ0tfU1RBVFVTX1RJR0hUCiAJCQkJCSAgfCBOQU5EX0xPQ0tfU1RBVFVTX0xPQ0sKIAkJCQkJICB8IE5BTkRfTE9DS19TVEFUVVNfVU5MT0NLKTsKIAogIG91dDoKIAkvKiBkZS1zZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobWVtaW5mbywgLTEpOworCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc5Myw1OSArMzEzLDY1IEBACiAgKiBuYW5kX3VubG9jazogLSBVbmxvY2sgYXJlYSBvZiBOQU5EIHBhZ2VzCiAgKgkJICBvbmx5IG9uZSBjb25zZWN1dGl2ZSBhcmVhIGNhbiBiZSB1bmxvY2tlZCBhdCBvbmUgdGltZSEKICAqCi0gKiBAcGFyYW0gbWVtaW5mbwluYW5kIG10ZCBpbnN0YW5jZQorICogQHBhcmFtIG10ZAkJbmFuZCBtdGQgaW5zdGFuY2UKICAqIEBwYXJhbSBzdGFydAkJc3RhcnQgYnl0ZSBhZGRyZXNzCiAgKiBAcGFyYW0gbGVuZ3RoCW51bWJlciBvZiBieXRlcyB0byB1bmxvY2sgKG11c3QgYmUgYSBtdWx0aXBsZSBvZgotICoJCQlwYWdlIHNpemUgbmFuZC0+b29iYmxvY2spCisgKgkJCXBhZ2Ugc2l6ZSBuYW5kLT53cml0ZXNpemUpCiAgKgogICogQHJldHVybgkJMCBvbiBzdWNjZXNzLCAtMSBpbiBjYXNlIG9mIGVycm9yCiAgKi8KLWludCBuYW5kX3VubG9jayhuYW5kX2luZm9fdCAqbWVtaW5mbywgdWxvbmcgc3RhcnQsIHVsb25nIGxlbmd0aCkKK2ludCBuYW5kX3VubG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWxvbmcgc3RhcnQsIHVsb25nIGxlbmd0aCkKIHsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgY2hpcG5yOwogCWludCBzdGF0dXM7CiAJaW50IHBhZ2U7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG1lbWluZm8tPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAlwcmludGYgKCJuYW5kX3VubG9jazogc3RhcnQ6ICUwOHgsIGxlbmd0aDogJWQhXG4iLAogCQkoaW50KXN0YXJ0LCAoaW50KWxlbmd0aCk7CiAKIAkvKiBzZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JY2hpcG5yID0gKGludCkoc3RhcnQgPj4gdGhpcy0+Y2hpcF9zaGlmdCk7Ci0JdGhpcy0+c2VsZWN0X2NoaXAobWVtaW5mbywgY2hpcG5yKTsKKwljaGlwbnIgPSAoaW50KShzdGFydCA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAKIAkvKiBjaGVjayB0aGUgV1AgYml0ICovCi0JdGhpcy0+Y21kZnVuYyhtZW1pbmZvLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7Ci0JaWYgKCh0aGlzLT5yZWFkX2J5dGUobWVtaW5mbykgJiAweDgwKSA9PSAwKSB7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NUQVRVUywgLTEsIC0xKTsKKwlpZiAoIShjaGlwLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1dQKSkgewogCQlwcmludGYgKCJuYW5kX3VubG9jazogRGV2aWNlIGlzIHdyaXRlIHByb3RlY3RlZCFcbiIpOwogCQlyZXQgPSAtMTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKChzdGFydCAmIChtZW1pbmZvLT5vb2JibG9jayAtIDEpKSAhPSAwKSB7CisJaWYgKChzdGFydCAmIChtdGQtPmVyYXNlc2l6ZSAtIDEpKSAhPSAwKSB7CiAJCXByaW50ZiAoIm5hbmRfdW5sb2NrOiBTdGFydCBhZGRyZXNzIG11c3QgYmUgYmVnaW5uaW5nIG9mICIKLQkJCSJuYW5kIHBhZ2UhXG4iKTsKKwkJCSJuYW5kIGJsb2NrIVxuIik7CiAJCXJldCA9IC0xOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAobGVuZ3RoID09IDAgfHwgKGxlbmd0aCAmIChtZW1pbmZvLT5vb2JibG9jayAtIDEpKSAhPSAwKSB7Ci0JCXByaW50ZiAoIm5hbmRfdW5sb2NrOiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIG5hbmQgcGFnZSAiCi0JCQkic2l6ZSFcbiIpOworCWlmIChsZW5ndGggPT0gMCB8fCAobGVuZ3RoICYgKG10ZC0+ZXJhc2VzaXplIC0gMSkpICE9IDApIHsKKwkJcHJpbnRmICgibmFuZF91bmxvY2s6IExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgbmFuZCBibG9jayAiCisJCQkic2l6ZSAlMDh4IVxuIiwgbXRkLT5lcmFzZXNpemUpOwogCQlyZXQgPSAtMTsKIAkJZ290byBvdXQ7CiAJfQogCisJLyoKKwkgKiBTZXQgbGVuZ3RoIHNvIHRoYXQgdGhlIGxhc3QgYWRkcmVzcyBpcyBzZXQgdG8gdGhlCisJICogc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgbGFzdCBibG9jaworCSAqLworCWxlbmd0aCAtPSBtdGQtPmVyYXNlc2l6ZTsKKwogCS8qIHN1Ym1pdCBhZGRyZXNzIG9mIGZpcnN0IHBhZ2UgdG8gdW5sb2NrICovCi0JcGFnZSA9IChpbnQpKHN0YXJ0ID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCXRoaXMtPmNtZGZ1bmMobWVtaW5mbywgTkFORF9DTURfVU5MT0NLMSwgLTEsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7CisJcGFnZSA9IChpbnQpKHN0YXJ0ID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9VTkxPQ0sxLCAtMSwgcGFnZSAmIGNoaXAtPnBhZ2VtYXNrKTsKIAogCS8qIHN1Ym1pdCBBRERSRVNTIG9mIExBU1QgcGFnZSB0byB1bmxvY2sgKi8KLQlwYWdlICs9IChpbnQpKGxlbmd0aCA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAtIDE7Ci0JdGhpcy0+Y21kZnVuYyhtZW1pbmZvLCBOQU5EX0NNRF9VTkxPQ0syLCAtMSwgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKKwlwYWdlICs9IChpbnQpKGxlbmd0aCA+PiBjaGlwLT5wYWdlX3NoaWZ0KTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfVU5MT0NLMiwgLTEsIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CiAKIAkvKiBjYWxsIHdhaXQgcmVhZHkgZnVuY3Rpb24gKi8KLQlzdGF0dXMgPSB0aGlzLT53YWl0ZnVuYyhtZW1pbmZvLCB0aGlzLCBGTF9XUklUSU5HKTsKKwlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOwogCS8qIHNlZSBpZiBkZXZpY2UgdGhpbmtzIGl0IHN1Y2NlZWRlZCAqLwogCWlmIChzdGF0dXMgJiAweDAxKSB7CiAJCS8qIHRoZXJlIHdhcyBhbiBlcnJvciAqLwpAQCAtODU1LDggKzM4MSwzMDEgQEAKIAogIG91dDoKIAkvKiBkZS1zZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobWVtaW5mbywgLTEpOworCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworLyoqCisgKiBjaGVja19za2lwX2xlbgorICoKKyAqIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYmFkIGJsb2NrcywgYW5kIHdoZXRoZXIgbGVuZ3RoIGluY2x1ZGluZyBiYWQKKyAqIGJsb2NrcyBmaXRzIGludG8gZGV2aWNlCisgKgorICogQHBhcmFtIG5hbmQgTkFORCBkZXZpY2UKKyAqIEBwYXJhbSBvZmZzZXQgb2Zmc2V0IGluIGZsYXNoCisgKiBAcGFyYW0gbGVuZ3RoIGltYWdlIGxlbmd0aAorICogQHJldHVybiAwIGlmIHRoZSBpbWFnZSBmaXRzIGFuZCB0aGVyZSBhcmUgbm8gYmFkIGJsb2NrcworICogICAgICAgICAxIGlmIHRoZSBpbWFnZSBmaXRzLCBidXQgdGhlcmUgYXJlIGJhZCBibG9ja3MKKyAqICAgICAgICAtMSBpZiB0aGUgaW1hZ2UgZG9lcyBub3QgZml0CisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfc2tpcF9sZW4obmFuZF9pbmZvX3QgKm5hbmQsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpCit7CisJc2l6ZV90IGxlbl9leGNsX2JhZCA9IDA7CisJaW50IHJldCA9IDA7CisKKwl3aGlsZSAobGVuX2V4Y2xfYmFkIDwgbGVuZ3RoKSB7CisJCXNpemVfdCBibG9ja19sZW4sIGJsb2NrX29mZjsKKwkJbG9mZl90IGJsb2NrX3N0YXJ0OworCisJCWlmIChvZmZzZXQgPj0gbmFuZC0+c2l6ZSkKKwkJCXJldHVybiAtMTsKKworCQlibG9ja19zdGFydCA9IG9mZnNldCAmIH4obG9mZl90KShuYW5kLT5lcmFzZXNpemUgLSAxKTsKKwkJYmxvY2tfb2ZmID0gb2Zmc2V0ICYgKG5hbmQtPmVyYXNlc2l6ZSAtIDEpOworCQlibG9ja19sZW4gPSBuYW5kLT5lcmFzZXNpemUgLSBibG9ja19vZmY7CisKKwkJaWYgKCFuYW5kX2Jsb2NrX2lzYmFkKG5hbmQsIGJsb2NrX3N0YXJ0KSkKKwkJCWxlbl9leGNsX2JhZCArPSBibG9ja19sZW47CisJCWVsc2UKKwkJCXJldCA9IDE7CisKKwkJb2Zmc2V0ICs9IGJsb2NrX2xlbjsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCi0jZW5kaWYgLyogKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkgJiYgIWRlZmluZWQoQ0ZHX05BTkRfTEVHQUNZKSAqLworI2lmZGVmIENPTkZJR19DTURfTkFORF9UUklNRkZTCitzdGF0aWMgc2l6ZV90IGRyb3BfZmZzKGNvbnN0IG5hbmRfaW5mb190ICpuYW5kLCBjb25zdCB1X2NoYXIgKmJ1ZiwKKwkJCWNvbnN0IHNpemVfdCAqbGVuKQoreworCXNpemVfdCBpLCBsID0gKmxlbjsKKworCWZvciAoaSA9IGwgLSAxOyBpID49IDA7IGktLSkKKwkJaWYgKGJ1ZltpXSAhPSAweEZGKQorCQkJYnJlYWs7CisKKwkvKiBUaGUgcmVzdWx0aW5nIGxlbmd0aCBtdXN0IGJlIGFsaWduZWQgdG8gdGhlIG1pbmltdW0gZmxhc2ggSS9PIHNpemUgKi8KKwlsID0gaSArIDE7CisJbCA9IChsICsgbmFuZC0+d3JpdGVzaXplIC0gMSkgLyBuYW5kLT53cml0ZXNpemU7CisJbCAqPSAgbmFuZC0+d3JpdGVzaXplOworCisJLyoKKwkgKiBzaW5jZSB0aGUgaW5wdXQgbGVuZ3RoIG1heSBiZSB1bmFsaWduZWQsIHByZXZlbnQgYWNjZXNzIHBhc3QgdGhlIGVuZAorCSAqIG9mIHRoZSBidWZmZXIKKwkgKi8KKwlyZXR1cm4gbWluKGwsICpsZW4pOworfQorI2VuZGlmCisKKy8qKgorICogbmFuZF93cml0ZV9za2lwX2JhZDoKKyAqCisgKiBXcml0ZSBpbWFnZSB0byBOQU5EIGZsYXNoLgorICogQmxvY2tzIHRoYXQgYXJlIG1hcmtlZCBiYWQgYXJlIHNraXBwZWQgYW5kIHRoZSBpcyB3cml0dGVuIHRvIHRoZSBuZXh0CisgKiBibG9jayBpbnN0ZWFkIGFzIGxvbmcgYXMgdGhlIGltYWdlIGlzIHNob3J0IGVub3VnaCB0byBmaXQgZXZlbiBhZnRlcgorICogc2tpcHBpbmcgdGhlIGJhZCBibG9ja3MuCisgKgorICogQHBhcmFtIG5hbmQgIAlOQU5EIGRldmljZQorICogQHBhcmFtIG9mZnNldAlvZmZzZXQgaW4gZmxhc2gKKyAqIEBwYXJhbSBsZW5ndGgJYnVmZmVyIGxlbmd0aAorICogQHBhcmFtIGJ1ZmZlciAgICAgICAgYnVmZmVyIHRvIHJlYWQgZnJvbQorICogQHBhcmFtIGZsYWdzCQlmbGFncyBtb2RpZnlpbmcgdGhlIGJlaGF2aW91ciBvZiB0aGUgd3JpdGUgdG8gTkFORAorICogQHJldHVybgkJMCBpbiBjYXNlIG9mIHN1Y2Nlc3MKKyAqLworaW50IG5hbmRfd3JpdGVfc2tpcF9iYWQobmFuZF9pbmZvX3QgKm5hbmQsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCAqbGVuZ3RoLAorCQkJdV9jaGFyICpidWZmZXIsIGludCBmbGFncykKK3sKKwlpbnQgcnZhbCA9IDAsIGJsb2Nrc2l6ZTsKKwlzaXplX3QgbGVmdF90b193cml0ZSA9ICpsZW5ndGg7CisJdV9jaGFyICpwX2J1ZmZlciA9IGJ1ZmZlcjsKKwlpbnQgbmVlZF9za2lwOworCisjaWZkZWYgQ09ORklHX0NNRF9OQU5EX1lBRkZTCisJaWYgKGZsYWdzICYgV0lUSF9ZQUZGU19PT0IpIHsKKwkJaWYgKGZsYWdzICYgfldJVEhfWUFGRlNfT09CKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaW50IHBhZ2VzOworCQlwYWdlcyA9IG5hbmQtPmVyYXNlc2l6ZSAvIG5hbmQtPndyaXRlc2l6ZTsKKwkJYmxvY2tzaXplID0gKHBhZ2VzICogbmFuZC0+b29ic2l6ZSkgKyBuYW5kLT5lcmFzZXNpemU7CisJCWlmICgqbGVuZ3RoICUgKG5hbmQtPndyaXRlc2l6ZSArIG5hbmQtPm9vYnNpemUpKSB7CisJCQlwcmludGYgKCJBdHRlbXB0IHRvIHdyaXRlIGluY29tcGxldGUgcGFnZSIKKwkJCQkiIGluIHlhZmZzIG1vZGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJYmxvY2tzaXplID0gbmFuZC0+ZXJhc2VzaXplOworCX0KKworCS8qCisJICogbmFuZF93cml0ZSgpIGhhbmRsZXMgdW5hbGlnbmVkLCBwYXJ0aWFsIHBhZ2Ugd3JpdGVzLgorCSAqCisJICogV2UgYWxsb3cgbGVuZ3RoIHRvIGJlIHVuYWxpZ25lZCwgZm9yIGNvbnZlbmllbmNlIGluCisJICogdXNpbmcgdGhlICRmaWxlc2l6ZSB2YXJpYWJsZS4KKwkgKgorCSAqIEhvd2V2ZXIsIHN0YXJ0aW5nIGF0IGFuIHVuYWxpZ25lZCBvZmZzZXQgbWFrZXMgdGhlCisJICogc2VtYW50aWNzIG9mIGJhZCBibG9jayBza2lwcGluZyBhbWJpZ3VvdXMgKHJlYWxseSwKKwkgKiB5b3Ugc2hvdWxkIG9ubHkgc3RhcnQgYSBibG9jayBza2lwcGluZyBhY2Nlc3MgYXQgYQorCSAqIHBhcnRpdGlvbiBib3VuZGFyeSkuICBTbyBkb24ndCB0cnkgdG8gaGFuZGxlIHRoYXQuCisJICovCisJaWYgKChvZmZzZXQgJiAobmFuZC0+d3JpdGVzaXplIC0gMSkpICE9IDApIHsKKwkJcHJpbnRmICgiQXR0ZW1wdCB0byB3cml0ZSBub24gcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworCQkqbGVuZ3RoID0gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbmVlZF9za2lwID0gY2hlY2tfc2tpcF9sZW4obmFuZCwgb2Zmc2V0LCAqbGVuZ3RoKTsKKwlpZiAobmVlZF9za2lwIDwgMCkgeworCQlwcmludGYgKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgdGhlIGZsYXNoIGFyZWFcbiIpOworCQkqbGVuZ3RoID0gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFuZWVkX3NraXAgJiYgIShmbGFncyAmIFdJVEhfRFJPUF9GRlMpKSB7CisJCXJ2YWwgPSBuYW5kX3dyaXRlIChuYW5kLCBvZmZzZXQsIGxlbmd0aCwgYnVmZmVyKTsKKwkJaWYgKHJ2YWwgPT0gMCkKKwkJCXJldHVybiAwOworCisJCSpsZW5ndGggPSAwOworCQlwcmludGYgKCJOQU5EIHdyaXRlIHRvIG9mZnNldCAlbGx4IGZhaWxlZCAlZFxuIiwKKwkJCW9mZnNldCwgcnZhbCk7CisJCXJldHVybiBydmFsOworCX0KKworCXdoaWxlIChsZWZ0X3RvX3dyaXRlID4gMCkgeworCQlzaXplX3QgYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0ICYgKG5hbmQtPmVyYXNlc2l6ZSAtIDEpOworCQlzaXplX3Qgd3JpdGVfc2l6ZSwgdHJ1bmNhdGVkX3dyaXRlX3NpemU7CisKKwkJV0FUQ0hET0dfUkVTRVQgKCk7CisKKwkJaWYgKG5hbmRfYmxvY2tfaXNiYWQgKG5hbmQsIG9mZnNldCAmIH4obmFuZC0+ZXJhc2VzaXplIC0gMSkpKSB7CisJCQlwcmludGYgKCJTa2lwIGJhZCBibG9jayAweCUwOGxseFxuIiwKKwkJCQlvZmZzZXQgJiB+KG5hbmQtPmVyYXNlc2l6ZSAtIDEpKTsKKwkJCW9mZnNldCArPSBuYW5kLT5lcmFzZXNpemUgLSBibG9ja19vZmZzZXQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsZWZ0X3RvX3dyaXRlIDwgKGJsb2Nrc2l6ZSAtIGJsb2NrX29mZnNldCkpCisJCQl3cml0ZV9zaXplID0gbGVmdF90b193cml0ZTsKKwkJZWxzZQorCQkJd3JpdGVfc2l6ZSA9IGJsb2Nrc2l6ZSAtIGJsb2NrX29mZnNldDsKKworI2lmZGVmIENPTkZJR19DTURfTkFORF9ZQUZGUworCQlpZiAoZmxhZ3MgJiBXSVRIX1lBRkZTX09PQikgeworCQkJaW50IHBhZ2UsIHBhZ2VzOworCQkJc2l6ZV90IHBhZ2VzaXplID0gbmFuZC0+d3JpdGVzaXplOworCQkJc2l6ZV90IHBhZ2VzaXplX29vYiA9IHBhZ2VzaXplICsgbmFuZC0+b29ic2l6ZTsKKwkJCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisKKwkJCW9wcy5sZW4gPSBwYWdlc2l6ZTsKKwkJCW9wcy5vb2JsZW4gPSBuYW5kLT5vb2JzaXplOworCQkJb3BzLm1vZGUgPSBNVERfT09CX0FVVE87CisJCQlvcHMub29ib2ZmcyA9IDA7CisKKwkJCXBhZ2VzID0gd3JpdGVfc2l6ZSAvIHBhZ2VzaXplX29vYjsKKwkJCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBwYWdlczsgcGFnZSsrKSB7CisJCQkJV0FUQ0hET0dfUkVTRVQoKTsKKworCQkJCW9wcy5kYXRidWYgPSBwX2J1ZmZlcjsKKwkJCQlvcHMub29iYnVmID0gb3BzLmRhdGJ1ZiArIHBhZ2VzaXplOworCisJCQkJcnZhbCA9IG5hbmQtPndyaXRlX29vYihuYW5kLCBvZmZzZXQsICZvcHMpOworCQkJCWlmIChydmFsICE9IDApCisJCQkJCWJyZWFrOworCisJCQkJb2Zmc2V0ICs9IHBhZ2VzaXplOworCQkJCXBfYnVmZmVyICs9IHBhZ2VzaXplX29vYjsKKwkJCX0KKwkJfQorCQllbHNlCisjZW5kaWYKKwkJeworCQkJdHJ1bmNhdGVkX3dyaXRlX3NpemUgPSB3cml0ZV9zaXplOworI2lmZGVmIENPTkZJR19DTURfTkFORF9UUklNRkZTCisJCQlpZiAoZmxhZ3MgJiBXSVRIX0RST1BfRkZTKQorCQkJCXRydW5jYXRlZF93cml0ZV9zaXplID0gZHJvcF9mZnMobmFuZCwgcF9idWZmZXIsCisJCQkJCQkmd3JpdGVfc2l6ZSk7CisjZW5kaWYKKworCQkJcnZhbCA9IG5hbmRfd3JpdGUobmFuZCwgb2Zmc2V0LCAmdHJ1bmNhdGVkX3dyaXRlX3NpemUsCisJCQkJCXBfYnVmZmVyKTsKKwkJCW9mZnNldCArPSB3cml0ZV9zaXplOworCQkJcF9idWZmZXIgKz0gd3JpdGVfc2l6ZTsKKwkJfQorCisJCWlmIChydmFsICE9IDApIHsKKwkJCXByaW50ZiAoIk5BTkQgd3JpdGUgdG8gb2Zmc2V0ICVsbHggZmFpbGVkICVkXG4iLAorCQkJCW9mZnNldCwgcnZhbCk7CisJCQkqbGVuZ3RoIC09IGxlZnRfdG9fd3JpdGU7CisJCQlyZXR1cm4gcnZhbDsKKwkJfQorCisJCWxlZnRfdG9fd3JpdGUgLT0gd3JpdGVfc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuYW5kX3JlYWRfc2tpcF9iYWQ6CisgKgorICogUmVhZCBpbWFnZSBmcm9tIE5BTkQgZmxhc2guCisgKiBCbG9ja3MgdGhhdCBhcmUgbWFya2VkIGJhZCBhcmUgc2tpcHBlZCBhbmQgdGhlIG5leHQgYmxvY2sgaXMgcmVhZGVuCisgKiBpbnN0ZWFkIGFzIGxvbmcgYXMgdGhlIGltYWdlIGlzIHNob3J0IGVub3VnaCB0byBmaXQgZXZlbiBhZnRlciBza2lwcGluZyB0aGUKKyAqIGJhZCBibG9ja3MuCisgKgorICogQHBhcmFtIG5hbmQgTkFORCBkZXZpY2UKKyAqIEBwYXJhbSBvZmZzZXQgb2Zmc2V0IGluIGZsYXNoCisgKiBAcGFyYW0gbGVuZ3RoIGJ1ZmZlciBsZW5ndGgsIG9uIHJldHVybiBob2xkcyByZW1haW5pbmcgYnl0ZXMgdG8gcmVhZAorICogQHBhcmFtIGJ1ZmZlciBidWZmZXIgdG8gd3JpdGUgdG8KKyAqIEByZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MKKyAqLworaW50IG5hbmRfcmVhZF9za2lwX2JhZChuYW5kX2luZm9fdCAqbmFuZCwgbG9mZl90IG9mZnNldCwgc2l6ZV90ICpsZW5ndGgsCisJCSAgICAgICB1X2NoYXIgKmJ1ZmZlcikKK3sKKwlpbnQgcnZhbDsKKwlzaXplX3QgbGVmdF90b19yZWFkID0gKmxlbmd0aDsKKwl1X2NoYXIgKnBfYnVmZmVyID0gYnVmZmVyOworCWludCBuZWVkX3NraXA7CisKKwlpZiAoKG9mZnNldCAmIChuYW5kLT53cml0ZXNpemUgLSAxKSkgIT0gMCkgeworCQlwcmludGYgKCJBdHRlbXB0IHRvIHJlYWQgbm9uIHBhZ2UgYWxpZ25lZCBkYXRhXG4iKTsKKwkJKmxlbmd0aCA9IDA7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5lZWRfc2tpcCA9IGNoZWNrX3NraXBfbGVuKG5hbmQsIG9mZnNldCwgKmxlbmd0aCk7CisJaWYgKG5lZWRfc2tpcCA8IDApIHsKKwkJcHJpbnRmICgiQXR0ZW1wdCB0byByZWFkIG91dHNpZGUgdGhlIGZsYXNoIGFyZWFcbiIpOworCQkqbGVuZ3RoID0gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFuZWVkX3NraXApIHsKKwkJcnZhbCA9IG5hbmRfcmVhZCAobmFuZCwgb2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlcik7CisJCWlmICghcnZhbCB8fCBydmFsID09IC1FVUNMRUFOKQorCQkJcmV0dXJuIDA7CisKKwkJKmxlbmd0aCA9IDA7CisJCXByaW50ZiAoIk5BTkQgcmVhZCBmcm9tIG9mZnNldCAlbGx4IGZhaWxlZCAlZFxuIiwKKwkJCW9mZnNldCwgcnZhbCk7CisJCXJldHVybiBydmFsOworCX0KKworCXdoaWxlIChsZWZ0X3RvX3JlYWQgPiAwKSB7CisJCXNpemVfdCBibG9ja19vZmZzZXQgPSBvZmZzZXQgJiAobmFuZC0+ZXJhc2VzaXplIC0gMSk7CisJCXNpemVfdCByZWFkX2xlbmd0aDsKKworCQlXQVRDSERPR19SRVNFVCAoKTsKKworCQlpZiAobmFuZF9ibG9ja19pc2JhZCAobmFuZCwgb2Zmc2V0ICYgfihuYW5kLT5lcmFzZXNpemUgLSAxKSkpIHsKKwkJCXByaW50ZiAoIlNraXBwaW5nIGJhZCBibG9jayAweCUwOGxseFxuIiwKKwkJCQlvZmZzZXQgJiB+KG5hbmQtPmVyYXNlc2l6ZSAtIDEpKTsKKwkJCW9mZnNldCArPSBuYW5kLT5lcmFzZXNpemUgLSBibG9ja19vZmZzZXQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsZWZ0X3RvX3JlYWQgPCAobmFuZC0+ZXJhc2VzaXplIC0gYmxvY2tfb2Zmc2V0KSkKKwkJCXJlYWRfbGVuZ3RoID0gbGVmdF90b19yZWFkOworCQllbHNlCisJCQlyZWFkX2xlbmd0aCA9IG5hbmQtPmVyYXNlc2l6ZSAtIGJsb2NrX29mZnNldDsKKworCQlydmFsID0gbmFuZF9yZWFkIChuYW5kLCBvZmZzZXQsICZyZWFkX2xlbmd0aCwgcF9idWZmZXIpOworCQlpZiAocnZhbCAmJiBydmFsICE9IC1FVUNMRUFOKSB7CisJCQlwcmludGYgKCJOQU5EIHJlYWQgZnJvbSBvZmZzZXQgJWxseCBmYWlsZWQgJWRcbiIsCisJCQkJb2Zmc2V0LCBydmFsKTsKKwkJCSpsZW5ndGggLT0gbGVmdF90b19yZWFkOworCQkJcmV0dXJuIHJ2YWw7CisJCX0KKworCQlsZWZ0X3RvX3JlYWQgLT0gcmVhZF9sZW5ndGg7CisJCW9mZnNldCAgICAgICArPSByZWFkX2xlbmd0aDsKKwkJcF9idWZmZXIgICAgICs9IHJlYWRfbGVuZ3RoOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvamZmczJfMXBhc3MuYyBiL2ZzL2pmZnMyL2pmZnMyXzFwYXNzLmMKaW5kZXggNDFmZjRjMS4uNDJkNTZhMiAxMDA2NDQKLS0tIGEvZnMvamZmczIvamZmczJfMXBhc3MuYworKysgYi9mcy9qZmZzMi9qZmZzMl8xcGFzcy5jCkBAIC0xNDMsNiArMTQzLDEyIEBACiAvKiBrZWVwcyBwb2ludGVyIHRvIGN1cnJlbnRsdSBwcm9jZXNzZWQgcGFydGl0aW9uICovCiBzdGF0aWMgc3RydWN0IHBhcnRfaW5mbyAqY3VycmVudF9wYXJ0OwogCit1MzIgdWltYWdlX2lub2RlID0gMDsKK3UzMiB1aW1hZ2VfdmVyc2lvbiA9IDA7Cit1MzIgdWltYWdlX3NpemUgPSAwOworc3RhdGljIHUzMiBqZmZzMl8xcGFzc19zY2FuX2tlcm5lbChzdHJ1Y3QgcGFydF9pbmZvICogcGFydCwgIHUzMiBwaW5vKTsKK3N0YXRpYyB1MzIgamZmczJfMXBhc3NfbG9hZF9rZXJuZWwoc3RydWN0IHBhcnRfaW5mbyAqIHBhcnQsIGNoYXIgKmRlc3QpOworCiAjaWYgZGVmaW5lZChDT05GSUdfSkZGUzJfTkFORCkgJiYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKICNpZiBkZWZpbmVkKENGR19OQU5EX0xFR0FDWSkKICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9sZWdhY3kuaD4KQEAgLTI4NCw3ICsyOTAsNzQgQEAKICAqIE5PUiBmbGFzaCBtZW1vcnkgaXMgbWFwcGVkIGluIHByb2Nlc3NvcidzIGFkZHJlc3Mgc3BhY2UsCiAgKiBqdXN0IHJldHVybiBhZGRyZXNzLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmdldF9mbF9tZW1fbm9yKHUzMiBvZmYpCisjaWZkZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworZXh0ZXJuIHZvaWQgYm9hcmRfbWFwKGZsYXNoX2luZm9fdCAqaW5mbywgdW5zaWduZWQgbG9uZyBhZGRyKTsKKworc3RhdGljIHZvaWQgKmdldF9mbF9tZW1fbm9yKHUzMiBvZmYsIHUzMiBzaXplLCB2b2lkICpleHRfYnVmKQoreworCXUzMiBhZGRyID0gb2ZmOworCXN0cnVjdCBtdGRpZHMgKmlkID0gY3VycmVudF9wYXJ0LT5kZXYtPmlkOworCWV4dGVybiBmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tdOworCWZsYXNoX2luZm9fdCAqZmxhc2ggPSAmZmxhc2hfaW5mb1tpZC0+bnVtXTsKKyAgICAgICAgdV9jaGFyICpidWYgPSBleHRfYnVmID8gKHVfY2hhciopZXh0X2J1ZiA6ICh1X2NoYXIqKW1hbGxvYyhzaXplKTsKKworICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIHByaW50ZigiZ2V0X2ZsX21lbV9ub3I6IGNhbid0IGFsbG9jICVkIGJ5dGVzXG4iLCBzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIAorCWFkZHIgKz0gZmxhc2gtPnN0YXJ0WzBdOworICAgICAgICAKKwlib2FyZF9tYXAoZmxhc2gsIGFkZHIpOworCisgICAgICAgIGlmICgob2ZmIDwgMHg4MDAwMDApICYmICgob2ZmICsgc2l6ZSkgPiAweDgwMDAwMCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuID0gMHg4MDAwMDAgLSBvZmY7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1lbWNweShidWYsICh2b2lkICopYWRkciwgbGVuKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9hcmRfbWFwKGZsYXNoLCBhZGRyK2xlbik7CisgICAgICAgICAgICBtZW1jcHkoYnVmICsgbGVuLCAodm9pZCAqKWFkZHIgKyBsZW4sIHNpemUgLSBsZW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgKHZvaWQgKilhZGRyLCBzaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkICpnZXRfbm9kZV9tZW1fbm9yKHUzMiBvZmYpCit7CisgICAgc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSBub2RlOworICAgIHZvaWQgKnJldCA9IE5VTEw7CisgICAgaW50IGxlbjsKKworICAgIGlmIChOVUxMID09IGdldF9mbF9tZW1fbm9yKG9mZiwgc2l6ZW9mKG5vZGUpLCAmbm9kZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIGlmIChub2RlLm1hZ2ljID09IEpGRlMyX01BR0lDX0JJVE1BU0spIHsKKyAgICAgICAgaWYgKGhkcl9jcmMoJm5vZGUpKQorICAgICAgICAgICAgbGVuID0gbm9kZS50b3RsZW47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZQorICAgICAgICBsZW4gPSBzaXplb2Yobm9kZSk7CisgICAgCisgICAgaWYgKCEocmV0ID0gZ2V0X2ZsX21lbV9ub3Iob2ZmLCBsZW4sIE5VTEwpKSkgeworICAgICAgICBwcmludGYoIm9mZiA9ICUjeCBtYWdpYyAlI3ggdHlwZSAlI3ggbm9kZS50b3RsZW4gPSAlZFxuIiwKKyAgICAgICAgICAgICAgIG9mZiwgbm9kZS5tYWdpYywgbm9kZS5ub2RldHlwZSwgbm9kZS50b3RsZW4pOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfZmxfbWVtX25vcih2b2lkICpidWYpCit7CisgICAgICAgIGlmIChidWYpCisgICAgICAgICAgICBmcmVlKGJ1Zik7Cit9CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmdldF9mbF9tZW1fbm9yKHUzMiBvZmYsIHUzMiBzaXplLCB2b2lkICpleHRfYnVmKQogewogCXUzMiBhZGRyID0gb2ZmOwogCXN0cnVjdCBtdGRpZHMgKmlkID0gY3VycmVudF9wYXJ0LT5kZXYtPmlkOwpAQCAtMjk4LDggKzM3MSwxNCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmdldF9ub2RlX21lbV9ub3IodTMyIG9mZikKIHsKLQlyZXR1cm4gKHZvaWQqKWdldF9mbF9tZW1fbm9yKG9mZik7CisJcmV0dXJuICh2b2lkKilnZXRfZmxfbWVtX25vcihvZmYsIDAsIE5VTEwpOwogfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2ZsX21lbV9ub3Iodm9pZCAqYnVmKQoreworCXJldHVybjsKK30KKyNlbmRpZiAvKiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUyAqLwogI2VuZGlmIC8qICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GTEFTSCkgKi8KIAogCkBAIC0zMTMsNyArMzkyLDcgQEAKIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZMQVNIKQogCWlmIChpZC0+dHlwZSA9PSBNVERfREVWX1RZUEVfTk9SKQotCQlyZXR1cm4gZ2V0X2ZsX21lbV9ub3Iob2ZmKTsKKwkJcmV0dXJuIGdldF9mbF9tZW1fbm9yKG9mZiwgc2l6ZSwgZXh0X2J1Zik7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0pGRlMyX05BTkQpICYmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCkBAIC0zNDUsOSArNDI0LDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfZmxfbWVtKHZvaWQgKmJ1ZikKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19KRkZTMl9OQU5EKSAmJiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQogCXN0cnVjdCBtdGRpZHMgKmlkID0gY3VycmVudF9wYXJ0LT5kZXYtPmlkOwogCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisJaWYgKGlkLT50eXBlID09IE1URF9ERVZfVFlQRV9OT1IpCisJCXJldHVybiBwdXRfZmxfbWVtX25vcihidWYpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19KRkZTMl9OQU5EKSAmJiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQogCWlmIChpZC0+dHlwZSA9PSBNVERfREVWX1RZUEVfTkFORCkKIAkJcmV0dXJuIHB1dF9mbF9tZW1fbmFuZChidWYpOwogI2VuZGlmCkBAIC0xMTkwLDcgKzEyNzQsNyBAQAogCQl9CiAKIAkJbm9kZSA9IChzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlICopIGdldF9ub2RlX21lbSgodTMyKXBhcnQtPm9mZnNldCArIG9mZnNldCk7Ci0JCWlmIChub2RlLT5tYWdpYyA9PSBKRkZTMl9NQUdJQ19CSVRNQVNLICYmIGhkcl9jcmMobm9kZSkpIHsKKwkJaWYgKG5vZGUgJiYgbm9kZS0+bWFnaWMgPT0gSkZGUzJfTUFHSUNfQklUTUFTSyAmJiBoZHJfY3JjKG5vZGUpKSB7CiAJCQkvKiBpZiBpdHMgYSBmcmFnbWVudCBhZGQgaXQgKi8KIAkJCWlmIChub2RlLT5ub2RldHlwZSA9PSBKRkZTMl9OT0RFVFlQRV9JTk9ERSAmJgogCQkJCSAgICBpbm9kZV9jcmMoKHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKikgbm9kZSkgJiYKQEAgLTEyMjgsNyArMTMxMiw3IEBACiAJCQl9CiAJCQlvZmZzZXQgKz0gKChub2RlLT50b3RsZW4gKyAzKSAmIH4zKTsKIAkJCWNvdW50ZXJGKys7Ci0JCX0gZWxzZSBpZiAobm9kZS0+bWFnaWMgPT0gSkZGUzJfRU1QVFlfQklUTUFTSyAmJgorCQl9IGVsc2UgaWYgKG5vZGUgJiYgbm9kZS0+bWFnaWMgPT0gSkZGUzJfRU1QVFlfQklUTUFTSyAmJgogCQkJICAgbm9kZS0+bm9kZXR5cGUgPT0gSkZGUzJfRU1QVFlfQklUTUFTSykgewogCQkJb2Zmc2V0ID0gamZmczJfc2Nhbl9lbXB0eShvZmZzZXQsIHBhcnQpOwogCQl9IGVsc2UgewkvKiBpZiB3ZSBrbm93IG5vdGhpbmcsIHdlIGp1c3Qgc3RlcCBhbmQgbG9vay4gKi8KQEAgLTEyMzYsNyArMTMyMCw3IEBACiAJCQljb3VudGVyNCsrOwogCQl9CiAvKiAgICAgICAgICAgICBwcmludGYoInVua25vd24gbm9kZSBtYWdpYyAlNC40eCAlNC40eCBAICVseFxuIiwgbm9kZS0+bWFnaWMsIG5vZGUtPm5vZGV0eXBlLCAodW5zaWduZWQgbG9uZylub2RlKTsgKi8KLQkJcHV0X2ZsX21lbShub2RlKTsKKyAgICAgICAgICAgICAgICBwdXRfZmxfbWVtKG5vZGUpOwogCX0KIAogCXB1dHN0cigiXGJcYiBkb25lLlxyXG4iKTsJCS8qIGNsb3NlIG9mZiB0aGUgZG90cyAqLwpAQCAtMTMzNCw3ICsxNDE4LDIwMSBAQAogCiAJcmV0dXJuIHJldDsKIH0KKy8qIFRoaXMgZnVuY3Rpb24gc2VhcmNoIGZvciBrZXJuZWwgaW4gL2Jvb3QvdUltYWdlLiBJZiB0aGUga2VybmVsIGlzIHdpdGggZGlmZmVyZW50IG5hbWUgYW5kIGxvY2F0aW9uIHRoZW4KK2Rpc2FibGUgdGhpcyBmdW5jdGlvbiBhbmQgdXNlIGZ1bGwgc2Nhbm5pbmcgYnkgc2V0dGluZyB0aGUgZW52IHZhcmlhYmxlICJmdWxsc2NhbiIgdG8gMS4gKi8KK3N0YXRpYyB1MzIKK2pmZnMyXzFwYXNzX3NjYW5fa2VybmVsKHN0cnVjdCBwYXJ0X2luZm8gKiBwYXJ0LCAgdTMyIHBpbm8pCit7CisgICAgc3RydWN0IGJfbGlzdHMgKnBMOworICAgIHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUgKm5vZGU7CisgICAgdTMyIG9mZnNldCwgb2xkb2Zmc2V0ID0gMDsKKyAgICB1MzIgbWF4ID0gcGFydC0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X2lub2RlKTsKKyAgICB1MzIgY291bnRlciA9IDA7CisgICAgdTMyIGNvdW50ZXI0ID0gMDsKKyAgICB1MzIgY291bnRlckYgPSAwOworICAgIHUzMiBjb3VudGVyTiA9IDA7CisgICAgdTMyIGJvb3RfaW5vZGUgPSAwOworICAgIHUzMiBib290X3ZlcnNpb24gPSAwOworICAgIHUzMiBsZW4gPSAwOwogCisgICAgaW50IGN0b3RzaXplID0gMDsKKyAgICBpbnQgZHRvdHNpemUgPSAwOworCisgICAgc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKmpEaXI7CisgICAgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqak5vZGU7CisKKyAgICBzdHJ1Y3QgbXRkaWRzICppZCA9IGN1cnJlbnRfcGFydC0+ZGV2LT5pZDsKKworICAgIC8qIGNvcHkgcmVxdWVzdGVkIHBhcnRfaW5mbyBzdHJ1Y3QgcG9pbnRlciB0byBnbG9iYWwgbG9jYXRpb24gKi8KKyAgICBjdXJyZW50X3BhcnQgPSBwYXJ0OworCisgICAgLyogaWYgd2UgYXJlIGJ1aWxkaW5nIGEgbGlzdCB3ZSBuZWVkIHRvIHJlZnJlc2ggdGhlIGNhY2hlLiAqLworICAgIGpmZnMyXzFwYXNzX3Jlc2Nhbl9uZWVkZWQocGFydCk7CisgICAgamZmc19pbml0XzFwYXNzX2xpc3QocGFydCk7CisgICAgcEwgPSAoc3RydWN0IGJfbGlzdHMgKilwYXJ0LT5qZmZzMl9wcml2OworICAgIG9mZnNldCA9IDA7CisgICAgbGVuID0gc3RybGVuKCJib290Iik7CisgICAgcHV0cyAoIlNjYW5uaW5nIEpGRlMyIEZTIGZvciB1SW1hZ2U6ICAgIik7CisKKyAgICAvKiBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJ0aXRpb24gKi8KKyAgICB3aGlsZSAob2Zmc2V0IDwgbWF4KSB7CisgICAgICAgIG5vZGUgPSAoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSAqKSBnZXRfbm9kZV9tZW0oKHUzMilwYXJ0LT5vZmZzZXQgKyBvZmZzZXQpOworICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5tYWdpYyA9PSBKRkZTMl9NQUdJQ19CSVRNQVNLICYmIGhkcl9jcmMobm9kZSkpIHsKKyAgICAgICAgICAgIC8qIGlmIGl0cyBhIGZyYWdtZW50IGFkZCBpdCAqLworICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGV0eXBlID09IEpGRlMyX05PREVUWVBFX0lOT0RFICYmCisgICAgICAgICAgICAgICAgICAgIGlub2RlX2NyYygoc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqKSBub2RlKSAmJgorICAgICAgICAgICAgICAgICAgICBkYXRhX2NyYygoc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqKSBub2RlKSApIHsKKyAgICAgICAgICAgICAgICBqTm9kZSA9IChzdHJ1Y3QgamZmczJfcmF3X2lub2RlICopIG5vZGU7CisgICAgICAgICAgICAgICAgaWYodWltYWdlX2lub2RlID09IGpOb2RlLT5pbm8pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0X25vZGUoJnBMLT5mcmFnLCAodTMyKSBwYXJ0LT5vZmZzZXQgKyBvZmZzZXQpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1dF9mbF9tZW0obm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB1aW1hZ2Vfc2l6ZSA9IGpOb2RlLT5pc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgLy9jdG90c2l6ZSArPSBqTm9kZS0+Y3NpemU7CisgICAgICAgICAgICAgICAgICAgIGR0b3RzaXplICs9IGpOb2RlLT5kc2l6ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm5vZGV0eXBlID09IEpGRlMyX05PREVUWVBFX0RJUkVOVCAmJgorICAgICAgICAgICAgICAgICAgICBkaXJlbnRfY3JjKChzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqKSBub2RlKSAgJiYKKyAgICAgICAgICAgICAgICAgICAgZGlyZW50X25hbWVfY3JjKChzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqKSBub2RlKSkgeworICAgICAgICAgICAgICAgIGlmICghIChjb3VudGVyTiUxMDApKQorICAgICAgICAgICAgICAgICAgICA7Ly9wdXRzICgiXGJcYi4gICIpOworICAgICAgICAgICAgICAgIGpEaXIgPSAoc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKilub2RlOworICAgICAgICAgICAgICAgIGlmICgocGlubyA9PSBqRGlyLT5waW5vKSAmJiAobGVuID09IGpEaXItPm5zaXplKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKGpEaXItPmlubykgJiYgIC8qIDAgZm9yIHVubGluayAqLworICAgICAgICAgICAgICAgICAgICAgICAgKCFzdHJuY21wKChjaGFyICopakRpci0+bmFtZSwgImJvb3QiLCBsZW4pKSkgeyAgICAvKiBhIG1hdGNoIGZvciBkaXJlY3RvcnkgJ2Jvb3QnKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGpEaXItPnZlcnNpb24gPCBib290X3ZlcnNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1dF9mbF9tZW0oakRpcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBib290X2lub2RlID0gakRpci0+aW5vOworICAgICAgICAgICAgICAgICAgICBib290X3ZlcnNpb24gPSBqRGlyLT52ZXJzaW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYm9vdF9pbm9kZSAmJiAoYm9vdF9pbm9kZSA9PSBqRGlyLT5waW5vKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKGpEaXItPmlubykgJiYgIC8qIDAgZm9yIHVubGluayAqLworICAgICAgICAgICAgICAgICAgICAgICAgKCFzdHJuY21wKChjaGFyICopakRpci0+bmFtZSwgInVJbWFnZSIsIHN0cmxlbigidUltYWdlIikpKSkgeyAgICAvKiBhIG1hdGNoIGZvciBkaXJlY3RvcnkgZW50cnkgJ3VJbWFnZScqLworICAgICAgICAgICAgICAgICAgICBpZiAoakRpci0+dmVyc2lvbiA8IHVpbWFnZV92ZXJzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXRfZmxfbWVtKGpEaXIpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdWltYWdlX2lub2RlID0gakRpci0+aW5vOworICAgICAgICAgICAgICAgICAgICB1aW1hZ2VfdmVyc2lvbiA9IGpEaXItPnZlcnNpb247CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiLi4udUltYWdlIEZvdW5kXG4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+bm9kZXR5cGUgPT0gSkZGUzJfTk9ERVRZUEVfQ0xFQU5NQVJLRVIpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dG90bGVuICE9IHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJPT1BTIENsZWFubWFya2VyIGhhcyBiYWQgc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiJWQgIT0gJWRcbiIsIG5vZGUtPnRvdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm5vZGV0eXBlID09IEpGRlMyX05PREVUWVBFX1BBRERJTkcpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dG90bGVuIDwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIk9PUFMgUGFkZGluZyBoYXMgYmFkIHNpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIiVkIDwgJWRcbiIsIG5vZGUtPnRvdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiVW5rbm93biBub2RlIHR5cGU6ICV4IGxlbiAlZCAiCisgICAgICAgICAgICAgICAgICAgICJvZmZzZXQgMHgleFxuIiwgbm9kZS0+bm9kZXR5cGUsCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnRvdGxlbiwgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCArPSAoKG5vZGUtPnRvdGxlbiArIDMpICYgfjMpOworICAgICAgICAgICAgY291bnRlckYrKzsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlICYmIG5vZGUtPm1hZ2ljID09IEpGRlMyX0VNUFRZX0JJVE1BU0sgJiYKKyAgICAgICAgICAgICAgIG5vZGUtPm5vZGV0eXBlID09IEpGRlMyX0VNUFRZX0JJVE1BU0spIHsKKyAgICAgICAgICAgIG9mZnNldCA9IGpmZnMyX3NjYW5fZW1wdHkob2Zmc2V0LCBwYXJ0KTsKKyAgICAgICAgfSBlbHNlIHsgICAgLyogaWYgd2Uga25vdyBub3RoaW5nLCB3ZSBqdXN0IHN0ZXAgYW5kIGxvb2suICovCisgICAgICAgICAgICBvZmZzZXQgKz0gNDsKKyAgICAgICAgICAgIGNvdW50ZXI0Kys7CisgICAgICAgIH0KKy8qICAgICAgICAgICAgIHByaW50ZigidW5rbm93biBub2RlIG1hZ2ljICU0LjR4ICU0LjR4IEAgJWx4XG4iLCBub2RlLT5tYWdpYywgbm9kZS0+bm9kZXR5cGUsICh1bnNpZ25lZCBsb25nKW5vZGUpOyAqLworICAgICAgICAgICAgICAgIHB1dF9mbF9tZW0obm9kZSk7CisgICAgICAgICAgICAgICAgaWYoZHRvdHNpemUgJiYgdWltYWdlX3NpemUgJiYgKGR0b3RzaXplID09IHVpbWFnZV9zaXplKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJjdG90c2l6ZSA9ICVkIGR0b3RzaXplID0gJWQgdWltYWdlX3NpemUgPSAlZFxuIHVJbWFnZSBSZWFkIERvbmVcbiIsY3RvdHNpemUsZHRvdHNpemUsdWltYWdlX3NpemUpOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIi4uLnVJbWFnZSBSZWFkIERvbmVcbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgfQorCisgICAgcHJpbnRmKCIuLi51SW1hZ2UgTm90IEZvdW5kXG4iKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdTMyCitqZmZzMl8xcGFzc19sb2FkX2tlcm5lbChzdHJ1Y3QgcGFydF9pbmZvICogcGFydCwgY2hhciAqZGVzdCkKK3sKKyAgICBzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpqTm9kZTsKKyAgICB1MzIgbGF0ZXN0VmVyc2lvbiA9IDA7CisgICAgdWNoYXIgKmxEZXN0OworICAgIHVjaGFyICpzcmM7CisgICAgbG9uZyByZXQ7CisgICAgaW50IGk9MDsKKyAgICBzdHJ1Y3QgYl9ub2RlICpiOworICAgIHN0cnVjdCBiX2xpc3RzICpwTCA9IChzdHJ1Y3QgYl9saXN0cyAqKXBhcnQtPmpmZnMyX3ByaXY7CisgICAgcHJpbnRmKCJMb2FkaW5nIGtlcm5lbCB0byBhZGRyZXNzIDB4JWx4XG4iLCh1bnNpZ25lZCBsb25nKSBkZXN0KTsKKyAgICBmb3IgKGIgPSBwTC0+ZnJhZy5saXN0SGVhZDsgYiAhPSBOVUxMOyBiID0gYi0+bmV4dCkgeworICAgICAgICBqTm9kZSA9IChzdHJ1Y3QgamZmczJfcmF3X2lub2RlICopIGdldF9ub2RlX21lbShiLT5vZmZzZXQpOworICAgICAgICBzcmMgPSAoKHVjaGFyICopIGpOb2RlKSArIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X2lub2RlKTsKKyAgICAgICAgLyogaWdub3JlIGRhdGEgYmVoaW5kIGxhdGVzdCBrbm93biBFT0YgKi8KKyAgICAgICAgaWYgKGpOb2RlLT5vZmZzZXQgPiB1aW1hZ2Vfc2l6ZSkgeworICAgICAgICAgICAgcHV0X2ZsX21lbShqTm9kZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpKys7CisgICAgICAgIGxEZXN0ID0gKHVjaGFyICopIChkZXN0ICsgak5vZGUtPm9mZnNldCk7CisgICAgICAgIHN3aXRjaCAoak5vZGUtPmNvbXByKSB7CisgICAgICAgICAgICBjYXNlIEpGRlMyX0NPTVBSX05PTkU6CisgICAgICAgICAgICAgICAgcmV0ID0gKHVuc2lnbmVkIGxvbmcpIGxkcl9tZW1jcHkobERlc3QsIHNyYywgak5vZGUtPmRzaXplKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSkZGUzJfQ09NUFJfWkVSTzoKKyAgICAgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBqTm9kZS0+ZHNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgKihsRGVzdCsrKSA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpGRlMyX0NPTVBSX1JUSU1FOgorICAgICAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgICAgICAgICAgcnRpbWVfZGVjb21wcmVzcyhzcmMsIGxEZXN0LCBqTm9kZS0+Y3NpemUsIGpOb2RlLT5kc2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpGRlMyX0NPTVBSX0RZTlJVQklOOgorICAgICAgICAgICAgICAgIC8qIHRoaXMgaXMgc2xvdyBidXQgaXQgd29ya3MgKi8KKyAgICAgICAgICAgICAgICByZXQgPSAwOworICAgICAgICAgICAgICAgIGR5bnJ1YmluX2RlY29tcHJlc3Moc3JjLCBsRGVzdCwgak5vZGUtPmNzaXplLCBqTm9kZS0+ZHNpemUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKRkZTMl9DT01QUl9aTElCOgorICAgICAgICAgICAgICAgIHJldCA9IHpsaWJfZGVjb21wcmVzcyhzcmMsIGxEZXN0LCBqTm9kZS0+Y3NpemUsIGpOb2RlLT5kc2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfSkZGUzJfTFpPX0xaQVJJKQorICAgICAgICAgICAgY2FzZSBKRkZTMl9DT01QUl9MWk86CisgICAgICAgICAgICAgICAgcmV0ID0gbHpvX2RlY29tcHJlc3Moc3JjLCBsRGVzdCwgak5vZGUtPmNzaXplLCBqTm9kZS0+ZHNpemUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKRkZTMl9DT01QUl9MWkFSSToKKyAgICAgICAgICAgICAgICByZXQgPSBsemFyaV9kZWNvbXByZXNzKHNyYywgbERlc3QsIGpOb2RlLT5jc2l6ZSwgak5vZGUtPmRzaXplKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvKiB1bmtub3duICovCisgICAgICAgICAgICAgICAgcHV0TGFiZWxlZFdvcmQoIlVOS09XTiBDT01QUkVTU0lPTiBNRVRIT0QgPSAiLCBqTm9kZS0+Y29tcHIpOworICAgICAgICAgICAgICAgIHB1dF9mbF9tZW0oak5vZGUpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwdXRfZmxfbWVtKGpOb2RlKTsKKyAgICB9Cit9CisKKy8qIExvYWQgdGhlIGtlcm5lbCBmaWxlIGZyb20gZmxhc2ggaW50byBtZW1vcnkqLwordTMyCitqZmZzMl8xcGFzc191bG9hZChjaGFyICpkZXN0LCBzdHJ1Y3QgcGFydF9pbmZvICogcGFydCwgY29uc3QgY2hhciAqZm5hbWUpCit7CisgICAgICAgIGlmICghIChqZmZzMl8xcGFzc19zY2FuX2tlcm5lbChwYXJ0LCAxKSkpIHsKKyAgICAgICAgICAgIHB1dHN0cigic2NhbiBmYWlsZWQ6IHRyeWluZyBsb2FkaW5nIHVzaW5nIGZzbG9hZFxyXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGpmZnMyXzFwYXNzX2xvYWRfa2VybmVsKHBhcnQsIGRlc3QpOworICAgICAgICByZXR1cm4gMTsKK30KIAogLyogTG9hZCBhIGZpbGUgZnJvbSBmbGFzaCBpbnRvIG1lbW9yeS4gZm5hbWUgY2FuIGJlIGEgZnVsbCBwYXRoICovCiB1MzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JpdHMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTIyMzM1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vYml0cy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIGJpdHMuaAorICogQ29weXJpZ2h0IChjKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7ICB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2UgZm91bmQgaW4gdGhlIGZpbGUKKyAqIG5hbWVkIENPUFlJTkcgdGhhdCBzaG91bGQgaGF2ZSBhY2NvbXBhbmllZCB0aGlzIGZpbGUuCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworI2lmbmRlZiBfX2JpdHNfaAorI2RlZmluZSBfX2JpdHNfaCAxCisKKyNkZWZpbmUgQklUMCAgKDE8PDApCisjZGVmaW5lIEJJVDEgICgxPDwxKQorI2RlZmluZSBCSVQyICAoMTw8MikKKyNkZWZpbmUgQklUMyAgKDE8PDMpCisjZGVmaW5lIEJJVDQgICgxPDw0KQorI2RlZmluZSBCSVQ1ICAoMTw8NSkKKyNkZWZpbmUgQklUNiAgKDE8PDYpCisjZGVmaW5lIEJJVDcgICgxPDw3KQorI2RlZmluZSBCSVQ4ICAoMTw8OCkKKyNkZWZpbmUgQklUOSAgKDE8PDkpCisjZGVmaW5lIEJJVDEwICgxPDwxMCkKKyNkZWZpbmUgQklUMTEgKDE8PDExKQorI2RlZmluZSBCSVQxMiAoMTw8MTIpCisjZGVmaW5lIEJJVDEzICgxPDwxMykKKyNkZWZpbmUgQklUMTQgKDE8PDE0KQorI2RlZmluZSBCSVQxNSAoMTw8MTUpCisjZGVmaW5lIEJJVDE2ICgxPDwxNikKKyNkZWZpbmUgQklUMTcgKDE8PDE3KQorI2RlZmluZSBCSVQxOCAoMTw8MTgpCisjZGVmaW5lIEJJVDE5ICgxPDwxOSkKKyNkZWZpbmUgQklUMjAgKDE8PDIwKQorI2RlZmluZSBCSVQyMSAoMTw8MjEpCisjZGVmaW5lIEJJVDIyICgxPDwyMikKKyNkZWZpbmUgQklUMjMgKDE8PDIzKQorI2RlZmluZSBCSVQyNCAoMTw8MjQpCisjZGVmaW5lIEJJVDI1ICgxPDwyNSkKKyNkZWZpbmUgQklUMjYgKDE8PDI2KQorI2RlZmluZSBCSVQyNyAoMTw8MjcpCisjZGVmaW5lIEJJVDI4ICgxPDwyOCkKKyNkZWZpbmUgQklUMjkgKDE8PDI5KQorI2RlZmluZSBCSVQzMCAoMTw8MzApCisjZGVmaW5lIEJJVDMxICgxPDwzMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9ic3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzE3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9ic3AuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX0JTUF9ICisjZGVmaW5lIF9CU1BfSAorCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT181MzApCisjaW5jbHVkZSAiYnNwXzUzMC5oIgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fNTE1KSB8fCBkZWZpbmVkKENPTkZJR19DT01DRVJUT184MDApCisjaW5jbHVkZSAiYnNwXzUxNS5oIgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKQorI2luY2x1ZGUgImJzcF8xMDAuaCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMDApCisjaW5jbHVkZSAiYnNwXzEwMDAuaCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzIwMDApCisjaW5jbHVkZSAiYnNwXzIwMDAuaCIKKyNlbHNlCisjZXJyb3IgIk5vIGFyY2hpdGVjdHVyZSBzZWxlY3RlZCEhISIKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBfQlNQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JzcF8xMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JzcF8xMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWJjZTAxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vYnNwXzEwMC5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX0JTUF8xMDBfSAorI2RlZmluZSBfQlNQXzEwMF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjZW5kaWYKKworI2RlZmluZSBHUElPX1RZUEVfSU5QVVQJCTAKKyNkZWZpbmUgR1BJT19UWVBFX09VVFBVVAkxCisKKyNkZWZpbmUgQ09NQ0VSVE9fUEFSVF9NQUdJQyAweDRENTM1MDQ0CisKK3ZvaWQgU29DX0NoZWNrX0RldmljZSh2b2lkKTsKK3ZvaWQgU29DX0FQQl9zZXR1cCh2b2lkKTsKK3ZvaWQgU29DX0FIQl9zZXR1cCh2b2lkKTsKK3ZvaWQgU29DX0FSQU1fc2V0dXAodm9pZCk7CisKK3ZvaWQgU29DX1BMTF9pbml0KHZvaWQpOwordm9pZCBTb0NfbWVtX2luaXQodTMyIGJvYXJkX2NvbmZpZyk7Cit2b2lkIFNvQ19uYW5kX2luaXQodm9pZCk7Cit1MzIgZ2V0X2Rkcl9zaXplKHZvaWQpOwordm9pZCBzdGFydF90cmFpbmluZyh2b2lkKTsKKworaW50IFNvQ19ncGlvX2NmZyhpbnQgZ3BpbywgaW50IG1vZGUpOworCisjZGVmaW5lIFNvQ19ncGlvX21hc2soZ3BpbykJCSgxIDw8ICgoZ3BpbykgJiAweDFmKSkKKworI2RlZmluZSBTb0NfZ3Bpb19yZWFkKGdwaW9tYXNrKQkJKF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKilHUElPX0lOUFVUX1JFRyAmIChncGlvbWFzaykpKQorI2RlZmluZSBTb0NfZ3Bpb19zZXRfMChncGlvbWFzaykJKCoodm9sYXRpbGUgdTMyICopR1BJT19PVVRQVVRfUkVHICY9IF9fY3B1X3RvX2xlMzIofihncGlvbWFzaykpKQorCisjZGVmaW5lIFNvQ19ncGlvX3NldF8xKGdwaW9tYXNrKQkoKih2b2xhdGlsZSB1MzIgKilHUElPX09VVFBVVF9SRUcgfD0gX19jcHVfdG9fbGUzMigoZ3Bpb21hc2spKSkKKworCitzdGF0aWMgaW5saW5lIHZvaWQgSEFMX3NldF9hcm1fY2xrKHUzMiBmY2xrKQoreworCXZvbGF0aWxlIHUzMiBkZWxheV9jb3VudDsKKyNpZmRlZiBNODIxMzRHCisJdTMyIHcgPSAyOyAKKyNlbHNlCisJdTMyIHcgPSAxOyAKKyNlbmRpZiAKKwl1MzIgeCA9IDA7CisJdTMyIHkgPSAoZmNsayAqICgodyArIDEpICogKHggKyAxKSAqIDIpKSAvIENGR19SRUZDTEtGUkVROworCisJLy8gc2V0IFBMTCBpbnRvIEJZUEFTUyBtb2RlIHVzaW5nIE1VWAorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fQ0xLX0NOVFJMIHw9IF9fY3B1X3RvX2xlMzIoUExMX0NMS19CWVBBU1MpOworCS8vIGRvIGFuIGludGVybmFsIFBMTCBieXBhc3MKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTCB8PSBfX2NwdV90b19sZTMyKEFSTV9QTExfQllfQ1RSTCk7CisJLy8gd2FpdCA1MDB1cyAKKwlkZWxheV9jb3VudCA9IDEyMDAwOworCXdoaWxlIChkZWxheV9jb3VudC0tKTsKKwkvLyBkaXNhYmxlIHRoZSBQTEwKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTCB8PSBfX2NwdV90b19sZTMyKFBMTF9ESVNBQkxFKTsKKwkvLyB3YWl0IDUwMHVzIAorCWRlbGF5X2NvdW50ID0gMTIwMDA7CisJd2hpbGUgKGRlbGF5X2NvdW50LS0pOworCS8vIGVuYWJsZSB0aGUgUExMCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9DTEtfQ05UUkwgJj0gX19jcHVfdG9fbGUzMih+UExMX0RJU0FCTEUpOworCS8vIHdhaXQgNTAwdXMgCisJZGVsYXlfY291bnQgPSAxMjAwMDsKKwl3aGlsZSAoZGVsYXlfY291bnQtLSk7CisJLy8gc2V0IFgsIFcgYW5kIFgKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTCAmPSBfX2NwdV90b19sZTMyKDB4RkYwMDAwMDApIDsKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTCB8PSBfX2NwdV90b19sZTMyKCh4IDw8IDE2KSArICh3IDw8IDgpICsgeSk7CisJLy8gd2FpdCBmb3IgUExMIHRvIGxvY2sKKwl3aGlsZSggKCoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9QTExfU1RBVFVTICYgX19jcHVfdG9fbGUzMihGQ0xLX1BMTF9MT0NLKSkgPT0gMCk7CisKKwkvLyByZW1vdmUgdGhlIGludGVybmFsIFBMTCBieXBhc3MKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTCAmPSBfX2NwdV90b19sZTMyKH5BUk1fUExMX0JZX0NUUkwpOworCS8vIHJlbW92ZSBQTEwgZnJvbSBCWVBBU1MgbW9kZSB1c2luZyBNVVgKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTCAmPSBfX2NwdV90b19sZTMyKH5QTExfQ0xLX0JZUEFTUyk7CisKK30KKworc3RhdGljIGlubGluZSBpbnQgSEFMX2dldF9hcm1fY2xrKHZvaWQpCit7CisJdTMyIHc7CisJdTMyIHg7CisJdTMyIHkgOworCXUzMiByZWc7CisKKwlyZWcgPSBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fQ0xLX0NOVFJMKTsKKwl4ID0gKHJlZyAmIDB4MDAwMUYwMDAwKSA+PiAxNjsKKwl5ID0gKHJlZyAmIDB4MDAwMDAwMDdGKTsKKwl3ID0gKHJlZyAmIDB4MDAwMDAwMzAwKSA+PiA4OworCisJcmV0dXJuIChDRkdfUkVGQ0xLRlJFUSAqIHkgLygodyArIDEpICogKHggKyAxKSAqIDIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEhBTF9zZXRfYW1iYV9jbGsodTMyIGZjbGspCit7CisJdm9sYXRpbGUgdTMyIGRlbGF5X2NvdW50OworCXUzMiB3ID0gMTsKKwl1MzIgeCA9IDE7CisJdTMyIHkgPSAoZmNsayAqKCh3ICsgMSkgKiAoeCArIDEpICogMikpIC8gQ0ZHX1JFRkNMS0ZSRVE7CisKKwkvLyBzZXQgUExMIGludG8gQllQQVNTIG1vZGUgdXNpbmcgTVVYCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwgfD0gX19jcHVfdG9fbGUzMihQTExfQ0xLX0JZUEFTUyk7CisJLy8gZG8gYW4gaW50ZXJuYWwgUExMIGJ5cGFzcworCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMIHw9IF9fY3B1X3RvX2xlMzIoQUhCX1BMTF9CWV9DVFJMKTsKKwkvLyB3YWl0IDUwMHVzIChBUk0gcnVubmluZyBAMjRNaHogLT4gMTIwMDAgY3ljbGVzID0+IDUwMHVzKQorCWRlbGF5X2NvdW50ID0gMTIwMDA7CisJd2hpbGUgKGRlbGF5X2NvdW50LS0pOworCS8vIGRpc2FibGUgdGhlIFBMTAorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMIHw9IF9fY3B1X3RvX2xlMzIoUExMX0RJU0FCTEUpOworCS8vIHdhaXQgNTAwdXMgCisJZGVsYXlfY291bnQgPSAxMjAwMDsKKwl3aGlsZSAoZGVsYXlfY291bnQtLSk7CisJLy8gZW5hYmxlIHRoZSBQTEwKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTCAmPSBfX2NwdV90b19sZTMyKH5QTExfRElTQUJMRSk7CisJLy8gd2FpdCA1MDB1cyAKKwlkZWxheV9jb3VudCA9IDEyMDAwOworCXdoaWxlIChkZWxheV9jb3VudC0tKTsKKwkvLyBzZXQgWCwgVyBhbmQgWAorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMICY9IF9fY3B1X3RvX2xlMzIoMHhGRjAwMDAwMCkgOworCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMIHw9IF9fY3B1X3RvX2xlMzIoKHggPDwgMTYpICsgKHcgPDwgOCkgKyB5KTsKKwkvLyB3YWl0IGZvciBQTEwgdG8gbG9jaworCXdoaWxlKCAoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX1BMTF9TVEFUVVMgJiBfX2NwdV90b19sZTMyKEFIQkNMS19QTExfTE9DSykpID09IDApOworCisJLy8gcmVtb3ZlIHRoZSBpbnRlcm5hbCBQTEwgYnlwYXNzCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwgJj0gX19jcHVfdG9fbGUzMih+QUhCX1BMTF9CWV9DVFJMKTsKKwkvLyByZW1vdmUgUExMIGZyb20gQllQQVNTIG1vZGUgdXNpbmcgTVVYCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwgJj0gX19jcHVfdG9fbGUzMih+UExMX0NMS19CWVBBU1MpOworfQorCisKKworc3RhdGljIGlubGluZSBpbnQgSEFMX2dldF9hbWJhX2Nsayh2b2lkKQoreworCXUzMiB3OworCXUzMiB4OworCXUzMiB5IDsKKwl1MzIgcmVnOworCisJcmVnID0gX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTCk7CisJeCA9IChyZWcgJiAweDAwMDFGMDAwMCkgPj4gMTY7CisJeSA9IChyZWcgJiAweDAwMDAwMDA3RikgOworCXcgPSAocmVnICYgMHgwMDAwMDAzMDApID4+IDg7CisJcmV0dXJuIChDRkdfUkVGQ0xLRlJFUSAqIHkgLyAoKHcgKyAxKSAqICh4ICsgMSkgKiAyKSk7Cit9CisKKworI2VuZGlmIC8qIF9CU1BfMTAwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JzcF8xMDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9ic3BfMTAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OWZkODEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9ic3BfMTAwMC5oCkBAIC0wLDAgKzEsNjE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX0JTUF8xMDAwX0gKKyNkZWZpbmUgX0JTUF8xMDAwX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNlbmRpZgorCisjZGVmaW5lIEdQSU9fVFlQRV9JTlBVVAkJMAorI2RlZmluZSBHUElPX1RZUEVfT1VUUFVUCTEKKworI2RlZmluZSBDT01DRVJUT19QQVJUX01BR0lDIDB4NEQ1MzUwNDQKKwordm9pZCBTb0NfQ2hlY2tfRGV2aWNlKHZvaWQpOwordm9pZCBTb0NfQVBCX3NldHVwKHZvaWQpOwordm9pZCBTb0NfQUhCX3NldHVwKHZvaWQpOwordm9pZCBTb0NfQVJBTV9zZXR1cCh2b2lkKTsKKwordm9pZCBTb0NfUExMX2luaXQoaW50IG4pOwordm9pZCBTb0NfbmFuZF9pbml0KHZvaWQpOwordTMyIGdldF9kZHJfc2l6ZSh2b2lkKTsKK3ZvaWQgc3RhcnRfdHJhaW5pbmcodm9pZCk7CisKK2ludCBTb0NfZ3Bpb19jZmcoaW50IGdwaW8sIGludCBtb2RlKTsKKworI2RlZmluZSBTb0NfZ3Bpb19tYXNrKGdwaW8pCQkoMSA8PCAoKGdwaW8pICYgMHgxZikpCisKKyNkZWZpbmUgU29DX2dwaW9fcmVhZChncGlvbWFzaykJCShfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyICopR1BJT19JTlBVVF9SRUcgJiAoZ3Bpb21hc2spKSkKKyNkZWZpbmUgU29DX2dwaW9fc2V0XzAoZ3Bpb21hc2spCSgqKHZvbGF0aWxlIHUzMiAqKUdQSU9fT1VUUFVUX1JFRyAmPSBfX2NwdV90b19sZTMyKH4oZ3Bpb21hc2spKSkKKworI2RlZmluZSBTb0NfZ3Bpb19zZXRfMShncGlvbWFzaykJKCoodm9sYXRpbGUgdTMyICopR1BJT19PVVRQVVRfUkVHIHw9IF9fY3B1X3RvX2xlMzIoKGdwaW9tYXNrKSkpCisKK3N0YXRpYyBpbmxpbmUgdTMyIEhBTF9nZXRfYWhiX2Nsayh2b2lkKTsKKworZXh0ZXJuIHUzMiBDRkdfSFpfQ0xPQ0s7CisKK3N0cnVjdCBjMTAwMF9jZmdfY2xrIHsKKwl1MzIgYXJtX3BsbDsKKwl1MzIgYXJtX3BsbF9ucjsKKwl1MzIgYXJtX3BsbF9vZDsKKworCXUzMiBhaGJfcGxsOworCXUzMiBhaGJfcGxsX25yOworCXUzMiBhaGJfcGxsX29kOworCisJdTMyIHBoeV9wbGw7CisJdTMyIHBoeV9wbGxfbnI7CisJdTMyIHBoeV9wbGxfb2Q7CisKKwlpbnQgYXJtX2Zyb21fc2NsazI7CisKKwl1MzIgYXJtX2NsazsKKworCWludCBkZHJfZnJvbV9mY2xrOworCisJdTMyIGFoYl9jbGs7CisJdTMyIGRkcl9jbGs7CisJdTMyIGlwc2VjX2NsazsKK307CisKKyNkZWZpbmUgQ0ZHX0NMS182NTBfMTg3XzM3NSAwCisjZGVmaW5lIENGR19DTEtfNjAwXzE2NV8zMzAgMQorI2RlZmluZSBDRkdfQ0xLXzUzNF8xNzhfMzMwIDIKKyNkZWZpbmUgQ0ZHX0NMS180NTBfMTY1XzMzMCAzCisjZGVmaW5lIENGR19DTEtfNDAwXzE2NV8zMzAgNAorI2RlZmluZSBDRkdfQ0xLXzY1MF8yMDBfMjAwIDUKKyNkZWZpbmUgQ0ZHX0NMS182NTBfMTg3XzMyNSA2CisjZGVmaW5lIENGR19DTEtfNjEwXzE4Nl8zNzIgNworCitzdGF0aWMgaW5saW5lIHZvaWQgSEFMX3NldF9hcm1fcGxsKHUzMiBmY2xrLCB1MzIgTlIsIHUzMiBPRCkKK3sKKwl2b2xhdGlsZSB1MzIgZGVsYXlfY291bnQ7CisJdTMyIE5GOworCXUzMiBOQjsKKwl1MzIgcmVmX2NsayA9IENGR19SRUZDTEtGUkVRIC8gMTAwMDAwMDsKKworCWZjbGsgPSBmY2xrIC8gMTAwMDAwMDsgCisJTkYgPSAoZmNsayAqIE5SICogT0QpIC8gcmVmX2NsazsKKworCU5CID0gKE5GICogMikgLyA1OworCisJTlItLTtPRC0tO05GLS07TkItLTsKKworI2lmIDAKKwkvL3Bvd2VyIHVwIFBMTAorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fQ0xLX0NOVFJMICY9IH5BUk1fQ0xLX0NOVFJMX1BMTF9QV0ROOworCisJLy9zZXQgUExMIGludG8gcmVzZXQgbW9kZQorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fQ0xLX0NOVFJMMiB8PSBBUk1fQ0xLX0NOVFJMMl9QTExfUkVTRVQ7CisjZW5kaWYKKworCS8vIHNldCBOUiAvIE5GCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9DTEtfQ05UUkwgJj0gX19jcHVfdG9fbGUzMigweEZGQzBFMDAwKTsKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTCB8PSBfX2NwdV90b19sZTMyKChOUiA8PCAxNikgKyBORik7CisJLy8gc2V0IE9EIGFuZCBOQiAoTkI9TkYvMi41KQorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fQ0xLX0NOVFJMMiAmPSBfX2NwdV90b19sZTMyKDB4ODAwMEZGRkYpOworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMigoT0QgPDwgMjgpICsgKE5CIDw8IDE2KSk7CisKKwkvL3dhaXQgNSB1Uy4uLi4gbG9va3MgbGlrZSBpdCBpcyBvbmUgY3ljbGUuLi4KKwlkZWxheV9jb3VudCA9IDEyMDAwOworLy8Jd2hpbGUgKGRlbGF5X2NvdW50LS0pOworCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9DTEtfQ05UUkwyICY9IF9fY3B1X3RvX2xlMzIofkFSTV9DTEtfQ05UUkwyX1BMTF9SRVNFVCk7CisKKwkvL3dhaXQgMjEgdVMuLi4uIGxvb2tzIGxpa2UgaXQgaXMgb25lIGN5Y2xlLi4uCisJZGVsYXlfY291bnQgPSAxMDsKKwl3aGlsZSAoZGVsYXlfY291bnQtLSk7CisKKwkvL2NsZWFyIHN0YXR1cyBiaXQgCisJZG8geworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUExMX1NUQVRVUyAmPSBfX2NwdV90b19sZTMyKH5QTExfU1RBVFVTX0FSTV9QTExfU1RBVFVTX0NMRUFSKTsJCisJCWRlbGF5X2NvdW50ID0gMjA7CisJCXdoaWxlIChkZWxheV9jb3VudC0tKTsKKwl9IHdoaWxlICgoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX1BMTF9TVEFUVVMgJiBfX2NwdV90b19sZTMyKFBMTF9TVEFUVVNfQVJNX1BMTF9TVEFUVVMpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIEhBTF9nZXRfYXJtX3BsbCh2b2lkKQoreworCXUzMiBOUjsKKwl1MzIgT0Q7CisJdTMyIE5GOworCXUzMiByZWZfY2xrID0gQ0ZHX1JFRkNMS0ZSRVEgLyAxMDAwMDAwOworCXUzMiByZWcgPSBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fQ0xLX0NOVFJMKTsKKwlOUiA9IChyZWcgJiAweDAwM0YwMDAwKSA+PiAxNjsKKwlORiA9IChyZWcgJiAweDAwMDAxRkZGKTsKKwlyZWcgPSBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fQ0xLX0NOVFJMMik7CisJT0QgPSAocmVnICYgMHg3MDAwMDAwMCkgPj4gMjg7CisKKwlyZXR1cm4gKCByZWZfY2xrICogKE5GICsgMSkgLyAoTlIgICsgMSkgLyAoT0QgICsgMSkgKSAqIDEwMDAwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIEhBTF9nZXRfYWhiX3BsbCh2b2lkKQoreworCXUzMiBOUjsKKwl1MzIgT0Q7CisJdTMyIE5GOworCXUzMiByZWZfY2xrID0gQ0ZHX1JFRkNMS0ZSRVEgLyAxMDAwMDAwOworCXUzMiByZWcgPSBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMKTsKKworCU5SID0gKHJlZyAmIDB4MDAzRjAwMDApID4+IDE2OworCU5GID0gKHJlZyAmIDB4MDAwMDFGRkYpOworCXJlZyA9IF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwyKTsKKwlPRCA9IChyZWcgJiAweDcwMDAwMDAwKSA+PiAyODsKKworCXJldHVybiAoIHJlZl9jbGsgKiAoTkYgKyAxKSAvIChOUiAgKyAxKSAvIChPRCAgKyAxKSApICogMTAwMDAwMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEhBTF9zZXRfYXJtX2Nsayh1MzIgYXJtMF9jbGssIHUzMiBhcm0xX2NsaywgaW50IGFybV9mcm9tX3NjbGsyKQoreworLyoJCisgKglUaGlzIGlzIG5ldyBpbiBDMTAwMDsgeW91IGNhbiBzZXQgZGlmZmVyZW50IGNsb2NrIGZvciBBUk0wIGFuZCBBUk0xCQorICoJSW4gdS1ib290IEFSTTEgaXMgdW5kZXIgcmVzZXQuIFdlIHdpbGwgbm90IGNvbmZpZ3VyZSB0aGUgQVJNMV9GQ0xLLiBJdCB3aWxsIGJlIHNldCBpbiBieS1wYXNzIG1vZGUuCisgKi8KKwl1MzIgcGxsOworCisJaWYgKGFybV9mcm9tX3NjbGsyKQorCQlwbGwgPSBIQUxfZ2V0X2FoYl9wbGwoKTsKKwllbHNlCisJCXBsbCA9IEhBTF9nZXRfYXJtX3BsbCgpOworCisvL3NldHVwIGFybTAgY2xvY2sKKwlpZihhcm0wX2NsayA9PSBwbGwpCisJeworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMihBUk1fQ0xLX0NOVFJMMl9BUk0wX0RJVl9CWVBBU1MpOwkKKwl9CisJZWxzZQorCXsKKwkJdTMyIGRpdjAgPSBwbGwgLyBhcm0wX2NsazsKKworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTDIgJj0gX19jcHVfdG9fbGUzMigweEZGRkZGRkYwKTsKKwkJLy8gQVJNMF9GQ0xLID0gRkNMSyAvIGRpdgorCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMihkaXYwICYgMHhGKTsKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9DTEtfQ05UUkwyICY9IF9fY3B1X3RvX2xlMzIofkFSTV9DTEtfQ05UUkwyX0FSTTBfRElWX0JZUEFTUyk7CisJfQorLy9zZXR1cCBhcm0xIGNsb2NrCisJaWYoYXJtMV9jbGsgPT0gcGxsKQorCXsKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9DTEtfQ05UUkwyIHw9IF9fY3B1X3RvX2xlMzIoQVJNX0NMS19DTlRSTDJfQVJNMV9ESVZfQllQQVNTKTsJCisJfQorCWVsc2UKKwl7CisJCXUzMiBkaXYxID0gcGxsIC8gYXJtMV9jbGs7CisKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9DTEtfQ05UUkwyICY9IF9fY3B1X3RvX2xlMzIoMHhGRkZGRjBGRik7CisJCS8vIEFSTTBfRkNMSyA9IEZDTEsgLyBkaXYKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9DTEtfQ05UUkwyIHw9IF9fY3B1X3RvX2xlMzIoKGRpdjEgJiAweEYpIDw8IDgpOworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTDIgJj0gX19jcHVfdG9fbGUzMih+QVJNX0NMS19DTlRSTDJfQVJNMV9ESVZfQllQQVNTKTsKKwl9CisKKwlpZiAoYXJtX2Zyb21fc2NsazIpCisgICAgICAgIAkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMigoQVJNX0NMS19DTlRSTDJfQVJNMF9BSEJfQllQQVNTIHwgQVJNX0NMS19DTlRSTDJfQVJNMV9BSEJfQllQQVNTKSk7CisJZWxzZQorCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTDIgJj0gX19jcHVfdG9fbGUzMih+KEFSTV9DTEtfQ05UUkwyX0FSTTBfQUhCX0JZUEFTUyB8IEFSTV9DTEtfQ05UUkwyX0FSTTFfQUhCX0JZUEFTUykpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBIQUxfZ2V0X2FybTBfY2xrKHZvaWQpCit7CisJdTMyIG1vZGUgPSBfX2xlMzJfdG9fY3B1KCoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fQ0xLX0NOVFJMMik7CisJdTMyIHBsbDsKKworCWlmIChtb2RlICYgQVJNX0NMS19DTlRSTDJfQVJNMF9BSEJfQllQQVNTKQorCQlwbGwgPSBIQUxfZ2V0X2FoYl9wbGwoKTsKKwllbHNlCisJCXBsbCA9ICBIQUxfZ2V0X2FybV9wbGwoKTsKKworCWlmIChtb2RlICYgQVJNX0NMS19DTlRSTDJfQVJNMF9ESVZfQllQQVNTKQorCXsKKwkJcmV0dXJuIHBsbDsKKwl9CisJZWxzZQorCXsKKwkJdTMyIGRpdiA9IG1vZGUgJiAweGY7CisKKwkJcmV0dXJuIHBsbCAvIGRpdjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIEhBTF9nZXRfYXJtMV9jbGsodm9pZCkKK3sKKwl1MzIgbW9kZSA9IF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9DTEtfQ05UUkwyKTsKKwl1MzIgcGxsOworCisJaWYgKG1vZGUgJiBBUk1fQ0xLX0NOVFJMMl9BUk0xX0FIQl9CWVBBU1MpCisJCXBsbCA9IEhBTF9nZXRfYWhiX3BsbCgpOworCWVsc2UKKwkJcGxsID0gSEFMX2dldF9hcm1fcGxsKCk7CisKKwlpZiAobW9kZSAmIEFSTV9DTEtfQ05UUkwyX0FSTTFfRElWX0JZUEFTUykKKwl7CisJCXJldHVybiBwbGw7CisJfQorCWVsc2UKKwl7CisJCXUzMiBkaXYgPSAobW9kZSA+PiA4KSAmIDB4ZjsKKworCQlyZXR1cm4gcGxsIC8gZGl2OworCX0KK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgSEFMX3NldF9haGJfcGxsKHUzMiBzY2xrLCB1MzIgTlIsIHUzMiBPRCkKK3sKKwl2b2xhdGlsZSB1MzIgZGVsYXlfY291bnQ7CisJdTMyIE5GOworICAgICAgICB1MzIgTkI7CisJdTMyIHJlZl9jbGsgPSBDRkdfUkVGQ0xLRlJFUSAvIDEwMDAwMDA7CisKKwlzY2xrID0gc2NsayAvIDEwMDAwMDA7IAorCU5GID0gKHNjbGsgKiBOUiAqIE9EKSAvIHJlZl9jbGs7CisKKwlOQiA9IChORiAqIDIpIC8gNTsKKwkKKwlOUi0tO09ELS07TkYtLTtOQi0tOworI2lmIDAJCisJLy9wb3dlciB1cCBQTEwKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTCAmPSB+QUhCX0NMS19DTlRSTF9QTExfUFdETjsKKworCS8vc2V0IFBMTCBpbnRvIHJlc2V0IG1vZGUKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTDIgfD0gQUhCX0NMS19DTlRSTDJfUExMX1JFU0VUOworI2VuZGlmCisKKwkvLyBzZXQgTlIgLyBORgorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMICY9IF9fY3B1X3RvX2xlMzIoMHhGRkMwRTAwMCk7CisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwgfD0gX19jcHVfdG9fbGUzMigoTlIgPDwgMTYpICsgTkYpOworCS8vIHNldCBPRCBhbmQgTkIgKE5CPU5GLzIuNSkKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTDIgJj0gX19jcHVfdG9fbGUzMigweDgwMDBGRkZGKTsKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMigoT0QgPDwgMjgpICsgKE5CIDw8IDE2KSk7CisKKwkvL3dhaXQgNSB1Uy4uLi4gbG9va3MgbGlrZSBpdCBpcyBvbmUgY3ljbGUuLi4KKwlkZWxheV9jb3VudCA9IDEyMDAwOworLy8Jd2hpbGUgKGRlbGF5X2NvdW50LS0pOwkKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTDIgJj0gX19jcHVfdG9fbGUzMih+QUhCX0NMS19DTlRSTDJfUExMX1JFU0VUKTsKKwkKKwkvL3dhaXQgMjEgdVMuLi4uIGxvb2tzIGxpa2UgaXQgaXMgb25lIGN5Y2xlLi4uCisJZGVsYXlfY291bnQgPSA2MDA7CisvLwl3aGlsZSAoZGVsYXlfY291bnQtLSk7CQorLy9jbGVhciBzdGF0dXMgYml0IAorCWRvIHsKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX1BMTF9TVEFUVVMgJj0gX19jcHVfdG9fbGUzMih+UExMX1NUQVRVU19BSEJfUExMX1NUQVRVU19DTEVBUik7CQorCQlkZWxheV9jb3VudCA9IDYwMDsKKwkJd2hpbGUgKGRlbGF5X2NvdW50LS0pOworCX0gd2hpbGUgKCgqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUExMX1NUQVRVUyAmIF9fY3B1X3RvX2xlMzIoUExMX1NUQVRVU19BSEJfUExMX1NUQVRVUykpKTsKKwkKK30KKworc3RhdGljIGlubGluZSB1MzIgSEFMX2dldF9haGJfY2xrKHZvaWQpCit7CisJdTMyIHN5bmNfbW9kZSA9IF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwpOworCQorCWlmIChzeW5jX21vZGUgJiBBSEJfQ0xLX0NOVFJMX1NZTkNfTU9ERSkKKwl7Ly9zeW5jIG1vZGUgYWhiIGlzIHN5bmMgd2l0aCBmY2xrCisJCXUzMiBhcm1fcGxsID0gSEFMX2dldF9hcm1fcGxsKCk7CisKKwkJaWYgKHN5bmNfbW9kZSAmIEFIQl9DTEtfQ05UUkxfU1lOQ19ESVZfQllQQVNTKQorCQl7CisJCQlyZXR1cm4gYXJtX3BsbDsKKwkJfQorCQllbHNlCisJCXsvLyBhaGIgPSBmY2xrL3N5bmNfZGl2CisJCQl1MzIgZGl2ID0gKHN5bmNfbW9kZSA+PiAyNikgJiAweDc7CisKKwkJCXJldHVybiBhcm1fcGxsIC8gZGl2OworCQl9CisJfQorCWVsc2UKKwl7Ly8gbm90IGluIHN5bmMgbW9kZQorCQl1MzIgYWhiX3BsbCA9IEhBTF9nZXRfYWhiX3BsbCgpOworCQl1MzIgbW9kZSA9IF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwyKTsKKwkJdTMyIGRpdiA9IDE7CisKKwkJaWYgKCEobW9kZSAmIEFIQl9DTEtfQ05UUkwyX0FIQl9ESVYwX0JZUEFTUykpCisJCXsvLyBBSEJfRElWMCBpcyB1c2VkCisJCQlkaXYgPSBkaXYgKiAobW9kZSAmIDB4Rik7CisJCX0KKwkJCisJCWlmICghKG1vZGUgJiBBSEJfQ0xLX0NOVFJMMl9BSEJfRElWMV9CWVBBU1MpKQorCQl7Ly8gQUhCX0RJVjEgaXMgdXNlZAorCQkJZGl2ID0gZGl2ICogKChtb2RlID4+IDQpICYgMHhGKTsKKwkJfQorCisJCXJldHVybiBhaGJfcGxsIC8gZGl2OworCX0KK30KKworc3RhdGljIGlubGluZSB1MzIgSEFMX2dldF9kZHJfY2xrKHZvaWQpCit7CisJdTMyIGRkcl9tdXhfc2VsID0gX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfRERSX1BDSUVfQ0xLX0NOVFJMKTsKKwkKKwlpZiAoZGRyX211eF9zZWwgJiBERFJfUENJRV9DTEtfQ05UUkxfRERSX01VWF9TRUwpCisJey8vZGRyIGlzIGRlcml2ZWQgZnJvbSBhcm0gcGxsIChmY2xrKQorCQl1MzIgYXJtX3BsbCA9IEhBTF9nZXRfYXJtX3BsbCgpOworCisJCWlmIChkZHJfbXV4X3NlbCAmIEREUl9QQ0lFX0NMS19DTlRSTF9ERFJfRElWX0JZUEFTUykKKwkJey8vYnlwYXNzIGRkciBjbGsgPSBmY2xrCisJCQlyZXR1cm4gYXJtX3BsbDsKKwkJfQorCQllbHNlCisJCXsvLyBkZHIgPSBmY2xrL2Rkcl9kaXZfdmFsCisJCQl1MzIgZGl2ID0gKGRkcl9tdXhfc2VsID4+IDQpICYgMHhmOworCisJCQlyZXR1cm4gYXJtX3BsbCAvIGRpdjsKKwkJfQorCX0KKwllbHNlCisJey8vIGRkciBpcyBkZXJpdmVkIGZyb20gYWhiIHBsbCAoc2NsazEpCisJCXUzMiBhaGJfcGxsID0gSEFMX2dldF9haGJfcGxsKCk7CisJCXUzMiBtb2RlID0gX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTDIpOworCQlpZiAobW9kZSAmIEFIQl9DTEtfQ05UUkwyX0FIQl9ESVYwX0JZUEFTUykKKwkJey8vIGNsb2NrIHN3aXRjaCBpcyBzeW5fbXV4IG91dHB1dCAoYnlwYXNzIG1vZGUgZW5hYmxlKQorCQkJLy9zaG91bGQgbm90IGNvbWUgaGVyZSEhIQorCQkJcmV0dXJuIDA7CisJCX0KKwkJZWxzZQorCQl7Ly8gY2xvY2sgc3dpdGNoIG91dHB1dCBpcyBBSEJfRElWMCAKKwkJCXUzMiBkaXYwID0gbW9kZSAmIDB4RjsKKwkJCXJldHVybiBhaGJfcGxsIC8gZGl2MDsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIEhBTF9zZXRfcGh5X3BsbCh1MzIgZmNsaywgdTMyIE5SLCB1MzIgT0QpCit7CisJdm9sYXRpbGUgdTMyIGRlbGF5X2NvdW50OworCXUzMiBORjsKKyAgICAgICAgdTMyIE5COworCXUzMiByZWZfY2xrID0gQ0ZHX1JFRkNMS0ZSRVEgLyAxMDAwMDAwOworCisJZmNsayA9IGZjbGsgLyAxMDAwMDAwOyAKKwlORiA9IChmY2xrICogTlIgKiBPRCkgLyByZWZfY2xrOworCisJTkIgPSAoTkYgKiAyKSAvIDU7CisKKwlOUi0tO09ELS07TkYtLTtOQi0tOworCQorCS8vIHNldCBOUiAvIE5GCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX1BIWV9DTEtfQ05UUkwgJj0gX19jcHVfdG9fbGUzMigweEZGQzBFMDAwKTsKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTCB8PSBfX2NwdV90b19sZTMyKChOUiA8PCAxNikgKyBORik7CisJLy8gc2V0IE9EIGFuZCBOQiAoTkI9TkYvMi41KQorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9QSFlfQ0xLX0NOVFJMMiAmPSBfX2NwdV90b19sZTMyKDB4ODAwMEZGRkYpOworICAgICAgICAqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMigoT0QgPDwgMjgpICsgKE5CIDw8IDE2KSk7CisKKwkvL3dhaXQgNSB1Uy4uLi4gbG9va3MgbGlrZSBpdCBpcyBvbmUgY3ljbGUuLi4KKwlkZWxheV9jb3VudCA9IDEyMDAwOworLy8Jd2hpbGUgKGRlbGF5X2NvdW50LS0pOworCisJLy9zZXQgUExMIGludG8gcmVzZXQgbW9kZQorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9QSFlfQ0xLX0NOVFJMMiAmPSBfX2NwdV90b19sZTMyKH5QSFlfQ0xLX0NOVFJMMl9QTExfUkVTRVQpOworCisJLy93YWl0IDUgdVMuLi4uIGxvb2tzIGxpa2UgaXQgaXMgb25lIGN5Y2xlLi4uCisJZGVsYXlfY291bnQgPSA2MDA7CisJd2hpbGUgKGRlbGF5X2NvdW50LS0pOwkKKwkvL2NsZWFyIHN0YXR1cyBiaXQgCisJZG8geworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUExMX1NUQVRVUyAmPSBfX2NwdV90b19sZTMyKH5QTExfU1RBVFVTX1BIWV9QTExfU1RBVFVTX0NMRUFSKTsJCisJCWRlbGF5X2NvdW50ID0gNjAwOworCQl3aGlsZSAoZGVsYXlfY291bnQtLSk7CisJfSB3aGlsZSAoKCoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9QTExfU1RBVFVTICYgX19jcHVfdG9fbGUzMihQTExfU1RBVFVTX1BIWV9QTExfU1RBVFVTKSkpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBIQUxfZ2V0X3BoeV9wbGwodm9pZCkKK3sKKwl1MzIgTlI7CisJdTMyIE9EOworCXUzMiBORjsKKwl1MzIgcmVmX2NsayA9IENGR19SRUZDTEtGUkVRIC8gMTAwMDAwMDsKKwl1MzIgcmVnID0gX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTCk7CisJTlIgPSAocmVnICYgMHgwMDNGMDAwMCkgPj4gMTY7CisJTkYgPSAocmVnICYgMHgwMDAwMUZGRik7CisJcmVnID0gX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTDIpOworCU9EID0gKHJlZyAmIDB4NzAwMDAwMDApID4+IDI4OworCisJcmV0dXJuICggcmVmX2NsayAqIChORiArIDEpIC8gKE5SICArIDEpIC8gKE9EICArIDEpICkgKiAxMDAwMDAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSEFMX3NldF9waHlfZ2VtX2Nsayh1MzIgZ2VtMF9yZWZjbGssIHUzMiBnZW0xX3JlZmNsaywgdTMyIHBoeV9yZWZjbGspCit7CisJdTMyIHBoeV9wbGwgPSBIQUxfZ2V0X3BoeV9wbGwoKTsKKwl1MzIgZGl2MCA9IChwaHlfcGxsIC8gZ2VtMF9yZWZjbGspICYgMHhGOworCXUzMiBkaXYxID0gKHBoeV9wbGwgLyBnZW0xX3JlZmNsaykgJiAweEY7CisJdTMyIGRpdjIgPSAocGh5X3BsbCAvIHBoeV9yZWZjbGspICYgMHhGOworCisJaWYgKGRpdjAgIT0gMSkgeworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTDIgJj0gX19jcHVfdG9fbGUzMigweEZGRkZGRkYwKTsKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX1BIWV9DTEtfQ05UUkwyIHw9IF9fY3B1X3RvX2xlMzIoZGl2MCk7CisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9QSFlfQ0xLX0NOVFJMMiAmPSBfX2NwdV90b19sZTMyKH5QSFlfQ0xLX0NOVFJMMl9QSFlfRElWMF9CWVBBU1MpOworCX0KKwllbHNlCisJeworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMihQSFlfQ0xLX0NOVFJMMl9QSFlfRElWMF9CWVBBU1MpOworCX0KKworCWlmIChkaXYxICE9IDEpIHsKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX1BIWV9DTEtfQ05UUkwyICY9IF9fY3B1X3RvX2xlMzIoMHhGRkZGRkYwRik7CisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9QSFlfQ0xLX0NOVFJMMiB8PSBfX2NwdV90b19sZTMyKGRpdjEgPDwgNCk7CisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9QSFlfQ0xLX0NOVFJMMiAmPSBfX2NwdV90b19sZTMyKH5QSFlfQ0xLX0NOVFJMMl9QSFlfRElWMV9CWVBBU1MpOworCX0KKwllbHNlCisJeworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMihQSFlfQ0xLX0NOVFJMMl9QSFlfRElWMV9CWVBBU1MpOwkKKwl9CisKKwlpZiAoZGl2MiAhPSAxKSB7CisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9QSFlfQ0xLX0NOVFJMMiAmPSBfX2NwdV90b19sZTMyKDB4RkZGRkYwRkYpOworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMihkaXYyIDw8IDgpOworCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTDIgJj0gX19jcHVfdG9fbGUzMih+UEhZX0NMS19DTlRSTDJfUEhZX0RJVjJfQllQQVNTKTsKKwl9CisJZWxzZQorCXsJCisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9QSFlfQ0xLX0NOVFJMMiB8PSBfX2NwdV90b19sZTMyKFBIWV9DTEtfQ05UUkwyX1BIWV9ESVYyX0JZUEFTUyk7CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBIQUxfc2V0X2FoYl9kZHJfY2xrKHUzMiBhaGJjbGssIHUzMiBkZHJfY2xrLCBpbnQgZmxhZ3MpCit7CisJdTMyIGFoYl9wbGwgPSBIQUxfZ2V0X2FoYl9wbGwoKTsKKwl1MzIgYXJtX3BsbCA9IEhBTF9nZXRfYXJtX3BsbCgpOworCXUzMiBhaGJfZGl2MCwgYWhiX2RpdjEsIGRkcl9kaXY7CisKKwlpZiAoZmxhZ3MpCisJeworCQkvLyBERFIgdXNlcyBGTENLCisJCS8vIEFIQiB1c2VzIFNDTEsxCisJCWRkcl9kaXYgPSBhcm1fcGxsIC8gZGRyX2NsazsKKworCQlhaGJfZGl2MCA9IGFoYl9wbGwgLyBhaGJjbGs7CisJCWFoYl9kaXYxID0gMTsJCQorCisJCS8vIEREUiBNVVggZnJvbSBBUk0gUExMCisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9ERFJfUENJRV9DTEtfQ05UUkwgfD0gX19jcHVfdG9fbGUzMihERFJfUENJRV9DTEtfQ05UUkxfRERSX01VWF9TRUwpOworCX0KKwllbHNlCisJeworCQkvLyBERFIgdXNlcyBTQ0xLMgorCQkvLyBBSEIgdXNlcyBTQ0xLMQorCQlkZHJfZGl2ID0gMTsKKwkJYWhiX2RpdjAgPSBhaGJfcGxsIC8gZGRyX2NsazsKKwkJYWhiX2RpdjEgPSBkZHJfY2xrIC8gYWhiY2xrOworCisJCS8vIEREUiBNVVggZnJvbSBBSEIgUExMCisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9ERFJfUENJRV9DTEtfQ05UUkwgJj0gX19jcHVfdG9fbGUzMih+RERSX1BDSUVfQ0xLX0NOVFJMX0REUl9NVVhfU0VMKTsKKwl9CisKKwlpZiAoZGRyX2RpdiAhPSAxKQorCXsKKwkJCisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9ERFJfUENJRV9DTEtfQ05UUkwgJj0gX19jcHVfdG9fbGUzMigweEZGRkZGRjBGKTsKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0REUl9QQ0lFX0NMS19DTlRSTCB8PSBfX2NwdV90b19sZTMyKChkZHJfZGl2ICYgMHhGKSA8PCA0KTsKKwkJLy8gRERSIERJViBCeXBhc3MgZGlzYWJsZQorCQkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfRERSX1BDSUVfQ0xLX0NOVFJMICY9ICBfX2NwdV90b19sZTMyKH5ERFJfUENJRV9DTEtfQ05UUkxfRERSX0RJVl9CWVBBU1MpOworCX0KKwllbHNlCisJewkvLyBERFIgRElWIEJ5cGFzcyBlbmFibGUKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0REUl9QQ0lFX0NMS19DTlRSTCB8PSBfX2NwdV90b19sZTMyKEREUl9QQ0lFX0NMS19DTlRSTF9ERFJfRElWX0JZUEFTUyk7CisJfSAKKworCisJaWYgKGFoYl9kaXYwICE9IDEpCisJeworCQkKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwyICY9IF9fY3B1X3RvX2xlMzIoMHhGRkZGRkZGMCk7CisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMMiB8PSBfX2NwdV90b19sZTMyKGFoYl9kaXYwICYgMHhGKTsKKwkJLy8gQUhCIERJVjAgQnlwYXNzIGRpc2FibGUKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwyICY9ICBfX2NwdV90b19sZTMyKH4oQUhCX0NMS19DTlRSTDJfQUhCX0RJVjBfQllQQVNTKSk7CisJfQorCWVsc2UKKwl7CS8vIEFIQiBESVYwIEJ5cGFzcyBlbmFibGUKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwyIHw9IF9fY3B1X3RvX2xlMzIoQUhCX0NMS19DTlRSTDJfQUhCX0RJVjBfQllQQVNTKTsKKwl9IAorCisJaWYgKGFoYl9kaXYxICE9IDEpCisJeworCQkKKwkJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwyICY9IF9fY3B1X3RvX2xlMzIoMHhGRkZGRkYwRik7CisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMMiB8PSBfX2NwdV90b19sZTMyKChhaGJfZGl2MSAmIDB4RikgPDwgNCk7CisJCS8vIEFIQiBESVYxIEJ5cGFzcyBkaXNhYmxlCisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMMiAmPSAgX19jcHVfdG9fbGUzMih+KEFIQl9DTEtfQ05UUkwyX0FIQl9ESVYxX0JZUEFTUykpOworCX0KKwllbHNlCisJewkvLyBBSEIgRElWMSBCeXBhc3MgZW5hYmxlCisJCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMMiB8PSBfX2NwdV90b19sZTMyKEFIQl9DTEtfQ05UUkwyX0FIQl9ESVYxX0JZUEFTUyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSEFMX2FsbF9wbGxfYnlwYXNzKHZvaWQpCit7CisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX1BIWV9DTEtfQ05UUkwgfD0gX19jcHVfdG9fbGUzMihQSFlfQ0xLX0NOVFJMX1BIWV9SRUZfQllQQVNTKTsKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTCB8PSBfX2NwdV90b19sZTMyKEFIQl9DTEtfQ05UUkxfQUhCX1JFRl9CWVBBU1MpOworCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9DTEtfQ05UUkwgfD0gX19jcHVfdG9fbGUzMihBUk1fQ0xLX0NOVFJMX0FSTV9SRUZfQllQQVNTKTsKKworCS8vQUhCIHN5bmMgbW9kZSBkaXNhYmxlIHdlIHdpbGwgdGFrZSB0aGUgY2xvY2sgZnJvbSBBSEIgcGxsCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwgJj0gX19jcHVfdG9fbGUzMih+QUhCX0NMS19DTlRSTF9TWU5DX01PREUpOworCisJLy8gQVJNIERJViBCeXBhc3MKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTDIgfD0gX19jcHVfdG9fbGUzMihBUk1fQ0xLX0NOVFJMMl9BUk0wX0RJVl9CWVBBU1MgXAorCQkJCQkJfCBBUk1fQ0xLX0NOVFJMMl9BUk0xX0RJVl9CWVBBU1MpOworCS8vIEFIQiBESVYgQnlwYXNzCisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FIQl9DTEtfQ05UUkwyIHw9ICBfX2NwdV90b19sZTMyKEFIQl9DTEtfQ05UUkwyX0FIQl9ESVYwX0JZUEFTUyBcCisJCQkJCQl8IEFIQl9DTEtfQ05UUkwyX0FIQl9ESVYxX0JZUEFTUykgOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgSEFMX3NldF9pcHNlY19jbGsodTMyIGlwc2VjX2NsaykKK3sKKwl1MzIgYWhiX3BsbCA9IEhBTF9nZXRfYWhiX3BsbCgpOworCXUzMiBkaXY7CisKKwlkaXYgPSBhaGJfcGxsIC8gaXBzZWNfY2xrOworCisJZGl2ID0gZGl2IDw8IDEyOworCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9ERFJfUENJRV9DTEtfQ05UUkwgPSAoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0REUl9QQ0lFX0NMS19DTlRSTCAmIF9fY3B1X3RvX2xlMzIofjB4ZjAwMFVMKSkgfCBfX2NwdV90b19sZTMyKGRpdik7CisKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfRERSX1BDSUVfQ0xLX0NOVFJMICY9IF9fY3B1X3RvX2xlMzIofkREUl9QQ0lFX0NMS19DTlRSTF9JUHNlY19ESVYwX0JZUEFTUyk7CisKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfRERSX1BDSUVfQ0xLX0NOVFJMICY9IF9fY3B1X3RvX2xlMzIofkREUl9QQ0lFX0NMS19DTlRSTF9JUHNlY01VWF9TRUwpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBIQUxfZ2V0X2lwc2VjX2Nsayh2b2lkKQoreworICAgICAgICB1MzIgaXBzZWNfbXV4X3NlbCA9IF9fbGUzMl90b19jcHUoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0REUl9QQ0lFX0NMS19DTlRSTCk7CisKKyAgICAgICAgaWYgKGlwc2VjX211eF9zZWwgJiBERFJfUENJRV9DTEtfQ05UUkxfSVBzZWNNVVhfU0VMKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgdTMyIGFybV9wbGwgPSBIQUxfZ2V0X2FybV9wbGwoKTsKKworICAgICAgICAgICAgICAgIGlmIChpcHNlY19tdXhfc2VsICYgRERSX1BDSUVfQ0xLX0NOVFJMX0lQc2VjX0RJVjFfQllQQVNTKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFybV9wbGw7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkaXYgPSAoaXBzZWNfbXV4X3NlbCA+PiAxNikgJiAweGY7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcm1fcGxsIC8gZGl2OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzIgYWhiX3BsbCA9IEhBTF9nZXRfYWhiX3BsbCgpOworCisgICAgICAgICAgICAgICAgaWYgKGlwc2VjX211eF9zZWwgJiBERFJfUENJRV9DTEtfQ05UUkxfSVBzZWNfRElWMF9CWVBBU1MpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWhiX3BsbDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRpdiA9IChpcHNlY19tdXhfc2VsID4+IDEyKSAmIDB4ZjsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFoYl9wbGwgLyBkaXY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIEhBTF9hbGxfcGxsX3JlbW92ZV9ieXBhc3Modm9pZCkKK3sKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQVJNX0NMS19DTlRSTCAmPSBfX2NwdV90b19sZTMyKH5BUk1fQ0xLX0NOVFJMX0FSTV9SRUZfQllQQVNTKTsKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQUhCX0NMS19DTlRSTCAmPSBfX2NwdV90b19sZTMyKH5BSEJfQ0xLX0NOVFJMX0FIQl9SRUZfQllQQVNTKTsKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfUEhZX0NMS19DTlRSTCAmPSBfX2NwdV90b19sZTMyKH5QSFlfQ0xLX0NOVFJMX1BIWV9SRUZfQllQQVNTKTsKK30KKyNkZWZpbmUgSEFMX2dldF9hbWJhX2NsayBIQUxfZ2V0X2FoYl9jbGsKKyNkZWZpbmUgSEFMX2dldF9hcm1fY2xrIEhBTF9nZXRfYXJtMF9jbGsKKyNlbmRpZiAvKiBfQlNQXzEwMDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vYnNwXzIwMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JzcF8yMDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4OTNlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JzcF8yMDAwLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9CU1BfMjAwMF9ICisjZGVmaW5lIF9CU1BfMjAwMF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjZW5kaWYKKworI2RlZmluZSBHUElPX1RZUEVfSU5QVVQJCTAKKyNkZWZpbmUgR1BJT19UWVBFX09VVFBVVAkxCisKKyNkZWZpbmUgQ09NQ0VSVE9fUEFSVF9NQUdJQyAweDRENTM1MDQ0CisKK2ludCBTb0NfZ3Bpb19jZmcoaW50IGdwaW8sIGludCBtb2RlKTsKKworI2RlZmluZSBTb0NfZ3Bpb19tYXNrKGdwaW8pCQkoMSA8PCAoKGdwaW8pICYgMHgxZikpCisjZGVmaW5lIFNvQ19ncGlvX3JlYWQoZ3Bpb21hc2spCQkoX19sZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKUNPTUNFUlRPX0dQSU9fSU5QVVRfUkVHICYgKGdwaW9tYXNrKSkpCisjZGVmaW5lIFNvQ19ncGlvX3NldF8wKGdwaW9tYXNrKQkoKih2b2xhdGlsZSB1MzIgKilDT01DRVJUT19HUElPX09VVFBVVF9SRUcgJj0gX19jcHVfdG9fbGUzMih+KGdwaW9tYXNrKSkpCisjZGVmaW5lIFNvQ19ncGlvX3NldF8xKGdwaW9tYXNrKQkoKih2b2xhdGlsZSB1MzIgKilDT01DRVJUT19HUElPX09VVFBVVF9SRUcgfD0gX19jcHVfdG9fbGUzMigoZ3Bpb21hc2spKSkKKworI2VuZGlmIC8qIF9CU1BfMjAwMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9ic3BfNTE1LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9ic3BfNTE1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4NDQwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JzcF81MTUuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9CU1BfNTE1X0gKKyNkZWZpbmUgX0JTUF81MTVfSAorCisvKiBDaGlwIFNlbGVjdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVhQX0NTU0QwCTAJCS8qIFkxNyAqLworI2RlZmluZSBFWFBfQ1NTRDEJMQkJLyogQUIwMyAqLworI2RlZmluZSBFWFBfQ1NCT09UCTIKKyNkZWZpbmUgRVhQX0NTUDAJMworI2RlZmluZSBFWFBfQ1NQMQk1CisjZGVmaW5lIEVYUF9DU1AyCTYKKyNkZWZpbmUgU0RSX0NTU0QwCTEzCisjZGVmaW5lIFNEUl9DU1NEMQkxNAorCisjZGVmaW5lIENTX0RJU0FCTEUJCTAKKyNkZWZpbmUgQ1NfRU5BQkxFCQkxCisKKyNkZWZpbmUgQ1NfTUVNVFlQRV9TUkFNCQkwCisjZGVmaW5lIENTX01FTVRZUEVfU0RSQU0JMQorCisjZGVmaW5lIENTX0FDVElWRV9MT1cJCTAKKyNkZWZpbmUgQ1NfQUNUSVZFX0hJR0gJCTEKKworI2RlZmluZSBDU19CVVNXSURUSF84QklUCTB4MAorI2RlZmluZSBDU19CVVNXSURUSF8xNkJJVAkweDEKKyNkZWZpbmUgQ1NfQlVTV0lEVEhfMzJCSVQJMHgyCisKKyNkZWZpbmUgQ1NfRFFNTU9ERV9OT1JNQUwJMHgwCisjZGVmaW5lIENTX0RRTU1PREVfRk9MTE9XX1dFCTB4MQorCisjZGVmaW5lIENMS19NT0RFX1NZTkMJMAorI2RlZmluZSBDTEtfTU9ERV9BU1lOQwkxCisKKyNkZWZpbmUgR1BJT19UWVBFX0lOUFVUCQkwCisjZGVmaW5lIEdQSU9fVFlQRV9PVVRQVVQJMQorCisjZGVmaW5lIElPQ1RSTF9TUElfQlVTCQkwCisjZGVmaW5lIElPQ1RSTF9VQVJUMAkJMQorI2RlZmluZSBJT0NUUkxfVUFSVDEJCTIKKyNkZWZpbmUgSU9DVFJMX0VYUEEyMV9BMjIJMworCisKKyNkZWZpbmUgQkVMTE9XX01FTV9TREMwCQkwCisjZGVmaW5lIEJFTExPV19NRU1fU0RDMQkJMQorCitzdHJ1Y3QgY3NfY2ZnIHsKKworCXU4IG1lbXR5cGU7IAkJLyogMSA9IFNEUkFNIG9yIDAgPSBTUkFNIENTIHNlbGVjdCAqLworCQkJCS8qIG9ubHkgeHh4X0NTU0QwIGNhbiBiZSBTRFJBTSAqLworCisJdTMyIGJhc2VhZGRyOwkJLyogb25seSB2YWxpZCBmb3IgeHh4X0NTU0QwIG9yICB4eHhfQ1NTRDEgKi8KKwl1MzIgc2l6ZTsJCS8qIG9ubHkgdmFsaWQgZm9yIHh4eF9DU1NEMCBvciB4eHhfQ1NTRDEgKi8gLyogc2VnbWVudCBzaXplPyAqLworCisJdTggYnVzd2lkdGg7CS8qIERhdGEgQnVzIFdpZHRoICovCisKKwkvKiBTUkFNIGNvbmZpZywgb25seSB2YWxpZCBpZiBtZW10eXBlID0gU0RSQU07IENoaXAgU2VsZWN0IFJlZ2lzdGVyIFNldHRpbmcgZm9yIFNSQU1zICAqLworCXU4IGxldmVsOwkvKiBDUyBMZXZlbCAqLworCXU4IGNtZHdpZHRoOwkvKiBDb21tYW5kIFdpZHRoIEluZGV4ICovCisJdTggYWRkcnNldHVwOwkvKiBBZGRyZXNzIFNldHVwICovCisJdTggZHFtX21vZGU7CS8qIERRTSBNb2RlICovCisKKwkvKiBTRFJBTV9DRkcxIFNEUkFNIFRpbWluZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEsIG9ubHkgdmFsaWQgaWYgbWVtdHlwZSA9IFNEUkFNICovCisJdTggdHJhczsJLyogUkFTIHRvIFByZWNoYXJnZSBjeWNsZSB0aW1lLiAoTnVtYmVyIG9mIENMSyBjeWNsZXMuKSAqLworCXU4IHRyYzsJCS8qIFJFRiB0byBSRUYvUkFTIGN5Y2xlIHRpbWUuIChOdW1iZXIgb2YgQ0xLIGN5Y2xlcy4pICovCisJdTggdHJjZDsJLyogUm93IGFjdGl2ZSB0byBDb2x1bW4gQWN0aXZlLiAoTnVtYmVyIG9mIENMSyBjeWNsZXMuKSAqLworCXU4IHRycDsJCS8qIFByZWNoYXJnZSB0byBSb3cgYWN0aXZlLiAoTnVtYmVyIG9mIENMSyBjeWNsZXMuKSAqLworCXU4IGNsOwkJLyogQ0FTIExhdGVuY3kuIChOdW1iZXIgb2YgQ0xLIGN5Y2xlcy4pICovCisKKwkvKiBTRFJBTV9DRkcyIFNEUkFNIFRpbWluZyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIsIG9ubHkgdmFsaWQgaWYgbWVtdHlwZSA9IFNEUkFNICovCisJdTggbWVtY2hpcF9kdHlwZTsJLyogTWVtb3J5IENoaXAgRGF0YSBTaXplIFR5cGUgKi8KKwl1OCB0d3I7CQkJLyogV3JpdGUgUmVjb3ZlcnkgVGltZSAoTnVtYmVyIG9mIENMSyBjeWNsZXMuKSAqLworCXU4IHRtcmQ7CQkvKiBNb2RlIHJlZ2lzdGVyIHNldCB0byBhY3RpdmUgb3IgcmVmcmVzaCBjb21tYW5kLiAoTnVtYmVyIG9mIENMSyBjeWNsZXMuKSAqLworCXU4IHRycmQ7CQkvKiBSQVMgdG8gUkFTIG9mIG9wcG9zaXRlIGJhbmtzLiAoTnVtYmVyIG9mIENMSyBjeWNsZXMuKSAqLworCisJLyogU0RSQU1fUkVGUkVTSCBTRFJBTSBSZWZyZXNoIFJlZ2lzdGVyLCBvbmx5IHZhbGlkIGlmIG1lbXR5cGUgPSBTRFJBTSAqLworCXUxNiByZWZjbnQ7CQkvKiBSZWZyZXNoIHBlcmlvZCBjb3VudCAoTnVtYmVyIG9mIENMSyBDeWNsZXMpLiAqLworCisJdTE2IHB3cm9uY250OwkJLyogUG93ZXIgb24gY3ljbGUgY291bnQgKi8KK307CisKK2ludCBTb0NfY3NfY2ZnKGludCBjcywgaW50IGVuYWJsZSwgc3RydWN0IGNzX2NmZyAqY2ZnKTsKK2ludCBTb0NfcGxsX2NmZyAoaW50IG1vZGUsIHVuc2lnbmVkIGludCBhcm1fY2xrLCB1bnNpZ25lZCBpbnQgYnVzX2Nsayk7CisKK2ludCBTb0NfaGlnaF9tZW1fY2ZnIChpbnQgY3MpOworaW50IFNvQ19tZW1fZGl2aWRlcl9jZmcgKHUzMiBhZGRyZXNzLCBpbnQgc2RjKTsKKworaW50IFNvQ19ncGlvX2NmZyhpbnQgZ3BpbywgaW50IG1vZGUpOworaW50IFNvQ19pb2N0cmxfY2ZnKGludCByZXNvdXJjZSwgaW50IGVuYWJsZSk7CisKKyNkZWZpbmUgU29DX2dwaW9fbWFzayhncGlvKQkJKDEgPDwgKChncGlvKSAmIDB4MWYpKQorCisjZGVmaW5lIFNvQ19ncGlvX3JlYWQoZ3Bpb21hc2spCQkoKih2b2xhdGlsZSB1MzIgKilHUElPX0lOUFVUICYgKGdwaW9tYXNrKSkKKyNkZWZpbmUgU29DX2dwaW9fc2V0XzAoZ3Bpb21hc2spCSgqKHZvbGF0aWxlIHUzMiAqKUdQSU9fT1VUUFVUICY9IH4oZ3Bpb21hc2spKQorCisjZGVmaW5lIFNvQ19ncGlvX3NldF8xKGdwaW9tYXNrKQkoKih2b2xhdGlsZSB1MzIgKilHUElPX09VVFBVVCB8PSAoZ3Bpb21hc2spKQorCisjZGVmaW5lIFNvQ190aW1lcjBfc2V0KHZhbCkJCSgqKHZvbGF0aWxlIHUzMiAqKVRJTUVSMF9DT1VOVCA9ICh2YWwpKQorI2RlZmluZSBTb0NfdGltZXIwX2dldCgpCQkoKih2b2xhdGlsZSB1MzIgKilUSU1FUjBfQ1VSUl9DT1VOVCkKKworI2RlZmluZSBTb0NfdGltZXIxX3NldCh2YWwpCQkoKih2b2xhdGlsZSB1MzIgKilUSU1FUjFfQ09VTlQgPSAodmFsKSkKKyNkZWZpbmUgU29DX3RpbWVyMV9nZXQoKQkJKCoodm9sYXRpbGUgdTMyICopVElNRVIxX0NVUlJfQ09VTlQpCisKKyNkZWZpbmUgU29DX2Nsa19hcm1fZ2V0KCkJCSgoQ0ZHX1JFRkNMS0ZSRVEgKiAoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9QTEwgJiAweDdGKSkgPj4gMSkKKworI2RlZmluZSBTb0NfY2xrX2FtYmFfZ2V0KCkJCSgoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FNQkFfUExMICYgKFBMTF9QT1dFUiB8IFBMTF9CWVBBU1MpKSA/IFwKKwkJCQkJKFNvQ19jbGtfYXJtX2dldCgpID4+IDEpIDogXAorCQkJCQkoKENGR19SRUZDTEtGUkVRICogKCoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BTUJBX1BMTCAmIDB4N0YpKSA+PiAyKSkKKworI2VuZGlmIC8qIF9CU1BfNTE1X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JzcF81MzAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2JzcF81MzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzE3MTZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vYnNwXzUzMC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX0JTUF81MzBfSAorI2RlZmluZSBfQlNQXzUzMF9ICisKKy8qIENoaXAgU2VsZWN0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBFWFBfQ1NTRDAJMAkJLyogWTE3ICovCisjZGVmaW5lIEVYUF9DU1NEMQkxCQkvKiBBQjAzICovCisjZGVmaW5lIEVYUF9DU0JPT1QJMgorI2RlZmluZSBFWFBfQ1NQMAkzCisKKyNkZWZpbmUgQ1NfRElTQUJMRQkJMAorI2RlZmluZSBDU19FTkFCTEUJCTEKKworI2RlZmluZSBDU19NRU1UWVBFX1NSQU0JCTAKKyNkZWZpbmUgQ1NfTUVNVFlQRV9TRFJBTQkxCisKKyNkZWZpbmUgQ1NfQUNUSVZFX0xPVwkJMAorI2RlZmluZSBDU19BQ1RJVkVfSElHSAkJMQorCisjZGVmaW5lIENTX0JVU1dJRFRIXzhCSVQJMHgwCisjZGVmaW5lIENTX0JVU1dJRFRIXzE2QklUCTB4MQorI2RlZmluZSBDU19CVVNXSURUSF8zMkJJVAkweDIKKworI2RlZmluZSBDU19EUU1NT0RFX05PUk1BTAkweDAKKyNkZWZpbmUgQ1NfRFFNTU9ERV9GT0xMT1dfV0UJMHgxCisKKyNkZWZpbmUgQ0xLX01PREVfU1lOQwkwCisjZGVmaW5lIENMS19NT0RFX0FTWU5DCTEKKworI2RlZmluZSBHUElPX1RZUEVfSU5QVVQJCTAKKyNkZWZpbmUgR1BJT19UWVBFX09VVFBVVAkxCisKK3N0cnVjdCBjc19jZmcgeworCisJdTggbWVtdHlwZTsgCQkvKiAxID0gU0RSQU0gb3IgMCA9IFNSQU0gQ1Mgc2VsZWN0ICovCisJCQkJLyogb25seSB4eHhfQ1NTRDAgY2FuIGJlIFNEUkFNICovCisKKwl1MzIgYmFzZWFkZHI7CQkvKiBvbmx5IHZhbGlkIGZvciB4eHhfQ1NTRDAgb3IgIHh4eF9DU1NEMSAqLworCXUzMiBzaXplOwkJLyogb25seSB2YWxpZCBmb3IgeHh4X0NTU0QwIG9yIHh4eF9DU1NEMSAqLyAvKiBzZWdtZW50IHNpemU/ICovCisKKwl1OCBidXN3aWR0aDsJLyogRGF0YSBCdXMgV2lkdGggKi8KKworCS8qIFNSQU0gY29uZmlnLCBvbmx5IHZhbGlkIGlmIG1lbXR5cGUgPSBTRFJBTTsgQ2hpcCBTZWxlY3QgUmVnaXN0ZXIgU2V0dGluZyBmb3IgU1JBTXMgICovCisJdTggbGV2ZWw7CS8qIENTIExldmVsICovCisJdTggY21kd2lkdGg7CS8qIENvbW1hbmQgV2lkdGggSW5kZXggKi8KKwl1OCBhZGRyc2V0dXA7CS8qIEFkZHJlc3MgU2V0dXAgKi8KKwl1OCBkcW1fbW9kZTsJLyogRFFNIE1vZGUgKi8KKworCS8qIFNEUkFNX0NGRzEgU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSwgb25seSB2YWxpZCBpZiBtZW10eXBlID0gU0RSQU0gKi8KKwl1OCB0cmFzOwkvKiBSQVMgdG8gUHJlY2hhcmdlIGN5Y2xlIHRpbWUuIChOdW1iZXIgb2YgQ0xLIGN5Y2xlcy4pICovCisJdTggdHJjOwkJLyogUkVGIHRvIFJFRi9SQVMgY3ljbGUgdGltZS4gKE51bWJlciBvZiBDTEsgY3ljbGVzLikgKi8KKwl1OCB0cmNkOwkvKiBSb3cgYWN0aXZlIHRvIENvbHVtbiBBY3RpdmUuIChOdW1iZXIgb2YgQ0xLIGN5Y2xlcy4pICovCisJdTggdHJwOwkJLyogUHJlY2hhcmdlIHRvIFJvdyBhY3RpdmUuIChOdW1iZXIgb2YgQ0xLIGN5Y2xlcy4pICovCisJdTggY2w7CQkvKiBDQVMgTGF0ZW5jeS4gKE51bWJlciBvZiBDTEsgY3ljbGVzLikgKi8KKworCS8qIFNEUkFNX0NGRzIgU0RSQU0gVGltaW5nIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiwgb25seSB2YWxpZCBpZiBtZW10eXBlID0gU0RSQU0gKi8KKwl1OCBtZW1jaGlwX2R0eXBlOwkvKiBNZW1vcnkgQ2hpcCBEYXRhIFNpemUgVHlwZSAqLworCXU4IHR3cjsJCQkvKiBXcml0ZSBSZWNvdmVyeSBUaW1lIChOdW1iZXIgb2YgQ0xLIGN5Y2xlcy4pICovCisJdTggdG1yZDsJCS8qIE1vZGUgcmVnaXN0ZXIgc2V0IHRvIGFjdGl2ZSBvciByZWZyZXNoIGNvbW1hbmQuIChOdW1iZXIgb2YgQ0xLIGN5Y2xlcy4pICovCisJdTggdHJyZDsJCS8qIFJBUyB0byBSQVMgb2Ygb3Bwb3NpdGUgYmFua3MuIChOdW1iZXIgb2YgQ0xLIGN5Y2xlcy4pICovCisKKwkvKiBTRFJBTV9SRUZSRVNIIFNEUkFNIFJlZnJlc2ggUmVnaXN0ZXIsIG9ubHkgdmFsaWQgaWYgbWVtdHlwZSA9IFNEUkFNICovCisJdTE2IHJlZmNudDsJCS8qIFJlZnJlc2ggcGVyaW9kIGNvdW50IChOdW1iZXIgb2YgQ0xLIEN5Y2xlcykuICovCisKKwl1MTYgcHdyb25jbnQ7CQkvKiBQb3dlciBvbiBjeWNsZSBjb3VudCAqLworfTsKKworaW50IFNvQ19jc19jZmcoaW50IGNzLCBpbnQgZW5hYmxlLCBzdHJ1Y3QgY3NfY2ZnICpjZmcpOworaW50IFNvQ19wbGxfY2ZnIChpbnQgbW9kZSwgdW5zaWduZWQgaW50IGFybV9jbGssIHVuc2lnbmVkIGludCBidXNfY2xrKTsKKworaW50IFNvQ19oaWdoX21lbV9jZmcgKGludCBjcyk7CisKK2ludCBTb0NfZ3Bpb19jZmcoaW50IGdwaW8sIGludCBtb2RlKTsKKworI2RlZmluZSBTb0NfZ3Bpb19tYXNrKGdwaW8pCQkoMSA8PCAoKGdwaW8pICYgMHg3KSkKKworI2RlZmluZSBTb0NfZ3Bpb19yZWFkKGdwaW9tYXNrKQkJKCoodm9sYXRpbGUgdTMyICopR1BJT19JTlBVVCAmIChncGlvbWFzayAmIDB4ZmYpKQorI2RlZmluZSBTb0NfZ3Bpb19zZXRfMChncGlvbWFzaykJKCoodm9sYXRpbGUgdTMyICopR1BJT19PVVRQVVQgJj0gfihncGlvbWFzayAmIDB4ZmYpKQorCisjZGVmaW5lIFNvQ19ncGlvX3NldF8xKGdwaW9tYXNrKQkoKih2b2xhdGlsZSB1MzIgKilHUElPX09VVFBVVCB8PSAoZ3Bpb21hc2sgJiAweGZmKSkKKworI2RlZmluZSBTb0NfdGltZXIwX3NldCh2YWwpCQkoKih2b2xhdGlsZSB1MzIgKilUSU1FUjBfQ09VTlQgPSAoKHZhbCkgJiAweDAwZmZmZmZmKSkKKyNkZWZpbmUgU29DX3RpbWVyMF9nZXQoKQkJKCoodm9sYXRpbGUgdTMyICopVElNRVIwX0NVUlJfQ09VTlQgJiAweDAwZmZmZmZmKQorCisjZGVmaW5lIFNvQ190aW1lcjFfc2V0KHZhbCkJCSgqKHZvbGF0aWxlIHUzMiAqKVRJTUVSMV9DT1VOVCA9IChUSU1FUjFfQ09VTlQgJiAweGZmMDAwMDAwKSB8ICgodmFsKSAmIDB4MDBmZmZmZmYpKQorI2RlZmluZSBTb0NfdGltZXIxX2dldCgpCQkoKih2b2xhdGlsZSB1MzIgKilUSU1FUjFfQ1VSUl9DT1VOVCAmIDB4MDBmZmZmZmYpCisKKyNkZWZpbmUgU29DX2Nsa19hcm1fZ2V0KCkJCSgoQ0ZHX1JFRkNMS0ZSRVEgKiAoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9QTEwgJiAweDNGKSkgPj4gMSkKKworI2RlZmluZSBTb0NfY2xrX2FtYmFfZ2V0KCkJCSgoKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FNQkFfUExMICYgKFBMTF9QT1dFUiB8IFBMTF9CWVBBU1MpKSA/IFwKKwkJCQkJKFNvQ19jbGtfYXJtX2dldCgpID4+IDEpIDogXAorCQkJCQkoKENGR19SRUZDTEtGUkVRICogKCoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BTUJBX1BMTCAmIDB4M0YpKSA+PiAyKSkKKworI2VuZGlmIC8qIF9CU1BfNTMwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NhY2hlX2MyMDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jYWNoZV9jMjAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYWY2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jYWNoZV9jMjAwMC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDkKKyAqIE1hcnZlbGwgU2VtaWNvbmR1Y3RvciA8d3d3Lm1hcnZlbGwuY29tPgorICogV3JpdHRlbi1ieTogUHJhZnVsbGEgV2FkYXNrYXIgPHByYWZ1bGxhQG1hcnZlbGwuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIF9BU01fQ0FDSEVfSAorI2RlZmluZSBfQVNNX0NBQ0hFX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL3N5c3RlbV9jMjAwMC5oPgorCisvKgorICogSW52YWxpZGF0ZSBMMiBDYWNoZSB1c2luZyBjby1wcm9jIGluc3RydWN0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2wyX2NhY2hlKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbD0wOworCisJYXNtIHZvbGF0aWxlKCJtY3IgcDE1LCAxLCAlMCwgYzE1LCBjMTEsIDAgQCBpbnZsIGwyIGNhY2hlIgorCQk6IDogInIiICh2YWwpIDogImNjIik7CisJaXNiKCk7Cit9CisKK3ZvaWQgbDJfY2FjaGVfZW5hYmxlKHZvaWQpOwordm9pZCBsMl9jYWNoZV9kaXNhYmxlKHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9DQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jbGtjb3JlX2MyMDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jbGtjb3JlX2MyMDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3ZDI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2Nsa2NvcmVfYzIwMDAuaApAQCAtMCwwICsxLDMyNyBAQAorI2luY2x1ZGUgImNvbWNlcnRvXzIwMDAuaCIKKworI2RlZmluZSBVU0IwX1BIWV9DVFJMX1JFRzAgICAgICAgICAgIDB4OTA0MTAwMDAKKyNkZWZpbmUgVVNCMV9QSFlfQ1RSTF9SRUcwICAgICAgICAgICAweDkwNDEwMDEwCisjZGVmaW5lIFVTQl9QSFlfU0NBTEVET1dOX0FERFIgICAgICAgMHg5MDQ2MDAzQworCisjZGVmaW5lIERFVklDRV9SU1RfQ05UUkwJICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgwMCkKKyNkZWZpbmUgU0VSREVTX1JTVF9DTlRSTCAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgwNCkKKyNkZWZpbmUgUENJZV9TQVRBX1JTVF9DTlRSTCAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgwOCkKKyNkZWZpbmUgVVNCX1JTVF9DTlRSTCAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgwQykKKyNkZWZpbmUgQTlEUF9QV1JfU1RBVCAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgyOCkKKyNkZWZpbmUgQTlEUF9QV1JfQ05UUkwgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgyQykKKyNkZWZpbmUgR05STF9DTEtfQ05UUkxfMAkgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDMwKQorI2RlZmluZSBHTlJMX0NMS19DTlRSTF8xCSAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MzQpCisjZGVmaW5lIFBMTFNfR0xPQkFMX0NOVFJMICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MzgpCisjZGVmaW5lIEFYSV9DTEtfQ05UUkxfMCAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NDApCisjZGVmaW5lIEFYSV9DTEtfQ05UUkxfMSAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NDQpCisjZGVmaW5lIEFYSV9DTEtfQ05UUkxfMiAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NDgpCisjZGVmaW5lIEFYSV9DTEtfRElWX0NOVFJMICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NEMpCisjZGVmaW5lIEFYSV9SRVNFVF8wICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NTApCisjZGVmaW5lIEFYSV9SRVNFVF8xICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NTQpCisjZGVmaW5lIEFYSV9SRVNFVF8yICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NTgpCisjZGVmaW5lIEE5RFBfTVBVX0NMS19DTlRSTCAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NjgpCisjZGVmaW5lIEE5RFBfTVBVX0NMS19ESVZfQ05UUkwgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NkMpCisjZGVmaW5lIEE5RFBfTVBVX1JFU0VUICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NzApCisjZGVmaW5lIEE5RFBfQ1BVX0NMS19DTlRSTCAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NzQpCisjZGVmaW5lIEE5RFBfQ1BVX1JFU0VUICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4NzgpCisjZGVmaW5lIEE5RFBfQ0xLX0NOVFJMICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4ODApCisjZGVmaW5lIEE5RFBfQ0xLX0RJVl9DTlRSTCAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4ODQpCisjZGVmaW5lIEE5RFBfUkVTRVQgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4ODgpCisjZGVmaW5lIEwyQ0NfQ0xLX0NOVFJMICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4OTApCisjZGVmaW5lIEwyQ0NfQ0xLX0RJVl9DTlRSTCAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4OTQpCisjZGVmaW5lIEwyQ0NfUkVTRVQgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4OTgpCisjZGVmaW5lIFRQSV9DTEtfQ05UUkwgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4QTApCisjZGVmaW5lIFRQSV9DTEtfRElWX0NOVFJMICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4QTQpCisjZGVmaW5lIFRQSV9SRVNFVCAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4QTgpCisjZGVmaW5lIENTWVNfQ0xLX0NOVFJMICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4QjApCisjZGVmaW5lIENTWVNfQ0xLX0RJVl9DTlRSTCAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4QjQpCisjZGVmaW5lIENTWVNfUkVTRVQgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4QjgpCisjZGVmaW5lIEVYVFBIWTBfQ0xLX0NOVFJMICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4QzApCisjZGVmaW5lIEVYVFBIWTBfQ0xLX0RJVl9DTlRSTCAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4QzQpCisjZGVmaW5lIEVYVFBIWTBfUkVTRVQgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4QzgpCisjZGVmaW5lIEVYVFBIWTFfQ0xLX0NOVFJMICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4RDApCisjZGVmaW5lIEVYVFBIWTFfQ0xLX0RJVl9DTlRSTCAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4RDQpCisjZGVmaW5lIEVYVFBIWTFfUkVTRVQgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4RDgpCisjZGVmaW5lIEVYVFBIWTJfQ0xLX0NOVFJMICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4RTApCisjZGVmaW5lIEVYVFBIWTJfQ0xLX0RJVl9DTlRSTCAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4RTQpCisjZGVmaW5lIEVYVFBIWTJfUkVTRVQgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4RTgpCisjZGVmaW5lIEREUl9DTEtfQ05UUkwgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4RjApCisjZGVmaW5lIEREUl9DTEtfRElWX0NOVFJMICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4RjQpCisjZGVmaW5lIEREUl9SRVNFVCAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4RjgpCisjZGVmaW5lIEhGRV9DTEtfQ05UUkwgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTAwKQorI2RlZmluZSBIRkVfQ0xLX0RJVl9DTlRSTCAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDEwNCkKKyNkZWZpbmUgSEZFX1JFU0VUICAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxMDgpCisjZGVmaW5lIElQU0VDX0NMS19DTlRSTCAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTEwKQorI2RlZmluZSBJUFNFQ19DTEtfRElWX0NOVFJMICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDExNCkKKyNkZWZpbmUgSVBTRUNfUkVTRVQgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxMTgpCisjZGVmaW5lIERFQ1RfQ0xLX0NOVFJMICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTIwKQorI2RlZmluZSBERUNUX0NMS19ESVZfQ05UUkwgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDEyNCkKKyNkZWZpbmUgREVDVF9SRVNFVCAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxMjgpCisjZGVmaW5lIEdFTVRYX0NMS19DTlRSTCAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTMwKQorI2RlZmluZSBHRU1UWF9DTEtfRElWX0NOVFJMICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDEzNCkKKyNkZWZpbmUgR0VNVFhfUkVTRVQgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxMzgpCisjZGVmaW5lIFRETU5UR19SRUZfQ0xLX0NOVFJMICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTQwKQorI2RlZmluZSBURE1OVEdfUkVGX0NMS19ESVZfQ05UUkwgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDE0NCkKKyNkZWZpbmUgVERNTlRHX1JFU0VUICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxNDgpCisjZGVmaW5lIFRETV9DTEtfQ05UUkwgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTRDKQorI2RlZmluZSBUU1VOVEdfUkVGX0NMS19DTlRSTCAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDE1MCkKKyNkZWZpbmUgVFNVTlRHX1JFRl9DTEtfRElWX0NOVFJMICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxNTQpCisjZGVmaW5lIFRTVU5UR19SRVNFVCAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTU4KQorI2RlZmluZSBTQVRBX1BNVV9DTEtfQ05UUkwgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDE2MCkKKyNkZWZpbmUgU0FUQV9QTVVfQ0xLX0RJVl9DTlRSTCAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxNjQpCisjZGVmaW5lIFNBVEFfUE1VX1JFU0VUICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTY4KQorI2RlZmluZSBTQVRBX09PQl9DTEtfQ05UUkwgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDE3MCkKKyNkZWZpbmUgU0FUQV9PT0JfQ0xLX0RJVl9DTlRSTCAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxNzQpCisjZGVmaW5lIFNBVEFfT09CX1JFU0VUICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTc4KQorI2RlZmluZSBQTEwwX01fTFNCICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDFDMCkKKyNkZWZpbmUgUExMMF9NX01TQiAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxQzQpCisjZGVmaW5lIFBMTDBfUCAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MUM4KQorI2RlZmluZSBQTEwwX1MgICAgICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDFDQykKKyNkZWZpbmUgUExMMF9DTlRSTCAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxRDApCisjZGVmaW5lIFBMTDBfVEVTVCAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MUQ0KQorI2RlZmluZSBQTEwwX1NUQVRVUyAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDFEOCkKKyNkZWZpbmUgUExMMV9NX0xTQiAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxRTApCisjZGVmaW5lIFBMTDFfTV9NU0IgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MUU0KQorI2RlZmluZSBQTEwxX1AgICAgICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDFFOCkKKyNkZWZpbmUgUExMMV9TICAgICAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxRUMpCisjZGVmaW5lIFBMTDFfQ05UUkwgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MUYwKQorI2RlZmluZSBQTEwxX1RFU1QgICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDFGNCkKKyNkZWZpbmUgUExMMV9TVEFUVVMgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxRjgpCisjZGVmaW5lIFBMTDJfTV9MU0IgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MjAwKQorI2RlZmluZSBQTEwyX01fTVNCICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDIwNCkKKyNkZWZpbmUgUExMMl9QICAgICAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgyMDgpCisjZGVmaW5lIFBMTDJfUyAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MjBDKQorI2RlZmluZSBQTEwyX0NOVFJMICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDIxMCkKKyNkZWZpbmUgUExMMl9URVNUICAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgyMTQpCisjZGVmaW5lIFBMTDJfU1RBVFVTICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MjE4KQorI2RlZmluZSBQTEwzX01fTFNCICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDIyMCkKKyNkZWZpbmUgUExMM19NX01TQiAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgyMjQpCisjZGVmaW5lIFBMTDNfUCAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MjI4KQorI2RlZmluZSBQTEwzX1MgICAgICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDIyQykKKyNkZWZpbmUgUExMM19DTlRSTCAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgyMzApCisjZGVmaW5lIFBMTDNfVEVTVCAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MjM0KQorI2RlZmluZSBQTEwzX1NUQVRVUyAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDIzOCkKKyNkZWZpbmUgUExMM19ESVRIRVJfQ05UUkwgCSAgICAgKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MjNDKQorI2RlZmluZSBQTEwzX0tfTFNCIAkJICAgICAoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgyNDApCisjZGVmaW5lIFBMTDNfS19NU0IgCQkgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDI0NCkKKyNkZWZpbmUgUExMM19NRlIgCQkgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDI0OCkKKyNkZWZpbmUgUExMM19NUlIgCQkgICAgIChDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDI0QykKKworLyogUENJZSwgU0FUQSwgIGFuZCBTRVJERVMgUmVzZXQgYml0cyovCisjZGVmaW5lIFBDSUUwX1BXUl9SU1QgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIFBDSUUwX1JFR19SU1QgIAkgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFBDSUUxX1BXUl9SU1QgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIFBDSUUxX1JFR19SU1QgIAkgICAgICAgICgxIDw8IDMpCisKKyNkZWZpbmUgU0FUQTBfUlhfUlNUICAgICAgICAgICAJKDEgPDwgNCkKKyNkZWZpbmUgU0FUQTBfVFhfUlNUIAkgICAgICAgCSgxIDw8IDUpCisjZGVmaW5lIFNBVEExX1JYX1JTVCAgICAgICAgICAgCSgxIDw8IDYpCisjZGVmaW5lIFNBVEExX1RYX1JTVCAgCSAgICAgICAgKDEgPDwgNykKKworI2RlZmluZSBQQ0lFMF9BWElfUlNUICAJICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBQQ0lFMV9BWElfUlNUICAJICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBTQVRBX0FYSV9SU1QJICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBBWElfUENJRTBfQ0xLX0VOCSgxIDw8IDApCisjZGVmaW5lIEFYSV9QQ0lFMV9DTEtfRU4JKDEgPDwgMSkKKyNkZWZpbmUgQVhJX1NBVEFfQ0xLX0VOCQkoMSA8PCAyKQorCisjZGVmaW5lIFNFUkRFUzBfUlNUICAgICAgICAgICAJKDEgPDwgMCkKKyNkZWZpbmUgU0VSREVTMV9SU1QgICAgICAgICAgIAkoMSA8PCAxKQorI2RlZmluZSBTRVJERVMyX1JTVCAgICAgICAgICAgCSgxIDw8IDIpCisKKy8qIEFYSV9SRVNFVF8xIGJpdHMgKi8KKyNkZWZpbmUgSEZFX0FYSV9SRVNFVAkJKDEgPDwgMykKKworLy9DbG9jayBEaXZpZGVyIG1pcnJvciBtZWNoYW5pc20gaW4gSVJBTS4gSXQgaXMgZ29pbmcgdG8gdGFrZSBtb3JlIHRoYW4gMjU2IGJ5dGVzIG9mIElSQU0KKyNkZWZpbmUgSVJBTV9DTEtfUkVHX01JUlJPUgkweDgzMDBGQzAwIC8vbWF5YmUgdG8gbmVlZCB0byB0aGluayBvZiB0aGUgYW5vdGhlciBmaXhlZCBsb2NhdGlvbgorI2RlZmluZSBDTEtfUkVHX0RJVl9CVUdfQkFTRQlBWElfQ0xLX0RJVl9DTlRSTAorCisjZGVmaW5lIFBMTF9SRVNFVCAoMSA8PCAwKQorI2RlZmluZSBQTExfQllQQVNTICgxIDw8IDQpCisjZGVmaW5lIFBMTF9MT0NLX0VOICgxIDw8IDUpCisjZGVmaW5lIFBMTF9WU0VMICgxIDw8IDYpCisKKyNkZWZpbmUgQ0xLX0RJVl9CWVBBU1MJKDEgPDwgNykKKyNkZWZpbmUgQ0xLX0E5RFBfUEVSSV9ESVZfQllQQVNTCSgxIDw8IDMpCisjZGVmaW5lIENMS19BOURQX0FDUF9ESVZfQllQQVNTCSgxIDw8IDcpCisKKyNkZWZpbmUgQ0xLX1BMTF9TUkNfTUFTSwkweDcKKyNkZWZpbmUgQ0xLX1BMTF9TUkNfU0hJRlQJMQorCisjZGVmaW5lIENMS19ESVZfVkFMX0RFRkFVTFQJCTB4MgorI2RlZmluZSBBOURQX0FDUF9DTEtfRElWX1ZBTF9ERUZBVUxUCTB4MgorI2RlZmluZSBBOURQX1BFUklfQ0xLX0RJVl9WQUxfREVGQVVMVAkweDIKKworc3RydWN0IHBsbF9pbmZvIHsKKwl1MzIgbTsKKwl1MzIgcDsKKwl1MzIgczsKKwl1MzIgdnNlbDsKK307CisKK3N0cnVjdCBwbGwzX2luZm8geworCXUzMiBtOworCXUzMiBwOworCXUzMiBzOworCXUzMiBrOworCXUzMiB2c2VsOworfTsKKworc3RydWN0IHBsbF9zZXR0aW5nIHsKKyAgICAgICAgdTMyIHBsbDBfZnJlcV9pZHg7CisgICAgICAgIHUzMiBwbGwxX2ZyZXFfaWR4OworICAgICAgICB1MzIgcGxsMl9mcmVxX2lkeDsKKyAgICAgICAgdTMyIHBsbDNfZnJlcV9pZHg7Cit9OworCitzdHJ1Y3QgY2xvY2tfY2ZnX3NldHRpbmdzCit7CisJdTMyIHBsbF9jZmdfaWR4OworCisJdTMyIGFybV9jbGs7CisJdTMyIGFybV9jbGtfc3JjOworCisJdTMyIGF4aV9jbGs7CisJdTMyIGF4aV9jbGtfc3JjOworCisJdTMyIGRkcl9jbGs7CisJdTMyIGRkcl9jbGtfc3JjOworCisJdTMyIGlwc2VjX2NsazsKKwl1MzIgaXBzZWNfY2xrX3NyYzsKKworCXUzMiBzYXRhX29vYl9jbGs7CisJdTMyIHNhdGFfb29iX2Nsa19zcmM7CisKKwl1MzIgc2F0YV9wbXVfY2xrOworCXUzMiBzYXRhX3BtdV9jbGtfc3JjOworCisJdTMyIGRlY3RfY2xrOworCXUzMiBkZWN0X2Nsa19zcmM7CisKKwl1MzIgbDJjY19jbGs7CisJdTMyIGwyY2NfY2xrX3NyYzsKKworCXUzMiBoZmVfY2xrOworCXUzMiBoZmVfY2xrX3NyYzsKKworCXUzMiBnZW10eF9jbGs7CisJdTMyIGdlbXR4X2Nsa19zcmM7CisKKwl1MzIgZXh0cGh5MF9jbGs7CisJdTMyIGV4dHBoeTBfY2xrX3NyYzsKKworCXUzMiBleHRwaHkxX2NsazsKKwl1MzIgZXh0cGh5MV9jbGtfc3JjOworCisJdTMyIGV4dHBoeTJfY2xrOworCXUzMiBleHRwaHkyX2Nsa19zcmM7CisKKwl1MzIgdHBpX2NsazsKKwl1MzIgdHBpX2Nsa19zcmM7CisKKwl1MzIgY3N5c19jbGs7CisJdTMyIGNzeXNfY2xrX3NyYzsKK307CisKK2VudW0geworCVBMTDAgPSAwLAorCVBMTDEsCisJUExMMiwKKwlQTEwzCit9OworCisjZGVmaW5lIENGR19SRUZDTEtGUkVRXzI0ICAgICAgICAgIDI0MDAwMDAwICAgICAgICAvKiAyNCBNSHogKi8KKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVFfNDggICAgICAgICAgNDgwMDAwMDAgICAgICAgIC8qIDQ4IE1IeiAqLworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUSAgICAgICAgICBDRkdfUkVGQ0xLRlJFUV80OAorCisjZGVmaW5lIFBMTF9GUkVRXzE4MDAJMTgwMAorI2RlZmluZSBQTExfRlJFUV8xNjAwCTE2MDAKKyNkZWZpbmUgUExMX0ZSRVFfMTUwMAkxNTAwCisjZGVmaW5lIFBMTF9GUkVRXzE0MDAJMTQwMAorI2RlZmluZSBQTExfRlJFUV8xMzAwCTEzMDAKKyNkZWZpbmUgUExMX0ZSRVFfMTA2NgkxMDY2CisjZGVmaW5lIFBMTF9GUkVRXzEwMDAJMTAwMAorI2RlZmluZSBQTExfRlJFUV84MDAJODAwCisjZGVmaW5lIFBMTF9GUkVRXzc1MAk3NTAKKyNkZWZpbmUgUExMX0ZSRVFfNTAwCTUwMAorCitlbnVtIHsKKwlQTExfQ0ZHXzE4MDAgPSAwLAorCVBMTF9DRkdfMTYwMCwKKwlQTExfQ0ZHXzE1MDAsCisJUExMX0NGR18xNDAwLAorCVBMTF9DRkdfMTMwMCwKKwlQTExfQ0ZHXzEwMDAsCisJUExMX0NGR184MDAsCisJUExMX0NGR183NTAsCisJUExMX0NGR181MDAKK307CisKK2VudW0geworCVBMTDNfQ0ZHXzEwNjYgPSAwLAorCVBMTDNfQ0ZHXzgwMAorfTsKKworI2RlZmluZSBQTEwwX0NGR18xMzAwICAgUExMX0NGR18xMzAwCisjZGVmaW5lIFBMTDBfQ0ZHXzE4MDAgICBQTExfQ0ZHXzE4MDAKKyNkZWZpbmUgUExMMF9DRkdfNzUwICAgIFBMTF9DRkdfNzUwCisKKyNkZWZpbmUgUExMMV9DRkdfMTAwMCAgIFBMTF9DRkdfMTAwMAorI2RlZmluZSBQTEwxX0NGR184MDAgICAgUExMX0NGR184MDAKKworI2RlZmluZSBQTEwyX0NGR18xNTAwICAgUExMX0NGR18xNTAwCisjZGVmaW5lIFBMTDJfQ0ZHXzUwMCAgICBQTExfQ0ZHXzUwMAorCisKK2VudW0geworCUNMS19DRkcxID0gMCwKKwlDTEtfQ0ZHMiwKKwlDTEtfQ0ZHMywKKwlDTEtfQ0ZHNCwKKwlDTEtfQ0ZHNQorfTsKKworZW51bSB7CisJUExMX0NGR18xODAwXzEwMDBfMTUwMF8xMDY2ID0gMCwKKwlQTExfQ0ZHXzc1MF8xMDAwXzE1MDBfODAwLAorCVBMTF9DRkdfMTMwMF84MDBfNTAwXzgwMCwKKwlQTExfQ0ZHXzEzMDBfODAwXzUwMF8xMDY2LAorCVBMTF9DRkdfMTgwMF84MDBfNTAwXzEwNjYsCit9OworCisjZGVmaW5lIENMS19DRkcJCUNMS19DRkcxCisvL0ZvciBBbHBoYSBCcmluZ3VwCisvLyNkZWZpbmUgQ0xLX0NGRyBDTEtfQ0ZHNAorLy8jZGVmaW5lIENMS19DRkcgCUNMS19DRkc1CisKKyNkZWZpbmUgQVJNX0NMS185MDAJOTAwCisjZGVmaW5lIEFSTV9DTEtfNzUwCTc1MAorI2RlZmluZSBBUk1fQ0xLXzY1MAk2NTAKKyNkZWZpbmUgQVhJX0NMS18yNTAJMjUwCisjZGVmaW5lIEFYSV9DTEtfMjAwCTIwMAorI2RlZmluZSBERFJfQ0xLXzUzMwk1MzMKKyNkZWZpbmUgRERSX0NMS180MDAJNDAwCisjZGVmaW5lIFNBVEFfT09CX0NMS18xMjUJMTI1CisjZGVmaW5lIFNBVEFfUE1VX0NMS18zMAkJMzAKKyNkZWZpbmUgU0FUQV9QTVVfQ0xLXzI1CQkyNQorI2RlZmluZQlJUFNFQ19DTEtfMzAwCTMwMAorI2RlZmluZQlJUFNFQ19DTEtfMjUwCTI1MAorI2RlZmluZSBERUNUX0NMS18yNTAJMjUwCisjZGVmaW5lIEwyQ0NfQ0xLXzQ1MAk0NTAKKyNkZWZpbmUgTDJDQ19DTEtfMzc1CTM3NQorI2RlZmluZSBMMkNDX0NMS18zMjUJMzI1CisjZGVmaW5lIEhGRV9DTEtfNTAwCTUwMAorI2RlZmluZSBIRkVfQ0xLXzQwMAk0MDAKKyNkZWZpbmUgR0VNVFhfQ0xLXzEyNQkxMjUKKyNkZWZpbmUgRVhUUEhZMF9DTEtfMTI1CTEyNQorI2RlZmluZSBFWFRQSFkxX0NMS18xMjUJMTI1CisjZGVmaW5lIEVYVFBIWTJfQ0xLXzEyNQkxMjUKKyNkZWZpbmUgVFBJX0NMS18yNTAJMjUwCisjZGVmaW5lIENTWVNfQ0xLXzE2NgkxNjYKKworCisjZGVmaW5lIHJlYWRfY2xrX2Rpdl9ieXBhc3NfYmFja3VwKHJlZykgcmVhZGwocmVnIC0gQ0xLX1JFR19ESVZfQlVHX0JBU0UgKyBJUkFNX0NMS19SRUdfTUlSUk9SKQorI2RlZmluZSB3cml0ZV9jbGtfZGl2X2J5cGFzc19iYWNrdXAodmFsLCByZWcpIHdyaXRlbCh2YWwsIHJlZyAtIENMS19SRUdfRElWX0JVR19CQVNFICsgSVJBTV9DTEtfUkVHX01JUlJPUikKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vY29tY2VydG9fMTAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jb21jZXJ0b18xMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQ3ZWJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vY29tY2VydG9fMTAwLmgKQEAgLTAsMCArMSw2NjkgQEAKKyNpZm5kZWYgX19DT01DRVJUT18xWFhfSF9fCisjZGVmaW5lIF9fQ09NQ0VSVE9fMVhYX0hfXworCisvKiB0byBiZSBtb3ZlZCBzb21ld2hlcmUgZWxzZSAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjZW5kaWYKKworI2RlZmluZSBGQUlMVVJFICAgICAgICAgICAwCisjZGVmaW5lIFNVQ0NFU1MgICAgICAgICAgIDEKKyNkZWZpbmUgVU5TRVQgICAgICAgICAgICAgMCAJLy8gcGF5IGF0dGVudGlvbiB0aGF0IGl0IGlzIG91dCBvZiB0aGUgTE9XLi5ISUdIIHZhbHVlcywgc28gaXQgd2lsbCBub3QgYmUgYSBwb3NzaWJsZSB2YWx1ZQorCisjZGVmaW5lIEJZVEVfU1oJCTgKKyNkZWZpbmUgSEFMRl9XT1JECTE2CisjZGVmaW5lIFdPUkQJCTMyCisjZGVmaW5lIERPVUJMRV9XT1JECTY0CisKKyNkZWZpbmUgQk9BUkRfQ0ZHXzEJMQkvKiBBU0lDIGJvYXJkIDI1Nk1CIE1pY3JvbiAqLworI2RlZmluZSBCT0FSRF9DRkdfMgkyCS8qIEFTSUMgYm9hcmQgMUdCIE1pY3JvbiAqLworI2RlZmluZSBCT0FSRF9DRkdfMwkzCS8qIEFTSUMgYm9hcmQgMUdCIFNhbXN1bSAqLworI2RlZmluZSBCT0FSRF9DRkdfNAk0CS8qIFBhY2tldCBJQUQgMTI4TUIgKi8KKyNkZWZpbmUgQk9BUkRfQ0ZHXzUJNQkvKiBSb3V0ZXIgQm9hcmQgNjRNQiAqLworI2RlZmluZSBCT0FSRF9DRkdfNgk2CS8qIEFTSUMgYm9hcmQgMjU2TUIgTWljcm9uICovCisjZGVmaW5lIEJPQVJEX0NGR183CTcJLyogRkUgUm91dGVyIEJvYXJkIDY0TUIgKi8KKyNkZWZpbmUgQk9BUkRfQ0ZHX01PQ0EgIDggICAgICAgLyogTW9DQSBFVk0gMTI4TUIgKi8KKyNkZWZpbmUgQk9BUkRfQ0ZHXzggICAgIDggICAgICAgLyogTW9DQSBFVk0gMTI4TUIgKi8KKyNkZWZpbmUgQk9BUkRfQ0ZHXzkgICAgIDkgICAgICAgLyogUGFja2V0IElBRCBDNTAgNjRNQiAqLworI2RlZmluZSBCT0FSRF9DRkdfMTAgICAxMCAgICAgICAvKiBSb3V0ZXIgQzUwICovCisKKy8qIG1lbWNvcmUgKi8KKy8qIGRldmljZSBtZW1vcnkgYmFzZSBhZGRyZXNzZXMgKi8KKy8vIGRldmljZSBtZW1vcnkgc2l6ZXMKKyNkZWZpbmUgQVJBTV9TSVpFCQkweDAwMDEwMDAwIC8qIDY0SyAqLworI2RlZmluZSBBUkFNX0JBU0VBRERSCQkweDBBMDAwMDAwCisKKy8qIEhhcmR3YXJlIEludGVyZmFjZSBVbml0cyAqLworI2RlZmluZSBBUEJfQkFTRUFERFIJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQVBCX1NJWkUJCTB4MDEwMDAwMDAgLyogMTZNIGFkZHJlc3MgcmFuZ2UgKi8KKworI2RlZmluZSBFWFBfQ1MwX0JBU0VBRERSCTB4MjAwMDAwMDAKKyNkZWZpbmUgRVhQX0NTMV9CQVNFQUREUgkweDI0MDAwMDAwCisjZGVmaW5lIEVYUF9DUzJfQkFTRUFERFIJMHgyODAwMDAwMAorI2RlZmluZSBFWFBfQ1MzX0JBU0VBRERSCTB4MkMwMDAwMDAKKyNkZWZpbmUgRVhQX0NTNF9CQVNFQUREUgkweDMwMDAwMDAwCisKKyNkZWZpbmUgRERSX0JBU0VBRERSCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgVERNX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwMDAwMDApCisjZGVmaW5lIFBISV9CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MDEwMDAwKQorI2RlZmluZSBURE1BX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwMjAwMDApCisjZGVmaW5lIEFTQV9ERFJfQkFTRUFERFIJKEFQQl9CQVNFQUREUiArIDB4MDQwMDAwKQorI2RlZmluZSBBU0FfQVJBTV9CQVNFQUREUgkoQVBCX0JBU0VBRERSICsgMHgwNDgwMDApCisjZGVmaW5lIFRJTUVSX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwNTAwMDApCisjZGVmaW5lIEFTRF9CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MDYwMDAwKQorI2RlZmluZSBHUElPX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwNzAwMDApCisjZGVmaW5lIFVBUlQwX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwOTAwMDApCisjZGVmaW5lIFVBUlQxX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwOTQwMDApCisjZGVmaW5lIFNQSV9CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MDk4MDAwKQorI2RlZmluZSBJMkNfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDA5QzAwMCkKKyNkZWZpbmUgSU5UQ19CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MEEwMDAwKQorI2RlZmluZSBDTEtDT1JFX0JBU0VBRERSCShBUEJfQkFTRUFERFIgKyAweDBCMDAwMCkKKyNkZWZpbmUgUFVJX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwQjAwMDApCisjZGVmaW5lIEdFTUFDX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwRDAwMDApCisjZGVmaW5lIElETUFfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDBFMDAwMCkKKyNkZWZpbmUgTUVNQ09SRV9CQVNFQUREUgkoQVBCX0JBU0VBRERSICsgMHgwRjAwMDApCisjZGVmaW5lIEFTQV9FQlVTX0JBU0VBRERSCShBUEJfQkFTRUFERFIgKyAweDEwMDAwMCkKKyNkZWZpbmUgQVNBX0FBQl9CQVNFQUREUgkoQVBCX0JBU0VBRERSICsgMHgxMDgwMDApCisjZGVmaW5lIEdFTUFDMV9CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MTkwMDAwKQorI2RlZmluZSBFQlVTX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgxQTAwMDApCisjZGVmaW5lIE1ETUFfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDFFMDAwMCkKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCUlETUEgYmxvY2sJCQkJCQkJCQkJCSAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNkZWZpbmUgTU1HRU0wX1NUQVJUCQkoSURNQV9CQVNFQUREUiArIDB4MTAwKQorI2RlZmluZSBNTUdFTTBfSEVBRAkJKElETUFfQkFTRUFERFIgKyAweDEwNCkKKyNkZWZpbmUgTU1HRU0wX0xPQ0sJCShJRE1BX0JBU0VBRERSICsgMHgxMDgpCisjZGVmaW5lIE1NR0VNMF9TUlNUCQkoSURNQV9CQVNFQUREUiArIDB4MTIwKQorI2RlZmluZSBHRU0wTU1fU1RBUlQJCShJRE1BX0JBU0VBRERSICsgMHgxODApCisjZGVmaW5lIEdFTTBNTV9IRUFECQkoSURNQV9CQVNFQUREUiArIDB4MTg0KQorI2RlZmluZSBHRU0wTU1fTE9DSwkJKElETUFfQkFTRUFERFIgKyAweDE4OCkKKyNkZWZpbmUgR0VNME1NX1NSU1QJCShJRE1BX0JBU0VBRERSICsgMHgxQTApCisjZGVmaW5lIE1NR0VNMV9TVEFSVAkJKElETUFfQkFTRUFERFIgKyAweDMwMCkKKyNkZWZpbmUgTU1HRU0xX0hFQUQJCShJRE1BX0JBU0VBRERSICsgMHgzMDQpCisjZGVmaW5lIE1NR0VNMV9MT0NLCQkoSURNQV9CQVNFQUREUiArIDB4MzA4KQorI2RlZmluZSBNTUdFTTFfU1JTVAkJKElETUFfQkFTRUFERFIgKyAweDMyMCkKKyNkZWZpbmUgR0VNMU1NX1NUQVJUCQkoSURNQV9CQVNFQUREUiArIDB4MzgwKQorI2RlZmluZSBHRU0xTU1fSEVBRAkJKElETUFfQkFTRUFERFIgKyAweDM4NCkKKyNkZWZpbmUgR0VNMU1NX0xPQ0sJCShJRE1BX0JBU0VBRERSICsgMHgzODgpCisjZGVmaW5lIEdFTTFNTV9TUlNUCQkoSURNQV9CQVNFQUREUiArIDB4M0EwKQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gCVNQSSBibG9jawkJCQkJCQkJCQkJCSAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNkZWZpbmUgU1BJX0NUUkxSMF9SRUcJCShTUElfQkFTRUFERFIrMHgwMCkKKyNkZWZpbmUgU1BJX0NUUkxSMV9SRUcJCShTUElfQkFTRUFERFIrMHgwNCkKKyNkZWZpbmUgU1BJX1NTSUVOUl9SRUcJCShTUElfQkFTRUFERFIrMHgwOCkKKyNkZWZpbmUgU1BJX01XQ1JfUkVHCQkoU1BJX0JBU0VBRERSKzB4MGMpCisjZGVmaW5lIFNQSV9TRVJfUkVHCQkoU1BJX0JBU0VBRERSKzB4MTApCisjZGVmaW5lIFNQSV9CQVVEUl9SRUcJCShTUElfQkFTRUFERFIrMHgxNCkKKyNkZWZpbmUgU1BJX1RYRlRMUl9SRUcJCShTUElfQkFTRUFERFIrMHgxOCkKKyNkZWZpbmUgU1BJX1JYRlRMUl9SRUcJCShTUElfQkFTRUFERFIrMHgxYykKKyNkZWZpbmUgU1BJX1RYRkxSX1JFRwkJKFNQSV9CQVNFQUREUisweDIwKQorI2RlZmluZSBTUElfUlhGTFJfUkVHCQkoU1BJX0JBU0VBRERSKzB4MjQpCisjZGVmaW5lIFNQSV9TUl9SRUcJCShTUElfQkFTRUFERFIrMHgyOCkKKyNkZWZpbmUgU1BJX0lNUl9SRUcJCShTUElfQkFTRUFERFIrMHgyYykKKyNkZWZpbmUgU1BJX0lTUl9SRUcJCShTUElfQkFTRUFERFIrMHgzMCkKKyNkZWZpbmUgU1BJX1JJU1JfUkVHCQkoU1BJX0JBU0VBRERSKzB4MzQpCisjZGVmaW5lIFNQSV9UWE9JQ1JfUkVHCQkoU1BJX0JBU0VBRERSKzB4MzgpCisjZGVmaW5lIFNQSV9SWE9JQ1JfUkVHCQkoU1BJX0JBU0VBRERSKzB4M2MpCisjZGVmaW5lIFNQSV9SWFVJQ1JfUkVHCQkoU1BJX0JBU0VBRERSKzB4NDApCisjZGVmaW5lIFNQSV9NU1RJQ1JfUkVHCQkoU1BJX0JBU0VBRERSKzB4NDQpCisjZGVmaW5lIFNQSV9JQ1JfUkVHCQkoU1BJX0JBU0VBRERSKzB4NDgpCisjZGVmaW5lIFNQSV9JRFJfUkVHCQkoU1BJX0JBU0VBRERSKzB4NTgpCisjZGVmaW5lIFNQSV9EUl9SRUcJCShTUElfQkFTRUFERFIrMHg2MCkKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLwlBSEIgYmxvY2sJCQkJCQkJCQkJCSAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZGVmaW5lIEFTQV9BUkFNX1BSSV9SRUcJKEFTQV9BUkFNX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgQVNBX0FSQU1fVENfUkVHCQkoQVNBX0FSQU1fQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBBU0FfQVJBTV9UQ19DUl9SRUcJKEFTQV9BUkFNX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgQVNBX0FSQU1fU1RBVF9SRUcJKEFTQV9BUkFNX0JBU0VBRERSICsgMHgwQykKKworI2RlZmluZSBBU0FfRUJVU19QUklfUkVHCShBU0FfRUJVU19CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIEFTQV9FQlVTX1RDX1JFRwkJKEFTQV9FQlVTX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgQVNBX0VCVVNfVENfQ1JfUkVHCShBU0FfRUJVU19CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIEFTQV9FQlVTX1NUQVRfUkVHCShBU0FfRUJVU19CQVNFQUREUiArIDB4MEMpCisKKyNkZWZpbmUgSURNQV9NQVNURVIJCTAKKyNkZWZpbmUgVERNQV9NQVNURVIJCTEKKyNkZWZpbmUgVVNCSVBTRUNfTUFTVEVSCQkyCisjZGVmaW5lIEFSTTBfTUFTVEVSCQkzCisjZGVmaW5lIEFSTTFfTUFTVEVSCQk0CisjZGVmaW5lIE1ETUFfTUFTVEVSCQk1CisKKyNkZWZpbmUgSURNQV9QUklPUklUWShsZXZlbCkgKGxldmVsKQorI2RlZmluZSBURE1fUFJJT1JJVFkobGV2ZWwpIChsZXZlbCA8PCA0KQorI2RlZmluZSBVU0JJUFNFQ19QUklPUklUWShsZXZlbCkgKGxldmVsIDw8IDgpCisjZGVmaW5lIEFSTTBfUFJJT1JJVFkobGV2ZWwpIChsZXZlbCA8PCAxMikKKyNkZWZpbmUgQVJNMV9QUklPUklUWShsZXZlbCkgKGxldmVsIDw8IDE2KQorI2RlZmluZSBNRE1BX1BSSU9SSVRZKGxldmVsKSAobGV2ZWwgPDwgMjApCisKKyNkZWZpbmUgQVNBX1RDX1JFUUlETUFFTgkoMTw8MTgpCisjZGVmaW5lIEFTQV9UQ19SRVFURE1FTgkJKDE8PDE5KQorI2RlZmluZSBBU0FfVENfUkVRSVBTRUNVU0JFTgkoMTw8MjApCisjZGVmaW5lIEFTQV9UQ19SRVFBUk0wRU4JKDE8PDIxKQorI2RlZmluZSBBU0FfVENfUkVRQVJNMUVOCSgxPDwyMikKKyNkZWZpbmUgQVNBX1RDX1JFUU1ETUFFTgkoMTw8MjMpCisKKyNkZWZpbmUgTUVNT1JZX0JBU0VfQUREUgkweDgwMDAwMDAwCisjZGVmaW5lIE1FTU9SWV9NQVhfQUREUgkJKEFTRF9CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIE1FTU9SWV9DUiAJCShBU0RfQkFTRUFERFIgKyAweDE0KQorI2RlZmluZSBST01fUkVNQVBfRU4JCTB4MQorCisjZGVmaW5lIEhBTF9hc2JfcHJpb3JpdHkobGV2ZWwpIFwKKyoodm9sYXRpbGUgdW5zaWduZWQgKilBU0FfUFJJX1JFRyA9IF9fY3B1X3RvX2xlMzIobGV2ZWwpCisKKyNkZWZpbmUgSEFMX2FyYW1fcHJpb3JpdHkobGV2ZWwpIFwKKyoodm9sYXRpbGUgdW5zaWduZWQgKilBU0FfQVJBTV9QUklfUkVHID0gX19jcHVfdG9fbGUzMihsZXZlbCkKKworI2RlZmluZSBIQUxfYXJhbV9hcmJpdHJhdGlvbihhcmJpdHJhdGlvbl9tYXNrKSBcCisqKHZvbGF0aWxlIHVuc2lnbmVkICopQVNBX0FSQU1fVENfQ1JfUkVHIHw9IF9fY3B1X3RvX2xlMzIoYXJiaXRyYXRpb25fbWFzaykKKworI2RlZmluZSBIQUxfYXJhbV9kZWZtYXN0ZXIobWFzaykgXAorKih2b2xhdGlsZSB1bnNpZ25lZCAqKUFTQV9BUkFNX1RDX0NSX1JFRyA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkICopQVNBX1RDX0NSX1JFRyAmIF9fY3B1X3RvX2xlMzIoMHhGRkZGKSkgfCBfX2NwdV90b19sZTMyKG1hc2sgPDwgMjQpCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIElOVEMgYmxvY2sJCQkJCQkgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBJTlRDX0FSTTFfQ09OVFJPTF9SRUcJKElOVENfQkFTRUFERFIgKyAweDE4KQorCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBUSU1FUiBibG9jawkJCQkJCSAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFRJTUVSMF9DTlRSX1JFRwkJKFRJTUVSX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgVElNRVIwX0NVUlJfQ09VTlQJKFRJTUVSX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgVElNRVIxX0NOVFJfUkVHCQkoVElNRVJfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBUSU1FUjFfQ1VSUl9DT1VOVAkoVElNRVJfQkFTRUFERFIgKyAweDBDKQorCisjZGVmaW5lIFRJTUVSMl9DTlRSX1JFRwkJKFRJTUVSX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgVElNRVIyX0xCT1VORF9SRUcJKFRJTUVSX0JBU0VBRERSICsgMHgxMCkKKyNkZWZpbmUgVElNRVIyX0hCT1VORF9SRUcJKFRJTUVSX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgVElNRVIyX0NVUlJfQ09VTlQJKFRJTUVSX0JBU0VBRERSICsgMHgxQykKKworI2RlZmluZSBUSU1FUjNfTE9CTkQJCShUSU1FUl9CQVNFQUREUiArIDB4MjApCisjZGVmaW5lIFRJTUVSM19ISUJORAkJKFRJTUVSX0JBU0VBRERSICsgMHgyNCkKKyNkZWZpbmUgVElNRVIzX0NUUkwJCShUSU1FUl9CQVNFQUREUiArIDB4MjgpCisjZGVmaW5lIFRJTUVSM19DVVJSX0NPVU5UCShUSU1FUl9CQVNFQUREUiArIDB4MkMpCisKKyNkZWZpbmUgVElNRVJfTUFTSwkJKFRJTUVSX0JBU0VBRERSICsgMHg0MCkKKyNkZWZpbmUgVElNRVJfU1RBVFVTCQkoVElNRVJfQkFTRUFERFIgKyAweDUwKQorI2RlZmluZSBUSU1FUl9BQ0sJCShUSU1FUl9CQVNFQUREUiArIDB4NTApCisjZGVmaW5lIFRJTUVSX1dEVF9ISUdIX0JPVU5ECShUSU1FUl9CQVNFQUREUiArIDB4RDApCisjZGVmaW5lIFRJTUVSX1dEVF9DT05UUk9MCShUSU1FUl9CQVNFQUREUiArIDB4RDQpCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgRUJVUyBibG9jawkJCQkJCQkJCQkJICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBFWF9TV1JTVF9SRUcJCShFQlVTX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgRVhfQ1NFTl9SRUcJCShFQlVTX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgRVhfQ1MwX1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgRVhfQ1MxX1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgwQykKKyNkZWZpbmUgRVhfQ1MyX1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxMCkKKyNkZWZpbmUgRVhfQ1MzX1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgRVhfQ1M0X1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgRVhfQ1MwX0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxQykKKyNkZWZpbmUgRVhfQ1MxX0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgyMCkKKyNkZWZpbmUgRVhfQ1MyX0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgyNCkKKyNkZWZpbmUgRVhfQ1MzX0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgyOCkKKyNkZWZpbmUgRVhfQ1M0X0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgyQykKKyNkZWZpbmUgRVhfQ1MwX1RNRzFfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4MzApCisjZGVmaW5lIEVYX0NTMV9UTUcxX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDM0KQorI2RlZmluZSBFWF9DUzJfVE1HMV9SRUcJCShFQlVTX0JBU0VBRERSICsgMHgzOCkKKyNkZWZpbmUgRVhfQ1MzX1RNRzFfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4M0MpCisjZGVmaW5lIEVYX0NTNF9UTUcxX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDQwKQorI2RlZmluZSBFWF9DUzBfVE1HMl9SRUcJCShFQlVTX0JBU0VBRERSICsgMHg0NCkKKyNkZWZpbmUgRVhfQ1MxX1RNRzJfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4NDgpCisjZGVmaW5lIEVYX0NTMl9UTUcyX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDRDKQorI2RlZmluZSBFWF9DUzNfVE1HMl9SRUcJCShFQlVTX0JBU0VBRERSICsgMHg1MCkKKyNkZWZpbmUgRVhfQ1M0X1RNRzJfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4NTQpCisjZGVmaW5lIEVYX0NTMF9UTUczX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDU4KQorI2RlZmluZSBFWF9DUzFfVE1HM19SRUcJCShFQlVTX0JBU0VBRERSICsgMHg1QykKKyNkZWZpbmUgRVhfQ1MyX1RNRzNfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4NjApCisjZGVmaW5lIEVYX0NTM19UTUczX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDY0KQorI2RlZmluZSBFWF9DUzRfVE1HM19SRUcJCShFQlVTX0JBU0VBRERSICsgMHg2OCkKKyNkZWZpbmUgRVhfQ0xPQ0tfRElWX1JFRwkoRUJVU19CQVNFQUREUiArIDB4NkMpCisjZGVmaW5lIEVYX01GU01fUkVHCQkoRUJVU19CQVNFQUREUiArIDB4MTAwKQorI2RlZmluZSBFWF9DU0ZTTV9SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxMDQpCisjZGVmaW5lIEVYX1dSRlNNX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDEwOCkKKyNkZWZpbmUgRVhfUkRGU01fUkVHCQkoRUJVU19CQVNFQUREUiArIDB4MTBDKQorCisjZGVmaW5lIEVYX0NMS19FTgkJMHgwMDAwMDAwMQorI2RlZmluZSBFWF9DU0JPT1RfRU4JCTB4MDAwMDAwMDIKKyNkZWZpbmUgRVhfQ1MwX0VOCQkweDAwMDAwMDAyCisjZGVmaW5lIEVYX0NTMV9FTgkJMHgwMDAwMDAwNAorI2RlZmluZSBFWF9DUzJfRU4JCTB4MDAwMDAwMDgKKyNkZWZpbmUgRVhfQ1MzX0VOCQkweDAwMDAwMDEwCisjZGVmaW5lIEVYX0NTNF9FTgkJMHgwMDAwMDAyMAorCisjZGVmaW5lIEVYX01FTV9CVVNfOAkJMHgwMDAwMDAwMAorI2RlZmluZSBFWF9NRU1fQlVTXzE2CQkweDAwMDAwMDAyCisjZGVmaW5lIEVYX01FTV9CVVNfMzIJCTB4MDAwMDAwMDQKKyNkZWZpbmUgRVhfQ1NfSElHSAkJMHgwMDAwMDAwOAorI2RlZmluZSBFWF9XRV9ISUdICQkweDAwMDAwMDEwCisjZGVmaW5lIEVYX1JFX0hJR0gJCTB4MDAwMDAwMjAKKyNkZWZpbmUgRVhfQUxFX01PREUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgRVhfU1RSQl9NT0RFCQkweDAwMDAwMDgwCisjZGVmaW5lIEVYX0RNX01PREUJCTB4MDAwMDAxMDAKKyNkZWZpbmUgRVhfTkFORF9NT0RFCQkweDAwMDAwMjAwCisjZGVmaW5lIEVYX1JEWV9FTgkJMHgwMDAwMDQwMAorI2RlZmluZSBFWF9SRFlfRURHRQkJMHgwMDAwMDgwMAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIEdQSU8gYmxvY2sJCQkJCQkJCQkJCQkgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBHUElPX09VVFBVVF9SRUcJCShHUElPX0JBU0VBRERSICsgMHgwMCkJLy8gR1BJTyBvdXRwdXRzIHJlZ2lzdGVyCisjZGVmaW5lIEdQSU9fT0VfUkVHCQkoR1BJT19CQVNFQUREUiArIDB4MDQpCS8vIEdQSU8gT3V0cHV0IEVuYWJsZSByZWdpc3RlcgorI2RlZmluZSBHUElPX0hJX0lOVF9FTkFCTEVfUkVHCShHUElPX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgR1BJT19MT19JTlRfRU5BQkxFX1JFRwkoR1BJT19CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIEdQSU9fSU5QVVRfUkVHCQkoR1BJT19CQVNFQUREUiArIDB4MTApCS8vIEdQSU8gaW5wdXQgcmVnaXN0ZXIKKyNkZWZpbmUgQVBCX0FDQ0VTU19XU19SRUcJKEdQSU9fQkFTRUFERFIgKyAweDE0KQorI2RlZmluZSBNVVhfQ09ORl9SRUcJCShHUElPX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgU1lTQ09ORl9SRUcJCShHUElPX0JBU0VBRERSICsgMHgxQykKKyNkZWZpbmUgR1BJT19BUk1fSURfUkVHCQkoR1BJT19CQVNFQUREUiArIDB4MzApCisjZGVmaW5lIEdQSU9fQk9PVFNUUkFQX1JFRwkoR1BJT19CQVNFQUREUiArIDB4NDApCisjZGVmaW5lIEdQSU9fTE9DS19SRUcJCShHUElPX0JBU0VBRERSICsgMHgzOCkKKyNkZWZpbmUgR1BJT19JT0NUUkxfUkVHCQkoR1BJT19CQVNFQUREUiArIDB4NDQpCisjZGVmaW5lIEdQSU9fREVWSURfUkVHCQkoR1BJT19CQVNFQUREUiArIDB4NTApCisKKyNkZWZpbmUgR1BJT19JT0NUUkxfQTE1QTE2CTB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT19JT0NUUkxfQTE3QTE4CTB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT19JT0NUUkxfQTE5QTIxCTB4MDAwMDAwMDQKKyNkZWZpbmUgR1BJT19JT0NUUkxfVE1SRVZUMAkweDAwMDAwMDA4CisjZGVmaW5lIEdQSU9fSU9DVFJMX1RNUkVWVDEJMHgwMDAwMDAxMAorI2RlZmluZSBHUElPX0lPQ1RSTF9HUEJUMwkweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fSU9DVFJMX0kyQwkJMHgwMDAwMDA0MAorI2RlZmluZSBHUElPX0lPQ1RSTF9VQVJUMAkweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fSU9DVFJMX1VBUlQxCTB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT19JT0NUUkxfU1BJCQkweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fSU9DVFJMX0hCTU9ERQkweDAwMDAwNDAwCisKKyNkZWZpbmUgR1BJT19JT0NUUkxfVkFMCQkweDU1NTU1NTU1CisKKyNkZWZpbmUgR1BJT18wCQkJMHgwMQorI2RlZmluZSBHUElPXzEJCQkweDAyCisjZGVmaW5lIEdQSU9fMgkJCTB4MDQKKyNkZWZpbmUgR1BJT18zCQkJMHgwOAorI2RlZmluZSBHUElPXzQJCQkweDEwCisjZGVmaW5lIEdQSU9fNQkJCTB4MjAKKyNkZWZpbmUgR1BJT182CQkJMHg0MAorI2RlZmluZSBHUElPXzcJCQkweDgwCisKKyNkZWZpbmUgR1BJT19SSVNJTkdfRURHRQkxCisjZGVmaW5lIEdQSU9fRkFMTElOR19FREdFCTIKKyNkZWZpbmUgR1BJT19CT1RIX0VER0VTCQkzCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBVQVJUCQkJCQkJCQkJCQkJCSAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNkZWZpbmUgVUFSVF9SQlIJCShVQVJUX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgVUFSVF9USFIJCShVQVJUX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgVUFSVF9ETEwJCShVQVJUX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgVUFSVF9JRVIJCShVQVJUX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgVUFSVF9ETEgJCShVQVJUX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgVUFSVF9JSVIJCShVQVJUX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgVUFSVF9GQ1IJCShVQVJUX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgVUFSVF9MQ1IJCShVQVJUX0JBU0VBRERSICsgMHgwQykKKyNkZWZpbmUgVUFSVF9NQ1IJCShVQVJUX0JBU0VBRERSICsgMHgxMCkKKyNkZWZpbmUgVUFSVF9MU1IJCShVQVJUX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgVUFSVF9NU1IJCShVQVJUX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgVUFSVF9TQ1IJCShVQVJUX0JBU0VBRERSICsgMHgxQykKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDTEsgICsgUkVTRVQgYmxvY2sgCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBDTEtDT1JFX0FSTV9DTEtfQ05UUkwJKENMS0NPUkVfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBDTEtDT1JFX0FIQl9DTEtfQ05UUkwJKENMS0NPUkVfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBDTEtDT1JFX1BMTF9TVEFUVVMJKENMS0NPUkVfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBDTEtDT1JFX0NMS0RJVl9DTlRSTAkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIENMS0NPUkVfVERNX0NMS19DTlRSTAkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIENMS0NPUkVfRlNZTkNfQ05UUkwJKENMS0NPUkVfQkFTRUFERFIgKyAweDE0KQorI2RlZmluZSBDTEtDT1JFX0NMS19QV1JfRFdOCShDTEtDT1JFX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgQ0xLQ09SRV9STkdfQ05UUkwJKENMS0NPUkVfQkFTRUFERFIgKyAweDFDKQorI2RlZmluZSBDTEtDT1JFX1JOR19TVEFUVVMJKENMS0NPUkVfQkFTRUFERFIgKyAweDIwKQorI2RlZmluZSBDTEtDT1JFX0FSTV9DTEtfQ05UUkwyCShDTEtDT1JFX0JBU0VBRERSICsgMHgyNCkKKyNkZWZpbmUgQ0xLQ09SRV9URE1fUkVGX0RJVl9SU1QJKENMS0NPUkVfQkFTRUFERFIgKyAweDQwKQorCisjZGVmaW5lIEFSTV9QTExfQllfQ1RSTAkJMHg4MDAwMDAwMAorI2RlZmluZSBBUk1fQUhCX0JZUAkJMHgwNDAwMDAwMAorI2RlZmluZSBQTExfRElTQUJMRQkJMHgwMjAwMDAwMAorI2RlZmluZSBQTExfQ0xLX0JZUEFTUwkJMHgwMTAwMDAwMAorCisjZGVmaW5lIEFIQl9QTExfQllfQ1RSTAkJMHg4MDAwMDAwMAorI2RlZmluZSBESVZfQllQQVNTCQkweDQwMDAwMDAwCisjZGVmaW5lIFNZTkNfTU9ERQkJMHgyMDAwMDAwMAorCisjZGVmaW5lIEVQSFlfQ0xLRElWX0JZUEFTUwkweDAwMjAwMDAwCisjZGVmaW5lIEVQSFlfQ0xLRElWX1JBVElPX1NISUZUCTE2CisjZGVmaW5lIFBVSV9DTEtESVZfQllQQVNTCTB4MDAwMDQwMDAKKyNkZWZpbmUgUFVJX0NMS0RJVl9TUkNDTEsJMHgwMDAwMjAwMAorI2RlZmluZSBQVUlfQ0xLRElWX1JBVElPX1NISUZUCTgKKyNkZWZpbmUgUENJX0NMS0RJVl9CWVBBU1MJMHgwMDAwMDAyMAorI2RlZmluZSBQQ0lfQ0xLRElWX1JBVElPX1NISUZUCTAKKworI2RlZmluZSBBUk0wX0NMS19QRAkJMHgwMDIwMDAwMAorI2RlZmluZSBBUk0xX0NMS19QRAkJMHgwMDEwMDAwMAorI2RlZmluZSBFUEhZX0NMS19QRAkJMHgwMDA4MDAwMAorI2RlZmluZSBURE1fQ0xLX1BECQkweDAwMDQwMDAwCisjZGVmaW5lIFBVSV9DTEtfUEQJCTB4MDAwMjAwMDAKKyNkZWZpbmUgUENJX0NMS19QRAkJMHgwMDAxMDAwMAorI2RlZmluZSBNRE1BX0FIQkNMS19QRAkJMHgwMDAwMDQwMAorI2RlZmluZSBJMkNTUElfQUhCQ0xLX1BECTB4MDAwMDAyMDAKKyNkZWZpbmUgVUFSVF9BSEJDTEtfUEQJCTB4MDAwMDAxMDAKKyNkZWZpbmUgSVBTRUNfQUhCQ0xLX1BECQkweDAwMDAwMDgwCisjZGVmaW5lIFRETV9BSEJDTEtfUEQJCTB4MDAwMDAwNDAKKyNkZWZpbmUgVVNCMV9BSEJDTEtfUEQJCTB4MDAwMDAwMjAKKyNkZWZpbmUgVVNCMF9BSEJDTEtfUEQJCTB4MDAwMDAwMTAKKyNkZWZpbmUgR0VNQUMxX0FIQkNMS19QRAkweDAwMDAwMDA4CisjZGVmaW5lIEdFTUFDMF9BSEJDTEtfUEQJMHgwMDAwMDAwNAorI2RlZmluZSBQVUlfQUhCQ0xLX1BECQkweDAwMDAwMDAyCisjZGVmaW5lIEhJRl9BSEJDTEtfUEQJCTB4MDAwMDAwMDEKKworI2RlZmluZSBBUk0xX0RJVl9CUAkJMHgwMDAwMTAwMAorI2RlZmluZSBBUk0xX0RJVl9WQUxfU0hJRlQJOAorI2RlZmluZSBBUk0wX0RJVl9CUAkJMHgwMDAwMDAxMAorI2RlZmluZSBBUk0wX0RJVl9WQUxfU0hJRlQJMAorCisjZGVmaW5lIEFIQkNMS19QTExfTE9DSwkJMHgwMDAwMDAwMgorI2RlZmluZSBGQ0xLX1BMTF9MT0NLCQkweDAwMDAwMDAxCisKKworLy8gcmVzZXQgYmxvY2sKKyNkZWZpbmUgQkxPQ0tfUkVTRVRfUkVHCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MTAwKQorI2RlZmluZSBDU1BfUkVTRVRfUkVHCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MTA0KQorCisjZGVmaW5lIFJOR19SU1QJCQkweDEwMDAKKyNkZWZpbmUgSVBTRUNfUlNUCQkweDA4MDAKKyNkZWZpbmUgRERSX1JTVAkJCTB4MDQwMAorI2RlZmluZSBVU0IxX1BIWV9SU1QJCTB4MDIwMAorI2RlZmluZSBVU0IwX1BIWV9SU1QJCTB4MDEwMAorI2RlZmluZSBVU0IxX1JTVAkJMHgwMDgwCisjZGVmaW5lIFVTQjBfUlNUCQkweDAwNDAKKyNkZWZpbmUgR0VNQUMxX1JTVAkJMHgwMDIwCisjZGVmaW5lIEdFTUFDMF9SU1QJCTB4MDAxMAorI2RlZmluZSBURE1fUlNUCQkJMHgwMDA4CisjZGVmaW5lIFBVSV9SU1QJCQkweDAwMDQKKyNkZWZpbmUgSElGX1JTVAkJCTB4MDAwMgorI2RlZmluZSBQQ0lfUlNUCQkJMHgwMDAxCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCUREUiAgQ09OVFJPTExFUiBibG9jaworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIEREUl9DT05GSUdfQkFTRUFERFIJMHgwRDAwMDAwMAorI2RlZmluZSBERU5BTElfQ1RMXzAwX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBERU5BTElfQ1RMXzAxX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBERU5BTElfQ1RMXzAyX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDEwKQorI2RlZmluZSBERU5BTElfQ1RMXzAzX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE4KQorI2RlZmluZSBERU5BTElfQ1RMXzA0X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDIwKQorI2RlZmluZSBERU5BTElfQ1RMXzA1X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDI4KQorI2RlZmluZSBERU5BTElfQ1RMXzA2X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDMwKQorI2RlZmluZSBERU5BTElfQ1RMXzA3X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDM4KQorI2RlZmluZSBERU5BTElfQ1RMXzA4X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDQwKQorI2RlZmluZSBERU5BTElfQ1RMXzA5X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDQ4KQorI2RlZmluZSBERU5BTElfQ1RMXzEwX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDUwKQorI2RlZmluZSBERU5BTElfQ1RMXzExX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDU4KQorI2RlZmluZSBERU5BTElfQ1RMXzEyX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDYwKQorI2RlZmluZSBERU5BTElfQ1RMXzEzX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDY4KQorI2RlZmluZSBERU5BTElfQ1RMXzE0X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDcwKQorI2RlZmluZSBERU5BTElfQ1RMXzE1X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDc4KQorI2RlZmluZSBERU5BTElfQ1RMXzE2X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDgwKQorI2RlZmluZSBERU5BTElfQ1RMXzE3X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDg4KQorI2RlZmluZSBERU5BTElfQ1RMXzE4X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDkwKQorI2RlZmluZSBERU5BTElfQ1RMXzE5X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDk4KQorI2RlZmluZSBERU5BTElfQ1RMXzIwX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEEwKQorCisjZGVmaW5lIERFTkFMSV9SRUFEWV9DSEVDSyAgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKSAoRERSX0NPTkZJR19CQVNFQUREUiArIDB4NDQpKQorI2RlZmluZSBERU5BTElfV1JfRFFTICAgICAgICAgICAgICAgKigodm9sYXRpbGUgdTggKikgIChERFJfQ09ORklHX0JBU0VBRERSICsgMHg1RCkpCisjZGVmaW5lIERFTkFMSV9EUVNfT1VUICAgICAgICAgICAgICooKHZvbGF0aWxlIHU4ICopIChERFJfQ09ORklHX0JBU0VBRERSICsgMHg1QSkpCisjZGVmaW5lIERFTkFMSV9EUVNfREVMQVkwICAgICAgKigodm9sYXRpbGUgdTggKikgKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDRGKSkKKyNkZWZpbmUgREVOQUxJX0RRU19ERUxBWTEgICAgICAqKCh2b2xhdGlsZSB1OCAqKSAgKEREUl9DT05GSUdfQkFTRUFERFIgKzB4NTApKQorI2RlZmluZSBERU5BTElfRFFTX0RFTEFZMiAgICAgICooKHZvbGF0aWxlIHU4ICopICAoRERSX0NPTkZJR19CQVNFQUREUiArMHg1MSkpCisjZGVmaW5lIERFTkFMSV9EUVNfREVMQVkzICAgICAgICooKHZvbGF0aWxlIHU4ICopICAoRERSX0NPTkZJR19CQVNFQUREUiArMHg1MikpCisKKworLy9ERU5BTEkgQ09ORklHUkFUSU9OIEZPUiBCT0FSRCBDT05GSUcgIzEKKyNkZWZpbmUgREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMQkweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkcxCTB4MDEwMDAwMDEwMDAwMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDJfVkFMX0NGRzEJMHgwMTAwMDEwMDAwMDEwMTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wM19WQUxfQ0ZHMQkweDAxMDIwMjAyMDIwMjAyMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA0X1ZBTF9DRkcxCTB4MDAwMDAxMDEwMDAwMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDVfVkFMX0NGRzEJMHgwMjAzMDEwMzAwMDAwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMQkweDA2MGEwMjAyMDAwMjAyMDJMTAorI2RlZmluZSBERU5BTElfQ1RMXzA3X1ZBTF9DRkcxCTB4MDAwMDAwMDMwMDAwMDIwNkxMCisjZGVmaW5lIERFTkFMSV9DVExfMDhfVkFMX0NGRzEJMHg2NDAwMDAzZjNmMGEwMjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMQkweDE3MDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEwX1ZBTF9DRkcxCTB4MDEyMDIwMjAyMDE5MWExOExMCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzEJMHg0MzNhMzQxMjRhNjUwYTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMl9WQUxfQ0ZHMQkweDAwMDAwMDAwMDAwMDA3MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEzX1ZBTF9DRkcxCTB4MDAxMDAwMjAwMDEwMDA4MExMCQorI2RlZmluZSBERU5BTElfQ1RMXzE0X1ZBTF9DRkcxCTB4MDAxMDAwNDAwMDEwMDA0MExMCisjZGVmaW5lIERFTkFMSV9DVExfMTVfVkFMX0NGRzEJMHgwNTBlMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMQkweDAwMDAwMDAwMmQ4OTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE3X1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMThfVkFMX0NGRzEJMHgwMzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMQkweDAwMDAxNDAwYzgwMzA2MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzIwX1ZBTF9DRkcxCTB4MDAwMDAwMDA4MjM2MDBjOExMCisKKworLy9ERU5BTEkgQ09ORklHUkFUSU9OIEZPUiBCT0FSRCBDT05GSUcgIzIKKyNkZWZpbmUgREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMgkweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkcyCTB4MDEwMDAxMDEwMDAwMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDJfVkFMX0NGRzIJMHgwMTAwMDEwMDAwMDEwMTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wM19WQUxfQ0ZHMgkweDAxMDIwMjAyMDIwMjAyMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA0X1ZBTF9DRkcyCTB4MDAwMDAxMDIwMDAwMDAwM0xMIAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcyCTB4MDIwMzAxMDMwMDAwMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzIJMHgwNjBhMDIwMjAwMDIwMjAyTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMgkweDAwMDAwMDAzMDAwMDAyMDZMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkcyCTB4NjQwMDAwM2YzZjBhMDIwN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzIJMHgxNzAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMgkweDAxMjAyMDIwMjAxOTFhMThMTAorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkcyCTB4NDMzYTM0MTY0YTY1MGEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwNzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMgkweDAwMTAwMDIwMDAxMDAwODBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE0X1ZBTF9DRkcyCTB4MDAxMDAwNDAwMDEwMDA0MExMCisjZGVmaW5lIERFTkFMSV9DVExfMTVfVkFMX0NGRzIJMHgwNTBlMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMgkweDAwMDAwMDAwMmQ4OTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE3X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMThfVkFMX0NGRzIJMHgwMzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMgkweDAwMDAxNzAwYzgwMzA2MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzIwX1ZBTF9DRkcyCTB4MDAwMDAwMDA0MjM2MDBjOExMCisKKworLy9ERU5BTEkgQ09ORklHUkFUSU9OIEZPUiBCT0FSRCBDT05GSUcgIzMKKyNkZWZpbmUgREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMwkweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkczCTB4MDEwMDAxMDEwMDAwMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDJfVkFMX0NGRzMJMHgwMTAwMDEwMDAwMDEwMTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wM19WQUxfQ0ZHMwkweDAxMDIwMjAyMDIwMjAyMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA0X1ZBTF9DRkczCTB4MDAwMDAxMDIwMDAwMDAwM0xMIAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkczCTB4MDIwMzAxMDMwMDAwMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzMJMHgwNjBhMDIwMjAwMDIwMjAyTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMwkweDAwMDAwMDAzMDAwMDAyMDZMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkczCTB4NjQwMDAwM2YzZjBhMDIwN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzMJMHgxNzAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMwkweDAxMjAyMDIwMjAxOTFhMThMTAorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkczCTB4NDMzYTM0MTY0YTY1MGEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwNzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMwkweDAwMTAwMDIwMDAxMDAwODBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE0X1ZBTF9DRkczCTB4MDAxMDAwNDAwMDEwMDA0MExMCisjZGVmaW5lIERFTkFMSV9DVExfMTVfVkFMX0NGRzMJMHgwNTBlMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMwkweDAwMDAwMDAwMmQ4OTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE3X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMThfVkFMX0NGRzMJMHgwMzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMwkweDAwMDAxNzAwYzgwMzA2MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzIwX1ZBTF9DRkczCTB4MDAwMDAwMDA0MjM2MDBjOExMCisKKworLy9ERU5BTEkgQ09ORklHUkFUSU9OIEZPUiBCT0FSRCBDT05GSUcgIzQKKyNkZWZpbmUgREVOQUxJX0NUTF8wMF9WQUxfQ0ZHNAkweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkc0CTB4MDEwMDAwMDEwMDAwMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDJfVkFMX0NGRzQJMHgwMTAwMDEwMDAwMDEwMTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wM19WQUxfQ0ZHNAkweDAxMDIwMjAyMDIwMjAyMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA0X1ZBTF9DRkc0CTB4MDAwMDAxMDEwMDAwMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDVfVkFMX0NGRzQJMHgwMjAzMDEwMzAwMDEwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHNAkweDA2MGEwMjAyMDAwMjAyMDJMTAorI2RlZmluZSBERU5BTElfQ1RMXzA3X1ZBTF9DRkc0CTB4MDAwMDAwMDMwMDAwMDIwNkxMCisjZGVmaW5lIERFTkFMSV9DVExfMDhfVkFMX0NGRzQJMHg2NDAwMDAzZjNmMGEwMjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOV9WQUxfQ0ZHNAkweDE3MDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEwX1ZBTF9DRkc0CTB4MDEyMDIwMjAyMDE5MWExOExMCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzQJMHg0MzNhMzQxMjRhNjUwYTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMl9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDA3MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEzX1ZBTF9DRkc0CTB4MDAxMDAwMjAwMDEwMDA4MExMCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzQJMHgwMDEwMDA0MDAwMTAwMDQwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNV9WQUxfQ0ZHNAkweDA1MGUwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE2X1ZBTF9DRkc0CTB4MDAwMDAwMDAyZDg5MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzQJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOF9WQUxfQ0ZHNAkweDAzMDIwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE5X1ZBTF9DRkc0CTB4MDAwMDE0MDBjODAzMDYwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzQJMHgwMDAwMDAwMDQyMzYwMGM4TEwKKworCisvL0RFTkFMSSBDT05GSUdSQVRJT04gRk9SIEJPQVJEIENPTkZJRyAjNQorI2RlZmluZSBERU5BTElfQ1RMXzAwX1ZBTF9DRkc1CTB4MDEwMDAwMDEwMTAxMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDFfVkFMX0NGRzUJMHgwMTAwMDAwMTAwMDAwMDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHNQkweDAxMDAwMTAwMDAwMTAxMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAzX1ZBTF9DRkc1CTB4MDEwMjAyMDIwMjAyMDIwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDRfVkFMX0NGRzUJMHgwMDAwMDEwMTAwMDAwMDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNV9WQUxfQ0ZHNQkweDAyMDMwMjAzMDAwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA2X1ZBTF9DRkc1CTB4MDYwYTAyMDIwMDAyMDIwMkxMCisjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzUJMHgwMDAwMDAwMzAwMDAwMjA2TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOF9WQUxfQ0ZHNQkweDY0MDAwMDNmM2YwYTAyMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzA5X1ZBTF9DRkc1CTB4MTcwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTBfVkFMX0NGRzUJMHgwMTIwMjAyMDIwMTkxYTE4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMV9WQUxfQ0ZHNQkweDQzM2EzNDBkNGE2NTBhMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkc1CTB4MDAwMDAwMDAwMDAwMDcwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTNfVkFMX0NGRzUJMHgwMDEwMDAyMDAwMTAwMDgwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNF9WQUxfQ0ZHNQkweDAwMTAwMDQwMDAxMDAwNDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkc1CTB4MDUwZTAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzUJMHgwMDAwMDAwMDJkODkwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xN19WQUxfQ0ZHNQkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkc1CTB4MDMwMjAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzUJMHgwMDAwMGYwMGM4MDMwNjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHNQkweDAwMDAwMDAwNDIzNjAwYzhMTAorCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICM2CisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzYJMHgwMTAwMDAwMTAxMDEwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMV9WQUxfQ0ZHNgkweDAxMDAwMDAxMDAwMDAwMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAyX1ZBTF9DRkc2CTB4MDEwMDAxMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzYJMHgwMTAyMDIwMjAyMDIwMjAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNF9WQUxfQ0ZHNgkweDAwMDAwMTAyMDAwMDAwMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkc2CTB4MDIwMzAxMDMwMDAwMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzYJMHgwNjBhMDIwMjAwMDIwMjAyTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHNgkweDAwMDAwMDAzMDAwMDAyMDZMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkc2CTB4NjQwMDAwM2YzZjBhMDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzYJMHgxNzAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHNgkweDAxMjAyMDIwMjAxOTFhMThMTAorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkc2CTB4NDMzYTM0MTI0YTY1MGEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzYJMHgwMDAwMDAwMDAwMDAwNzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHNgkweDAwMTAwMDIwMDAxMDAwODBMTAkKKyNkZWZpbmUgREVOQUxJX0NUTF8xNF9WQUxfQ0ZHNgkweDAwMTAwMDQwMDAxMDAwNDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkc2CTB4MDUwZTAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzYJMHgwMDAwMDAwMDJkODkwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xN19WQUxfQ0ZHNgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkc2CTB4MDMwMjAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzYJMHgwMDAwMTQwMGM4MDMwNjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHNgkweDAwMDAwMDAwNDIzNjAwYzhMTAorCisKKy8qIEZvciAxMjUgTUh6IEFIQiBjbG9jayBzcGVlZCBmb3IgQ09ORklHICM5IChTaW1pbGFyIHRvIENvbmZpZyAjNCkgKi8KKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHNF9DNTAgICAgICAweDAwMDAwMDAyMDAwMDAyMDZMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkc0X0M1MCAgICAgIDB4NjQwMDAwM2YzZjA3MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzRfQzUwICAgICAgMHgzMjNhMzQwZTRhNjUwYTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMl9WQUxfQ0ZHNF9DNTAgICAgICAweDAwMDAwMDAwMDAwMDA1MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkc0X0M1MCAgICAgIDB4MDNjODAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzRfQzUwICAgICAgMHgwMDAwMDAwMDIyMjQwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOF9WQUxfQ0ZHNF9DNTAgICAgICAweDAyMDIwMDAwMDEwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE5X1ZBTF9DRkc0X0M1MCAgICAgIDB4MDAwMDBmMDBjODAyMDQwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzRfQzUwICAgICAgMHgwMDAwMDAwMDYxYTgwMGM4TEwKKworLyogREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMxMAorICogQzUwIFJvdXRlciBCb2FyZCAqLworI2RlZmluZSBERU5BTElfQ1RMXzAwX1ZBTF9DRkcxMAkJMHgwMTAwMDAwMTAxMDEwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMV9WQUxfQ0ZHMTAJCTB4MDEwMDAxMDEwMDAwMDAwMUxMIC8qIEVJR0hUX0JBTktfTU9ERVs0MF09MHgxICovCisjZGVmaW5lIERFTkFMSV9DVExfMDJfVkFMX0NGRzEwCQkweDAxMDAwMTAwMDAwMTAxMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAzX1ZBTF9DRkcxMCAJMHgwMTAyMDIwMjAyMDIwMjAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNF9WQUxfQ0ZHMTAgCTB4MDAwMDAxMDEwMDAwMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDVfVkFMX0NGRzEwIAkweDAyMDMwMTAzMDAwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA2X1ZBTF9DRkcxMCAJMHgwNjBhMDIwMjAwMDIwMjAyTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMTAgCTB4MDAwMDAwMDMwMDAwMDIwNkxMCisjZGVmaW5lIERFTkFMSV9DVExfMDhfVkFMX0NGRzEwIAkweDY0MDAwMDNmM2YwYTAyMDdMTCAvKiBURkFXIFswOjRdPTB4NyAqLworI2RlZmluZSBERU5BTElfQ1RMXzA5X1ZBTF9DRkcxMCAJMHgxNzAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMTAgCTB4MDEyMDIwMjAyMDE5MWExOExMCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzEwIAkweDQzM2EzNDEwNGE2NTBhMDBMTCAvKiBUUkZDIFszOTozMl09MHgxMCAqLworI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkcxMCAJMHgwMDAwMDAwMDAwMDAwNzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMTAgCTB4MDAxMDAwMjAwMDEwMDA4MExMCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzEwIAkweDAwMTAwMDQwMDAxMDAwNDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkcxMCAJMHgwNTBlMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMTAgCTB4MDAwMDAwMDAyZDg5MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzEwIAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkcxMCAJMHgwMzAyMDAwMDAxMDAwMDAwTEwgLyogUkVEVUMgWzI0XT0gMHgxICovCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzEwIAkweDAwMDAxMjAwYzgwMzA2MDBMTCAvKiBUWFNOUiBbNTU6NDBdPTB4MTIgKi8KKyNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMTAgCTB4MDAwMDAwMDA0MjM2MDBjOExMCisKKworI2RlZmluZSBXUklURV9WQUxfVTggICAgICAgICAgICAgICAgICAgKigodm9sYXRpbGUgdTggKikgICAweDgwMDAwMDAwKQorI2RlZmluZSBXUklURV9WQUxfVTE2ICAgICAgICAgICAgICAgICAqKCh2b2xhdGlsZSB1MTYgKikgIDB4ODAwMDAwMDApCisjZGVmaW5lIFdSSVRFX1ZBTF9VMzIgICAgICAgICAgICAgICAgICooKHZvbGF0aWxlIHUzMiAqKSAgMHg4MDAwMDAwMCkKKyNkZWZpbmUgV1JJVEVfVkFMX1U2NCAgICAgICAgICAgICAgICAgKigodm9sYXRpbGUgdTY0ICopICAweDgwMDAwMDAwKQorCisjZGVmaW5lIEFIQl9NQVhfTUVNX1JFRyAgICAgICAgICAgICAgICAqKCh2b2xhdGlsZSB1NjQgKikgIDB4MTAwNjAwMTApCisKKyNkZWZpbmUgUkVEVUMgICAgICAgICAgICAgICAgICAgICAgICAgICooKHZvbGF0aWxlIHU2NCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgIDB4OTApKQorI2RlZmluZSBDU19NQVAgICAgICAgICAgICAgICAgICAgICAgICAgKigodm9sYXRpbGUgdTY0ICopKEREUl9DT05GSUdfQkFTRUFERFIgKzB4MjApKQorCisjZGVmaW5lIEJPQVJEX01BU0sgMHgxQzAwCisjZGVmaW5lIEJPQVJEMSAgICAgMTAyNAorI2RlZmluZSBCT0FSRDIgICAgIDIwNDgKKyNkZWZpbmUgQk9BUkQzICAgICAzMDcyCisjZGVmaW5lIEJPQVJENCAgICAgNDA5NgorI2RlZmluZSBCT0FSRDUgICAgIDUxMjAKKyNkZWZpbmUgQk9BUkQ2ICAgICA2MTQ0CisgICAgCisjZGVmaW5lIExPV19XUl9EUVMgICAgICAgIDB4M0EgLy8weDIwCisjZGVmaW5lIEhJR0hfV1JfRFFTICAgICAgIDB4NTAgLy8weDgwCisKKyNkZWZpbmUgTE9XX0RRU19PVVQgICAgICAgMHg2MCAvLzB4NTUKKyNkZWZpbmUgSElHSF9EUVNfT1VUICAgICAgMHg3MCAvLzB4NzUKKworI2RlZmluZSBMT1dfUkQwICAgICAgICAgICAweDEwCisjZGVmaW5lIEhJR0hfUkQwICAgICAgICAgIDB4MjUKKyNkZWZpbmUgTE9XX1JEMSAgICAgICAgICAgMHgxMAorI2RlZmluZSBISUdIX1JEMSAgICAgICAgICAweDI1CisjZGVmaW5lIExPV19SRDIgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgSElHSF9SRDIgICAgICAgICAgMHgyNQorI2RlZmluZSBMT1dfUkQzICAgICAgICAgICAweDEwCisjZGVmaW5lIEhJR0hfUkQzICAgICAgICAgIDB4MjUKKworCisjZGVmaW5lIExPV19EUVNfREVMQVkwICAgIDB4MTAKKyNkZWZpbmUgSElHSF9EUVNfREVMQVkwICAgMHgyNQorCisjZGVmaW5lIExPV19EUVNfREVMQVkxICAgIDB4MTAKKyNkZWZpbmUgSElHSF9EUVNfREVMQVkxICAgMHgyNQorCisjZGVmaW5lIExPV19EUVNfREVMQVkyICAgIDB4MTAKKyNkZWZpbmUgSElHSF9EUVNfREVMQVkyICAgMHgyNQorCisjZGVmaW5lIExPV19EUVNfREVMQVkzICAgIDB4MTAKKyNkZWZpbmUgSElHSF9EUVNfREVMQVkzICAgMHgyNQorCisjZW5kaWYKKworLyogZW5kIG9mIGZpbGUgY29tY2VydG9fMXh4LmggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NvbWNlcnRvXzEwMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NvbWNlcnRvXzEwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmFkMzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vY29tY2VydG9fMTAwMC5oCkBAIC0wLDAgKzEsNDc2IEBACisjaWZuZGVmIF9fQ09NQ0VSVE9fMTAwMF9IX18KKyNkZWZpbmUgX19DT01DRVJUT18xMDAwX0hfXworCisvKiB0byBiZSBtb3ZlZCBzb21ld2hlcmUgZWxzZSAqLworI2luY2x1ZGUgPGFzbS9hcmNoL2JpdHMuaD4KKworCisvKiBtZW1jb3JlICovCisvKiBkZXZpY2UgbWVtb3J5IGJhc2UgYWRkcmVzc2VzICovCisvLyBkZXZpY2UgbWVtb3J5IHNpemVzCisjZGVmaW5lIEFSQU1fU0laRQkJMHgwMDAyMDAwMCAvKiAxMjhLICovCisjZGVmaW5lIEFSQU1fQkFTRUFERFIJCTB4MEEwMDAwMDAKKworLyogSGFyZHdhcmUgSW50ZXJmYWNlIFVuaXRzICovCisjZGVmaW5lIEFQQl9CQVNFQUREUgkJMHgxMDAwMDAwMAorI2RlZmluZSBBUEJfU0laRQkJMHgwMTAwMDAwMCAvKiAxNk0gYWRkcmVzcyByYW5nZSAqLworCisjZGVmaW5lIEVYUF9DUzBfQkFTRUFERFIJMHgyMDAwMDAwMAorI2RlZmluZSBFWFBfQ1MxX0JBU0VBRERSCTB4MjQwMDAwMDAKKyNkZWZpbmUgRVhQX0NTMl9CQVNFQUREUgkweDI4MDAwMDAwCisjZGVmaW5lIEVYUF9DUzNfQkFTRUFERFIJMHgyQzAwMDAwMAorI2RlZmluZSBFWFBfQ1M0X0JBU0VBRERSCTB4MzAwMDAwMDAKKworI2RlZmluZSBERFJfQkFTRUFERFIJCTB4ODAwMDAwMDAKKworI2RlZmluZSBURE1fQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDAwMDAwMCkKKyNkZWZpbmUgVERNQV9CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MDIwMDAwKQorI2RlZmluZSBBSEJfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDA0MDAwMCkKKyNkZWZpbmUgVElNRVJfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDA1MDAwMCkKKyNkZWZpbmUgUENJRV9QSFlfQkFTRUFERFIJKEFQQl9CQVNFQUREUiArIDB4MDYwMDAwKQorI2RlZmluZSBHUElPX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwNzAwMDApCisjZGVmaW5lIFVBUlQwX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwOTAwMDApCisjZGVmaW5lIFVBUlQxX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwOTQwMDApCisjZGVmaW5lIFNQSV9CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MDk4MDAwKQorI2RlZmluZSBJMkNfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDA5QzAwMCkKKyNkZWZpbmUgSU5UQ19CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MEEwMDAwKQorI2RlZmluZSBDTEtDT1JFX0JBU0VBRERSCShBUEJfQkFTRUFERFIgKyAweDBCMDAwMCkKKyNkZWZpbmUgR0VNQUNfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDBEMDAwMCkKKyNkZWZpbmUgTUVNQ09SRV9CQVNFQUREUgkoQVBCX0JBU0VBRERSICsgMHgwRjAwMDApCisjZGVmaW5lIEdFTUFDMV9CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MTkwMDAwKQorI2RlZmluZSBFQlVTX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgxQTAwMDApCisjZGVmaW5lIE1ETUFfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDFFMDAwMCkKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIAlTUEkgYmxvY2sJCQkJCQkJCQkJCQkgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFNQSV9DVFJMUjBfUkVHCQkoU1BJX0JBU0VBRERSKzB4MDApCisjZGVmaW5lIFNQSV9DVFJMUjFfUkVHCQkoU1BJX0JBU0VBRERSKzB4MDQpCisjZGVmaW5lIFNQSV9TU0lFTlJfUkVHCQkoU1BJX0JBU0VBRERSKzB4MDgpCisjZGVmaW5lIFNQSV9NV0NSX1JFRwkJKFNQSV9CQVNFQUREUisweDBjKQorI2RlZmluZSBTUElfU0VSX1JFRwkJKFNQSV9CQVNFQUREUisweDEwKQorI2RlZmluZSBTUElfQkFVRFJfUkVHCQkoU1BJX0JBU0VBRERSKzB4MTQpCisjZGVmaW5lIFNQSV9UWEZUTFJfUkVHCQkoU1BJX0JBU0VBRERSKzB4MTgpCisjZGVmaW5lIFNQSV9SWEZUTFJfUkVHCQkoU1BJX0JBU0VBRERSKzB4MWMpCisjZGVmaW5lIFNQSV9UWEZMUl9SRUcJCShTUElfQkFTRUFERFIrMHgyMCkKKyNkZWZpbmUgU1BJX1JYRkxSX1JFRwkJKFNQSV9CQVNFQUREUisweDI0KQorI2RlZmluZSBTUElfU1JfUkVHCQkoU1BJX0JBU0VBRERSKzB4MjgpCisjZGVmaW5lIFNQSV9JTVJfUkVHCQkoU1BJX0JBU0VBRERSKzB4MmMpCisjZGVmaW5lIFNQSV9JU1JfUkVHCQkoU1BJX0JBU0VBRERSKzB4MzApCisjZGVmaW5lIFNQSV9SSVNSX1JFRwkJKFNQSV9CQVNFQUREUisweDM0KQorI2RlZmluZSBTUElfVFhPSUNSX1JFRwkJKFNQSV9CQVNFQUREUisweDM4KQorI2RlZmluZSBTUElfUlhPSUNSX1JFRwkJKFNQSV9CQVNFQUREUisweDNjKQorI2RlZmluZSBTUElfUlhVSUNSX1JFRwkJKFNQSV9CQVNFQUREUisweDQwKQorI2RlZmluZSBTUElfTVNUSUNSX1JFRwkJKFNQSV9CQVNFQUREUisweDQ0KQorI2RlZmluZSBTUElfSUNSX1JFRwkJKFNQSV9CQVNFQUREUisweDQ4KQorI2RlZmluZSBTUElfSURSX1JFRwkJKFNQSV9CQVNFQUREUisweDU4KQorI2RlZmluZSBTUElfRFJfUkVHCQkoU1BJX0JBU0VBRERSKzB4NjApCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8JQUhCIGJsb2NrCQkJCQkJCQkJCQkgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBBSEJfTE9XTUVNX1JFTUFQX0NUUkwJCShBSEJfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBBSEJfSElHSE1FTV9BRERSX1RSQU5TTEFUSU9OCShBSEJfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBBSEJfU1RBR0UyX0FSQklURVJfQ0ZHCQkoQUhCX0JBU0VBRERSICsgMHgwOCkKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBJTlRDIGJsb2NrCQkJCQkJCQkJCQkgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIElOVENfQVJNMV9DT05UUk9MX1JFRwkoSU5UQ19CQVNFQUREUiArIDB4MTgpCisKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRJTUVSIGJsb2NrCQkJCQkJCQkJCQkgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFRJTUVSMF9DTlRSX1JFRwkJKFRJTUVSX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgVElNRVIwX0NVUlJfQ09VTlQJKFRJTUVSX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgVElNRVIxX0NOVFJfUkVHCQkoVElNRVJfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBUSU1FUjFfQ1VSUl9DT1VOVAkoVElNRVJfQkFTRUFERFIgKyAweDBDKQorCisjZGVmaW5lIFRJTUVSMl9DTlRSX1JFRwkJKFRJTUVSX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgVElNRVIyX0xCT1VORF9SRUcJKFRJTUVSX0JBU0VBRERSICsgMHgxMCkKKyNkZWZpbmUgVElNRVIyX0hCT1VORF9SRUcJKFRJTUVSX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgVElNRVIyX0NVUlJfQ09VTlQJKFRJTUVSX0JBU0VBRERSICsgMHgxQykKKworI2RlZmluZSBUSU1FUjNfTE9CTkQgICAgICAgICAgICAoVElNRVJfQkFTRUFERFIgKyAweDIwKQorI2RlZmluZSBUSU1FUjNfSElCTkQgICAgICAgICAgICAoVElNRVJfQkFTRUFERFIgKyAweDI0KQorI2RlZmluZSBUSU1FUjNfQ1RSTCAgICAgICAgICAgICAoVElNRVJfQkFTRUFERFIgKyAweDI4KQorI2RlZmluZSBUSU1FUjNfQ1VSUl9DT1VOVCAgICAgICAoVElNRVJfQkFTRUFERFIgKyAweDJDKQorCisjZGVmaW5lIFRJTUVSX01BU0sgICAgICAgICAgICAgIChUSU1FUl9CQVNFQUREUiArIDB4NDApCisjZGVmaW5lIFRJTUVSX1NUQVRVUyAgICAgICAgICAgIChUSU1FUl9CQVNFQUREUiArIDB4NTApCisjZGVmaW5lIFRJTUVSX0FDSyAgICAgICAgICAgICAgIChUSU1FUl9CQVNFQUREUiArIDB4NTApCisjZGVmaW5lIFRJTUVSX1dEVF9ISUdIX0JPVU5ECShUSU1FUl9CQVNFQUREUiArIDB4RDApCisjZGVmaW5lIFRJTUVSX1dEVF9DT05UUk9MCShUSU1FUl9CQVNFQUREUiArIDB4RDQpCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgRUJVUyBibG9jawkJCQkJCQkJCQkJICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2RlZmluZSBFWF9TV1JTVF9SRUcJCShFQlVTX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgRVhfQ1NFTl9SRUcJCShFQlVTX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgRVhfQ1MwX1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgRVhfQ1MxX1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgwQykKKyNkZWZpbmUgRVhfQ1MyX1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxMCkKKyNkZWZpbmUgRVhfQ1MzX1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgRVhfQ1M0X1NFR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgRVhfQ1MwX0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxQykKKyNkZWZpbmUgRVhfQ1MxX0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgyMCkKKyNkZWZpbmUgRVhfQ1MyX0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgyNCkKKyNkZWZpbmUgRVhfQ1MzX0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgyOCkKKyNkZWZpbmUgRVhfQ1M0X0NGR19SRUcJCShFQlVTX0JBU0VBRERSICsgMHgyQykKKyNkZWZpbmUgRVhfQ1MwX1RNRzFfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4MzApCisjZGVmaW5lIEVYX0NTMV9UTUcxX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDM0KQorI2RlZmluZSBFWF9DUzJfVE1HMV9SRUcJCShFQlVTX0JBU0VBRERSICsgMHgzOCkKKyNkZWZpbmUgRVhfQ1MzX1RNRzFfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4M0MpCisjZGVmaW5lIEVYX0NTNF9UTUcxX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDQwKQorI2RlZmluZSBFWF9DUzBfVE1HMl9SRUcJCShFQlVTX0JBU0VBRERSICsgMHg0NCkKKyNkZWZpbmUgRVhfQ1MxX1RNRzJfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4NDgpCisjZGVmaW5lIEVYX0NTMl9UTUcyX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDRDKQorI2RlZmluZSBFWF9DUzNfVE1HMl9SRUcJCShFQlVTX0JBU0VBRERSICsgMHg1MCkKKyNkZWZpbmUgRVhfQ1M0X1RNRzJfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4NTQpCisjZGVmaW5lIEVYX0NTMF9UTUczX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDU4KQorI2RlZmluZSBFWF9DUzFfVE1HM19SRUcJCShFQlVTX0JBU0VBRERSICsgMHg1QykKKyNkZWZpbmUgRVhfQ1MyX1RNRzNfUkVHCQkoRUJVU19CQVNFQUREUiArIDB4NjApCisjZGVmaW5lIEVYX0NTM19UTUczX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDY0KQorI2RlZmluZSBFWF9DUzRfVE1HM19SRUcJCShFQlVTX0JBU0VBRERSICsgMHg2OCkKKyNkZWZpbmUgRVhfQ0xPQ0tfRElWX1JFRwkoRUJVU19CQVNFQUREUiArIDB4NkMpCisjZGVmaW5lIEVYX01GU01fUkVHCQkoRUJVU19CQVNFQUREUiArIDB4MTAwKQorI2RlZmluZSBFWF9DU0ZTTV9SRUcJCShFQlVTX0JBU0VBRERSICsgMHgxMDQpCisjZGVmaW5lIEVYX1dSRlNNX1JFRwkJKEVCVVNfQkFTRUFERFIgKyAweDEwOCkKKyNkZWZpbmUgRVhfUkRGU01fUkVHCQkoRUJVU19CQVNFQUREUiArIDB4MTBDKQorCisjZGVmaW5lIEVYX0NMS19FTgkJMHgwMDAwMDAwMQorI2RlZmluZSBFWF9DU0JPT1RfRU4JCTB4MDAwMDAwMDIKKyNkZWZpbmUgRVhfQ1MwX0VOCQkweDAwMDAwMDAyCisjZGVmaW5lIEVYX0NTMV9FTgkJMHgwMDAwMDAwNAorI2RlZmluZSBFWF9DUzJfRU4JCTB4MDAwMDAwMDgKKyNkZWZpbmUgRVhfQ1MzX0VOCQkweDAwMDAwMDEwCisjZGVmaW5lIEVYX0NTNF9FTgkJMHgwMDAwMDAyMAorCisjZGVmaW5lIEVYX01FTV9CVVNfOAkJMHgwMDAwMDAwMAorI2RlZmluZSBFWF9NRU1fQlVTXzE2CQkweDAwMDAwMDAyCisjZGVmaW5lIEVYX01FTV9CVVNfMzIJCTB4MDAwMDAwMDQKKyNkZWZpbmUgRVhfQ1NfSElHSAkJMHgwMDAwMDAwOAorI2RlZmluZSBFWF9XRV9ISUdICQkweDAwMDAwMDEwCisjZGVmaW5lIEVYX1JFX0hJR0gJCTB4MDAwMDAwMjAKKyNkZWZpbmUgRVhfQUxFX01PREUJCTB4MDAwMDAwNDAKKyNkZWZpbmUgRVhfU1RSQl9NT0RFCQkweDAwMDAwMDgwCisjZGVmaW5lIEVYX0RNX01PREUJCTB4MDAwMDAxMDAKKyNkZWZpbmUgRVhfTkFORF9NT0RFCQkweDAwMDAwMjAwCisjZGVmaW5lIEVYX1JEWV9FTgkJMHgwMDAwMDQwMAorI2RlZmluZSBFWF9SRFlfRURHRQkJMHgwMDAwMDgwMAorCisjZGVmaW5lIENTeF9DRkdfQlVTX1NaXzE2ICAgICAgMHgyCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgR1BJTyBibG9jawkJCQkJCQkJCQkJCSAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIEdQSU9fT1VUUFVUX1JFRwkJCShHUElPX0JBU0VBRERSICsgMHgwMCkJLy8gR1BJTyBvdXRwdXRzIHJlZ2lzdGVyCisjZGVmaW5lIEdQSU9fT0VfUkVHCQkJKEdQSU9fQkFTRUFERFIgKyAweDA0KQkvLyBHUElPIE91dHB1dCBFbmFibGUgcmVnaXN0ZXIKKyNkZWZpbmUgR1BJT19DT05GSUdfSVJRX1JFRwkJKEdQSU9fQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBHUElPX1VQX0FMSUdOX0FDQ0VTU19MT0dJQwkoR1BJT19CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIEdQSU9fSU5QVVRfUkVHCQkJKEdQSU9fQkFTRUFERFIgKyAweDEwKQkvLyBHUElPIGlucHV0IHJlZ2lzdGVyCisjZGVmaW5lIEFQQl9BQ0NFU1NfV1NfUkVHCQkoR1BJT19CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIFVTQl9QSFlfQ09ORl9SRUcJCShHUElPX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgU1lTQ09ORl9SRUcJCQkoR1BJT19CQVNFQUREUiArIDB4MUMpCisjZGVmaW5lIEdQSU9fQVJNX0lEX1JFRwkJCShHUElPX0JBU0VBRERSICsgMHgzMCkKKyNkZWZpbmUgR1BJT19HRU5FUklDX1BBRF9DT05UUk9MCShHUElPX0JBU0VBRERSICsgMHgzNCkKKyNkZWZpbmUgR1BJT19CT09UU1RSQVBfU1RBVFVTX1JFRwkoR1BJT19CQVNFQUREUiArIDB4NDApCisjZGVmaW5lIEdQSU9fQk9PVFNUUkFQX09WRVJSSURFX1JFRwkoR1BJT19CQVNFQUREUiArIDB4NDQpCisjZGVmaW5lIEdQSU9fREVWSURfUkVHCQkJKEdQSU9fQkFTRUFERFIgKyAweDUwKQorI2RlZmluZSBHUElPX0FSTV9NRU1PUllfU0VOU0VfUkVHUwkoR1BJT19CQVNFQUREUiArIDB4NTQpCisjZGVmaW5lIEdQSU9fUElOX1NFTEVDVF9SRUcJCShHUElPX0JBU0VBRERSICsgMHg1OCkKKworCisjZGVmaW5lIEdQSU9fUElOX1NFTEVDVF9VQVJUMQkoKDEgPDwgMjIpIHwgKDEgPDwgMjMpKQorCisjZGVmaW5lIEdQSU9fMAkJCTB4MDEKKyNkZWZpbmUgR1BJT18xCQkJMHgwMgorI2RlZmluZSBHUElPXzIJCQkweDA0CisjZGVmaW5lIEdQSU9fMwkJCTB4MDgKKyNkZWZpbmUgR1BJT180CQkJMHgxMAorI2RlZmluZSBHUElPXzUJCQkweDIwCisjZGVmaW5lIEdQSU9fNgkJCTB4NDAKKyNkZWZpbmUgR1BJT183CQkJMHg4MAorCisjZGVmaW5lIEdQSU9fUklTSU5HX0VER0UJMQorI2RlZmluZSBHUElPX0ZBTExJTkdfRURHRQkyCisjZGVmaW5lIEdQSU9fQk9USF9FREdFUwkJMworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gVUFSVAkJCQkJCQkJCQkJCQkgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFVBUlRfUkJSCQkoVUFSVF9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIFVBUlRfVEhSCQkoVUFSVF9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIFVBUlRfRExMCQkoVUFSVF9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIFVBUlRfSUVSCQkoVUFSVF9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIFVBUlRfRExICQkoVUFSVF9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIFVBUlRfSUlSCQkoVUFSVF9CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIFVBUlRfRkNSCQkoVUFSVF9CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIFVBUlRfTENSCQkoVUFSVF9CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIFVBUlRfTUNSCQkoVUFSVF9CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIFVBUlRfTFNSCQkoVUFSVF9CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIFVBUlRfTVNSCQkoVUFSVF9CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIFVBUlRfU0NSCQkoVUFSVF9CQVNFQUREUiArIDB4MUMpCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ0xLICArIFJFU0VUIGJsb2NrIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNkZWZpbmUgQ0xLQ09SRV9BUk1fQ0xLX0NOVFJMCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIENMS0NPUkVfQVJNX0NMS19DTlRSTDIJCShDTEtDT1JFX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgQ0xLQ09SRV9BSEJfQ0xLX0NOVFJMCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIENMS0NPUkVfQUhCX0NMS19DTlRSTDIJCShDTEtDT1JFX0JBU0VBRERSICsgMHgwQykKKyNkZWZpbmUgQ0xLQ09SRV9QSFlfQ0xLX0NOVFJMCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIENMS0NPUkVfUEhZX0NMS19DTlRSTDIJCShDTEtDT1JFX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgQ0xLQ09SRV9ERFJfUENJRV9DTEtfQ05UUkwJKENMS0NPUkVfQkFTRUFERFIgKyAweDE4KQorI2RlZmluZSBDTEtDT1JFX1RETV9DTEtfQ05UUkwJCShDTEtDT1JFX0JBU0VBRERSICsgMHgxQykKKyNkZWZpbmUgQ0xLQ09SRV9URE1fQ0xLX0NOVFJMMgkJKENMS0NPUkVfQkFTRUFERFIgKyAweDIwKQorI2RlZmluZSBDTEtDT1JFX0ZTWU5DX0NOVFJMCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MjQpCisvKglyZXNlcnZlZCAweDI4LTB4M0MJKi8KKyNkZWZpbmUgQ0xLQ09SRV9DTEtfUFdSX0RXTgkJKENMS0NPUkVfQkFTRUFERFIgKyAweDQwKQorI2RlZmluZSBDTEtDT1JFX1BMTF9TVEFUVVMJCShDTEtDT1JFX0JBU0VBRERSICsgMHg0NCkKKyNkZWZpbmUgQ0xLQ09SRV9STkdfQ05UUkwJCShDTEtDT1JFX0JBU0VBRERSICsgMHg0OCkKKyNkZWZpbmUgQ0xLQ09SRV9STkdfU1RBVFVTCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4NEMpCisKKy8vQml0IGZpZWxkcworLy8gQVJNX0NMS19DTlRSTCByZWdpc3RlcgorI2RlZmluZSBBUk1fQ0xLX0NOVFJMX0FSTV9SRUZfQllQQVNTCUJJVDI5CisjZGVmaW5lIEFSTV9DTEtfQ05UUkxfUExMX0VOU0FUCQlCSVQyOAorI2RlZmluZSBBUk1fQ0xLX0NOVFJMX1BMTF9GQVNURU4JQklUMjcKKyNkZWZpbmUgQVJNX0NMS19DTlRSTF9QTExfVEVTVAkJQklUMjYKKyNkZWZpbmUgQVJNX0NMS19DTlRSTF9QTExfUFdETgkJQklUMjUKKyNkZWZpbmUgQVJNX0NMS19DTlRSTF9QTExfQllQQVNTCUJJVDI0CisKKy8vIEFSTV9DTEtfQ05UUkwyIHJlZ2lzdGVyCisjZGVmaW5lIEFSTV9DTEtfQ05UUkwyX1BMTF9SRVNFVAlCSVQzMQorI2RlZmluZSBBUk1fQ0xLX0NOVFJMMl9BUk0xX0FIQl9CWVBBU1MJQklUMTMKKyNkZWZpbmUgQVJNX0NMS19DTlRSTDJfQVJNMV9ESVZfQllQQVNTCUJJVDEyCisjZGVmaW5lIEFSTV9DTEtfQ05UUkwyX0FSTTBfQUhCX0JZUEFTUwlCSVQ1CisjZGVmaW5lIEFSTV9DTEtfQ05UUkwyX0FSTTBfRElWX0JZUEFTUwlCSVQ0CisKKy8vIEFIQl9DTEtfQ05UUkwgcmVnaXN0ZXIKKyNkZWZpbmUgQUhCX0NMS19DTlRSTF9BSEJfUkVGX0JZUEFTUwlCSVQzMQorI2RlZmluZSBBSEJfQ0xLX0NOVFJMX1NZTkNfRElWX0JZUEFTUwlCSVQzMAorI2RlZmluZSBBSEJfQ0xLX0NOVFJMX1NZTkNfTU9ERQkJQklUMjkKKyNkZWZpbmUgQUhCX0NMS19DTlRSTF9QTExfUFdETgkJQklUMjUKKyNkZWZpbmUgQUhCX0NMS19DTlRSTF9QTExfQllQQVNTCUJJVDI0CisjZGVmaW5lIEFIQl9DTEtfQ05UUkxfUExMX0VOU0FUCQlCSVQyMworI2RlZmluZSBBSEJfQ0xLX0NOVFJMX1BMTF9GQVNURU4JQklUMjIKKworLy8gQUhCX0NMS19DTlRSTDIgcmVnaXN0ZXIKKyNkZWZpbmUgQUhCX0NMS19DTlRSTDJfUExMX1JFU0VUCUJJVDMxCisjZGVmaW5lIEFIQl9DTEtfQ05UUkwyX1BMTF9URVNUCQlCSVQxNAorI2RlZmluZSBBSEJfQ0xLX0NOVFJMMl9BSEJfRElWMV9CWVBBU1MJQklUMTMKKyNkZWZpbmUgQUhCX0NMS19DTlRSTDJfQUhCX0RJVjBfQllQQVNTCUJJVDEyCisKKy8vIFBIWV9DTEtfQ05UUkwgcmVnaXN0ZXIKKyNkZWZpbmUgUEhZX0NMS19DTlRSTF9QSFlfUkVGX0JZUEFTUwlCSVQyOQorI2RlZmluZSBQSFlfQ0xLX0NOVFJMX1BMTF9FTlNBVAkJQklUMjgKKyNkZWZpbmUgUEhZX0NMS19DTlRSTF9QTExfRkFTVEVOCUJJVDI3CisjZGVmaW5lIFBIWV9DTEtfQ05UUkxfUExMX1RFU1QJCUJJVDI2CisjZGVmaW5lIFBIWV9DTEtfQ05UUkxfUExMX1BXRE4JCUJJVDI1CisjZGVmaW5lIFBIWV9DTEtfQ05UUkxfUExMX0JZUEFTUwlCSVQyNAorCisvLyBQSFlfQ0xLX0NOVFJMMiByZWdpc3RlcgorI2RlZmluZSBQSFlfQ0xLX0NOVFJMMl9QTExfUkVTRVQJQklUMzEKKyNkZWZpbmUgUEhZX0NMS19DTlRSTDJfUEhZX0RJVjJfQllQQVNTCUJJVDE0CisjZGVmaW5lIFBIWV9DTEtfQ05UUkwyX1BIWV9ESVYxX0JZUEFTUwlCSVQxMworI2RlZmluZSBQSFlfQ0xLX0NOVFJMMl9QSFlfRElWMF9CWVBBU1MJQklUMTIKKworLy8gRERSX1BDSUVfQ0xLX0NOVFJMCisjZGVmaW5lIEREUl9QQ0lFX0NMS19DTlRSTF9VU0JfRElWX0JZUEFTUwlCSVQzMAorI2RlZmluZSBERFJfUENJRV9DTEtfQ05UUkxfSVBzZWNfRElWMV9CWVBBU1MJQklUMjkKKyNkZWZpbmUgRERSX1BDSUVfQ0xLX0NOVFJMX0lQc2VjX0RJVjBfQllQQVNTCUJJVDI4CisjZGVmaW5lIEREUl9QQ0lFX0NMS19DTlRSTF9QQ0llX0RJVl9CWVBBU1MJQklUMjcKKyNkZWZpbmUgRERSX1BDSUVfQ0xLX0NOVFJMX0REUl9ESVZfQllQQVNTCUJJVDI2CisjZGVmaW5lIEREUl9QQ0lFX0NMS19DTlRSTF9VU0JfTVVYX1NFTAkJQklUMworI2RlZmluZSBERFJfUENJRV9DTEtfQ05UUkxfSVBzZWNNVVhfU0VMCQlCSVQyCisjZGVmaW5lIEREUl9QQ0lFX0NMS19DTlRSTF9QQ0llX01VWF9TRUwJCUJJVDEKKyNkZWZpbmUgRERSX1BDSUVfQ0xLX0NOVFJMX0REUl9NVVhfU0VMCQlCSVQwCisKKy8vIFRETUNMS19DTlRSTAorI2RlZmluZSBURE1DTEtfQ05UUkxfVERNX0NMS19FTgkJQklUMzEKKyNkZWZpbmUgVERNQ0xLX0NOVFJMX1RETV9HRU5fQllQQVNTCUJJVDMwCisKKy8vIFRETUNMS19DTlRSTDIKKyNkZWZpbmUgVERNQ0xLX0NOVFJMMl9URE1fRElWX0JZUEFTUwlCSVQyNAorI2RlZmluZSBURE1DTEtfQ05UUkwyX1RETV9SRUZfRElWX1JTVAlCSVQwCisKKy8vIEZTWU5DX0NOVFJMCisjZGVmaW5lIEZTWU5DX0NOVFJMX0ZTWU5DX0VOCQlCSVQyOQorI2RlZmluZSBGU1lOQ19DTlRSTF9GU1lOX0ZBTExfRURHRQlCSVQyOAorCisvLyBDTEtfUFdSX0RXTgorI2RlZmluZSBDTEtfUFdSX0RXTl9VU0JSRUZDTEtfUEQJQklUMjQKKyNkZWZpbmUgQ0xLX1BXUl9EV05fSVBTRUMyQUhCQ0xLX1BECUJJVDIzCisjZGVmaW5lIENMS19QV1JfRFdOX1RETUNMS19QRAkJQklUMjIKKyNkZWZpbmUgQ0xLX1BXUl9EV05fSVBTRUNBSEJDTEtfUEQJQklUMjEKKyNkZWZpbmUgQ0xLX1BXUl9EV05fSTJDQUhCQ0xLX1BECUJJVDIwCisjZGVmaW5lIENMS19QV1JfRFdOX1VTQkFIQkNMS19QRAlCSVQxOQorI2RlZmluZSBDTEtfUFdSX0RXTl9VQVJUQUhCQ0xLX1BECUJJVDE4CisjZGVmaW5lIENMS19QV1JfRFdOX01ETUFBSEJDTEtfUEQJQklUMTcKKyNkZWZpbmUgQ0xLX1BXUl9EV05fVERNQUFIQkNMS19QRAlCSVQxNgorI2RlZmluZSBDTEtfUFdSX0RXTl9QQ0lFMUFIQkNMS19QRAlCSVQxNQorI2RlZmluZSBDTEtfUFdSX0RXTl9QQ0lFMEFIQkNMS19QRAlCSVQxNAorI2RlZmluZSBDTEtfUFdSX0RXTl9ERFJDVFJMQUhCQ0xLX1BECUJJVDEzCisjZGVmaW5lIENMS19QV1JfRFdOX0dFTTFBSEJDTEtfUEQJQklUMTIKKyNkZWZpbmUgQ0xLX1BXUl9EV05fR0VNMEFIQkNMS19QRAlCSVQxMQorI2RlZmluZSBDTEtfUFdSX0RXTl9BUk0xQUhCQ0xLX1BECUJJVDEwCisjZGVmaW5lIENMS19QV1JfRFdOX0FSTTBBSEJDTEtfUEQJQklUOQorI2RlZmluZSBDTEtfUFdSX0RXTl9JUFNFQ0NPUkVDTEtfUEQJQklUOAorI2RlZmluZSBDTEtfUFdSX0RXTl9SU1ZECQlCSVQ3CisjZGVmaW5lIENMS19QV1JfRFdOX1BDSWVSRUZDTEtfTlBfUEQJQklUNgorI2RlZmluZSBDTEtfUFdSX0RXTl9ERFJDTEtfUEQJCUJJVDUKKyNkZWZpbmUgQ0xLX1BXUl9EV05fUEhZUkVGQ0xLX1BECUJJVDQKKyNkZWZpbmUgQ0xLX1BXUl9EV05fR0VNMVJFRkNMS19QRAlCSVQzCisjZGVmaW5lIENMS19QV1JfRFdOX0dFTTBSRUZDTEtfUEQJQklUMgorI2RlZmluZSBDTEtfUFdSX0RXTl9BUk0xRkNMS19QRAkJQklUMQorI2RlZmluZSBDTEtfUFdSX0RXTl9BUk0wRkNMS19QRAkJQklUMAorCisvLyBQTExfU1RBVFVTIHJlZ2lzdGVyCisjZGVmaW5lIFBMTF9TVEFUVVNfUEhZX1BMTF9TVEFUVVNfQ0xFQVIJQklUNQorI2RlZmluZSBQTExfU1RBVFVTX0FIQl9QTExfU1RBVFVTX0NMRUFSCUJJVDQKKyNkZWZpbmUgUExMX1NUQVRVU19BUk1fUExMX1NUQVRVU19DTEVBUglCSVQzCisjZGVmaW5lIFBMTF9TVEFUVVNfUEhZX1BMTF9TVEFUVVMJQklUMgorI2RlZmluZSBQTExfU1RBVFVTX0FIQl9QTExfU1RBVFVTCUJJVDEKKyNkZWZpbmUgUExMX1NUQVRVU19BUk1fUExMX1NUQVRVUwlCSVQwCisKKy8vIHJlc2V0IGJsb2NrCisjZGVmaW5lIENMS0NPUkVfQkxLX1JFU0VUCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MTAwKQorI2RlZmluZSBDTEtDT1JFX0dMQkxfU1dfUkVTRVQJCShDTEtDT1JFX0JBU0VBRERSICsgMHgxMDQpCisjZGVmaW5lIENMS0NPUkVfR0xCTF9TV19SRVNFVF9TVEFUVVMJKENMS0NPUkVfQkFTRUFERFIgKyAweDEwOCkKKworLy8gQkxLX1JFU0VUIHJlZ2lzdGVyCisjZGVmaW5lIEJMS19SRVNFVF9VU0JfUkVGX1JFU0VUX04JCUJJVDIwCisjZGVmaW5lIEJMS19SRVNFVF9OT19CQUxfRERSX1JFRl9SRVNFVF9OCUJJVDE5CisjZGVmaW5lIEJMS19SRVNFVF9JUFNFQzJfQUhCX1JFU0VUX04JCUJJVDE4CisjZGVmaW5lIEJMS19SRVNFVF9STkdfUkVTRVRfTgkJCUJJVDE3CisjZGVmaW5lIEJMS19SRVNFVF9JUFNFQ19DT1JFX04JCQlCSVQxNgorI2RlZmluZSBCTEtfUkVTRVRfSVBTRUNfQUhCX1JFU0VUX04JCUJJVDE1CisjZGVmaW5lIEJMS19SRVNFVF9VU0JfQUhCX1JFU0VUX04JCUJJVDE0CisjZGVmaW5lIEJMS19SRVNFVF9URE1fUkVGX1JFU0VUX04JCUJJVDEzCisjZGVmaW5lIEJMS19SRVNFVF9URE1fQUhCX1JFU0VUX04JCUJJVDEyCisjZGVmaW5lIEJMS19SRVNFVF9ERFJfUkVGX1JFU0VUX04JCUJJVDExCisjZGVmaW5lIEJMS19SRVNFVF9ERFJfQUhCX1JFU0VUX04JCUJJVDEwCisjZGVmaW5lIEJMS19SRVNFVF9QQ0llMV9SRUZfUkVTRVRfTgkJQklUOQorI2RlZmluZSBCTEtfUkVTRVRfUENJZTBfUkVGX1JFU0VUX04JCUJJVDgKKyNkZWZpbmUgQkxLX1JFU0VUX1BDSWUxX0FIQl9SRVNFVF9OCQlCSVQ3CisjZGVmaW5lIEJMS19SRVNFVF9QQ0llMF9BSEJfUkVTRVRfTgkJQklUNgorI2RlZmluZSBCTEtfUkVTRVRfR0VNQUMxX1JFRl9SRVNFVF9OCQlCSVQ1CisjZGVmaW5lIEJMS19SRVNFVF9HRU1BQzBfUkVGX1JFU0VUX04JCUJJVDQKKyNkZWZpbmUgQkxLX1JFU0VUX0dFTUFDMV9BSEJfUkVTRVRfTgkJQklUMworI2RlZmluZSBCTEtfUkVTRVRfR0VNQUMwX0FIQl9SRVNFVF9OCQlCSVQyCisjZGVmaW5lIEJMS19SRVNFVF9BUk0xX0FIQl9SRVNFVF9OCQlCSVQxCisjZGVmaW5lIEJMS19SRVNFVF9BUk0wX0FIQl9SRVNFVF9OCQlCSVQwCisKKy8vIEdMQkxfU1dfUkVTRVQKKyNkZWZpbmUgR0xCTF9TV19SRVNFVF9OCQlCSVQwCisKKy8vIEdMQkxfU1dfUkVTRVRfU1RBVFVTCisjZGVmaW5lIEdMQkxfU1dfUkVTRVRfU1RBVFVTIAlCSVQwCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCUREUiAgQ09OVFJPTExFUiBibG9jaworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIEREUl9DT05GSUdfQkFTRUFERFIJMHgwRDAwMDAwMAorI2RlZmluZSBERU5BTElfQ1RMXzAwX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBERU5BTElfQ1RMXzAxX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBERU5BTElfQ1RMXzAyX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDEwKQorI2RlZmluZSBERU5BTElfQ1RMXzAzX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE4KQorI2RlZmluZSBERU5BTElfQ1RMXzA0X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDIwKQorI2RlZmluZSBERU5BTElfQ1RMXzA1X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDI4KQorI2RlZmluZSBERU5BTElfQ1RMXzA2X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDMwKQorI2RlZmluZSBERU5BTElfQ1RMXzA3X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDM4KQorI2RlZmluZSBERU5BTElfQ1RMXzA4X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDQwKQorI2RlZmluZSBERU5BTElfQ1RMXzA5X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDQ4KQorI2RlZmluZSBERU5BTElfQ1RMXzEwX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDUwKQorI2RlZmluZSBERU5BTElfQ1RMXzExX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDU4KQorI2RlZmluZSBERU5BTElfQ1RMXzEyX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDYwKQorI2RlZmluZSBERU5BTElfQ1RMXzEzX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDY4KQorI2RlZmluZSBERU5BTElfQ1RMXzE0X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDcwKQorI2RlZmluZSBERU5BTElfQ1RMXzE1X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDc4KQorI2RlZmluZSBERU5BTElfQ1RMXzE2X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDgwKQorI2RlZmluZSBERU5BTElfQ1RMXzE3X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDg4KQorI2RlZmluZSBERU5BTElfQ1RMXzE4X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDkwKQorI2RlZmluZSBERU5BTElfQ1RMXzE5X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDk4KQorI2RlZmluZSBERU5BTElfQ1RMXzIwX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEEwKQorI2RlZmluZSBERU5BTElfQ1RMXzIxX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEE4KQorI2RlZmluZSBERU5BTElfQ1RMXzIyX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEIwKQorI2RlZmluZSBERU5BTElfQ1RMXzIzX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEI4KQorI2RlZmluZSBERU5BTElfQ1RMXzI0X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEMwKQorI2RlZmluZSBERU5BTElfQ1RMXzI1X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEM4KQorI2RlZmluZSBERU5BTElfQ1RMXzI2X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEQwKQorI2RlZmluZSBERU5BTElfQ1RMXzI3X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEQ4KQorI2RlZmluZSBERU5BTElfQ1RMXzI4X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEUwKQorI2RlZmluZSBERU5BTElfQ1RMXzI5X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEU4KQorI2RlZmluZSBERU5BTElfQ1RMXzMwX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEYwKQorI2RlZmluZSBERU5BTElfQ1RMXzMxX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweEY4KQorI2RlZmluZSBERU5BTElfQ1RMXzMyX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDEwMCkKKyNkZWZpbmUgREVOQUxJX0NUTF8zM19EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxMDgpCisjZGVmaW5lIERFTkFMSV9DVExfMzRfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTEwKQorI2RlZmluZSBERU5BTElfQ1RMXzM1X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDExOCkKKyNkZWZpbmUgREVOQUxJX0NUTF8zNl9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxMjApCisjZGVmaW5lIERFTkFMSV9DVExfMzdfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTI4KQorI2RlZmluZSBERU5BTElfQ1RMXzM4X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDEzMCkKKyNkZWZpbmUgREVOQUxJX0NUTF8zOV9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxMzgpCisjZGVmaW5lIERFTkFMSV9DVExfNDBfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTQwKQorI2RlZmluZSBERU5BTElfQ1RMXzQxX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE0OCkKKyNkZWZpbmUgREVOQUxJX0NUTF80Ml9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNTApCisjZGVmaW5lIERFTkFMSV9DVExfNDNfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTU4KQorI2RlZmluZSBERU5BTElfQ1RMXzQ0X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE2MCkKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNjgpCisjZGVmaW5lIERFTkFMSV9DVExfNDZfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTcwKQorI2RlZmluZSBERU5BTElfQ1RMXzQ3X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE3OCkKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxODApCisjZGVmaW5lIERFTkFMSV9DVExfNDlfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTg4KQorI2RlZmluZSBERU5BTElfQ1RMXzUwX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE5MCkKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxOTgpCisjZGVmaW5lIERFTkFMSV9DVExfNTJfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MWEwKQorI2RlZmluZSBERU5BTElfQ1RMXzUzX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDFhOCkKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxYjApCisjZGVmaW5lIERFTkFMSV9DVExfNTVfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MWI4KQorI2RlZmluZSBERU5BTElfQ1RMXzU2X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDFjMCkKKyNkZWZpbmUgREVOQUxJX0NUTF81N19EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxYzgpCisjZGVmaW5lIERFTkFMSV9DVExfNThfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MWQwKQorI2RlZmluZSBERU5BTElfQ1RMXzU5X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDFkOCkKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxZTApCisjZGVmaW5lIERFTkFMSV9DVExfNjFfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MWU4KQorI2RlZmluZSBERU5BTElfQ1RMXzYyX0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDFmMCkKKyNkZWZpbmUgREVOQUxJX0NUTF82M19EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxZjgpCisjZGVmaW5lIERFTkFMSV9DVExfNjRfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MjAwKQorI2RlZmluZSBERU5BTElfQ1RMXzY1X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDIwOCkKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgyMTApCisjZGVmaW5lIERFTkFMSV9DVExfNjdfREFUQQkoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MjE4KQorI2RlZmluZSBERU5BTElfQ1RMXzY4X0RBVEEJKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDIyMCkKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9EQVRBCShERFJfQ09ORklHX0JBU0VBRERSICsgMHgyMjgpCisKKyNkZWZpbmUgREVOQUxJX1dSX0RRU19ERUxBWTAJCSooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDExQikpCisjZGVmaW5lIERFTkFMSV9XUl9EUVNfREVMQVkxCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxMUMpKQorI2RlZmluZSBERU5BTElfV1JfRFFTX0RFTEFZMgkJKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTFEKSkKKyNkZWZpbmUgREVOQUxJX1dSX0RRU19ERUxBWTMJCSooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDExRSkpCisKKyNkZWZpbmUgREVOQUxJX1NXX0xFVkVMSU5HX1NUQVJUCSooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDI3OCkpCisjZGVmaW5lIERFTkFMSV9TV19MRVZFTElOR19NT0RFCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgyNzkpKQorI2RlZmluZSBERU5BTElfU1dfTEVWRUxJTkdfTE9BRAkJKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4Mjc2KSkKKyNkZWZpbmUgREVOQUxJX0RMTF9NQURKMAkJKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTQ4KSkKKyNkZWZpbmUgREVOQUxJX0RMTF9BREoxX0RTMF9MCQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNEEpKQorI2RlZmluZSBERU5BTElfRExMX0FESjFfRFMxX0gJCSooKHZvbGF0aWxlIHU4ICopKEREUl9DT05GSUdfQkFTRUFERFIgKyAweDE0RSkpCisjZGVmaW5lIERFTkFMSV9ETExfQURKMV9EUzJfTAkJKigodm9sYXRpbGUgdTggKikoRERSX0NPTkZJR19CQVNFQUREUiArIDB4MTUyKSkKKyNkZWZpbmUgREVOQUxJX0RMTF9BREoxX0RTM19ICQkqKCh2b2xhdGlsZSB1OCAqKShERFJfQ09ORklHX0JBU0VBRERSICsgMHgxNTYpKQorCisjZW5kaWYKKworLyogZW5kIG9mIGZpbGUgY29tY2VydG9fMTAwMC5oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jb21jZXJ0b18yMDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jb21jZXJ0b18yMDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJiZTlhMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NvbWNlcnRvXzIwMDAuaApAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTUNFUlRPXzIwMDBfSF9fCisjZGVmaW5lIF9fQ09NQ0VSVE9fMjAwMF9IX18KKworLyoKKyAqIEFYSSBCdXMKKyAqLworI2RlZmluZSBDT01DRVJUT19BWElfRERSX0JBU0UJCTB4MDAwMDAwMDAgLyogMkcgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX0FDUF9CQVNFCQkweDgwMDAwMDAwIC8qIDQ4TUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX0lSQU1fQkFTRQkJMHg4MzAwMDAwMCAvKiA0OE1CICovCisjZGVmaW5lIENPTUNFUlRPX0FYSV9JQlJfQkFTRQkJMHg5MDAwMDAwMCAvKiA0TUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRQkweDkwNDAwMDAwIC8qIDEyTUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX1NFTV9DRkdfQkFTRQkweDkxMDAwMDAwIC8qIDE2TUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX1VTQjJwMF9DRkdfQkFTRQkweDkyMDAwMDAwIC8qIDE2TUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX1RaX0NGR19CQVNFCTB4OTMwMDAwMDAgLyogMTZNQiAqLworI2RlZmluZSBDT01DRVJUT19BWElfRFBJMF9DRkdfQkFTRQkweDk0MDAwMDAwIC8qIDE2TUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX0RQSTFfQ0ZHX0JBU0UJMHg5NTAwMDAwMCAvKiAxNk1CICovCisjZGVmaW5lIENPTUNFUlRPX0FYSV9VQVJUX1NQSV9DRkdfQkFTRQkweDk2MDAwMDAwIC8qIDE2TUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX0REUl9DRkdfQkFTRQkweDk3MDAwMDAwIC8qIDE2TUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX1BDSWUwX0NGR19CQVNFCTB4OTgwMDAwMDAgLyogMTZNQiAqLworI2RlZmluZSBDT01DRVJUT19BWElfUENJZTFfQ0ZHX0JBU0UJMHg5OTAwMDAwMCAvKiAxNk1CICovCisjZGVmaW5lIENPTUNFUlRPX0FYSV9FU1BBSF9DRkdfQkFTRQkweDlBMDAwMDAwIC8qIDE2TUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX1NQQUNDX0NGR19CQVNFCTB4OUIwMDAwMDAgLyogMTZNQiAqLworI2RlZmluZSBDT01DRVJUT19BWElfSEZFX0NGR19CQVNFCTB4OUMwMDAwMDAgLyogMTZNQiAqLworI2RlZmluZSBDT01DRVJUT19BWElfU0FUQV9DRkdfQkFTRQkweDlEMDAwMDAwIC8qIDE2TUIgKi8KKyNkZWZpbmUgQ09NQ0VSVE9fQVhJX0RFQ1RfQ0ZHX0JBU0UJMHg5RTAwMDAwMCAvKiAxNk1CICovCisjZGVmaW5lIENPTUNFUlRPX0FYSV9VU0IzcDBfQ0ZHX0JBU0UJMHg5RjAwMDAwMCAvKiAxNk1CICovCisjZGVmaW5lIENPTUNFUlRPX0FYSV9QQ0llMF9TTFZfQkFTRQkweEEwMDAwMDAwIC8qIDI1Nk1CICovCisjZGVmaW5lIENPTUNFUlRPX0FYSV9QQ0llMV9TTFZfQkFTRQkweEIwMDAwMDAwIC8qIDI1Nk1CICovCisjZGVmaW5lIENPTUNFUlRPX0FYSV9FWFBfQkFTRQkJMHhDMDAwMDAwMCAvKiAyNTZNQiAqLworI2RlZmluZSBDT01DRVJUT19BWElfRVhQX0VDQ19CQVNFCTB4Q0ZGRjAwMDAgLyogNjRLQiAqLworCisvKgorICogQVBCIEJ1cworICovCisjZGVmaW5lIENPTUNFUlRPX1RETV9CQVNFCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDAwMDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fVVNCX1BIWV9TRVJERVNfQkFTRQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDAxMDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fVERNQV9CQVNFCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDAyMDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX1JFU0VSVkVEMgkJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgwMzAwMDApCisjZGVmaW5lIENPTUNFUlRPX0FQQl9SRVNFUlZFRDMJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MDQwMDAwKQorI2RlZmluZSBDT01DRVJUT19USU1FUl9CQVNFICAgCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDA1MDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fUENJRV9TQVRBX1VTQl9DVFJMX0JBU0UJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDA2MDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19CQVNFCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDA3MDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX1JFU0VSVkVENQkJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgwODAwMDApCisjZGVmaW5lIENPTUNFUlRPX1VBUlQwX0JBU0UgICAJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MDkwMDAwKQorI2RlZmluZSBDT01DRVJUT19BUEJfUkVTRVJWRUQ2CQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDA5NDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fU1BJX0JBU0UgICAgIAkJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgwOTgwMDApCisjZGVmaW5lIENPTUNFUlRPX0kyQ19CQVNFICAgICAJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MDlDMDAwKQorI2RlZmluZSBDT01DRVJUT19VU0IzXzBfQkFTRSAgCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDBBMDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fQ0xLQ09SRV9CQVNFIAkJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgwQjAwMDApCisjZGVmaW5lIENPTUNFUlRPX0FQQl9SRVNFUlZFRDcJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MEMwMDAwKQorI2RlZmluZSBDT01DRVJUT19BUEJfUkVTRVJWRUQ4CQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDBEMDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fUlRDX0JBU0UgICAgIAkJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgwRTAwMDApCisjZGVmaW5lIENPTUNFUlRPX09UUF9CQVNFICAgICAJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MEYwMDAwKQorI2RlZmluZSBDT01DRVJUT19IRkVXUkFQUEVSX0JBU0UJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgxMDAwMDApCisjZGVmaW5lIENPTUNFUlRPX0FQQl9SRVNFUlZFRDEwCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDExMDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX1JFU0VSVkVEMTEJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MTIwMDAwKQorI2RlZmluZSBDT01DRVJUT19BUEJfUkVTRVJWRUQxMgkJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgxMzAwMDApCisjZGVmaW5lIENPTUNFUlRPX0FQQl9SRVNFUlZFRDEzCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDE0MDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX1JFU0VSVkVEMTQJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MTUwMDAwKQorI2RlZmluZSBDT01DRVJUT19BUEJfUkVTRVJWRUQxNQkJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgxNjAwMDApCisjZGVmaW5lIENPTUNFUlRPX0FQQl9SRVNFUlZFRDE2CQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDE3MDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX1JFU0VSVkVEMTcJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MTgwMDAwKQorI2RlZmluZSBDT01DRVJUT19TRVJERVNfQ0ZHX0JBU0UJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgxOTAwMDApCisjZGVmaW5lIENPTUNFUlRPX0VYUF9DT05GX0JBU0UJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MUEwMDAwKQorI2RlZmluZSBDT01DRVJUT19ERFJfUEhZCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDFCMDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX1JFU0VSVkVEMjAJCQkoQ09NQ0VSVE9fQVhJX0FQQl9DRkdfQkFTRSArIDB4MUMwMDAwKQorI2RlZmluZSBDT01DRVJUT19URE1BMl9CQVNFCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDFEMDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fTURNQV9CQVNFCQkJKENPTUNFUlRPX0FYSV9BUEJfQ0ZHX0JBU0UgKyAweDFFMDAwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fQTlfQ09SRVNJR0hUX0JBU0UJCShDT01DRVJUT19BWElfQVBCX0NGR19CQVNFICsgMHgyMDAwMDApCisKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX1VTQlBIWV9TRVJERVNfU1RBVF9CQVNFCTB4OTA0MTAwMDAKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRQkJMHg5MDQ3MDAwMAorI2RlZmluZSBDT01DRVJUT19BUEJfQ0xLX0JBU0UJCTB4OTA0QjAwMDAKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX1NFUkRFU19CQVNFCTB4OTA1OTAwMDAKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX0VYUF9CQVNFCQkweDkwNUEwMDAwCisjZGVmaW5lIENPTUNFUlRPX0FQQl9ERFJfQkFTRQkJMHg5NzAwMDAwMAorI2RlZmluZSBDT01DRVJUT19BUEJfRERSX1BIWV9CQVNFCTB4OTA1QjAwMDAKKyNkZWZpbmUgQ09NQ0VSVE9fU0FUQV9BSENJX0JBU0UJCTB4OUQwMDAwMDAKKworI2RlZmluZSBDT01DRVJUT19MMkNDX0JBU0UgICAgICAgMHhGRkYxMDAwMAorI2RlZmluZSBDT01DRVJUT19BOV9QRVJJUEhfQkFTRSAgICAgMHhGRkYwMDAwMAorI2RlZmluZSBDT01DRVJUT19BOV9TQ1VfQkFTRQkJKENPTUNFUlRPX0E5X1BFUklQSF9CQVNFICsgMHgwMDAwKQorI2RlZmluZSBDT01DRVJUT19BOV9JQ19JTlRfQkFTRQkJKENPTUNFUlRPX0E5X1BFUklQSF9CQVNFICsgMHgxMDApCisjZGVmaW5lIENPTUNFUlRPX0E5X1RJTUVSX0JBU0UJCShDT01DRVJUT19BOV9QRVJJUEhfQkFTRSArIDB4NjAwKQorI2RlZmluZSBDT01DRVJUT19BOV9JQ19ESVNUX0JBU0UJKENPTUNFUlRPX0E5X1BFUklQSF9CQVNFICsgMHgxMDAwKQorCisjZGVmaW5lIENPTUNFUlRPX0FQQl9TRVJERVMwX0JBU0UJKENPTUNFUlRPX0FQQl9TRVJERVNfQkFTRSkKKyNkZWZpbmUgQ09NQ0VSVE9fQVBCX1NFUkRFUzFfQkFTRQkoQ09NQ0VSVE9fQVBCX1NFUkRFU19CQVNFICsgMHg0MDAwKQorI2RlZmluZSBDT01DRVJUT19BUEJfU0VSREVTMl9CQVNFCShDT01DRVJUT19BUEJfU0VSREVTX0JBU0UgKyAweDgwMDApCisjZGVmaW5lIENPTUNFUlRPX1NFUl9ERVMwX1BIWV9DRkdfQkFTRSAJMHg5MDQxMDAyQworCisjZGVmaW5lIEVYUF9TV1JTVAkoQ09NQ0VSVE9fQVBCX0VYUF9CQVNFICsgMHgwKQorI2RlZmluZSBFWFBfQ1NFTgkoQ09NQ0VSVE9fQVBCX0VYUF9CQVNFICsgMHg0KQorI2RlZmluZSBFWFBfQ1MwX0JBU0UgCShDT01DRVJUT19BUEJfRVhQX0JBU0UgKyAweDgpCisjZGVmaW5lIEVYUF9DUzBfU0VHIAkoQ09NQ0VSVE9fQVBCX0VYUF9CQVNFICsgMHgxYykKKyNkZWZpbmUgRVhQX0NTT19DRkcJKENPTUNFUlRPX0FQQl9FWFBfQkFTRSArIDB4MzApCisKKyNkZWZpbmUgREVDVF9TWVNfQ0ZHMAkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4YjApCisjZGVmaW5lIERFQ1RfU1lTX0NGRzEJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweGI0KQorI2RlZmluZSBERUNUX0NUUkwJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweGI4KQorCisjZGVmaW5lIENPTUNFUlRPX1NFUkRFU19SRUcoIF9udW0sIF9vZnN0KSAoKENPTUNFUlRPX0FQQl9TRVJERVNfQkFTRSArICgweDQwMDAgKiBfbnVtKSkgKyBfb2ZzdCkKKworLy8jZGVmaW5lIFRFTVBfU1RBQ0sgICAgIDB4ODMwMEMwMDAKKworI2RlZmluZSBVQVJUX0JBU0VBRERSCTB4OTY0MDAwMDAKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgR1BJTyBibG9jawkJCQkJCQkJCQkJCSAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fT1VUUFVUX1JFRwkJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHgwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19PRV9SRUcJCQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDA0KQorI2RlZmluZSBDT01DRVJUT19HUElPX0lOVF9DRkdfUkVHCQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDA4KQorI2RlZmluZSBDT01DRVJUT19HUElPX0FSTV9VTkFMSUdORURfTE9HSUNfRU5BQkxFCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHgwQykKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19JTlBVVF9SRUcJCQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDEwKQorI2RlZmluZSBDT01DRVJUT19HUElPX0FQQl9XUwkJCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4MTQpCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fU1lTVEVNX0NPTkZJRwkJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHgxQykKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19NQklTVAkJCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4MjApCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fVERNX01VWAkJCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4MjgpCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fQVJNX0lECQkJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHgzMCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QQURfQ1RSTAkJCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4MzQpCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fQk9PVFNUUkFQX1NUQVRVUwkJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHg0MCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19CT09UU1RSQVBfT1ZFUlJJREUJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHg0NCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19VU0JfUEhZX0JJU1RfU1RBVFVTX1JFRwkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDQ4KQorI2RlZmluZSBDT01DRVJUT19HUElPX0dFTkVSQUxfQ09OVFJPTF9SRUcJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHg0QykKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19ERVZJQ0VfSURfUkVHCQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDUwKQorI2RlZmluZSBDT01DRVJUT19HUElPX0FSTV9NRU1PUllfU0VOU0VfQU1QCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4NTQpCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fUElOX1NFTEVDVF9SRUdfTAkJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHg1OCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QSU5fU0VMRUNUX1JFR19ICQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDVDKQorI2RlZmluZSBDT01DRVJUT19HUElPX01JU0NfUElOX1NFTEVDVF9SRUcJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHg2MCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHMCAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDEwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHMyAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDEwQykKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHNCAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDExMCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHNSAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDExNCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19NRU1fRU1BX0NPTkZJRzAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDFBMCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19NRU1fRU1BX0NPTkZJRzEgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDFBNCkKKworI2RlZmluZSBHUElPXzAJCTB4MDAwMDAwMDEKKyNkZWZpbmUgR1BJT18xCQkweDAwMDAwMDAyCisjZGVmaW5lIEdQSU9fMgkJMHgwMDAwMDAwNAorI2RlZmluZSBHUElPXzMJCTB4MDAwMDAwMDgKKyNkZWZpbmUgR1BJT180CQkweDAwMDAwMDEwCisjZGVmaW5lIEdQSU9fNQkJMHgwMDAwMDAyMAorI2RlZmluZSBHUElPXzYJICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEdQSU9fNwkJMHgwMDAwMDA4MAorI2RlZmluZSBHUElPXzgJCTB4MDAwMDAxMDAKKyNkZWZpbmUgR1BJT185CQkweDAwMDAwMjAwCisjZGVmaW5lIEdQSU9fMTAJCTB4MDAwMDA0MDAKKyNkZWZpbmUgR1BJT18xMQkJMHgwMDAwMDgwMAorI2RlZmluZSBHUElPXzEyCQkweDAwMDAxMDAwCisjZGVmaW5lIEdQSU9fMTMJCTB4MDAwMDIwMDAKKyNkZWZpbmUgR1BJT18xNAkJMHgwMDAwNDAwMAorI2RlZmluZSBHUElPXzE1CQkweDAwMDA4MDAwCisjZGVmaW5lIEdQSU9fMTYJCTB4MDAwMTAwMDAKKyNkZWZpbmUgR1BJT18xNwkJMHgwMDAyMDAwMAorI2RlZmluZSBHUElPXzE4CQkweDAwMDQwMDAwCisjZGVmaW5lIEdQSU9fMTkJCTB4MDAwODAwMDAKKyNkZWZpbmUgR1BJT18yMAkJMHgwMDEwMDAwMAorI2RlZmluZSBHUElPXzIxCQkweDAwMjAwMDAwCisjZGVmaW5lIEdQSU9fMjIJCTB4MDA0MDAwMDAKKyNkZWZpbmUgR1BJT18yMwkJMHgwMDgwMDAwMAorI2RlZmluZSBHUElPXzI0CQkweDAxMDAwMDAwCisjZGVmaW5lIEdQSU9fMjUJCTB4MDIwMDAwMDAKKyNkZWZpbmUgR1BJT18yNgkJMHgwNDAwMDAwMAorI2RlZmluZSBHUElPXzI3CQkweDA4MDAwMDAwCisjZGVmaW5lIEdQSU9fMjgJCTB4MTAwMDAwMDAKKyNkZWZpbmUgR1BJT18yOQkJMHgyMDAwMDAwMAorI2RlZmluZSBHUElPXzMwCQkweDQwMDAwMDAwCisjZGVmaW5lIEdQSU9fMzEJCTB4ODAwMDAwMDAKKworI2VuZGlmIC8qIF9fQ09NQ0VSVE9fMjAwMF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NvbWNlcnRvXzUxNS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vY29tY2VydG9fNTE1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU5MjVhZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NvbWNlcnRvXzUxNS5oCkBAIC0wLDAgKzEsMjQ3IEBACisjaWZuZGVmIF9fQ09NQ0VSVE9fNTE1X0gKKyNkZWZpbmUgX19DT01DRVJUT181MTVfSAorCisKKy8qIE1lbW9yeSBtYXAgKi8KKy8qIEludGVybmFsIE1lbW9yeSAqLworI2RlZmluZSBFUkFNX0JBU0VBRERSCQkJMHgwODAwMDAwMAorI2RlZmluZSBJUkFNX0JBU0VBRERSCQkJMHgwOTAwMDAwMAorI2RlZmluZSBBUkFNX0JBU0VBRERSCQkJMHgwQTAwMDAwMAorCisvKiBFeHBhbnNpb24gYnVzICovCisjZGVmaW5lIEFQQl9CQVNFQUREUgkJCTB4MTAwMDAwMDAKKworLyogQ2hpcCBzZWxlY3QgKi8KKyNkZWZpbmUgRVhQX0NTQk9PVF9CQVNFQUREUgkJMHgxMTAwMDAwMAorI2RlZmluZSBFWFBfQ1NQMF9CQVNFQUREUgkJMHgxMTQwMDAwMAorI2RlZmluZSBFWFBfQ1NQMV9CQVNFQUREUgkJMHgxMTgwMDAwMAorI2RlZmluZSBFWFBfQ1NQMl9CQVNFQUREUgkJMHgxMUMwMDAwMAorCisjZGVmaW5lIEVSQU1fU0laRQkJCTB4MDAwNjAwMDAKKyNkZWZpbmUgSVJBTV9TSVpFCQkJMHgwMDAyMjAwMAorI2RlZmluZSBBUkFNX1NJWkUJCQkweDAwMDIwMDAwCisKKyNkZWZpbmUgQVBCX1NJWkUJCQkweDAxMDAwMDAwCQkJLyogMTZNIGFkZHJlc3MgcmFuZ2UgKi8KKworI2RlZmluZSBFWFBfQ1NCT09UX1NJWkUJCQkweDAwNDAwMDAwCisjZGVmaW5lIEVYUF9DU1AwX1NJWkUJCQkweDAwNDAwMDAwCisjZGVmaW5lIEVYUF9DU1AxX1NJWkUJCQkweDAwNDAwMDAwCisjZGVmaW5lIEVYUF9DU1AyX1NJWkUJCQkweDAwNDAwMDAwCisKKy8qIEV4cGFuc2lvbiBidXMgcGVyaXBoZXJhbHMgKi8KKyNkZWZpbmUgVERNX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDAwMDAwKQorI2RlZmluZSBQSElfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwMTAwMDApCisjZGVmaW5lIFRETUFfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwMjAwMDApCisjZGVmaW5lIFNNQ19CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDAzMDAwMCkKKyNkZWZpbmUgQVNBX0NNX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDQwMDAwKQorI2RlZmluZSBBU0FfQVJBTV9CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MDQ4MDAwKQorI2RlZmluZSBUSU1FUl9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDA1MDAwMCkKKyNkZWZpbmUgQVNEX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDYwMDAwKQorI2RlZmluZSBHUElPX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDcwMDAwKQorI2RlZmluZSBTREMwX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDgwMDAwKQorI2RlZmluZSBVQVJUMF9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDA5MDAwMCkKKyNkZWZpbmUgVUFSVDFfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwOTQwMDApCisjZGVmaW5lIFNQSV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDA5ODAwMCkKKyNkZWZpbmUgSTJDX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDlDMDAwKQorI2RlZmluZSBJTlRDX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MEEwMDAwKQorI2RlZmluZSBDTEtDT1JFX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwQjAwMDApCisjZGVmaW5lIFBVSV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDBDMDAwMCkKKyNkZWZpbmUgRU1BQzBfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwRDAwMDApCisjZGVmaW5lIElETUFfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwRTAwMDApCisjZGVmaW5lIEVSQU1fQ0ZHX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwRjAwMDApCisjZGVmaW5lIEFTQV9FUkFNX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgxMDAwMDApCisjZGVmaW5lIFNQVTBfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgxMTAwMDApCisjZGVmaW5lIFNEQzFfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgxQjAwMDApCisKKworLyogUENJIEhJIChQSEkpIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBISV9GSUZPX0NUUkwJCQkoUEhJX0JBU0VBRERSICsgMHgwMDAwKQorI2RlZmluZSBQSElfRklGT19JTlRfU1RBVFVTCQkoUEhJX0JBU0VBRERSICsgMHgwMDA0KQorI2RlZmluZSBQSElfRklGT19JTlRfQUNLCQkoUEhJX0JBU0VBRERSICsgMHgwMDA0KQorI2RlZmluZQlQSElfVFhfRklGT19TSVpFCQkoUEhJX0JBU0VBRERSICsgMHgwMDE0KQorI2RlZmluZQlQSElfVFhfRklGT19ISUdIX1RIUkVTSE9MRAkoUEhJX0JBU0VBRERSICsgMHgwMDE4KQorI2RlZmluZQlQSElfVFhfRklGT19MT1dfVEhSRVNIT0xECShQSElfQkFTRUFERFIgKyAweDAwMUMpCisjZGVmaW5lCVBISV9SWF9GSUZPX1NJWkUJCShQSElfQkFTRUFERFIgKyAweDAwMjQpCisjZGVmaW5lCVBISV9SWF9GSUZPX0hJR0hfVEhSRVNIT0xECShQSElfQkFTRUFERFIgKyAweDAwMjgpCisjZGVmaW5lCVBISV9SWF9GSUZPX0xPV19USFJFU0hPTEQJKFBISV9CQVNFQUREUiArIDB4MDAyQykKKworI2RlZmluZSBSWEVJRQkJCQkweDAxMDAKKyNkZWZpbmUgVFhNM0lFCQkJCTB4MDQwMAorI2RlZmluZSBSWE0zSUUJCQkJMHgwODAwCisKKyNkZWZpbmUgVFhNM0lBSwkJCQkweDA0CisjZGVmaW5lIFJYRUlBSwkJCQkweDEwCisjZGVmaW5lIFJYTTNJQUsJCQkJMHg0MAorI2RlZmluZSBGTFVTSF9SWAkJCTB4ODAKKworLyogVFggTWFpbGJveCAqLworI2RlZmluZSBQSElfVFhfTUFJTDAJCQkoUEhJX0JBU0VBRERSICsgMHgwMDMwKQorI2RlZmluZSBQSElfVFhfTUFJTDEJCQkoUEhJX0JBU0VBRERSICsgMHgwMDM0KQorI2RlZmluZSBQSElfVFhfTUFJTDIJCQkoUEhJX0JBU0VBRERSICsgMHgwMDM4KQorI2RlZmluZSBQSElfVFhfTUFJTDMJCQkoUEhJX0JBU0VBRERSICsgMHgwMDNDKQorCisvKiBSWCBNYWlsYm94ICovCisjZGVmaW5lIFBISV9SWF9NQUlMMAkJCShQSElfQkFTRUFERFIgKyAweDAwNDApCisjZGVmaW5lIFBISV9SWF9NQUlMMQkJCShQSElfQkFTRUFERFIgKyAweDAwNDQpCisjZGVmaW5lIFBISV9SWF9NQUlMMgkJCShQSElfQkFTRUFERFIgKyAweDAwNDgpCisjZGVmaW5lIFBISV9SWF9NQUlMMwkJCShQSElfQkFTRUFERFIgKyAweDAwNEMpCisKKyNkZWZpbmUgSElfUENJX0NOVEwJCQkoUEhJX0JBU0VBRERSICsgMHgwMDUwKQorI2RlZmluZSBISV9QQ0lfU1RBVFVTCQkJKFBISV9CQVNFQUREUiArIDB4MDA1NCkKKyNkZWZpbmUgSElfUENJX0lBS19SRUcJCQkoUEhJX0JBU0VBRERSICsgMHgwMDU0KQorI2RlZmluZSBISV9QQ0lfU1RBUlRfQUREUgkJKFBISV9CQVNFQUREUiArIDB4MDA2MCkKKyNkZWZpbmUJSElfUENJX0JVUlNUX1NJWkUJCShQSElfQkFTRUFERFIgKyAweDAwNjQpCisjZGVmaW5lIEhJX1BDSV9YRkVSX0xFTgkJCShQSElfQkFTRUFERFIgKyAweDAwNjgpCisKKy8qIEZJRk8gKi8KKyNkZWZpbmUgUEhJX1RYX0ZJRk9fREFUQV9CWVRFCQkoUEhJX0JBU0VBRERSICsgMHg0MDAwKQorI2RlZmluZSBQSElfUlhfRklGT19EQVRBX0JZVEUJCShQSElfQkFTRUFERFIgKyAweDQwMDApCisjZGVmaW5lIFBISV9UWF9GSUZPX0RBVEFfSFdPUkQJCShQSElfQkFTRUFERFIgKyAweDgwMDApCisjZGVmaW5lIFBISV9SWF9GSUZPX0RBVEFfSFdPUkQJCShQSElfQkFTRUFERFIgKyAweDgwMDApCisjZGVmaW5lIFBISV9UWF9GSUZPX0RBVEFfV09SRAkJKFBISV9CQVNFQUREUiArIDB4QzAwMCkKKyNkZWZpbmUgUEhJX1JYX0ZJRk9fREFUQV9XT1JECQkoUEhJX0JBU0VBRERSICsgMHhDMDAwKQorCisKKy8qIEFIQiBhcmJpdGVyICovCisjZGVmaW5lIEFTQV9QUklPUklUWV9MRVZFTAkJKEFTQV9DTV9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIEFTQV9URVJNSU5BTF9DT1VOVAkJKEFTQV9DTV9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIEFTQV9URVJNSU5BTF9DT1VOVF9DRkcJCShBU0FfQ01fQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBBU0FfVENfUkVRVERNRU4JCQkoMTw8MTApCisjZGVmaW5lIEFTQV9UQ19SRVFBUk0wRU4JCSgxPDwxMSkKKyNkZWZpbmUgQVNBX1RDX1JFUUFSTTFFTgkJKDE8PDEyKQorI2RlZmluZSBBU0FfVENfUkVRSURNQUVOCQkoMTw8MTMpCisjZGVmaW5lIEFTQV9UQ19SRVFTTUNFTgkJCSgxPDwxNCkKKyNkZWZpbmUgQVNBX1RDX1JFUVRJQ0VOCQkJKDE8PDE1KQorCisKKy8qIFRpbWVyIEJsb2NrICovCisjZGVmaW5lIFRJTUVSMF9DT1VOVAkJCShUSU1FUl9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIFRJTUVSMF9DVVJSX0NPVU5UCQkoVElNRVJfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBUSU1FUjFfQ09VTlQJCQkoVElNRVJfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBUSU1FUjFfQ1VSUl9DT1VOVAkJKFRJTUVSX0JBU0VBRERSICsgMHgwQykKKworI2RlZmluZSBUSU1FUl9NQVNLCQkJKFRJTUVSX0JBU0VBRERSICsgMHg0MCkKKyNkZWZpbmUgVElNRVJfU1RBVFVTCQkJKFRJTUVSX0JBU0VBRERSICsgMHg1MCkKKyNkZWZpbmUgVElNRVJfQUNLCQkJKFRJTUVSX0JBU0VBRERSICsgMHg1MCkKKworCisvKiBBSEIgZGVjb2RlciBibG9jayAqLworI2RlZmluZSBBU0RfTUJBX0VYUF9DU1NEMAkJKEFTRF9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIEFTRF9NQkFfRVhQX0NTU0QxCQkoQVNEX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgQVNEX0NTRQkJCQkoQVNEX0JBU0VBRERSICsgMHgwQykKKyNkZWZpbmUgQVNEX0VYQV9FWFBfQ1NTRDAJCShBU0RfQkFTRUFERFIgKyAweDEwKQorI2RlZmluZSBBU0RfRVhBX0VYUF9DU1NEMQkJKEFTRF9CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIEFTRF9NQkFfU0RSX0NTU0QwCQkoQVNEX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgQVNEX01CQV9TRFJfQ1NTRDEJCShBU0RfQkFTRUFERFIgKyAweDFDKQorI2RlZmluZSBBU0RfRVhBX1NEUl9DU1NEMAkJKEFTRF9CQVNFQUREUiArIDB4MjApCisjZGVmaW5lIEFTRF9FWEFfU0RSX0NTU0QxCQkoQVNEX0JBU0VBRERSICsgMHgyNCkKKyNkZWZpbmUgQVNEX01FTV9ESVZJREVSCQkJKEFTRF9CQVNFQUREUiArIDB4MjgpCisKKworLyogR1BJTyBibG9jayAqLworI2RlZmluZSBHUElPX09VVFBVVAkJCShHUElPX0JBU0VBRERSICsgMHgwMCkJCS8qIEdQSU8gb3V0cHV0IHJlZ2lzdGVyICovCisjZGVmaW5lIEdQSU9fT1VUUFVUX0VOQUJMRQkJKEdQSU9fQkFTRUFERFIgKyAweDA0KQkJLyogR1BJTyBvdXRwdXQgZW5hYmxlIHJlZ2lzdGVyICovCisjZGVmaW5lIEdQSU9fSElfSU5UX0VOQUJMRQkJKEdQSU9fQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBHUElPX0xPX0lOVF9FTkFCTEUJCShHUElPX0JBU0VBRERSICsgMHgwQykKKyNkZWZpbmUgR1BJT19JTlBVVAkJCShHUElPX0JBU0VBRERSICsgMHgxMCkJCS8qIEdQSU8gaW5wdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19BUEJfQUNDRVNTX1dTCQkoR1BJT19CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIEdQSU9fTVVYX0NPTkYJCQkoR1BJT19CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIEdQSU9fU1lTQ09ORgkJCShHUElPX0JBU0VBRERSICsgMHgxQykKKyNkZWZpbmUgR1BJT19MT0NLCQkJKEdQSU9fQkFTRUFERFIgKyAweDM4KQorI2RlZmluZSBHUElPX0lPQ1RSTAkJCShHUElPX0JBU0VBRERSICsgMHg0NCkKKworI2RlZmluZSBHUElPXzAJCQkJMHgwMQorI2RlZmluZSBHUElPXzEJCQkJMHgwMgorI2RlZmluZSBHUElPXzIJCQkJMHgwNAorI2RlZmluZSBHUElPXzMJCQkJMHgwOAorI2RlZmluZSBHUElPXzQJCQkJMHgxMAorI2RlZmluZSBHUElPXzUJCQkJMHgyMAorI2RlZmluZSBHUElPXzYJCQkJMHg0MAorI2RlZmluZSBHUElPXzcJCQkJMHg4MAorCisjZGVmaW5lIEdQSU9fUklTSU5HX0VER0UJCTEKKyNkZWZpbmUgR1BJT19GQUxMSU5HX0VER0UJCTIKKyNkZWZpbmUgR1BJT19CT1RIX0VER0VTCQkJMworCisKKy8qIFNEUkFNICYgU1JBTSBjb250cm9sbGVyIGJsb2NrICovCisjZGVmaW5lIFNEQzBfQ1NTRDBfQ0ZHCQkJKFNEQzBfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBTREMwX0NTU0QxX0NGRwkJCShTREMwX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgU0RDMF9DU0JPT1RfQ0ZHCQkJKFNEQzBfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBTREMwX0NTUDBfQ0ZHCQkJKFNEQzBfQkFTRUFERFIgKyAweDBDKQorI2RlZmluZSBTREMwX1NEUkFNX0NGRzEJCQkoU0RDMF9CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIFNEQzBfU0RSQU1fQ0ZHMgkJCShTREMwX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgU0RDMF9TRFJBTV9SRUZSRVNICQkoU0RDMF9CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIFNEQzBfU0RSQU1fUE9XRVJPTgkJKFNEQzBfQkFTRUFERFIgKyAweDFDKQorI2RlZmluZSBTREMwX0NTUDFfQ0ZHCQkJKFNEQzBfQkFTRUFERFIgKyAweDIwKQorI2RlZmluZSBTREMwX0NTUDFfQ0ZHCQkJKFNEQzBfQkFTRUFERFIgKyAweDIwKQorI2RlZmluZSBTREMwX0NTUDJfQ0ZHCQkJKFNEQzBfQkFTRUFERFIgKyAweDI0KQorI2RlZmluZSBTREMwX1ZFUlNJT04JCQkoU0RDMF9CQVNFQUREUiArIDB4MjgpCisjZGVmaW5lIFNEQzBfREVWX0lECQkJKFNEQzBfQkFTRUFERFIgKyAweDJDKQorCisvKiBVQVJUICovCisjZGVmaW5lIFVBUlRfUkJSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgwMCkJCS8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyIChSL08pICovCisjZGVmaW5lIFVBUlRfVEhSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgwMCkJCS8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKFcvTykgKi8KKyNkZWZpbmUgVUFSVF9JRVIJCQkoVUFSVDBfQkFTRUFERFIgKyAweDA0KQkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX01DUgkJCShVQVJUMF9CQVNFQUREUiArIDB4MDgpCQkvKiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9MQ1IJCQkoVUFSVDBfQkFTRUFERFIgKyAweDBDKQkJLyogTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfU1NSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgxMCkJCS8qIFNlcmlhbCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9GQ1IJCQkoVUFSVDBfQkFTRUFERFIgKyAweDE0KQkJLyogRm9ybSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfUlhECQkJKFVBUlQwX0JBU0VBRERSICsgMHgxOCkJCS8qIFRyYW5zbWl0ZXIgRGl2aWRlciBMYXRjaCAoUi9PKSAqLworI2RlZmluZSBVQVJUX1RYRAkJCShVQVJUMF9CQVNFQUREUiArIDB4MUMpCQkvKiBSZWNlaXZlciBEaXZpZGVyIExhdGNoIChXL08pICovCisjZGVmaW5lIFVBUlRfSFIJCQkJKFVBUlQwX0JBU0VBRERSICsgMHgyMCkJCS8qIEh1bnQgQ2hhcmFjdGVyICovCisKKworLyogQ2xvY2sgYmxvY2sgKi8KKyNkZWZpbmUgQ0xLQ09SRV9BUk1fUExMIAkJKENMS0NPUkVfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBDTEtDT1JFX1NQVV9QTEwJCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIENMS0NPUkVfQU1CQV9QTEwJCShDTEtDT1JFX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgUExMX01VWFNFTAkJCTB4MDQwMDAwMDAJCQkvKiBQTEwgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAqLworI2RlZmluZSBQTExfUE9XRVIJCQkweDAyMDAwMDAwCQkJLyogUExMIHBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgUExMX0JZUEFTUwkJCTB4MDEwMDAwMDAJCQkvKiBQTEwgYnlwYXNzICovCisKKworLyogRU1BQyAqLworI2luY2x1ZGUgImVtYWMuaCIKKworCisvKiBJRE1BICovCisjaW5jbHVkZSAiaWRtYS5oIgorCisKKy8qIFNQSSAqLworI2luY2x1ZGUgInNwaS5oIgorCisKKy8qIEVyYW0gKi8KKyNkZWZpbmUgRVJBTV9CSVNUX0NUUkwJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBFUkFNX1NQQVJFX0ZBSUwJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBFUkFNX0JJU1RfQUREUgkJCShFUkFNX0NGR19CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIEVSQU1fQklTVF9CQ0sJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDBDKQorI2RlZmluZSBFUkFNX01ST1dfRkFJTAkJCShFUkFNX0NGR19CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIEVSQU1fTUNPTF9GQUlMCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgRVJBTV9TSElGVF9DT0xfRkFJTAkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgRVJBTV9SRVROX1RJTUUJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDFDKQorI2RlZmluZSBFUkFNX1NQQ09MX0FMTE9DCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDIwKQorI2RlZmluZSBFUkFNX1NQUk9XX0FMTE9DCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDMwKQorI2RlZmluZSBFUkFNX0ZVU0VfU1BDT0wJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDQwKQorI2RlZmluZSBFUkFNX0ZVU0VfU1BST1cJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDUwKQorI2RlZmluZSBFUkFNX0lSQU1fRkFJTAkJCShFUkFNX0NGR19CQVNFQUREUiArIDB4NjApCisKKworLyogRXJhbSBidXMgYXJiaXRlciAqLworI2RlZmluZSBBU0FfRVJBTV9QUklPUklUWQkJKEFTQV9FUkFNX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgQVNBX0VSQU1fVEVSTUlOQUxfQ09VTlQJCShBU0FfRVJBTV9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIEFTQV9FUkFNX1RFUk1JTkFMX0NPVU5UX0NGRwkoQVNBX0VSQU1fQkFTRUFERFIgKyAweDA4KQorCisKKy8qIFNlY29uZGFyeSBTRFJBTSBjb250cm9sbGVyIGJsb2NrICovCisjZGVmaW5lIFNEQzFfQ1NTRDBfQ0ZHCQkJKFNEQzFfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBTREMxX0NTU0QxX0NGRwkJCShTREMxX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgU0RDMV9TRFJBTV9DRkcxCQkoU0RDMV9CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIFNEQzFfU0RSQU1fQ0ZHMgkJKFNEQzFfQkFTRUFERFIgKyAweDE0KQorI2RlZmluZSBTREMxX1NEUkFNX1JFRlJFU0gJCShTREMxX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgU0RDMV9TRFJBTV9QT1dFUk9OCQkoU0RDMV9CQVNFQUREUiArIDB4MUMpCisKKworI2VuZGlmIC8qIF9fQ09NQ0VSVE9fNTE1X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NvbWNlcnRvXzUzMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vY29tY2VydG9fNTMwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzNWQ0OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NvbWNlcnRvXzUzMC5oCkBAIC0wLDAgKzEsMjExIEBACisjaWZuZGVmIF9fQ09NQ0VSVE9fNTMwX0gKKyNkZWZpbmUgX19DT01DRVJUT181MzBfSAorCisvKiBNZW1vcnkgbWFwICovCisvKiBJbnRlcm5hbCBNZW1vcnkgKi8KKyNkZWZpbmUgRVJBTV9CQVNFQUREUgkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgSVJBTV9CQVNFQUREUgkJCTB4MDkwMDAwMDAKKworLyogRXhwYW5zaW9uIGJ1cyAqLworI2RlZmluZSBBUEJfQkFTRUFERFIJCQkweDEwMDAwMDAwCisKKy8qIENoaXAgc2VsZWN0ICovCisjZGVmaW5lIEVYUF9DU0JPT1RfQkFTRUFERFIJCTB4MTEwMDAwMDAKKyNkZWZpbmUgRVhQX0NTUDBfQkFTRUFERFIJCTB4MTE0MDAwMDAKKworI2RlZmluZSBFUkFNX1NJWkUJCQkweDAwMTAwMDAwCisjZGVmaW5lIElSQU1fU0laRQkJCTB4MDAwMDIwMDAKKyNkZWZpbmUgQVBCX1NJWkUJCQkweDAxMDAwMDAwIC8qIDE2TSBhZGRyZXNzIHJhbmdlICovCisjZGVmaW5lIEVYUF9DU0JPT1RfU0laRQkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgRVhQX0NTUDBfU0laRQkJCTB4MDA0MDAwMDAKKworLyogRXhwYW5zaW9uIGJ1cyBwZXJpcGhlcmFscyAqLworI2RlZmluZSBURE1fQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwMDAwMDApCisjZGVmaW5lIFBISV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDAxMDAwMCkKKyNkZWZpbmUgVERNQV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDAyMDAwMCkKKyNkZWZpbmUgU01DX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDMwMDAwKQorI2RlZmluZSBBU0FfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwNDAwMDApCisjZGVmaW5lIFRJTUVSX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDUwMDAwKQorI2RlZmluZSBBU0RfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwNjAwMDApCisjZGVmaW5lIEdQSU9fQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwNzAwMDApCisjZGVmaW5lIFNEQzBfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwODAwMDApCisjZGVmaW5lIFVBUlQwX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDkwMDAwKQorI2RlZmluZSBJTlRDX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MEEwMDAwKQorI2RlZmluZSBDTEtDT1JFX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwQjAwMDApCisjZGVmaW5lIFBVSV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDBDMDAwMCkKKyNkZWZpbmUgRU1BQzBfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwRDAwMDApCisjZGVmaW5lIElETUFfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwRTAwMDApCisjZGVmaW5lIEVSQU1fQ0ZHX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwRjAwMDApCisjZGVmaW5lIEFTQV9FUkFNX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgxMDAwMDApCisjZGVmaW5lIFNQVTBfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgxMTAwMDApCisjZGVmaW5lIFNQVTFfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgxMjAwMDApCisjZGVmaW5lIFNQVTJfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgxMzAwMDApCisjZGVmaW5lIFNQVTNfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgxNDAwMDApCisKKworLyogUENJIEhJIChQSEkpIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBISV9GSUZPX0NUUkwJCQkoUEhJX0JBU0VBRERSICsgMHgwMDAwKQorI2RlZmluZSBQSElfRklGT19JTlRfU1RBVFVTCQkoUEhJX0JBU0VBRERSICsgMHgwMDA0KQorI2RlZmluZSBQSElfRklGT19JTlRfQUNLCQkoUEhJX0JBU0VBRERSICsgMHgwMDA0KQorI2RlZmluZQlQSElfVFhfRklGT19TSVpFCQkoUEhJX0JBU0VBRERSICsgMHgwMDE0KQorI2RlZmluZQlQSElfVFhfRklGT19ISUdIX1RIUkVTSE9MRAkoUEhJX0JBU0VBRERSICsgMHgwMDE4KQorI2RlZmluZQlQSElfVFhfRklGT19MT1dfVEhSRVNIT0xECShQSElfQkFTRUFERFIgKyAweDAwMUMpCisjZGVmaW5lCVBISV9SWF9GSUZPX1NJWkUJCShQSElfQkFTRUFERFIgKyAweDAwMjQpCisjZGVmaW5lCVBISV9SWF9GSUZPX0hJR0hfVEhSRVNIT0xECShQSElfQkFTRUFERFIgKyAweDAwMjgpCisjZGVmaW5lCVBISV9SWF9GSUZPX0xPV19USFJFU0hPTEQJKFBISV9CQVNFQUREUiArIDB4MDAyQykKKworI2RlZmluZSBSWEVJRQkJMHgwMTAwCisjZGVmaW5lIFRYTTNJRQkJMHgwNDAwCisjZGVmaW5lIFJYTTNJRQkJMHgwODAwCisKKyNkZWZpbmUgVFhNM0lBSwkJMHgwNAorI2RlZmluZSBSWEVJQUsJCTB4MTAKKyNkZWZpbmUgUlhNM0lBSwkJMHg0MAorI2RlZmluZSBGTFVTSF9SWAkweDgwCisKKy8qIFRYIE1haWxib3ggKi8KKyNkZWZpbmUgUEhJX1RYX01BSUwwCQkJKFBISV9CQVNFQUREUiArIDB4MDAzMCkKKyNkZWZpbmUgUEhJX1RYX01BSUwxCQkJKFBISV9CQVNFQUREUiArIDB4MDAzNCkKKyNkZWZpbmUgUEhJX1RYX01BSUwyCQkJKFBISV9CQVNFQUREUiArIDB4MDAzOCkKKyNkZWZpbmUgUEhJX1RYX01BSUwzCQkJKFBISV9CQVNFQUREUiArIDB4MDAzQykKKworLyogUlggTWFpbGJveCAqLworI2RlZmluZSBQSElfUlhfTUFJTDAJCQkoUEhJX0JBU0VBRERSICsgMHgwMDQwKQorI2RlZmluZSBQSElfUlhfTUFJTDEJCQkoUEhJX0JBU0VBRERSICsgMHgwMDQ0KQorI2RlZmluZSBQSElfUlhfTUFJTDIJCQkoUEhJX0JBU0VBRERSICsgMHgwMDQ4KQorI2RlZmluZSBQSElfUlhfTUFJTDMJCQkoUEhJX0JBU0VBRERSICsgMHgwMDRDKQorCisjZGVmaW5lIEhJX1BDSV9DTlRMCQkJKFBISV9CQVNFQUREUiArIDB4MDA1MCkKKyNkZWZpbmUgSElfUENJX1NUQVRVUwkJCShQSElfQkFTRUFERFIgKyAweDAwNTQpCisjZGVmaW5lIEhJX1BDSV9JQUtfUkVHCQkJKFBISV9CQVNFQUREUiArIDB4MDA1NCkKKyNkZWZpbmUgSElfUENJX1NUQVJUX0FERFIJCShQSElfQkFTRUFERFIgKyAweDAwNjApCisjZGVmaW5lCUhJX1BDSV9CVVJTVF9TSVpFCQkoUEhJX0JBU0VBRERSICsgMHgwMDY0KQorI2RlZmluZSBISV9QQ0lfWEZFUl9MRU4JCQkoUEhJX0JBU0VBRERSICsgMHgwMDY4KQorCisvKiBGSUZPICovCisjZGVmaW5lIFBISV9UWF9GSUZPX0RBVEFfQllURQkJKFBISV9CQVNFQUREUiArIDB4NDAwMCkKKyNkZWZpbmUgUEhJX1JYX0ZJRk9fREFUQV9CWVRFCQkoUEhJX0JBU0VBRERSICsgMHg0MDAwKQorI2RlZmluZSBQSElfVFhfRklGT19EQVRBX0hXT1JECQkoUEhJX0JBU0VBRERSICsgMHg4MDAwKQorI2RlZmluZSBQSElfUlhfRklGT19EQVRBX0hXT1JECQkoUEhJX0JBU0VBRERSICsgMHg4MDAwKQorI2RlZmluZSBQSElfVFhfRklGT19EQVRBX1dPUkQJCShQSElfQkFTRUFERFIgKyAweEMwMDApCisjZGVmaW5lIFBISV9SWF9GSUZPX0RBVEFfV09SRAkJKFBISV9CQVNFQUREUiArIDB4QzAwMCkKKworCisvKiBBSEIgYXJiaXRlciAqLworI2RlZmluZSBBU0FfUFJJT1JJVFlfTEVWRUwJCShBU0FfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBBU0FfVEVSTUlOQUxfQ09VTlQJCShBU0FfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBBU0FfVEVSTUlOQUxfQ09VTlRfQ0ZHCQkoQVNBX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgQVNBX1RDX1JFUVRETUVOCQkJKDE8PDEwKQorI2RlZmluZSBBU0FfVENfUkVRQVJNMEVOCQkoMTw8MTEpCisjZGVmaW5lIEFTQV9UQ19SRVFBUk0xRU4JCSgxPDwxMikKKyNkZWZpbmUgQVNBX1RDX1JFUUlETUFFTgkJKDE8PDEzKQorI2RlZmluZSBBU0FfVENfUkVRU01DRU4JCQkoMTw8MTQpCisjZGVmaW5lIEFTQV9UQ19SRVFUSUNFTgkJCSgxPDwxNSkKKworCisvKiBUaW1lciBCbG9jayAqLworI2RlZmluZSBUSU1FUjBfQ09VTlQJCQkoVElNRVJfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBUSU1FUjBfQ1VSUl9DT1VOVAkJKFRJTUVSX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgVElNRVIxX0NPVU5UCQkJKFRJTUVSX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgVElNRVIxX0NVUlJfQ09VTlQJCShUSU1FUl9CQVNFQUREUiArIDB4MEMpCisKKyNkZWZpbmUgVElNRVJfTUFTSwkJCShUSU1FUl9CQVNFQUREUiArIDB4NDApCisjZGVmaW5lIFRJTUVSX1NUQVRVUwkJCShUSU1FUl9CQVNFQUREUiArIDB4NTApCisjZGVmaW5lIFRJTUVSX0FDSwkJCShUSU1FUl9CQVNFQUREUiArIDB4NTApCisKKworLyogQUhCIGRlY29kZXIgYmxvY2sgKi8KKyNkZWZpbmUgQVNEX01CQV9FWFBfQ1NTRDAJCShBU0RfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBBU0RfTUJBX0VYUF9DU1NEMQkJKEFTRF9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIEFTRF9DU0UJCQkJKEFTRF9CQVNFQUREUiArIDB4MEMpCisKKworLyogR1BJTyBibG9jayAqLworI2RlZmluZSBHUElPX09VVFBVVAkJCShHUElPX0JBU0VBRERSICsgMHgwMCkJLyogR1BJTyBvdXRwdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19PVVRQVVRfRU5BQkxFCQkoR1BJT19CQVNFQUREUiArIDB4MDQpCS8qIEdQSU8gb3V0cHV0IGVuYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBHUElPX0hJX0lOVF9FTkFCTEUJCShHUElPX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgR1BJT19MT19JTlRfRU5BQkxFCQkoR1BJT19CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIEdQSU9fSU5QVVQJCQkoR1BJT19CQVNFQUREUiArIDB4MTApCS8qIEdQSU8gaW5wdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19BUEJfQUNDRVNTX1dTCQkoR1BJT19CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIEdQSU9fTVVYX0NPTkYJCQkoR1BJT19CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIEdQSU9fU1lTQ09ORgkJCShHUElPX0JBU0VBRERSICsgMHgxQykKKworI2RlZmluZSBHUElPXzAJCTB4MDEKKyNkZWZpbmUgR1BJT18xCQkweDAyCisjZGVmaW5lIEdQSU9fMgkJMHgwNAorI2RlZmluZSBHUElPXzMJCTB4MDgKKyNkZWZpbmUgR1BJT180CQkweDEwCisjZGVmaW5lIEdQSU9fNQkJMHgyMAorI2RlZmluZSBHUElPXzYJCTB4NDAKKyNkZWZpbmUgR1BJT183CQkweDgwCisKKyNkZWZpbmUgR1BJT19SSVNJTkdfRURHRQkJMQorI2RlZmluZSBHUElPX0ZBTExJTkdfRURHRQkJMgorI2RlZmluZSBHUElPX0JPVEhfRURHRVMJCQkzCisKKworLyogU0RSQU0gJiBTUkFNIGNvbnRyb2xsZXIgYmxvY2sgKi8KKyNkZWZpbmUgU0RDMF9DU1NEMF9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIFNEQzBfQ1NTRDFfQ0ZHCQkJKFNEQzBfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBTREMwX0NTQk9PVF9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIFNEQzBfQ1NQMF9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIFNEQzBfU0RSQU1fQ0ZHMQkJCShTREMwX0JBU0VBRERSICsgMHgxMCkKKyNkZWZpbmUgU0RDMF9TRFJBTV9DRkcyCQkJKFNEQzBfQkFTRUFERFIgKyAweDE0KQorI2RlZmluZSBTREMwX1NEUkFNX1JFRlJFU0gJCShTREMwX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgU0RDMF9TRFJBTV9QT1dFUk9OCQkoU0RDMF9CQVNFQUREUiArIDB4MUMpCisjZGVmaW5lIFNEQzBfVkVSU0lPTgkJCShTREMwX0JBU0VBRERSICsgMHgyOCkKKworCisvKiBVQVJUICovCisjZGVmaW5lIFVBUlRfUkJSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgwMCkJCS8qIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyIChSL08pICovCisjZGVmaW5lIFVBUlRfVEhSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgwMCkJCS8qIFRyYW5zbWl0IEhvbGRpbmcgUmVnaXN0ZXIgKFcvTykgKi8KKyNkZWZpbmUgVUFSVF9JRVIJCQkoVUFSVDBfQkFTRUFERFIgKyAweDA0KQkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX01DUgkJCShVQVJUMF9CQVNFQUREUiArIDB4MDgpCQkvKiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9MQ1IJCQkoVUFSVDBfQkFTRUFERFIgKyAweDBDKQkJLyogTGluZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfU1NSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgxMCkJCS8qIFNlcmlhbCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9GQ1IJCQkoVUFSVDBfQkFTRUFERFIgKyAweDE0KQkJLyogRm9ybSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfUlhECQkJKFVBUlQwX0JBU0VBRERSICsgMHgxOCkJCS8qIFRyYW5zbWl0ZXIgRGl2aWRlciBMYXRjaCAoUi9PKSAqLworI2RlZmluZSBVQVJUX1RYRAkJCShVQVJUMF9CQVNFQUREUiArIDB4MUMpCQkvKiBSZWNlaXZlciBEaXZpZGVyIExhdGNoIChXL08pICovCisjZGVmaW5lIFVBUlRfSFIJCQkJKFVBUlQwX0JBU0VBRERSICsgMHgyMCkJCS8qIEh1bnQgQ2hhcmFjdGVyICovCisKKworLyogQ2xvY2sgYmxvY2sgKi8KKyNkZWZpbmUgQ0xLQ09SRV9BUk1fUExMIAkJKENMS0NPUkVfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBDTEtDT1JFX1NQVV9QTEwJCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIENMS0NPUkVfQU1CQV9QTEwJCShDTEtDT1JFX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgUExMX01VWFNFTAkJCTB4MDQwMDAwMDAJLyogUExMIGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgUExMX1BPV0VSCQkJMHgwMjAwMDAwMAkvKiBQTEwgcG93ZXIgY29udHJvbCAqLworI2RlZmluZSBQTExfQllQQVNTCQkJMHgwMTAwMDAwMAkvKiBQTEwgYnlwYXNzICovCisKKworLyogRU1BQyAqLworI2luY2x1ZGUgImVtYWMuaCIKKworCisvKiBJRE1BICovCisjaW5jbHVkZSAiaWRtYS5oIgorCisKKy8qIEVyYW0gKi8KKyNkZWZpbmUgRVJBTV9CSVNUX0NUUkwJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBFUkFNX1NQQVJFX0ZBSUwJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBFUkFNX0JJU1RfQUREUgkJCShFUkFNX0NGR19CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIEVSQU1fQklTVF9CQ0sJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDBDKQorI2RlZmluZSBFUkFNX01ST1dfRkFJTAkJCShFUkFNX0NGR19CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIEVSQU1fTUNPTF9GQUlMCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgRVJBTV9TSElGVF9DT0xfRkFJTAkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgRVJBTV9SRVROX1RJTUUJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDFDKQorI2RlZmluZSBFUkFNX1NQQ09MX0FMTE9DCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDIwKQorI2RlZmluZSBFUkFNX1NQUk9XX0FMTE9DCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDMwKQorI2RlZmluZSBFUkFNX0ZVU0VfU1BDT0wJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDQwKQorI2RlZmluZSBFUkFNX0ZVU0VfU1BST1cJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDUwKQorI2RlZmluZSBFUkFNX0lSQU1fRkFJTAkJCShFUkFNX0NGR19CQVNFQUREUiArIDB4NjApCisKKworLyogRXJhbSBidXMgYXJiaXRlciAqLworI2RlZmluZSBBU0FfRVJBTV9QUklPUklUWQkJKEFTQV9FUkFNX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgQVNBX0VSQU1fVEVSTUlOQUxfQ09VTlQJCShBU0FfRVJBTV9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIEFTQV9FUkFNX1RFUk1JTkFMX0NPVU5UX0NGRwkoQVNBX0VSQU1fQkFTRUFERFIgKyAweDA4KQorCisKKyNlbmRpZiAvKiBfX0NPTUNFUlRPXzUzMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jb21jZXJ0b184MDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NvbWNlcnRvXzgwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTAxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jb21jZXJ0b184MDAuaApAQCAtMCwwICsxLDI1MiBAQAorI2lmbmRlZiBfX0NPTUNFUlRPXzgwMF9ICisjZGVmaW5lIF9fQ09NQ0VSVE9fODAwX0gKKworCisvKiBNZW1vcnkgbWFwICovCisvKiBJbnRlcm5hbCBNZW1vcnkgKi8KKyNkZWZpbmUgRVJBTV9CQVNFQUREUgkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgSVJBTV9CQVNFQUREUgkJCTB4MDkwMDAwMDAKKyNkZWZpbmUgQVJBTV9CQVNFQUREUgkJCTB4MEEwMDAwMDAKKworLyogRXhwYW5zaW9uIGJ1cyAqLworI2RlZmluZSBBUEJfQkFTRUFERFIJCQkweDEwMDAwMDAwCisKKy8qIENoaXAgc2VsZWN0ICovCisjZGVmaW5lIEVYUF9DU0JPT1RfQkFTRUFERFIJCTB4MTEwMDAwMDAKKyNkZWZpbmUgRVhQX0NTUDBfQkFTRUFERFIJCTB4MTE0MDAwMDAKKyNkZWZpbmUgRVhQX0NTUDFfQkFTRUFERFIJCTB4MTE4MDAwMDAKKyNkZWZpbmUgRVhQX0NTUDJfQkFTRUFERFIJCTB4MTFDMDAwMDAKKworI2RlZmluZSBFUkFNX1NJWkUJCQkweDAwMDYwMDAwCisjZGVmaW5lIElSQU1fU0laRQkJCTB4MDAwMjIwMDAKKyNkZWZpbmUgQVJBTV9TSVpFCQkJMHgwMDAyMDAwMAorCisjZGVmaW5lIEFQQl9TSVpFCQkJMHgwMTAwMDAwMCAvKiAxNk0gYWRkcmVzcyByYW5nZSAqLworCisjZGVmaW5lIEVYUF9DU0JPT1RfU0laRQkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgRVhQX0NTUDBfU0laRQkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgRVhQX0NTUDFfU0laRQkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgRVhQX0NTUDJfU0laRQkJCTB4MDA0MDAwMDAKKworLyogRXhwYW5zaW9uIGJ1cyBwZXJpcGhlcmFscyAqLworI2RlZmluZSBURE1fQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwMDAwMDApCisjZGVmaW5lIFBISV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDAxMDAwMCkKKyNkZWZpbmUgVERNQV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDAyMDAwMCkKKyNkZWZpbmUgU01DX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDMwMDAwKQorI2RlZmluZSBBU0FfQ01fQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwNDAwMDApCisjZGVmaW5lIEFTQV9BUkFNX0JBU0VBRERSCQkoQVBCX0JBU0VBRERSICsgMHgwNDgwMDApCisjZGVmaW5lIFRJTUVSX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDUwMDAwKQorI2RlZmluZSBBU0RfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwNjAwMDApCisjZGVmaW5lIEdQSU9fQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwNzAwMDApCisjZGVmaW5lIFNEQzBfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwODAwMDApCisjZGVmaW5lIFVBUlQwX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDkwMDAwKQorI2RlZmluZSBVQVJUMV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDA5NDAwMCkKKyNkZWZpbmUgU1BJX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDk4MDAwKQorI2RlZmluZSBJMkNfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwOUMwMDApCisjZGVmaW5lIElOVENfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwQTAwMDApCisjZGVmaW5lIENMS0NPUkVfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDBCMDAwMCkKKyNkZWZpbmUgUFVJX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MEMwMDAwKQorI2RlZmluZSBFTUFDMF9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDBEMDAwMCkKKyNkZWZpbmUgSURNQV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDBFMDAwMCkKKyNkZWZpbmUgVVNCX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MEUwNDAwKQorI2RlZmluZSBFUkFNX0NGR19CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MEYwMDAwKQorI2RlZmluZSBBU0FfRVJBTV9CQVNFQUREUgkJKEFQQl9CQVNFQUREUiArIDB4MTAwMDAwKQorI2RlZmluZSBTUFUwX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MTEwMDAwKQorI2RlZmluZSBFTUFDMV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDE3MDAwMCkKKyNkZWZpbmUgV0lGX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MTkwMDAwKQorI2RlZmluZSBTREMxX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MUIwMDAwKQorI2RlZmluZSBJUFNFQ19CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDFDMDAwMCkKKworCisvKiBQQ0kgSEkgKFBISSkgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUEhJX0ZJRk9fQ1RSTAkJCShQSElfQkFTRUFERFIgKyAweDAwMDApCisjZGVmaW5lIFBISV9GSUZPX0lOVF9TVEFUVVMJCShQSElfQkFTRUFERFIgKyAweDAwMDQpCisjZGVmaW5lIFBISV9GSUZPX0lOVF9BQ0sJCShQSElfQkFTRUFERFIgKyAweDAwMDQpCisjZGVmaW5lCVBISV9UWF9GSUZPX1NJWkUJCShQSElfQkFTRUFERFIgKyAweDAwMTQpCisjZGVmaW5lCVBISV9UWF9GSUZPX0hJR0hfVEhSRVNIT0xECShQSElfQkFTRUFERFIgKyAweDAwMTgpCisjZGVmaW5lCVBISV9UWF9GSUZPX0xPV19USFJFU0hPTEQJKFBISV9CQVNFQUREUiArIDB4MDAxQykKKyNkZWZpbmUJUEhJX1JYX0ZJRk9fU0laRQkJKFBISV9CQVNFQUREUiArIDB4MDAyNCkKKyNkZWZpbmUJUEhJX1JYX0ZJRk9fSElHSF9USFJFU0hPTEQJKFBISV9CQVNFQUREUiArIDB4MDAyOCkKKyNkZWZpbmUJUEhJX1JYX0ZJRk9fTE9XX1RIUkVTSE9MRAkoUEhJX0JBU0VBRERSICsgMHgwMDJDKQorCisjZGVmaW5lIFJYRUlFCQkweDAxMDAKKyNkZWZpbmUgVFhNM0lFCQkweDA0MDAKKyNkZWZpbmUgUlhNM0lFCQkweDA4MDAKKworI2RlZmluZSBUWE0zSUFLCQkweDA0CisjZGVmaW5lIFJYRUlBSwkJMHgxMAorI2RlZmluZSBSWE0zSUFLCQkweDQwCisjZGVmaW5lIEZMVVNIX1JYCTB4ODAKKworLyogVFggTWFpbGJveCAqLworI2RlZmluZSBQSElfVFhfTUFJTDAJCQkoUEhJX0JBU0VBRERSICsgMHgwMDMwKQorI2RlZmluZSBQSElfVFhfTUFJTDEJCQkoUEhJX0JBU0VBRERSICsgMHgwMDM0KQorI2RlZmluZSBQSElfVFhfTUFJTDIJCQkoUEhJX0JBU0VBRERSICsgMHgwMDM4KQorI2RlZmluZSBQSElfVFhfTUFJTDMJCQkoUEhJX0JBU0VBRERSICsgMHgwMDNDKQorCisvKiBSWCBNYWlsYm94ICovCisjZGVmaW5lIFBISV9SWF9NQUlMMAkJCShQSElfQkFTRUFERFIgKyAweDAwNDApCisjZGVmaW5lIFBISV9SWF9NQUlMMQkJCShQSElfQkFTRUFERFIgKyAweDAwNDQpCisjZGVmaW5lIFBISV9SWF9NQUlMMgkJCShQSElfQkFTRUFERFIgKyAweDAwNDgpCisjZGVmaW5lIFBISV9SWF9NQUlMMwkJCShQSElfQkFTRUFERFIgKyAweDAwNEMpCisKKyNkZWZpbmUgSElfUENJX0NOVEwJCQkoUEhJX0JBU0VBRERSICsgMHgwMDUwKQorI2RlZmluZSBISV9QQ0lfU1RBVFVTCQkJKFBISV9CQVNFQUREUiArIDB4MDA1NCkKKyNkZWZpbmUgSElfUENJX0lBS19SRUcJCQkoUEhJX0JBU0VBRERSICsgMHgwMDU0KQorI2RlZmluZSBISV9QQ0lfU1RBUlRfQUREUgkJKFBISV9CQVNFQUREUiArIDB4MDA2MCkKKyNkZWZpbmUJSElfUENJX0JVUlNUX1NJWkUJCShQSElfQkFTRUFERFIgKyAweDAwNjQpCisjZGVmaW5lIEhJX1BDSV9YRkVSX0xFTgkJCShQSElfQkFTRUFERFIgKyAweDAwNjgpCisKKy8qIEZJRk8gKi8KKyNkZWZpbmUgUEhJX1RYX0ZJRk9fREFUQV9CWVRFCQkoUEhJX0JBU0VBRERSICsgMHg0MDAwKQorI2RlZmluZSBQSElfUlhfRklGT19EQVRBX0JZVEUJCShQSElfQkFTRUFERFIgKyAweDQwMDApCisjZGVmaW5lIFBISV9UWF9GSUZPX0RBVEFfSFdPUkQJCShQSElfQkFTRUFERFIgKyAweDgwMDApCisjZGVmaW5lIFBISV9SWF9GSUZPX0RBVEFfSFdPUkQJCShQSElfQkFTRUFERFIgKyAweDgwMDApCisjZGVmaW5lIFBISV9UWF9GSUZPX0RBVEFfV09SRAkJKFBISV9CQVNFQUREUiArIDB4QzAwMCkKKyNkZWZpbmUgUEhJX1JYX0ZJRk9fREFUQV9XT1JECQkoUEhJX0JBU0VBRERSICsgMHhDMDAwKQorCisKKy8qIEFIQiBhcmJpdGVyICovCisjZGVmaW5lIEFTQV9QUklPUklUWV9MRVZFTAkJKEFTQV9DTV9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIEFTQV9URVJNSU5BTF9DT1VOVAkJKEFTQV9DTV9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIEFTQV9URVJNSU5BTF9DT1VOVF9DRkcJCShBU0FfQ01fQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBBU0FfVENfUkVRVERNRU4JCQkoMTw8MTApCisjZGVmaW5lIEFTQV9UQ19SRVFBUk0wRU4JCSgxPDwxMSkKKyNkZWZpbmUgQVNBX1RDX1JFUUFSTTFFTgkJKDE8PDEyKQorI2RlZmluZSBBU0FfVENfUkVRSURNQUVOCQkoMTw8MTMpCisjZGVmaW5lIEFTQV9UQ19SRVFTTUNFTgkJCSgxPDwxNCkKKyNkZWZpbmUgQVNBX1RDX1JFUVRJQ0VOCQkJKDE8PDE1KQorCisKKy8qIFRpbWVyIEJsb2NrICovCisjZGVmaW5lIFRJTUVSMF9DT1VOVAkJCShUSU1FUl9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIFRJTUVSMF9DVVJSX0NPVU5UCQkoVElNRVJfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBUSU1FUjFfQ09VTlQJCQkoVElNRVJfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBUSU1FUjFfQ1VSUl9DT1VOVAkJKFRJTUVSX0JBU0VBRERSICsgMHgwQykKKworI2RlZmluZSBUSU1FUl9NQVNLCQkJKFRJTUVSX0JBU0VBRERSICsgMHg0MCkKKyNkZWZpbmUgVElNRVJfU1RBVFVTCQkJKFRJTUVSX0JBU0VBRERSICsgMHg1MCkKKyNkZWZpbmUgVElNRVJfQUNLCQkJKFRJTUVSX0JBU0VBRERSICsgMHg1MCkKKworCisvKiBBSEIgZGVjb2RlciBibG9jayAqLworI2RlZmluZSBBU0RfTUJBX0VYUF9DU1NEMAkJKEFTRF9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIEFTRF9NQkFfRVhQX0NTU0QxCQkoQVNEX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgQVNEX0NTRQkJCQkoQVNEX0JBU0VBRERSICsgMHgwQykKKyNkZWZpbmUgQVNEX0VYQV9FWFBfQ1NTRDAJCShBU0RfQkFTRUFERFIgKyAweDEwKQorI2RlZmluZSBBU0RfRVhBX0VYUF9DU1NEMQkJKEFTRF9CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIEFTRF9NQkFfU0RSX0NTU0QwCQkoQVNEX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgQVNEX01CQV9TRFJfQ1NTRDEJCShBU0RfQkFTRUFERFIgKyAweDFDKQorI2RlZmluZSBBU0RfRVhBX1NEUl9DU1NEMAkJKEFTRF9CQVNFQUREUiArIDB4MjApCisjZGVmaW5lIEFTRF9FWEFfU0RSX0NTU0QxCQkoQVNEX0JBU0VBRERSICsgMHgyNCkKKyNkZWZpbmUgQVNEX01FTV9ESVZJREVSCQkJKEFTRF9CQVNFQUREUiArIDB4MjgpCisKKworLyogR1BJTyBibG9jayAqLworI2RlZmluZSBHUElPX09VVFBVVAkJCShHUElPX0JBU0VBRERSICsgMHgwMCkJLyogR1BJTyBvdXRwdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19PVVRQVVRfRU5BQkxFCQkoR1BJT19CQVNFQUREUiArIDB4MDQpCS8qIEdQSU8gb3V0cHV0IGVuYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBHUElPX0hJX0lOVF9FTkFCTEUJCShHUElPX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgR1BJT19MT19JTlRfRU5BQkxFCQkoR1BJT19CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIEdQSU9fSU5QVVQJCQkoR1BJT19CQVNFQUREUiArIDB4MTApCS8qIEdQSU8gaW5wdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19BUEJfQUNDRVNTX1dTCQkoR1BJT19CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIEdQSU9fTVVYX0NPTkYJCQkoR1BJT19CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIEdQSU9fU1lTQ09ORgkJCShHUElPX0JBU0VBRERSICsgMHgxQykKKyNkZWZpbmUgR1BJT19MT0NLCQkJKEdQSU9fQkFTRUFERFIgKyAweDM4KQorI2RlZmluZSBHUElPX0lPQ1RSTAkJCShHUElPX0JBU0VBRERSICsgMHg0NCkKKworI2RlZmluZSBHUElPXzAJCTB4MDEKKyNkZWZpbmUgR1BJT18xCQkweDAyCisjZGVmaW5lIEdQSU9fMgkJMHgwNAorI2RlZmluZSBHUElPXzMJCTB4MDgKKyNkZWZpbmUgR1BJT180CQkweDEwCisjZGVmaW5lIEdQSU9fNQkJMHgyMAorI2RlZmluZSBHUElPXzYJCTB4NDAKKyNkZWZpbmUgR1BJT183CQkweDgwCisKKyNkZWZpbmUgR1BJT19SSVNJTkdfRURHRQkJMQorI2RlZmluZSBHUElPX0ZBTExJTkdfRURHRQkJMgorI2RlZmluZSBHUElPX0JPVEhfRURHRVMJCQkzCisKKworLyogU0RSQU0gJiBTUkFNIGNvbnRyb2xsZXIgYmxvY2sgKi8KKyNkZWZpbmUgU0RDMF9DU1NEMF9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIFNEQzBfQ1NTRDFfQ0ZHCQkJKFNEQzBfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBTREMwX0NTQk9PVF9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIFNEQzBfQ1NQMF9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIFNEQzBfU0RSQU1fQ0ZHMQkJCShTREMwX0JBU0VBRERSICsgMHgxMCkKKyNkZWZpbmUgU0RDMF9TRFJBTV9DRkcyCQkJKFNEQzBfQkFTRUFERFIgKyAweDE0KQorI2RlZmluZSBTREMwX1NEUkFNX1JFRlJFU0gJCShTREMwX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgU0RDMF9TRFJBTV9QT1dFUk9OCQkoU0RDMF9CQVNFQUREUiArIDB4MUMpCisjZGVmaW5lIFNEQzBfQ1NQMV9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MjApCisjZGVmaW5lIFNEQzBfQ1NQMV9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MjApCisjZGVmaW5lIFNEQzBfQ1NQMl9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MjQpCisjZGVmaW5lIFNEQzBfVkVSU0lPTgkJCShTREMwX0JBU0VBRERSICsgMHgyOCkKKyNkZWZpbmUgU0RDMF9ERVZfSUQJCQkoU0RDMF9CQVNFQUREUiArIDB4MkMpCisKKworLyogVUFSVCAqLworI2RlZmluZSBVQVJUX1JCUgkJCShVQVJUMF9CQVNFQUREUiArIDB4MDApCQkvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAoUi9PKSAqLworI2RlZmluZSBVQVJUX1RIUgkJCShVQVJUMF9CQVNFQUREUiArIDB4MDApCQkvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIChXL08pICovCisjZGVmaW5lIFVBUlRfSUVSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgwNCkJCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9NQ1IJCQkoVUFSVDBfQkFTRUFERFIgKyAweDA4KQkJLyogTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfTENSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgwQykJCS8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1NTUgkJCShVQVJUMF9CQVNFQUREUiArIDB4MTApCQkvKiBTZXJpYWwgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfRkNSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgxNCkJCS8qIEZvcm0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1JYRAkJCShVQVJUMF9CQVNFQUREUiArIDB4MTgpCQkvKiBUcmFuc21pdGVyIERpdmlkZXIgTGF0Y2ggKFIvTykgKi8KKyNkZWZpbmUgVUFSVF9UWEQJCQkoVUFSVDBfQkFTRUFERFIgKyAweDFDKQkJLyogUmVjZWl2ZXIgRGl2aWRlciBMYXRjaCAoVy9PKSAqLworI2RlZmluZSBVQVJUX0hSCQkJCShVQVJUMF9CQVNFQUREUiArIDB4MjApCQkvKiBIdW50IENoYXJhY3RlciAqLworCisKKy8qIENsb2NrIGJsb2NrICovCisjZGVmaW5lIENMS0NPUkVfQVJNX1BMTCAJCShDTEtDT1JFX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgQ0xLQ09SRV9TUFVfUExMCQkJKENMS0NPUkVfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBDTEtDT1JFX0FNQkFfUExMCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIFBMTF9NVVhTRUwJCQkweDA0MDAwMDAwCS8qIFBMTCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uICovCisjZGVmaW5lIFBMTF9QT1dFUgkJCTB4MDIwMDAwMDAJLyogUExMIHBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgUExMX0JZUEFTUwkJCTB4MDEwMDAwMDAJLyogUExMIGJ5cGFzcyAqLworCisKKy8qIEVNQUMgKi8KKyNpbmNsdWRlICJlbWFjLmgiCisKKworLyogSURNQSAqLworI2luY2x1ZGUgImlkbWEuaCIKKworCisvKiBTUEkgKi8KKyNpbmNsdWRlICJzcGkuaCIKKworCisvKiBFcmFtICovCisjZGVmaW5lIEVSQU1fQklTVF9DVFJMCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgRVJBTV9TUEFSRV9GQUlMCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgRVJBTV9CSVNUX0FERFIJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBFUkFNX0JJU1RfQkNLCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgwQykKKyNkZWZpbmUgRVJBTV9NUk9XX0ZBSUwJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDEwKQorI2RlZmluZSBFUkFNX01DT0xfRkFJTAkJCShFUkFNX0NGR19CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIEVSQU1fU0hJRlRfQ09MX0ZBSUwJCShFUkFNX0NGR19CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIEVSQU1fUkVUTl9USU1FCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgxQykKKyNkZWZpbmUgRVJBTV9TUENPTF9BTExPQwkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgyMCkKKyNkZWZpbmUgRVJBTV9TUFJPV19BTExPQwkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgzMCkKKyNkZWZpbmUgRVJBTV9GVVNFX1NQQ09MCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHg0MCkKKyNkZWZpbmUgRVJBTV9GVVNFX1NQUk9XCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHg1MCkKKyNkZWZpbmUgRVJBTV9JUkFNX0ZBSUwJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDYwKQorCisKKy8qIEVyYW0gYnVzIGFyYml0ZXIgKi8KKyNkZWZpbmUgQVNBX0VSQU1fUFJJT1JJVFkJCShBU0FfRVJBTV9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIEFTQV9FUkFNX1RFUk1JTkFMX0NPVU5UCQkoQVNBX0VSQU1fQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBBU0FfRVJBTV9URVJNSU5BTF9DT1VOVF9DRkcJKEFTQV9FUkFNX0JBU0VBRERSICsgMHgwOCkKKworCisvKiBTZWNvbmRhcnkgU0RSQU0gY29udHJvbGxlciBibG9jayAqLworI2RlZmluZSBTREMxX0NTU0QwX0NGRyAgICAgICAgICAgICAgICAgIChTREMxX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgU0RDMV9DU1NEMV9DRkcgICAgICAgICAgICAgICAgICAoU0RDMV9CQVNFQUREUiArIDB4MDQpCisjZGVmaW5lIFNEQzFfU0RSQU1fQ0ZHMSAgICAgICAgICAgICAgICAgKFNEQzFfQkFTRUFERFIgKyAweDEwKQorI2RlZmluZSBTREMxX1NEUkFNX0NGRzIgICAgICAgICAgICAgICAgIChTREMxX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgU0RDMV9TRFJBTV9SRUZSRVNIICAgICAgICAgICAgICAoU0RDMV9CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIFNEQzFfU0RSQU1fUE9XRVJPTiAgICAgICAgICAgICAgKFNEQzFfQkFTRUFERFIgKyAweDFDKQorCisKKyNlbmRpZiAvKiBfX0NPTUNFUlRPXzUxNV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jb21jZXJ0b185MDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2NvbWNlcnRvXzkwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOTI4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9jb21jZXJ0b185MDAuaApAQCAtMCwwICsxLDI5OSBAQAorI2lmbmRlZiBfX0NPTUNFUlRPXzkwMF9ICisjZGVmaW5lIF9fQ09NQ0VSVE9fOTAwX0gKKworCisvKiBNZW1vcnkgbWFwICovCisvKiBJbnRlcm5hbCBNZW1vcnkgKi8KKyNkZWZpbmUgRVJBTV9CQVNFQUREUgkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgQVJBTV9CQVNFQUREUgkJCTB4MEEwMDAwMDAKKyNkZWZpbmUgQ1JBTV9CQVNFQUREUgkJCTB4MEIwMDAwMDAKKworLyogRXhwYW5zaW9uIGJ1cyAqLworI2RlZmluZSBBUEJfQkFTRUFERFIJCQkweDEwMDAwMDAwCisKKy8qIENoaXAgc2VsZWN0ICovCisjZGVmaW5lIEVYUF9DU0JPT1RfQkFTRUFERFIJCTB4MTEwMDAwMDAKKyNkZWZpbmUgRVhQX0NTUDBfQkFTRUFERFIJCTB4MTE0MDAwMDAKKyNkZWZpbmUgRVhQX0NTUDFfQkFTRUFERFIJCTB4MTE4MDAwMDAKKworI2RlZmluZSBFUkFNX1NJWkUJCQkweDAwMzAwMDAwCisjZGVmaW5lIEFSQU1fU0laRQkJCTB4MDAwQTIwMDAKKyNkZWZpbmUgQ1JBTV9TSVpFCQkJMHgwMDA4MDAwMAorI2RlZmluZSBBUEJfU0laRQkJCTB4MDEwMDAwMDAgLyogMTZNIGFkZHJlc3MgcmFuZ2UgKi8KKyNkZWZpbmUgRVhQX0NTQk9PVF9TSVpFCQkJMHgwMDQwMDAwMAorI2RlZmluZSBFWFBfQ1NQMF9TSVpFCQkJMHgwMDQwMDAwMAorI2RlZmluZSBFWFBfQ1NQMV9TSVpFCQkJMHgwMDgwMDAwMAorCisvKiBFeHBhbnNpb24gYnVzIHBlcmlwaGVyYWxzICovCisjZGVmaW5lIFRETV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDAwMDAwMCkKKyNkZWZpbmUgUEhJX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDEwMDAwKQorI2RlZmluZSBURE1BX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MDIwMDAwKQorI2RlZmluZSBTTUNfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwMzAwMDApCisjZGVmaW5lIEFTQV9DTV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDA0MDAwMCkKKyNkZWZpbmUgQVNBX0FSQU1fQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDA0ODAwMCkKKyNkZWZpbmUgVElNRVJfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwNTAwMDApCisjZGVmaW5lIEFTRF9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDA2MDAwMCkKKyNkZWZpbmUgR1BJT19CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDA3MDAwMCkKKyNkZWZpbmUgU0RDMF9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDA4MDAwMCkKKyNkZWZpbmUgVUFSVDBfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwOTAwMDApCisjZGVmaW5lIElOVENfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgwQTAwMDApCisjZGVmaW5lIENMS0NPUkVfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDBCMDAwMCkKKyNkZWZpbmUgUFVJX0JBU0VBRERSCQkJKEFQQl9CQVNFQUREUiArIDB4MEMwMDAwKQorI2RlZmluZSBHRU1BQ19CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDBEMDAwMCkKKyNkZWZpbmUgSURNQV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDBFMDAwMCkKKyNkZWZpbmUgRVJBTV9DRkdfQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDBGMDAwMCkKKyNkZWZpbmUgQVNBX0VSQU1fQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDEwMDAwMCkKKyNkZWZpbmUgQVNBX0NSQU1fQkFTRUFERFIJCShBUEJfQkFTRUFERFIgKyAweDEwODAwMCkKKyNkZWZpbmUgU1BVMF9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDExMDAwMCkKKyNkZWZpbmUgU1BVMV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDEyMDAwMCkKKyNkZWZpbmUgU1BVMl9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDEzMDAwMCkKKyNkZWZpbmUgU1BVM19CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDE0MDAwMCkKKyNkZWZpbmUgU1BVNF9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDE1MDAwMCkKKyNkZWZpbmUgU1BVNV9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDE2MDAwMCkKKyNkZWZpbmUgU1BVNl9CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDE3MDAwMCkKKyNkZWZpbmUgU1BVN19CQVNFQUREUgkJCShBUEJfQkFTRUFERFIgKyAweDE4MDAwMCkKKyNkZWZpbmUgVERNQTJfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgxRDAwMDApCisjZGVmaW5lIE1ETUFfQkFTRUFERFIJCQkoQVBCX0JBU0VBRERSICsgMHgxRTAwMDApCisKKworLyogUENJIEhJIChQSEkpIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBISV9GSUZPX0NUUkwJCQkoUEhJX0JBU0VBRERSICsgMHgwMDAwKQorI2RlZmluZSBQSElfRklGT19JTlRfU1RBVFVTCQkoUEhJX0JBU0VBRERSICsgMHgwMDA0KQorI2RlZmluZSBQSElfRklGT19JTlRfQUNLCQkoUEhJX0JBU0VBRERSICsgMHgwMDA0KQorI2RlZmluZQlQSElfVFhfRklGT19TSVpFCQkoUEhJX0JBU0VBRERSICsgMHgwMDE0KQorI2RlZmluZQlQSElfVFhfRklGT19ISUdIX1RIUkVTSE9MRAkoUEhJX0JBU0VBRERSICsgMHgwMDE4KQorI2RlZmluZQlQSElfVFhfRklGT19MT1dfVEhSRVNIT0xECShQSElfQkFTRUFERFIgKyAweDAwMUMpCisjZGVmaW5lCVBISV9SWF9GSUZPX1NJWkUJCShQSElfQkFTRUFERFIgKyAweDAwMjQpCisjZGVmaW5lCVBISV9SWF9GSUZPX0hJR0hfVEhSRVNIT0xECShQSElfQkFTRUFERFIgKyAweDAwMjgpCisjZGVmaW5lCVBISV9SWF9GSUZPX0xPV19USFJFU0hPTEQJKFBISV9CQVNFQUREUiArIDB4MDAyQykKKworI2RlZmluZSBSWEVJRQkJMHgwMTAwCisjZGVmaW5lIFRYTTNJRQkJMHgwNDAwCisjZGVmaW5lIFJYTTNJRQkJMHgwODAwCisKKyNkZWZpbmUgVFhNM0lBSwkJMHgwNAorI2RlZmluZSBSWEVJQUsJCTB4MTAKKyNkZWZpbmUgUlhNM0lBSwkJMHg0MAorI2RlZmluZSBGTFVTSF9SWAkweDgwCisKKy8qIFRYIE1haWxib3ggKi8KKyNkZWZpbmUgUEhJX1RYX01BSUwwCQkJKFBISV9CQVNFQUREUiArIDB4MDAzMCkKKyNkZWZpbmUgUEhJX1RYX01BSUwxCQkJKFBISV9CQVNFQUREUiArIDB4MDAzNCkKKyNkZWZpbmUgUEhJX1RYX01BSUwyCQkJKFBISV9CQVNFQUREUiArIDB4MDAzOCkKKyNkZWZpbmUgUEhJX1RYX01BSUwzCQkJKFBISV9CQVNFQUREUiArIDB4MDAzQykKKworLyogUlggTWFpbGJveCAqLworI2RlZmluZSBQSElfUlhfTUFJTDAJCQkoUEhJX0JBU0VBRERSICsgMHgwMDQwKQorI2RlZmluZSBQSElfUlhfTUFJTDEJCQkoUEhJX0JBU0VBRERSICsgMHgwMDQ0KQorI2RlZmluZSBQSElfUlhfTUFJTDIJCQkoUEhJX0JBU0VBRERSICsgMHgwMDQ4KQorI2RlZmluZSBQSElfUlhfTUFJTDMJCQkoUEhJX0JBU0VBRERSICsgMHgwMDRDKQorCisjZGVmaW5lIEhJX1BDSV9DTlRMCQkJKFBISV9CQVNFQUREUiArIDB4MDA1MCkKKyNkZWZpbmUgSElfUENJX1NUQVRVUwkJCShQSElfQkFTRUFERFIgKyAweDAwNTQpCisjZGVmaW5lIEhJX1BDSV9JQUtfUkVHCQkJKFBISV9CQVNFQUREUiArIDB4MDA1NCkKKyNkZWZpbmUgSElfUENJX1NUQVJUX0FERFIJCShQSElfQkFTRUFERFIgKyAweDAwNjApCisjZGVmaW5lCUhJX1BDSV9CVVJTVF9TSVpFCQkoUEhJX0JBU0VBRERSICsgMHgwMDY0KQorI2RlZmluZSBISV9QQ0lfWEZFUl9MRU4JCQkoUEhJX0JBU0VBRERSICsgMHgwMDY4KQorCisvKiBGSUZPICovCisjZGVmaW5lIFBISV9UWF9GSUZPX0RBVEFfQllURQkJKFBISV9CQVNFQUREUiArIDB4NDAwMCkKKyNkZWZpbmUgUEhJX1JYX0ZJRk9fREFUQV9CWVRFCQkoUEhJX0JBU0VBRERSICsgMHg0MDAwKQorI2RlZmluZSBQSElfVFhfRklGT19EQVRBX0hXT1JECQkoUEhJX0JBU0VBRERSICsgMHg4MDAwKQorI2RlZmluZSBQSElfUlhfRklGT19EQVRBX0hXT1JECQkoUEhJX0JBU0VBRERSICsgMHg4MDAwKQorI2RlZmluZSBQSElfVFhfRklGT19EQVRBX1dPUkQJCShQSElfQkFTRUFERFIgKyAweEMwMDApCisjZGVmaW5lIFBISV9SWF9GSUZPX0RBVEFfV09SRAkJKFBISV9CQVNFQUREUiArIDB4QzAwMCkKKworCisvKiBBSEIgYXJiaXRlciAqLworI2RlZmluZSBBU0FfUFJJT1JJVFlfTEVWRUwJCShBU0FfQ01fQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBBU0FfVEVSTUlOQUxfQ09VTlQJCShBU0FfQ01fQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBBU0FfVEVSTUlOQUxfQ09VTlRfQ0ZHCQkoQVNBX0NNX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgQVNBX1RDX1JFUVRETUVOCQkJKDE8PDEwKQorI2RlZmluZSBBU0FfVENfUkVRQVJNMEVOCQkoMTw8MTEpCisjZGVmaW5lIEFTQV9UQ19SRVFBUk0xRU4JCSgxPDwxMikKKyNkZWZpbmUgQVNBX1RDX1JFUUlETUFFTgkJKDE8PDEzKQorI2RlZmluZSBBU0FfVENfUkVRU01DRU4JCQkoMTw8MTQpCisjZGVmaW5lIEFTQV9UQ19SRVFUSUNFTgkJCSgxPDwxNSkKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRJTUVSIGJsb2NrCQkJCQkJCQkJCQkgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFRJTUVSMF9DTlRSX1JFRwkJKFRJTUVSX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgVElNRVIwX0NVUlJfQ09VTlQJKFRJTUVSX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgVElNRVIxX0NOVFJfUkVHCQkoVElNRVJfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBUSU1FUjFfQ1VSUl9DT1VOVAkoVElNRVJfQkFTRUFERFIgKyAweDBDKQorCisjZGVmaW5lIFRJTUVSX01BU0sJCQkoVElNRVJfQkFTRUFERFIgKyAweDQwKQorI2RlZmluZSBUSU1FUl9TVEFUVVMJCQkoVElNRVJfQkFTRUFERFIgKyAweDUwKQorI2RlZmluZSBUSU1FUl9BQ0sJCQkoVElNRVJfQkFTRUFERFIgKyAweDUwKQorCisKKy8qIEFIQiBkZWNvZGVyIGJsb2NrICovCisjZGVmaW5lIEFTRF9NQkFfRVhQX0NTU0QwCQkoQVNEX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgQVNEX01CQV9FWFBfQ1NTRDEJCShBU0RfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBBU0RfQ1NFCQkJCShBU0RfQkFTRUFERFIgKyAweDBDKQorI2RlZmluZSBBU0RfRVhBX0VYUF9DU1NEMAkJKEFTRF9CQVNFQUREUiArIDB4MTApCisjZGVmaW5lIEFTRF9FWEFfRVhQX0NTU0QxCQkoQVNEX0JBU0VBRERSICsgMHgxNCkKKyNkZWZpbmUgQVNEX01FTV9ESVZJREVSCQkJKEFTRF9CQVNFQUREUiArIDB4MjgpCisKKworLyogR1BJTyBibG9jayAqLworI2RlZmluZSBHUElPX09VVFBVVAkJCShHUElPX0JBU0VBRERSICsgMHgwMCkJLyogR1BJTyBvdXRwdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19PVVRQVVRfRU5BQkxFCQkoR1BJT19CQVNFQUREUiArIDB4MDQpCS8qIEdQSU8gb3V0cHV0IGVuYWJsZSByZWdpc3RlciAqLworI2RlZmluZSBHUElPX0hJX0lOVF9FTkFCTEUJCShHUElPX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgR1BJT19MT19JTlRfRU5BQkxFCQkoR1BJT19CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIEdQSU9fSU5QVVQJCQkoR1BJT19CQVNFQUREUiArIDB4MTApCS8qIEdQSU8gaW5wdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR1BJT19BUEJfQUNDRVNTX1dTCQkoR1BJT19CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIEdQSU9fTVVYX0NPTkYJCQkoR1BJT19CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIEdQSU9fU1lTQ09ORgkJCShHUElPX0JBU0VBRERSICsgMHgxQykKKyNkZWZpbmUgR1BJT19MT0NLCQkJKEdQSU9fQkFTRUFERFIgKyAweDM4KQorI2RlZmluZSBHUElPX0lPQ1RSTAkJCShHUElPX0JBU0VBRERSICsgMHg0NCkKKworI2RlZmluZSBHUElPXzAJCTB4MDEKKyNkZWZpbmUgR1BJT18xCQkweDAyCisjZGVmaW5lIEdQSU9fMgkJMHgwNAorI2RlZmluZSBHUElPXzMJCTB4MDgKKyNkZWZpbmUgR1BJT180CQkweDEwCisjZGVmaW5lIEdQSU9fNQkJMHgyMAorI2RlZmluZSBHUElPXzYJCTB4NDAKKyNkZWZpbmUgR1BJT183CQkweDgwCisKKyNkZWZpbmUgR1BJT19SSVNJTkdfRURHRQkJMQorI2RlZmluZSBHUElPX0ZBTExJTkdfRURHRQkJMgorI2RlZmluZSBHUElPX0JPVEhfRURHRVMJCQkzCisKKworLyogU0RSQU0gJiBTUkFNIGNvbnRyb2xsZXIgYmxvY2sgKi8KKyNkZWZpbmUgU0RDMF9DU1NEMF9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MDApCisjZGVmaW5lIFNEQzBfQ1NTRDFfQ0ZHCQkJKFNEQzBfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBTREMwX0NTQk9PVF9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MDgpCisjZGVmaW5lIFNEQzBfQ1NQMF9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MEMpCisjZGVmaW5lIFNEQzBfU0RSQU1fQ0ZHMQkJCShTREMwX0JBU0VBRERSICsgMHgxMCkKKyNkZWZpbmUgU0RDMF9TRFJBTV9DRkcyCQkJKFNEQzBfQkFTRUFERFIgKyAweDE0KQorI2RlZmluZSBTREMwX1NEUkFNX1JFRlJFU0gJCShTREMwX0JBU0VBRERSICsgMHgxOCkKKyNkZWZpbmUgU0RDMF9TRFJBTV9QT1dFUk9OCQkoU0RDMF9CQVNFQUREUiArIDB4MUMpCisjZGVmaW5lIFNEQzBfQ1NQMV9DRkcJCQkoU0RDMF9CQVNFQUREUiArIDB4MjApCisjZGVmaW5lIFNEQzBfVkVSU0lPTgkJCShTREMwX0JBU0VBRERSICsgMHgyOCkKKyNkZWZpbmUgU0RDMF9ERVZfSUQgICAgICAgICAgICAgICAgICAgICAoU0RDMF9CQVNFQUREUiArIDB4MkMpCisKKworLyogVUFSVCAqLworI2RlZmluZSBVQVJUX1JCUgkJCShVQVJUMF9CQVNFQUREUiArIDB4MDApCQkvKiBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlciAoUi9PKSAqLworI2RlZmluZSBVQVJUX1RIUgkJCShVQVJUMF9CQVNFQUREUiArIDB4MDApCQkvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIChXL08pICovCisjZGVmaW5lIFVBUlRfSUVSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgwNCkJCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUFSVF9NQ1IJCQkoVUFSVDBfQkFTRUFERFIgKyAweDA4KQkJLyogTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfTENSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgwQykJCS8qIExpbmUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1NTUgkJCShVQVJUMF9CQVNFQUREUiArIDB4MTApCQkvKiBTZXJpYWwgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFVBUlRfRkNSCQkJKFVBUlQwX0JBU0VBRERSICsgMHgxNCkJCS8qIEZvcm0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBVQVJUX1JYRAkJCShVQVJUMF9CQVNFQUREUiArIDB4MTgpCQkvKiBUcmFuc21pdGVyIERpdmlkZXIgTGF0Y2ggKFIvTykgKi8KKyNkZWZpbmUgVUFSVF9UWEQJCQkoVUFSVDBfQkFTRUFERFIgKyAweDFDKQkJLyogUmVjZWl2ZXIgRGl2aWRlciBMYXRjaCAoVy9PKSAqLworI2RlZmluZSBVQVJUX0hSCQkJCShVQVJUMF9CQVNFQUREUiArIDB4MjApCQkvKiBIdW50IENoYXJhY3RlciAqLworCisKKy8qIENsb2NrIGJsb2NrICovCisjZGVmaW5lIENMS0NPUkVfQVJNX1BMTCAJCShDTEtDT1JFX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgQ0xLQ09SRV9TUFVfUExMCQkJKENMS0NPUkVfQkFTRUFERFIgKyAweDA0KQorI2RlZmluZSBDTEtDT1JFX0FNQkFfUExMCQkoQ0xLQ09SRV9CQVNFQUREUiArIDB4MDgpCisKKyNkZWZpbmUgUExMX1BPV0VSCQkJMHgwNDAwMDAwMAkvKiBQTEwgcG93ZXIgY29udHJvbCAqLworI2RlZmluZSBQTExfQllQQVNTCQkJMHgwMjAwMDAwMAkvKiBQTEwgYnlwYXNzICovCisjZGVmaW5lIFBMTF9NVVhTRUwJCQkweDAxMDAwMDAwCS8qIFBMTCBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uICovCisjZGVmaW5lIFBMTF9SRVNFVAkJCTB4MDA4MDAwMDAJLyogUExMIHJlc2V0ICovCisKKworLyogR0VNQUMgKi8KKworI2luY2x1ZGUgImdlbWFjLmgiCisKKworLyogSURNQSAqLworI2luY2x1ZGUgImlkbWEuaCIKKworCisvKiBFcmFtICovCisjZGVmaW5lIEVSQU1fQklTVF9DVFJMCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgRVJBTV9TUEFSRV9GQUlMCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgRVJBTV9CSVNUX0FERFIJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDA4KQorI2RlZmluZSBFUkFNX0JJU1RfQkNLCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgwQykKKyNkZWZpbmUgRVJBTV9NUk9XX0ZBSUwJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDEwKQorI2RlZmluZSBFUkFNX01DT0xfRkFJTAkJCShFUkFNX0NGR19CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIEVSQU1fU0hJRlRfQ09MX0ZBSUwJCShFUkFNX0NGR19CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIEVSQU1fUkVUTl9USU1FCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgxQykKKyNkZWZpbmUgRVJBTV9TUENPTF9BTExPQwkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgyMCkKKyNkZWZpbmUgRVJBTV9TUFJPV19BTExPQwkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHgzMCkKKyNkZWZpbmUgRVJBTV9GVVNFX1NQQ09MCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHg0MCkKKyNkZWZpbmUgRVJBTV9GVVNFX1NQUk9XCQkJKEVSQU1fQ0ZHX0JBU0VBRERSICsgMHg1MCkKKyNkZWZpbmUgRVJBTV9JUkFNX0ZBSUwJCQkoRVJBTV9DRkdfQkFTRUFERFIgKyAweDYwKQorCisvKiBFcmFtIGJ1cyBhcmJpdGVyICovCisjZGVmaW5lIEFTQV9FUkFNX1BSSU9SSVRZCQkoQVNBX0VSQU1fQkFTRUFERFIgKyAweDAwKQorI2RlZmluZSBBU0FfRVJBTV9URVJNSU5BTF9DT1VOVAkJKEFTQV9FUkFNX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgQVNBX0VSQU1fVEVSTUlOQUxfQ09VTlRfQ0ZHCShBU0FfRVJBTV9CQVNFQUREUiArIDB4MDgpCisKKworI2lmbmRlZglfX0FTU0VNQkxZX18KK3N0YXRpYyBpbmxpbmUgdm9pZCBIQUxfc2V0X2FybV9jbGsodTMyIGZjbGspCit7CisJdm9sYXRpbGUgdTMyIGRlbGF5X2NvdW50OworCXUzMiBjbGtmID0gMiAqIGZjbGsgLyBDRkdfUkVGQ0xLRlJFUTsKKworCS8vIHNldCBQTEwgaW50byBCWVBBU1MgbW9kZQorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fUExMIHw9IFBMTF9CWVBBU1M7CisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9QTEwgJj0gMHhGRkZGMDAwMDsKKworCS8vIHJlc2V0IFBMTAorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fUExMIHw9IFBMTF9SRVNFVCB8IGNsa2Y7CisKKwkvL3dhaXQgNXVzIGZvciBQTEwgdG8gbG9jaworCWRlbGF5X2NvdW50ID0gMTA7CisJd2hpbGUgKGRlbGF5X2NvdW50LS0pOworCisJLy8gdGFrZSBQTEwgb3V0IG9mIHJlc2V0CisJKih2b2xhdGlsZSB1MzIgKilDTEtDT1JFX0FSTV9QTEwgJj0gflBMTF9SRVNFVDsKKworCS8vd2FpdCA1MDAgY3ljbGVzCisJZGVsYXlfY291bnQgPSA1MDA7CisJd2hpbGUgKGRlbGF5X2NvdW50LS0pOworCisJLy8gZW5hYmxlIFBMTAorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BUk1fUExMICY9IH5QTExfQllQQVNTOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBIQUxfc2V0X2FtYmFfY2xrKHUzMiBmY2xrKQoreworCXZvbGF0aWxlIHUzMiBkZWxheV9jb3VudDsKKwl1MzIgY2xrZiA9IDQgKiBmY2xrIC8gQ0ZHX1JFRkNMS0ZSRVE7CisKKwkvLyBzZXQgUExMIGludG8gQllQQVNTIG1vZGUKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQU1CQV9QTEwgfD0gUExMX0JZUEFTUzsKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQU1CQV9QTEwgJj0gMHhGRkZGMDAwMDsKKworCS8vIHJlc2V0IFBMTAorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BTUJBX1BMTCB8PSBQTExfUkVTRVQgfCBQTExfTVVYU0VMIHwgY2xrZjsKKworCS8vd2FpdCA1dXMgZm9yIFBMTCB0byBsb2NrCisJZGVsYXlfY291bnQgPSAxMDsKKwl3aGlsZSAoZGVsYXlfY291bnQtLSk7CisKKwkvLyB0YWtlIFBMTCBvdXQgb2YgcmVzZXQKKwkqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQU1CQV9QTEwgJj0gflBMTF9SRVNFVDsKKworCS8vd2FpdCA1MDAgY3ljbGVzCisJZGVsYXlfY291bnQgPSA1MDA7CisJd2hpbGUgKGRlbGF5X2NvdW50LS0pOworCisJLy8gZW5hYmxlIFBMTAorCSoodm9sYXRpbGUgdTMyICopQ0xLQ09SRV9BTUJBX1BMTCAmPSB+UExMX0JZUEFTUzsKK30KKyNlbmRpZgorCisjZGVmaW5lIEhBTF9hc2JfYXJiaXRyYXRpb24oYXJiaXRyYXRpb25fbWFzaykgKCoodm9sYXRpbGUgdTMyICopQVNBX1RFUk1JTkFMX0NPVU5UX0NGRyB8PSAoYXJiaXRyYXRpb25fbWFzaykpCisKKworI2RlZmluZSBIQUxfZ2V0X2FtYmFfY2xrKCkgKChDRkdfUkVGQ0xLRlJFUSAqICgqKHZvbGF0aWxlIHUzMiAqKUNMS0NPUkVfQU1CQV9QTEwgJiAweDdGKSkgPj4gMikKKworCisjZW5kaWYgLyogX19DT01DRVJUT185MDBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vZGRyX2MyMDAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9kZHJfYzIwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjFhYjAwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vZGRyX2MyMDAwLmgKQEAgLTAsMCArMSw4MzkgQEAKKyNpbmNsdWRlICJjb21jZXJ0b18yMDAwLmgiCisKKy8qIEREUiBDb250cm9sbGVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBERFJDX0NUTF8wMF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MDApCisjZGVmaW5lIEREUkNfQ1RMXzAxX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgwNCkKKyNkZWZpbmUgRERSQ19DVExfMDJfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDA4KQorI2RlZmluZSBERFJDX0NUTF8wM19SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MGMpCisjZGVmaW5lIEREUkNfQ1RMXzA0X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMCkKKyNkZWZpbmUgRERSQ19DVExfMDVfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDE0KQorI2RlZmluZSBERFJDX0NUTF8wNl9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MTgpCisjZGVmaW5lIEREUkNfQ1RMXzA3X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxYykKKyNkZWZpbmUgRERSQ19DVExfMDhfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDIwKQorI2RlZmluZSBERFJDX0NUTF8wOV9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MjQpCisjZGVmaW5lIEREUkNfQ1RMXzEwX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgyOCkKKyNkZWZpbmUgRERSQ19DVExfMTFfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDJjKQorI2RlZmluZSBERFJDX0NUTF8xMl9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MzApCisjZGVmaW5lIEREUkNfQ1RMXzEzX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgzNCkKKyNkZWZpbmUgRERSQ19DVExfMTRfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDM4KQorI2RlZmluZSBERFJDX0NUTF8xNV9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4M2MpCisjZGVmaW5lIEREUkNfQ1RMXzE2X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHg0MCkKKyNkZWZpbmUgRERSQ19DVExfMTdfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDQ0KQorI2RlZmluZSBERFJDX0NUTF8xOF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4NDgpCisjZGVmaW5lIEREUkNfQ1RMXzE5X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHg0YykKKyNkZWZpbmUgRERSQ19DVExfMjBfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDUwKQorI2RlZmluZSBERFJDX0NUTF8yMV9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4NTQpCisjZGVmaW5lIEREUkNfQ1RMXzIyX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHg1OCkKKyNkZWZpbmUgRERSQ19DVExfMjNfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDVjKQorI2RlZmluZSBERFJDX0NUTF8yNF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4NjApCisjZGVmaW5lIEREUkNfQ1RMXzI1X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHg2NCkKKyNkZWZpbmUgRERSQ19DVExfMjZfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDY4KQorI2RlZmluZSBERFJDX0NUTF8yN19SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4NmMpCisjZGVmaW5lIEREUkNfQ1RMXzI4X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHg3MCkKKyNkZWZpbmUgRERSQ19DVExfMjlfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDc0KQorI2RlZmluZSBERFJDX0NUTF8zMF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4NzgpCisjZGVmaW5lIEREUkNfQ1RMXzMxX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHg3YykKKyNkZWZpbmUgRERSQ19DVExfMzJfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDgwKQorI2RlZmluZSBERFJDX0NUTF8zM19SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4ODQpCisjZGVmaW5lIEREUkNfQ1RMXzM0X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHg4OCkKKyNkZWZpbmUgRERSQ19DVExfMzVfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDhjKQorI2RlZmluZSBERFJDX0NUTF8zNl9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4OTApCisjZGVmaW5lIEREUkNfQ1RMXzM3X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHg5NCkKKyNkZWZpbmUgRERSQ19DVExfMzhfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDk4KQorI2RlZmluZSBERFJDX0NUTF8zOV9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4OWMpCisjZGVmaW5lIEREUkNfQ1RMXzQwX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHhhMCkKKyNkZWZpbmUgRERSQ19DVExfNDFfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweGE0KQorI2RlZmluZSBERFJDX0NUTF80Ml9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4YTgpCisjZGVmaW5lIEREUkNfQ1RMXzQzX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHhhYykKKyNkZWZpbmUgRERSQ19DVExfNDRfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweGIwKQorI2RlZmluZSBERFJDX0NUTF80NV9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4YjQpCisjZGVmaW5lIEREUkNfQ1RMXzQ2X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHhiOCkKKyNkZWZpbmUgRERSQ19DVExfNDdfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweGJjKQorI2RlZmluZSBERFJDX0NUTF80OF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4YzApCisjZGVmaW5lIEREUkNfQ1RMXzQ5X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHhjNCkKKyNkZWZpbmUgRERSQ19DVExfNTBfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweGM4KQorI2RlZmluZSBERFJDX0NUTF81MV9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4Y2MpCisjZGVmaW5lIEREUkNfQ1RMXzUyX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHhkMCkKKyNkZWZpbmUgRERSQ19DVExfNTNfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweGQ0KQorI2RlZmluZSBERFJDX0NUTF81NF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4ZDgpCisjZGVmaW5lIEREUkNfQ1RMXzU1X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHhkYykKKyNkZWZpbmUgRERSQ19DVExfNTZfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweGUwKQorI2RlZmluZSBERFJDX0NUTF81N19SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4ZTQpCisjZGVmaW5lIEREUkNfQ1RMXzU4X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHhlOCkKKyNkZWZpbmUgRERSQ19DVExfNTlfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweGVjKQorI2RlZmluZSBERFJDX0NUTF82MF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4ZjApCisjZGVmaW5lIEREUkNfQ1RMXzYxX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHhmNCkKKyNkZWZpbmUgRERSQ19DVExfNjJfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweGY4KQorI2RlZmluZSBERFJDX0NUTF82M19SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4ZmMpCisjZGVmaW5lIEREUkNfQ1RMXzY0X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMDApCisjZGVmaW5lIEREUkNfQ1RMXzY1X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMDQpCisjZGVmaW5lIEREUkNfQ1RMXzY2X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMDgpCisjZGVmaW5lIEREUkNfQ1RMXzY3X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMGMpCisjZGVmaW5lIEREUkNfQ1RMXzY4X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMTApCisjZGVmaW5lIEREUkNfQ1RMXzY5X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMTQpCisjZGVmaW5lIEREUkNfQ1RMXzcwX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMTgpCisjZGVmaW5lIEREUkNfQ1RMXzcxX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMWMpCisjZGVmaW5lIEREUkNfQ1RMXzcyX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMjApCisjZGVmaW5lIEREUkNfQ1RMXzczX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMjQpCisjZGVmaW5lIEREUkNfQ1RMXzc0X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMjgpCisjZGVmaW5lIEREUkNfQ1RMXzc1X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMmMpCisjZGVmaW5lIEREUkNfQ1RMXzc2X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMzApCisjZGVmaW5lIEREUkNfQ1RMXzc3X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMzQpCisjZGVmaW5lIEREUkNfQ1RMXzc4X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxMzgpCisjZGVmaW5lIEREUkNfQ1RMXzc5X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxM2MpCisjZGVmaW5lIEREUkNfQ1RMXzgwX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNDApCisjZGVmaW5lIEREUkNfQ1RMXzgxX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNDQpCisjZGVmaW5lIEREUkNfQ1RMXzgyX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNDgpCisjZGVmaW5lIEREUkNfQ1RMXzgzX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNGMpCisjZGVmaW5lIEREUkNfQ1RMXzg0X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNTApCisjZGVmaW5lIEREUkNfQ1RMXzg1X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNTQpCisjZGVmaW5lIEREUkNfQ1RMXzg2X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNTgpCisjZGVmaW5lIEREUkNfQ1RMXzg3X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNWMpCisjZGVmaW5lIEREUkNfQ1RMXzg4X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNjApCisjZGVmaW5lIEREUkNfQ1RMXzg5X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNjQpCisjZGVmaW5lIEREUkNfQ1RMXzkwX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNjgpCisjZGVmaW5lIEREUkNfQ1RMXzkxX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNmMpCisjZGVmaW5lIEREUkNfQ1RMXzkyX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNzApCisjZGVmaW5lIEREUkNfQ1RMXzkzX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNzQpCisjZGVmaW5lIEREUkNfQ1RMXzk0X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxNzgpCisjZGVmaW5lIEREUkNfQ1RMXzk1X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxN2MpCisjZGVmaW5lIEREUkNfQ1RMXzk2X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxODApCisjZGVmaW5lIEREUkNfQ1RMXzk3X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxODQpCisjZGVmaW5lIEREUkNfQ1RMXzk4X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxODgpCisjZGVmaW5lIEREUkNfQ1RMXzk5X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxOGMpCisjZGVmaW5lIEREUkNfQ1RMXzEwMF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MTkwKQorI2RlZmluZSBERFJDX0NUTF8xMDFfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDE5NCkKKyNkZWZpbmUgRERSQ19DVExfMTAyX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxOTgpCisjZGVmaW5lIEREUkNfQ1RMXzEwM19SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MTljKQorI2RlZmluZSBERFJDX0NUTF8xMDRfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDFhMCkKKyNkZWZpbmUgRERSQ19DVExfMTA1X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxYTQpCisjZGVmaW5lIEREUkNfQ1RMXzEwNl9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MWE4KQorI2RlZmluZSBERFJDX0NUTF8xMDdfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDFhYykKKyNkZWZpbmUgRERSQ19DVExfMTA4X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxYjApCisjZGVmaW5lIEREUkNfQ1RMXzEwOV9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MWI0KQorI2RlZmluZSBERFJDX0NUTF8xMTBfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDFiOCkKKyNkZWZpbmUgRERSQ19DVExfMTExX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxYmMpCisjZGVmaW5lIEREUkNfQ1RMXzExMl9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MWMwKQorI2RlZmluZSBERFJDX0NUTF8xMTNfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDFjNCkKKyNkZWZpbmUgRERSQ19DVExfMTE0X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxYzgpCisjZGVmaW5lIEREUkNfQ1RMXzExNV9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MWNjKQorI2RlZmluZSBERFJDX0NUTF8xMTZfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDFkMCkKKyNkZWZpbmUgRERSQ19DVExfMTE3X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxZDQpCisjZGVmaW5lIEREUkNfQ1RMXzExOF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MWQ4KQorI2RlZmluZSBERFJDX0NUTF8xMTlfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDFkYykKKyNkZWZpbmUgRERSQ19DVExfMTIwX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxZTApCisjZGVmaW5lIEREUkNfQ1RMXzEyMV9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MWU0KQorI2RlZmluZSBERFJDX0NUTF8xMjJfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDFlOCkKKyNkZWZpbmUgRERSQ19DVExfMTIzX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxZWMpCisjZGVmaW5lIEREUkNfQ1RMXzEyNF9SRUcgICAgICAgICAgKENPTUNFUlRPX0FQQl9ERFJfQkFTRSArIDB4MWYwKQorI2RlZmluZSBERFJDX0NUTF8xMjVfUkVHICAgICAgICAgIChDT01DRVJUT19BUEJfRERSX0JBU0UgKyAweDFmNCkKKyNkZWZpbmUgRERSQ19DVExfMTI2X1JFRyAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0REUl9CQVNFICsgMHgxZjgpCisKKy8qIEREUiBQSFkgUmVnaXN0ZXJzICovCisjZGVmaW5lIEREUl9QSFlfQ1RMXzAwX1JFRwkoQ09NQ0VSVE9fQVBCX0REUl9QSFlfQkFTRSArIDB4MDApCisjZGVmaW5lIEREUl9QSFlfQ1RMXzAxX1JFRwkoQ09NQ0VSVE9fQVBCX0REUl9QSFlfQkFTRSArIDB4MDQpCisjZGVmaW5lIEREUl9QSFlfQ1RMXzAyX1JFRwkoQ09NQ0VSVE9fQVBCX0REUl9QSFlfQkFTRSArIDB4MDgpCisjZGVmaW5lIEREUl9QSFlfQ1RMXzAzX1JFRwkoQ09NQ0VSVE9fQVBCX0REUl9QSFlfQkFTRSArIDB4MEMpCisjZGVmaW5lIEREUl9QSFlfQ1RMXzA0X1JFRwkoQ09NQ0VSVE9fQVBCX0REUl9QSFlfQkFTRSArIDB4MTApCisjZGVmaW5lIEREUl9QSFlfQ1RMXzA1X1JFRwkoQ09NQ0VSVE9fQVBCX0REUl9QSFlfQkFTRSArIDB4MTQpCisjZGVmaW5lIEREUl9QSFlfQ1RMXzA2X1JFRwkoQ09NQ0VSVE9fQVBCX0REUl9QSFlfQkFTRSArIDB4MTgpCisjZGVmaW5lIEREUl9QSFlfQ1RMXzA3X1JFRwkoQ09NQ0VSVE9fQVBCX0REUl9QSFlfQkFTRSArIDB4MUMpCisjZGVmaW5lIEREUl9QSFlfRExMX1NUQVRfUkVHCShDT01DRVJUT19BUEJfRERSX1BIWV9CQVNFICsgMHg3MCkKKyNkZWZpbmUgRERSX1BIWV9aUV9TVEFUX1JFRwkoQ09NQ0VSVE9fQVBCX0REUl9QSFlfQkFTRSArIDB4NzQpCisKKy8vRERSMkAgNDAwTUh6CisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMDBfVkFMX0NGRzEgIDB4MDAwMDA0MDAKKy8vI2RlZmluZSBERFJDX0NUTF9ERFIyXzAxX1ZBTF9DRkcxIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl8wMl9WQUxfQ0ZHMSAgMHgwMDAwMDA1MAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzAzX1ZBTF9DRkcxICAweDAwMDAwMDUwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMDRfVkFMX0NGRzEgIDB4MDAwMDAwYzgKKyNkZWZpbmUgRERSQ19DVExfRERSMl8wNV9WQUxfQ0ZHMSAgMHgwMjA1MGMwMgorI2RlZmluZSBERFJDX0NUTF9ERFIyXzA2X1ZBTF9DRkcxICAweDEwMTYwMzAyCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMDdfVkFMX0NGRzEgIDB4MDIwMzA2MDMKKyNkZWZpbmUgRERSQ19DVExfRERSMl8wOF9WQUxfQ0ZHMSAgMHgwMDZkNjAwNQorI2RlZmluZSBERFJDX0NUTF9ERFIyXzA5X1ZBTF9DRkcxICAweDAwMDAwMzAzCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTBfVkFMX0NGRzEgIDB4MDYwNjAxMDEKKyNkZWZpbmUgRERSQ19DVExfRERSMl8xMV9WQUxfQ0ZHMSAgMHgwMDAwYzgwYworI2RlZmluZSBERFJDX0NUTF9ERFIyXzEyX1ZBTF9DRkcxICAweDAwYTAwZTAyCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTNfVkFMX0NGRzEgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRERSQ19DVExfRERSMl8xNF9WQUxfQ0ZHMSAgMHgwMDMzMDEwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzE1X1ZBTF9DRkcxICAweDAwMDAwYzJkCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTZfVkFMX0NGRzEgIDB4MDAwYTAwMDMKKyNkZWZpbmUgRERSQ19DVExfRERSMl8xN19WQUxfQ0ZHMSAgMHgwMDBhMDAwMworI2RlZmluZSBERFJDX0NUTF9ERFIyXzE4X1ZBTF9DRkcxICAweDAwMzcwMGM4CisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTlfVkFMX0NGRzEgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl8yMF9WQUxfQ0ZHMSAgMHgwMDAzMDMwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzIxX1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMjJfVkFMX0NGRzEgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl8yM19WQUxfQ0ZHMSAgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzI0X1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMjVfVkFMX0NGRzEgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl8yNl9WQUxfQ0ZHMSAgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzI3X1ZBTF9DRkcxICAweDAwMGE2MjAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMjhfVkFMX0NGRzEgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRERSQ19DVExfRERSMl8yOV9WQUxfQ0ZHMSAgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzMwX1ZBTF9DRkcxICAweDAwMDQwYTYyCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMzFfVkFMX0NGRzEgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl8zMl9WQUxfQ0ZHMSAgMHgwMDAyMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzMzX1ZBTF9DRkcxICAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl8zNF9WQUxfQ0ZHMSAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl8zNV9WQUxfQ0ZHMSAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl8zNl9WQUxfQ0ZHMSAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl8zN19WQUxfQ0ZHMSAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl8zOF9WQUxfQ0ZHMSAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl8zOV9WQUxfQ0ZHMSAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl80MF9WQUxfQ0ZHMSAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl80MV9WQUxfQ0ZHMSAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl80Ml9WQUxfQ0ZHMSAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNDNfVkFMX0NGRzEgIDB4MDEwMDAyMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl80NF9WQUxfQ0ZHMSAgMHgwMjAwMDA0MAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzQ1X1ZBTF9DRkcxICAweDAwMDEwMDQwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNDZfVkFMX0NGRzEgIDB4ZmYwYTAyMDMKKyNkZWZpbmUgRERSQ19DVExfRERSMl80N19WQUxfQ0ZHMSAgMHgwMTAxMDFmZgorI2RlZmluZSBERFJDX0NUTF9ERFIyXzQ4X1ZBTF9DRkcxICAweDAxMDEwMTAxCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNDlfVkFMX0NGRzEgIDB4MDAwYzAxMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl81MF9WQUxfQ0ZHMSAgMHgwMDAxMDAwMAorLy8jZGVmaW5lIEREUkNfQ1RMX0REUjJfNTFfVkFMX0NGRzEgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzUyX1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNTNfVkFMX0NGRzEgIDB4MDAwMDAwMDAKKy8vI2RlZmluZSBERFJDX0NUTF9ERFIyXzU0X1ZBTF9DRkcxIDB4MDAwMDAwMDAKKy8vI2RlZmluZSBERFJDX0NUTF9ERFIyXzU1X1ZBTF9DRkcxIDB4MDAwMDAwMDAKKy8vI2RlZmluZSBERFJDX0NUTF9ERFIyXzU2X1ZBTF9DRkcxIDB4MDAwMDAwMDAKKy8vI2RlZmluZSBERFJDX0NUTF9ERFIyXzU3X1ZBTF9DRkcxIDB4MDAwMDAwMDAKKy8vI2RlZmluZSBERFJDX0NUTF9ERFIyXzU4X1ZBTF9DRkcxIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl81OV9WQUxfQ0ZHMSAgMHgwMTAxMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzYwX1ZBTF9DRkcxICAweDAwMDAwMjAyCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNjFfVkFMX0NGRzEgIDB4MDIwMjAzMDIKKyNkZWZpbmUgRERSQ19DVExfRERSMl82Ml9WQUxfQ0ZHMSAgMHgwMTAwMDEwMQorI2RlZmluZSBERFJDX0NUTF9ERFIyXzYzX1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNjRfVkFMX0NGRzEgIDB4MDAwMDAwMDAKKy8vI2RlZmluZSBERFJDX0NUTF9ERFIyXzY1X1ZBTF9DRkcxIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl82Nl9WQUxfQ0ZHMSAgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzY3X1ZBTF9DRkcxICAweDAwMjgxOTAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNjhfVkFMX0NGRzEgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl82OV9WQUxfQ0ZHMSAgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzcwX1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNzFfVkFMX0NGRzEgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl83Ml9WQUxfQ0ZHMSAgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzczX1ZBTF9DRkcxICAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl83NF9WQUxfQ0ZHMSAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNzVfVkFMX0NGRzEgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl83Nl9WQUxfQ0ZHMSAgMHgwMDFkMWQwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzc3X1ZBTF9DRkcxICAweDAwMDAwMDAwCisvLyNkZWZpbmUgRERSQ19DVExfRERSMl83OF9WQUxfQ0ZHMSAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfNzlfVkFMX0NGRzEgIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl84MF9WQUxfQ0ZHMSAgMHgwMDAwMWQxZAorLy8jZGVmaW5lIEREUkNfQ1RMX0REUjJfODFfVkFMX0NGRzEgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzgyX1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfODNfVkFMX0NGRzEgIDB4MDAxZDFkMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl84NF9WQUxfQ0ZHMSAgMHgwMDAwMDAwMAorLy8jZGVmaW5lIEREUkNfQ1RMX0REUjJfODVfVkFMX0NGRzEgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzg2X1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfODdfVkFMX0NGRzEgIDB4MDAwMDFkMWQKKy8vI2RlZmluZSBERFJDX0NUTF9ERFIyXzg4X1ZBTF9DRkcxIDB4MDAwMDAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl84OV9WQUxfQ0ZHMSAgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzkwX1ZBTF9DRkcxICAweDAwMWQxZDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfOTFfVkFMX0NGRzEgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl85Ml9WQUxfQ0ZHMSAgMHgwMDAwMDIwMgorI2RlZmluZSBERFJDX0NUTF9ERFIyXzkzX1ZBTF9DRkcxICAweDAxMDFmZmZmCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfOTRfVkFMX0NGRzEgIDB4MDJmZmZmMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl85NV9WQUxfQ0ZHMSAgMHhmZmZmMDAwMgorI2RlZmluZSBERFJDX0NUTF9ERFIyXzk2X1ZBTF9DRkcxICAweDAwMDAwMjAyCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfOTdfVkFMX0NGRzEgIDB4MDEzMjAzMDAKKyNkZWZpbmUgRERSQ19DVExfRERSMl85OF9WQUxfQ0ZHMSAgMHgwMDAxMzIwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzk5X1ZBTF9DRkcxICAweDMyMDAwMTMyCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTAwX1ZBTF9DRkcxICAweDAwMDAwMDAxCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTAxX1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTAyX1ZBTF9DRkcxICAweDAwMDAwNzAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTAzX1ZBTF9DRkcxICAweDAwMGMyZDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTA0X1ZBTF9DRkcxICAweDAyMDAwMjAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTA1X1ZBTF9DRkcxICAweDAyMDAwMjAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTA2X1ZBTF9DRkcxICAweDAwMDAwYzJkCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTA3X1ZBTF9DRkcxICAweDAwMDAzY2UxCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTA4X1ZBTF9DRkcxICAweDAwMDIwNTBDCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTA5X1ZBTF9DRkcxICAweDAzODAwMDAxCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTEwX1ZBTF9DRkcxICAweDAwMDQwNzAzCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTExX1ZBTF9DRkcxICAweDAwMDAwMDBhCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTEyX1ZBTF9DRkcxICAweDAwMDAwYzJkCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTEzX1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTE0X1ZBTF9DRkcxICAweDAwMTBmZmZmCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTE1X1ZBTF9DRkcxICAweDExMDcwMzAzCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTE2X1ZBTF9DRkcxICAweDAwMDAwMDBmCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTE3X1ZBTF9DRkcxICAweDAwMDAwYzJkCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTE4X1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTE5X1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTIwX1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTIxX1ZBTF9DRkcxICAweDAwMDAwMDAwCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTIyX1ZBTF9DRkcxICAweDAwMDAwYzJkCisjZGVmaW5lIEREUkNfQ1RMX0REUjJfMTIzX1ZBTF9DRkcxICAweDAwMDAwMjA0CisvLyNkZWZpbmUgRERSQ19DVExfRERSMl8xMjRfVkFMX0NGRzEgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzEyNV9WQUxfQ0ZHMSAgMHgwMDAwMDAwMAorI2RlZmluZSBERFJDX0NUTF9ERFIyXzEyNl9WQUxfQ0ZHMSAgMHgwMDAwMDAwMQorCisKKyNkZWZpbmUgRERSQ19ERFIyX0NGR180MDAgXAore0REUkNfQ1RMXzAwX1JFRywgRERSQ19DVExfRERSMl8wMF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzAzX1JFRywgRERSQ19DVExfRERSMl8wM19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzA0X1JFRywgRERSQ19DVExfRERSMl8wNF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzA1X1JFRywgRERSQ19DVExfRERSMl8wNV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzA2X1JFRywgRERSQ19DVExfRERSMl8wNl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzA3X1JFRywgRERSQ19DVExfRERSMl8wN19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzA4X1JFRywgRERSQ19DVExfRERSMl8wOF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzA5X1JFRywgRERSQ19DVExfRERSMl8wOV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEwX1JFRywgRERSQ19DVExfRERSMl8xMF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzExX1JFRywgRERSQ19DVExfRERSMl8xMV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEyX1JFRywgRERSQ19DVExfRERSMl8xMl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEzX1JFRywgRERSQ19DVExfRERSMl8xM19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzE0X1JFRywgRERSQ19DVExfRERSMl8xNF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzE1X1JFRywgRERSQ19DVExfRERSMl8xNV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzE2X1JFRywgRERSQ19DVExfRERSMl8xNl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzE3X1JFRywgRERSQ19DVExfRERSMl8xN19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzE4X1JFRywgRERSQ19DVExfRERSMl8xOF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzE5X1JFRywgRERSQ19DVExfRERSMl8xOV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzIwX1JFRywgRERSQ19DVExfRERSMl8yMF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzIxX1JFRywgRERSQ19DVExfRERSMl8yMV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzIyX1JFRywgRERSQ19DVExfRERSMl8yMl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzIzX1JFRywgRERSQ19DVExfRERSMl8yM19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzI0X1JFRywgRERSQ19DVExfRERSMl8yNF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzI1X1JFRywgRERSQ19DVExfRERSMl8yNV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzI2X1JFRywgRERSQ19DVExfRERSMl8yNl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzI3X1JFRywgRERSQ19DVExfRERSMl8yN19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzI4X1JFRywgRERSQ19DVExfRERSMl8yOF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzI5X1JFRywgRERSQ19DVExfRERSMl8yOV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzMwX1JFRywgRERSQ19DVExfRERSMl8zMF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzMxX1JFRywgRERSQ19DVExfRERSMl8zMV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzMyX1JFRywgRERSQ19DVExfRERSMl8zMl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzMzX1JFRywgRERSQ19DVExfRERSMl8zM19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzQzX1JFRywgRERSQ19DVExfRERSMl80M19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzQ0X1JFRywgRERSQ19DVExfRERSMl80NF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzQ1X1JFRywgRERSQ19DVExfRERSMl80NV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzQ2X1JFRywgRERSQ19DVExfRERSMl80Nl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzQ3X1JFRywgRERSQ19DVExfRERSMl80N19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzQ4X1JFRywgRERSQ19DVExfRERSMl80OF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzQ5X1JFRywgRERSQ19DVExfRERSMl80OV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzUwX1JFRywgRERSQ19DVExfRERSMl81MF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzUyX1JFRywgRERSQ19DVExfRERSMl81Ml9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzUzX1JFRywgRERSQ19DVExfRERSMl81M19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzU5X1JFRywgRERSQ19DVExfRERSMl81OV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzYwX1JFRywgRERSQ19DVExfRERSMl82MF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzYxX1JFRywgRERSQ19DVExfRERSMl82MV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzYyX1JFRywgRERSQ19DVExfRERSMl82Ml9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzYzX1JFRywgRERSQ19DVExfRERSMl82M19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzY0X1JFRywgRERSQ19DVExfRERSMl82NF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzY2X1JFRywgRERSQ19DVExfRERSMl82Nl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzY3X1JFRywgRERSQ19DVExfRERSMl82N19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzY4X1JFRywgRERSQ19DVExfRERSMl82OF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzY5X1JFRywgRERSQ19DVExfRERSMl82OV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzcwX1JFRywgRERSQ19DVExfRERSMl83MF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzcxX1JFRywgRERSQ19DVExfRERSMl83MV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzcyX1JFRywgRERSQ19DVExfRERSMl83Ml9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzczX1JFRywgRERSQ19DVExfRERSMl83M19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzc1X1JFRywgRERSQ19DVExfRERSMl83NV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzc2X1JFRywgRERSQ19DVExfRERSMl83Nl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzc3X1JFRywgRERSQ19DVExfRERSMl83N19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzc5X1JFRywgRERSQ19DVExfRERSMl83OV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzgwX1JFRywgRERSQ19DVExfRERSMl84MF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzgyX1JFRywgRERSQ19DVExfRERSMl84Ml9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzgzX1JFRywgRERSQ19DVExfRERSMl84M19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzg0X1JFRywgRERSQ19DVExfRERSMl84NF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzg2X1JFRywgRERSQ19DVExfRERSMl84Nl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzg3X1JFRywgRERSQ19DVExfRERSMl84N19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzg5X1JFRywgRERSQ19DVExfRERSMl84OV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzkwX1JFRywgRERSQ19DVExfRERSMl85MF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzkxX1JFRywgRERSQ19DVExfRERSMl85MV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzkyX1JFRywgRERSQ19DVExfRERSMl85Ml9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzkzX1JFRywgRERSQ19DVExfRERSMl85M19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzk0X1JFRywgRERSQ19DVExfRERSMl85NF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzk1X1JFRywgRERSQ19DVExfRERSMl85NV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzk2X1JFRywgRERSQ19DVExfRERSMl85Nl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzk3X1JFRywgRERSQ19DVExfRERSMl85N19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzk4X1JFRywgRERSQ19DVExfRERSMl85OF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzk5X1JFRywgRERSQ19DVExfRERSMl85OV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEwMF9SRUcsIEREUkNfQ1RMX0REUjJfMTAwX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTAxX1JFRywgRERSQ19DVExfRERSMl8xMDFfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMDJfUkVHLCBERFJDX0NUTF9ERFIyXzEwMl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEwM19SRUcsIEREUkNfQ1RMX0REUjJfMTAzX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTA0X1JFRywgRERSQ19DVExfRERSMl8xMDRfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMDVfUkVHLCBERFJDX0NUTF9ERFIyXzEwNV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEwNl9SRUcsIEREUkNfQ1RMX0REUjJfMTA2X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTA3X1JFRywgRERSQ19DVExfRERSMl8xMDdfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMDhfUkVHLCBERFJDX0NUTF9ERFIyXzEwOF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEwOV9SRUcsIEREUkNfQ1RMX0REUjJfMTA5X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTEwX1JFRywgRERSQ19DVExfRERSMl8xMTBfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMTFfUkVHLCBERFJDX0NUTF9ERFIyXzExMV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzExMl9SRUcsIEREUkNfQ1RMX0REUjJfMTEyX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTEzX1JFRywgRERSQ19DVExfRERSMl8xMTNfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMTRfUkVHLCBERFJDX0NUTF9ERFIyXzExNF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzExNV9SRUcsIEREUkNfQ1RMX0REUjJfMTE1X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTE2X1JFRywgRERSQ19DVExfRERSMl8xMTZfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMTdfUkVHLCBERFJDX0NUTF9ERFIyXzExN19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzExOF9SRUcsIEREUkNfQ1RMX0REUjJfMTE4X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTE5X1JFRywgRERSQ19DVExfRERSMl8xMTlfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMjBfUkVHLCBERFJDX0NUTF9ERFIyXzEyMF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEyMV9SRUcsIEREUkNfQ1RMX0REUjJfMTIxX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTIyX1JFRywgRERSQ19DVExfRERSMl8xMjJfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMjNfUkVHLCBERFJDX0NUTF9ERFIyXzEyM19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEyNV9SRUcsIEREUkNfQ1RMX0REUjJfMTI1X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTI2X1JFRywgRERSQ19DVExfRERSMl8xMjZfVkFMX0NGRzF9CisKKworLyoqKioqKioqIEREUjMgQ29udHJvbGxlciBANDAwTUh6ICoqKioqKiovCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDAwX1ZBTF9DRkcxICAweDIwNDEwNjAwTEwKKy8vCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDAyX1ZBTF9DRkcxICAweDAwMDAwMDA2TEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMDNfVkFMX0NGRzEgIDB4MDAwMTM4OEFMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAwNF9WQUxfQ0ZHMSAgMHgwMDAzMEQ0QUxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDA1X1ZBTF9DRkcxICAweDA0MDYwRTAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMDZfVkFMX0NGRzEgIDB4MEYxNTA0MDRMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAwN19WQUxfQ0ZHMSAgMHgwODA0MDYwNExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDA4X1ZBTF9DRkcxICAweDAwNkQ5QzBDTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMDlfVkFMX0NGRzEgIDB4MDAwMDAxMDNMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAxMF9WQUxfQ0ZHMSAgMHgwNjA2MDEwMUxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDExX1ZBTF9DRkcxICAweDAwMDIwMDBDTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMTJfVkFMX0NGRzEgIDB4MDAwMTE0MDNMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAxM19WQUxfQ0ZHMSAgMHgwMDAwMDAwMUxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDE0X1ZBTF9DRkcxICAweDAwNDAwMTAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMTVfVkFMX0NGRzEgIDB4MDAwMDBDMjZMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAxNl9WQUxfQ0ZHMSAgMHgwMDBBMDAwM0xMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDE3X1ZBTF9DRkcxICAweDAwMDYwMDAyTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMThfVkFMX0NGRzEgIDB4MDA0NDAyMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAxOV9WQUxfQ0ZHMSAgMHgwMDAwMDAwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDIwX1ZBTF9DRkcxICAweDAwMDUwNTAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMjFfVkFMX0NGRzEgIDB4MDAwMDAwMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAyMl9WQUxfQ0ZHMSAgMHgwMDAwMDAwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDIzX1ZBTF9DRkcxICAweDAwMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMjRfVkFMX0NGRzEgIDB4MDAwMDAwMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAyNV9WQUxfQ0ZHMSAgMHgwMDAwMDAwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDI2X1ZBTF9DRkcxICAweDAwMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMjdfVkFMX0NGRzEgIDB4MDAwNDMwMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAyOF9WQUxfQ0ZHMSAgMHgwMDA4MDAwNkxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDI5X1ZBTF9DRkcxICAweDAwMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMzBfVkFMX0NGRzEgIDB4MDAwNjA0MzBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAzMV9WQUxfQ0ZHMSAgMHgwMDAwMDAwOExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDMyX1ZBTF9DRkcxICAweDAwMDIwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMzNfVkFMX0NGRzEgIDB4MDAwMDAwMDBMTAorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworI2RlZmluZSBERFJDX0NUTF9ERFIzXzA0M19WQUxfQ0ZHMSAgMHgwMTQwMDIwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDQ0X1ZBTF9DRkcxICAweDAyMDAwMDQwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNDVfVkFMX0NGRzEgIDB4MDEwMTAwODBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA0Nl9WQUxfQ0ZHMSAgMHhGRjBBMDEwMkxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDQ3X1ZBTF9DRkcxICAweDAxMDEwMUZGTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNDhfVkFMX0NGRzEgIDB4MDAwMTAwMDFMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA0OV9WQUxfQ0ZHMSAgMHgwMDBDMDEwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDUwX1ZBTF9DRkcxICAweDAwMDEwMDAyTEwKKy8vCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDUyX1ZBTF9DRkcxICAweDAwMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNTNfVkFMX0NGRzEgIDB4MDA3RkZGRkZMTAorLy8KKy8vCisvLworLy8KKy8vCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDU5X1ZBTF9DRkcxICAweDAxMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNjBfVkFMX0NGRzEgIDB4MDAwMjAxMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA2MV9WQUxfQ0ZHMSAgMHgwMjAxMDIwMkxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDYyX1ZBTF9DRkcxICAweDAyMDAwMTAxTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNjNfVkFMX0NGRzEgIDB4MDAwMDAwMDBMTAorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworI2RlZmluZSBERFJDX0NUTF9ERFIzXzA5MV9WQUxfQ0ZHMSAgMHhGRkZGMDAwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDkyX1ZBTF9DRkcxICAweDAwMDAwMjAyTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wOTNfVkFMX0NGRzEgIDB4MDEwMUZGRkZMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA5NF9WQUxfQ0ZHMSAgMHgwM0ZGRkYwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDk1X1ZBTF9DRkcxICAweEZGRkYwMDAzTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wOTZfVkFMX0NGRzEgIDB4MDAwMDAzMDNMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA5N19WQUxfQ0ZHMSAgMHgwMTAwMDQwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDk4X1ZBTF9DRkcxICAweDAwMDE2NDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wOTlfVkFMX0NGRzEgIDB4MDAwMDAxMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzEwMF9WQUxfQ0ZHMSAgMHgwMDAwMDAwMUxMCisvLworI2RlZmluZSBERFJDX0NUTF9ERFIzXzEwMl9WQUxfQ0ZHMSAgMHgwMDAwMDgwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMTAzX1ZBTF9DRkcxICAweDAwMTAzMzAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18xMDRfVkFMX0NGRzEgIDB4MDIwMDAyMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzEwNV9WQUxfQ0ZHMSAgMHgwMjAwMDIwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMTA2X1ZBTF9DRkcxICAweDAwMDAxMDMzTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18xMDdfVkFMX0NGRzEgIDB4MDAwMDUwRkZMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzEwOF9WQUxfQ0ZHMSAgMHgwMDAyMDYwQ0xMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMTA5X1ZBTF9DRkcxICAweDAwMDAwMDAzTEwKKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMTI2X1ZBTF9DRkcxICAweDAwMDAwMDAwTEwKKworLyogRERSMyBQSFkgQDQwMCAqLworI2RlZmluZSBERFIzX1BIWV9DVExfMDBfVkFMX0NGRzEgIDB4MDAwRjEwMDNMTAorI2RlZmluZSBERFIzX1BIWV9DVExfMDFfVkFMX0NGRzEgIDB4MTgyMDEwMTBMTAorI2RlZmluZSBERFIzX1BIWV9DVExfMDJfVkFMX0NGRzEgIDB4MDAwMDAwMDZMTAorI2RlZmluZSBERFIzX1BIWV9DVExfMDNfVkFMX0NGRzEgIDB4MDAwMDAwMDBMTAorI2RlZmluZSBERFIzX1BIWV9DVExfMDRfVkFMX0NGRzEgIDB4MDAwMDAwMDBMTAorI2RlZmluZSBERFIzX1BIWV9DVExfMDVfVkFMX0NGRzEgIDB4MDAwMDAwMDBMTAorI2RlZmluZSBERFIzX1BIWV9DVExfMDZfVkFMX0NGRzEgIDB4MDQzMDA2MjJMTAorI2RlZmluZSBERFIzX1BIWV9DVExfMDdfVkFMX0NGRzEgIDB4MDAwMDAwMDBMTAorCisKKworI2RlZmluZSBERFJDX0REUjNfQ0ZHXzQwMCBcCit7RERSQ19DVExfMDBfUkVHLCBERFJDX0NUTF9ERFIzXzAwMF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzAyX1JFRywgRERSQ19DVExfRERSM18wMDJfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8wM19SRUcsIEREUkNfQ1RMX0REUjNfMDAzX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMDRfUkVHLCBERFJDX0NUTF9ERFIzXzAwNF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzA1X1JFRywgRERSQ19DVExfRERSM18wMDVfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8wNl9SRUcsIEREUkNfQ1RMX0REUjNfMDA2X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMDdfUkVHLCBERFJDX0NUTF9ERFIzXzAwN19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzA4X1JFRywgRERSQ19DVExfRERSM18wMDhfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8wOV9SRUcsIEREUkNfQ1RMX0REUjNfMDA5X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTBfUkVHLCBERFJDX0NUTF9ERFIzXzAxMF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzExX1JFRywgRERSQ19DVExfRERSM18wMTFfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMl9SRUcsIEREUkNfQ1RMX0REUjNfMDEyX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTNfUkVHLCBERFJDX0NUTF9ERFIzXzAxM19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzE0X1JFRywgRERSQ19DVExfRERSM18wMTRfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xNV9SRUcsIEREUkNfQ1RMX0REUjNfMDE1X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTZfUkVHLCBERFJDX0NUTF9ERFIzXzAxNl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzE3X1JFRywgRERSQ19DVExfRERSM18wMTdfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xOF9SRUcsIEREUkNfQ1RMX0REUjNfMDE4X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTlfUkVHLCBERFJDX0NUTF9ERFIzXzAxOV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzIwX1JFRywgRERSQ19DVExfRERSM18wMjBfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8yMV9SRUcsIEREUkNfQ1RMX0REUjNfMDIxX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMjJfUkVHLCBERFJDX0NUTF9ERFIzXzAyMl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzIzX1JFRywgRERSQ19DVExfRERSM18wMjNfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8yNF9SRUcsIEREUkNfQ1RMX0REUjNfMDI0X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMjVfUkVHLCBERFJDX0NUTF9ERFIzXzAyNV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzI2X1JFRywgRERSQ19DVExfRERSM18wMjZfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8yN19SRUcsIEREUkNfQ1RMX0REUjNfMDI3X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMjhfUkVHLCBERFJDX0NUTF9ERFIzXzAyOF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzI5X1JFRywgRERSQ19DVExfRERSM18wMjlfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8zMF9SRUcsIEREUkNfQ1RMX0REUjNfMDMwX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMzFfUkVHLCBERFJDX0NUTF9ERFIzXzAzMV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzMyX1JFRywgRERSQ19DVExfRERSM18wMzJfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8zM19SRUcsIEREUkNfQ1RMX0REUjNfMDMzX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfNDNfUkVHLCBERFJDX0NUTF9ERFIzXzA0M19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzQ0X1JFRywgRERSQ19DVExfRERSM18wNDRfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF80NV9SRUcsIEREUkNfQ1RMX0REUjNfMDQ1X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfNDZfUkVHLCBERFJDX0NUTF9ERFIzXzA0Nl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzQ3X1JFRywgRERSQ19DVExfRERSM18wNDdfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF80OF9SRUcsIEREUkNfQ1RMX0REUjNfMDQ4X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfNDlfUkVHLCBERFJDX0NUTF9ERFIzXzA0OV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzUwX1JFRywgRERSQ19DVExfRERSM18wNTBfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF81Ml9SRUcsIEREUkNfQ1RMX0REUjNfMDUyX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfNTNfUkVHLCBERFJDX0NUTF9ERFIzXzA1M19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzU5X1JFRywgRERSQ19DVExfRERSM18wNTlfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF82MF9SRUcsIEREUkNfQ1RMX0REUjNfMDYwX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfNjFfUkVHLCBERFJDX0NUTF9ERFIzXzA2MV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzYyX1JFRywgRERSQ19DVExfRERSM18wNjJfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF82M19SRUcsIEREUkNfQ1RMX0REUjNfMDYzX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfOTFfUkVHLCBERFJDX0NUTF9ERFIzXzA5MV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzkyX1JFRywgRERSQ19DVExfRERSM18wOTJfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF85M19SRUcsIEREUkNfQ1RMX0REUjNfMDkzX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfOTRfUkVHLCBERFJDX0NUTF9ERFIzXzA5NF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzk1X1JFRywgRERSQ19DVExfRERSM18wOTVfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF85Nl9SRUcsIEREUkNfQ1RMX0REUjNfMDk2X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfOTdfUkVHLCBERFJDX0NUTF9ERFIzXzA5N19WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzk4X1JFRywgRERSQ19DVExfRERSM18wOThfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF85OV9SRUcsIEREUkNfQ1RMX0REUjNfMDk5X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTAwX1JFRywgRERSQ19DVExfRERSM18xMDBfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMDJfUkVHLCBERFJDX0NUTF9ERFIzXzEwMl9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEwM19SRUcsIEREUkNfQ1RMX0REUjNfMTAzX1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTA0X1JFRywgRERSQ19DVExfRERSM18xMDRfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMDVfUkVHLCBERFJDX0NUTF9ERFIzXzEwNV9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEwNl9SRUcsIEREUkNfQ1RMX0REUjNfMTA2X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTA3X1JFRywgRERSQ19DVExfRERSM18xMDdfVkFMX0NGRzF9LFwKK3tERFJDX0NUTF8xMDhfUkVHLCBERFJDX0NUTF9ERFIzXzEwOF9WQUxfQ0ZHMX0sXAore0REUkNfQ1RMXzEwOV9SRUcsIEREUkNfQ1RMX0REUjNfMTA5X1ZBTF9DRkcxfSxcCit7RERSQ19DVExfMTI2X1JFRywgRERSQ19DVExfRERSM18xMjZfVkFMX0NGRzF9CisKKyNkZWZpbmUgRERSX1BIWV9DRkdfNDAwIFwKK3tERFJfUEhZX0NUTF8wMF9SRUcsIEREUjNfUEhZX0NUTF8wMF9WQUxfQ0ZHMX0sXAore0REUl9QSFlfQ1RMXzAxX1JFRywgRERSM19QSFlfQ1RMXzAxX1ZBTF9DRkcxfSxcCit7RERSX1BIWV9DVExfMDFfUkVHLCBERFIzX1BIWV9DVExfMDJfVkFMX0NGRzF9LFwKK3tERFJfUEhZX0NUTF8wM19SRUcsIEREUjNfUEhZX0NUTF8wM19WQUxfQ0ZHMX0sXAore0REUl9QSFlfQ1RMXzA0X1JFRywgRERSM19QSFlfQ1RMXzA0X1ZBTF9DRkcxfSxcCit7RERSX1BIWV9DVExfMDVfUkVHLCBERFIzX1BIWV9DVExfMDVfVkFMX0NGRzF9LFwKK3tERFJfUEhZX0NUTF8wNl9SRUcsIEREUjNfUEhZX0NUTF8wNl9WQUxfQ0ZHMX0sXAore0REUl9QSFlfQ1RMXzA3X1JFRywgRERSM19QSFlfQ1RMXzA3X1ZBTF9DRkcxfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEREUjMgQ29udHJvbGxlciBANTMzTUh6ICovCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDAwX1ZBTF9DRkcyICAweDIwNDEwNjAwTEwKKy8vCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDAyX1ZBTF9DRkcyICAweDAwMDAwMDA2TEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMDNfVkFMX0NGRzIgIDB4MDAwMUEwN0NMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAwNF9WQUxfQ0ZHMiAgMHgwMDA0MTEyN0xMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDA1X1ZBTF9DRkcyICAweDA0MDYwRTAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMDZfVkFMX0NGRzIgIDB4MTQxQzA2MDRMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAwN19WQUxfQ0ZHMiAgMHgwODA0MDgwNExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDA4X1ZBTF9DRkcyICAweDAwOTIxOTBDTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMDlfVkFMX0NGRzIgIDB4MDAwMDA1MDRMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAxMF9WQUxfQ0ZHMiAgMHgwODA4MDEwMUxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDExX1ZBTF9DRkcyICAweDAwMDIwMDEwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMTJfVkFMX0NGRzIgIDB4MDAwMTFCMDNMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAxM19WQUxfQ0ZHMiAgMHgwMDAwMDAwOUxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDE0X1ZBTF9DRkcyICAweDAwNTYwMTAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMTVfVkFMX0NGRzIgIDB4MDAwMDEwMzRMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAxNl9WQUxfQ0ZHMiAgMHgwMDBEMDAwNExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDE3X1ZBTF9DRkcyICAweDAwMDYwMDAyTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMThfVkFMX0NGRzIgIDB4MDA1QjAyMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAxOV9WQUxfQ0ZHMiAgMHgwMDAwMDAwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDIwX1ZBTF9DRkcyICAweDAwMDYwNjAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMjFfVkFMX0NGRzIgIDB4MDAwMDAwMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAyMl9WQUxfQ0ZHMiAgMHgwMDAwMDAwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDIzX1ZBTF9DRkcyICAweDAwMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMjRfVkFMX0NGRzIgIDB4MDAwMDAwMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAyNV9WQUxfQ0ZHMiAgMHgwMDAwMDAwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDI2X1ZBTF9DRkcyICAweDAwMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMjdfVkFMX0NGRzIgIDB4MDAwODMwMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAyOF9WQUxfQ0ZHMiAgMHgwMDA4MDAwNkxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDI5X1ZBTF9DRkcyICAweDAwMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMzBfVkFMX0NGRzIgIDB4MDAwNjA4MzBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzAzMV9WQUxfQ0ZHMiAgMHgwMDAwMDAwOExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDMyX1ZBTF9DRkcyICAweDAwMDIwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wMzNfVkFMX0NGRzIgIDB4MDAwMDAwMDBMTAorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworI2RlZmluZSBERFJDX0NUTF9ERFIzXzA0M19WQUxfQ0ZHMiAgMHgwMTQwMDIwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDQ0X1ZBTF9DRkcyICAweDAyMDAwMDQwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNDVfVkFMX0NGRzIgIDB4MDEwMTAwODBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA0Nl9WQUxfQ0ZHMiAgMHhGRjBBMDEwMkxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDQ3X1ZBTF9DRkcyICAweDAxMDEwMUZGTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNDhfVkFMX0NGRzIgIDB4MDAwMTAwMDFMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA0OV9WQUxfQ0ZHMiAgMHgwMDBDMDEwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDUwX1ZBTF9DRkcyICAweDAwMDEwMDAyTEwKKy8vCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDUyX1ZBTF9DRkcyICAweDAwMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNTNfVkFMX0NGRzIgIDB4MDA3RkZGRkZMTAorLy8KKy8vCisvLworLy8KKy8vCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDU5X1ZBTF9DRkcyICAweDAxMDAwMDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNjBfVkFMX0NGRzIgIDB4MDAwMjAxMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA2MV9WQUxfQ0ZHMiAgMHgwMjAxMDIwMkxMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDYyX1ZBTF9DRkcyICAweDAyMDAwMTAxTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wNjNfVkFMX0NGRzIgIDB4MDAwMDAwMDBMTAorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworI2RlZmluZSBERFJDX0NUTF9ERFIzXzA5MV9WQUxfQ0ZHMiAgMHhGRkZGMDAwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDkyX1ZBTF9DRkcyICAweDAwMDAwMjAyTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wOTNfVkFMX0NGRzIgIDB4MDEwMUZGRkZMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA5NF9WQUxfQ0ZHMiAgMHgwM0ZGRkYwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDk1X1ZBTF9DRkcyICAweEZGRkYwMDAzTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wOTZfVkFMX0NGRzIgIDB4MDAwMDAzMDNMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzA5N19WQUxfQ0ZHMiAgMHgwMTAwMDQwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMDk4X1ZBTF9DRkcyICAweDAwMDE2NDAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18wOTlfVkFMX0NGRzIgIDB4MDAwMDAxMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzEwMF9WQUxfQ0ZHMiAgMHgwMDAwMDAwMUxMCisvLworI2RlZmluZSBERFJDX0NUTF9ERFIzXzEwMl9WQUxfQ0ZHMiAgMHgwMDAwMDgwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMTAzX1ZBTF9DRkcyICAweDAwMTAzMzAwTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18xMDRfVkFMX0NGRzIgIDB4MDIwMDAyMDBMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzEwNV9WQUxfQ0ZHMiAgMHgwMjAwMDIwMExMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMTA2X1ZBTF9DRkcyICAweDAwMDAxMDMzTEwKKyNkZWZpbmUgRERSQ19DVExfRERSM18xMDdfVkFMX0NGRzIgIDB4MDAwMDUwRkZMTAorI2RlZmluZSBERFJDX0NUTF9ERFIzXzEwOF9WQUxfQ0ZHMiAgMHgwMDAyMDYwQ0xMCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMTA5X1ZBTF9DRkcyICAweDAwMDAwMDAzTEwKKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisjZGVmaW5lIEREUkNfQ1RMX0REUjNfMTI2X1ZBTF9DRkcyICAweDAwMDAwMDAwTEwKKworCisvKiBERFIzIFBIWSBANTMzICovCisjZGVmaW5lIEREUjNfUEhZX0NUTF8wMF9WQUxfQ0ZHMiAgMHgwMDBGMTAyM0xMCisjZGVmaW5lIEREUjNfUEhZX0NUTF8wMV9WQUxfQ0ZHMiAgMHgxODIwMTAxMExMCisjZGVmaW5lIEREUjNfUEhZX0NUTF8wMl9WQUxfQ0ZHMiAgMHgwMDAwMDAwNkxMCisjZGVmaW5lIEREUjNfUEhZX0NUTF8wM19WQUxfQ0ZHMiAgMHgwOTA5MDkwOUxMCisjZGVmaW5lIEREUjNfUEhZX0NUTF8wNF9WQUxfQ0ZHMiAgMHgwMDAwMDAwOUxMCisjZGVmaW5lIEREUjNfUEhZX0NUTF8wNV9WQUxfQ0ZHMiAgMHgwMDAwMDAwMExMCisjZGVmaW5lIEREUjNfUEhZX0NUTF8wNl9WQUxfQ0ZHMiAgMHgwNDMwMDYyM0xMCisjZGVmaW5lIEREUjNfUEhZX0NUTF8wN19WQUxfQ0ZHMiAgMHgwMDAwMDAwMExMCisKKworCisjZGVmaW5lIEREUkNfRERSM19DRkdfNTMzIFwKK3tERFJDX0NUTF8wMF9SRUcsIEREUkNfQ1RMX0REUjNfMDAwX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMDJfUkVHLCBERFJDX0NUTF9ERFIzXzAwMl9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzAzX1JFRywgRERSQ19DVExfRERSM18wMDNfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8wNF9SRUcsIEREUkNfQ1RMX0REUjNfMDA0X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMDVfUkVHLCBERFJDX0NUTF9ERFIzXzAwNV9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzA2X1JFRywgRERSQ19DVExfRERSM18wMDZfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8wN19SRUcsIEREUkNfQ1RMX0REUjNfMDA3X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMDhfUkVHLCBERFJDX0NUTF9ERFIzXzAwOF9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzA5X1JFRywgRERSQ19DVExfRERSM18wMDlfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8xMF9SRUcsIEREUkNfQ1RMX0REUjNfMDEwX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMTFfUkVHLCBERFJDX0NUTF9ERFIzXzAxMV9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzEyX1JFRywgRERSQ19DVExfRERSM18wMTJfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8xM19SRUcsIEREUkNfQ1RMX0REUjNfMDEzX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMTRfUkVHLCBERFJDX0NUTF9ERFIzXzAxNF9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzE1X1JFRywgRERSQ19DVExfRERSM18wMTVfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8xNl9SRUcsIEREUkNfQ1RMX0REUjNfMDE2X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMTdfUkVHLCBERFJDX0NUTF9ERFIzXzAxN19WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzE4X1JFRywgRERSQ19DVExfRERSM18wMThfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8xOV9SRUcsIEREUkNfQ1RMX0REUjNfMDE5X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMjBfUkVHLCBERFJDX0NUTF9ERFIzXzAyMF9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzIxX1JFRywgRERSQ19DVExfRERSM18wMjFfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8yMl9SRUcsIEREUkNfQ1RMX0REUjNfMDIyX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMjNfUkVHLCBERFJDX0NUTF9ERFIzXzAyM19WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzI0X1JFRywgRERSQ19DVExfRERSM18wMjRfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8yNV9SRUcsIEREUkNfQ1RMX0REUjNfMDI1X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMjZfUkVHLCBERFJDX0NUTF9ERFIzXzAyNl9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzI3X1JFRywgRERSQ19DVExfRERSM18wMjdfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8yOF9SRUcsIEREUkNfQ1RMX0REUjNfMDI4X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMjlfUkVHLCBERFJDX0NUTF9ERFIzXzAyOV9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzMwX1JFRywgRERSQ19DVExfRERSM18wMzBfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8zMV9SRUcsIEREUkNfQ1RMX0REUjNfMDMxX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMzJfUkVHLCBERFJDX0NUTF9ERFIzXzAzMl9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzMzX1JFRywgRERSQ19DVExfRERSM18wMzNfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF80M19SRUcsIEREUkNfQ1RMX0REUjNfMDQzX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfNDRfUkVHLCBERFJDX0NUTF9ERFIzXzA0NF9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzQ1X1JFRywgRERSQ19DVExfRERSM18wNDVfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF80Nl9SRUcsIEREUkNfQ1RMX0REUjNfMDQ2X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfNDdfUkVHLCBERFJDX0NUTF9ERFIzXzA0N19WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzQ4X1JFRywgRERSQ19DVExfRERSM18wNDhfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF80OV9SRUcsIEREUkNfQ1RMX0REUjNfMDQ5X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfNTBfUkVHLCBERFJDX0NUTF9ERFIzXzA1MF9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzUyX1JFRywgRERSQ19DVExfRERSM18wNTJfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF81M19SRUcsIEREUkNfQ1RMX0REUjNfMDUzX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfNTlfUkVHLCBERFJDX0NUTF9ERFIzXzA1OV9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzYwX1JFRywgRERSQ19DVExfRERSM18wNjBfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF82MV9SRUcsIEREUkNfQ1RMX0REUjNfMDYxX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfNjJfUkVHLCBERFJDX0NUTF9ERFIzXzA2Ml9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzYzX1JFRywgRERSQ19DVExfRERSM18wNjNfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF85MV9SRUcsIEREUkNfQ1RMX0REUjNfMDkxX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfOTJfUkVHLCBERFJDX0NUTF9ERFIzXzA5Ml9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzkzX1JFRywgRERSQ19DVExfRERSM18wOTNfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF85NF9SRUcsIEREUkNfQ1RMX0REUjNfMDk0X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfOTVfUkVHLCBERFJDX0NUTF9ERFIzXzA5NV9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzk2X1JFRywgRERSQ19DVExfRERSM18wOTZfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF85N19SRUcsIEREUkNfQ1RMX0REUjNfMDk3X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfOThfUkVHLCBERFJDX0NUTF9ERFIzXzA5OF9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzk5X1JFRywgRERSQ19DVExfRERSM18wOTlfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8xMDBfUkVHLCBERFJDX0NUTF9ERFIzXzEwMF9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzEwMl9SRUcsIEREUkNfQ1RMX0REUjNfMTAyX1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMTAzX1JFRywgRERSQ19DVExfRERSM18xMDNfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8xMDRfUkVHLCBERFJDX0NUTF9ERFIzXzEwNF9WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzEwNV9SRUcsIEREUkNfQ1RMX0REUjNfMTA1X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMTA2X1JFRywgRERSQ19DVExfRERSM18xMDZfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8xMDdfUkVHLCBERFJDX0NUTF9ERFIzXzEwN19WQUxfQ0ZHMn0sXAore0REUkNfQ1RMXzEwOF9SRUcsIEREUkNfQ1RMX0REUjNfMTA4X1ZBTF9DRkcyfSxcCit7RERSQ19DVExfMTA5X1JFRywgRERSQ19DVExfRERSM18xMDlfVkFMX0NGRzJ9LFwKK3tERFJDX0NUTF8xMjZfUkVHLCBERFJDX0NUTF9ERFIzXzEyNl9WQUxfQ0ZHMn0KKworI2RlZmluZSBERFJfUEhZX0NGR181MzMgXAore0REUl9QSFlfQ1RMXzAwX1JFRywgRERSM19QSFlfQ1RMXzAwX1ZBTF9DRkcyfSxcCit7RERSX1BIWV9DVExfMDFfUkVHLCBERFIzX1BIWV9DVExfMDFfVkFMX0NGRzJ9LFwKK3tERFJfUEhZX0NUTF8wMl9SRUcsIEREUjNfUEhZX0NUTF8wMl9WQUxfQ0ZHMn0sXAore0REUl9QSFlfQ1RMXzAzX1JFRywgRERSM19QSFlfQ1RMXzAzX1ZBTF9DRkcyfSxcCit7RERSX1BIWV9DVExfMDRfUkVHLCBERFIzX1BIWV9DVExfMDRfVkFMX0NGRzJ9LFwKK3tERFJfUEhZX0NUTF8wNV9SRUcsIEREUjNfUEhZX0NUTF8wNV9WQUxfQ0ZHMn0sXAore0REUl9QSFlfQ1RMXzA2X1JFRywgRERSM19QSFlfQ1RMXzA2X1ZBTF9DRkcyfSxcCit7RERSX1BIWV9DVExfMDdfUkVHLCBERFIzX1BIWV9DVExfMDdfVkFMX0NGRzJ9LCBcCisKKy8vI2RlZmluZSBERFJDX0NGRwlERFJDX0REUjNfQ0ZHXzUzMworLy8jZGVmaW5lIEREUl9QSFlfQ0ZHCUREUl9QSFlfQ0ZHXzUzMworLy9Gb3IgQnJpbmd1cAorI2RlZmluZSBERFJDX0NGRwlERFJDX0REUjNfQ0ZHXzUzMworI2RlZmluZSBERFJfUEhZX0NGRwlERFJfUEhZX0NGR181MzMKKworc3RydWN0IGRkcl9yZWdfdmFsIHsKKyAgICAgICAgdTMyIHJlZzsKKyAgICAgICAgdTMyIHZhbDsKK307CisKKyNkZWZpbmUgTUNfU1RBUlQJMHgxCisjZGVmaW5lIE1DX0lOSVRfU1RBVF9NQVNLCTB4MjAwCisKKyNkZWZpbmUgQ1RSTF9SRVNZTkNfRU4gICgxIDw8IDIwKQorI2RlZmluZSBDVFJMX1JFU1lOQ19QTFMgKDEgPDwgMjEpCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2VtYWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2VtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmI3ZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vZW1hYy5oCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisjaWZuZGVmIF9FTUFDX0gKKyNkZWZpbmUgX0VNQUNfSAorCisvKioqKioqKioqIEVNQUMgcmVnaXN0ZXJzIGFuZCBtYXNrcyAqKioqKioqKioqKioqKioqKiovCisKKy8qIEFybSBzaWRlIEZJRk8gY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRU1BQ19BUk1fRklGT19DT05UUk9MCQkweDAwMDAKKyNkZWZpbmUgRU1BQ19BUk1fRklGT19TVEFUVVMJCTB4MDAwNAorI2RlZmluZSBFTUFDX0FSTV9GSUZPX0lBQ0sJCTB4MDAwNAorI2RlZmluZSBFTUFDX0FSTV9CSVNUCQkJMHgwMDA4CisjZGVmaW5lIEVNQUNfQVJNX0ZJRk9fVFhTSVpFCQkweDAwMTQKKyNkZWZpbmUgRU1BQ19BUk1fRklGT19UWEhJR0gJCTB4MDAxOAorI2RlZmluZSBFTUFDX0FSTV9GSUZPX1RYTE9XCQkweDAwMUMKKyNkZWZpbmUgRU1BQ19BUk1fRklGT19SWFNJWkUJCTB4MDAyNAorI2RlZmluZSBFTUFDX0FSTV9GSUZPX1JYSElHSAkJMHgwMDI4CisjZGVmaW5lIEVNQUNfQVJNX0ZJRk9fUlhMT1cJCTB4MDAyQworI2RlZmluZSBFTUFDX0FSTV9UWE1BSUwwCQkweDAwMzAKKyNkZWZpbmUgRU1BQ19BUk1fVFhNQUlMMQkJMHgwMDM0CisjZGVmaW5lIEVNQUNfQVJNX1RYTUFJTDIJCTB4MDAzOAorI2RlZmluZSBFTUFDX0FSTV9UWE1BSUwzCQkweDAwM0MKKyNkZWZpbmUgRU1BQ19BUk1fUlhNQUlMMAkJMHgwMDQwCisjZGVmaW5lIEVNQUNfQVJNX1JYTUFJTDEJCTB4MDA0NAorI2RlZmluZSBFTUFDX0FSTV9SWE1BSUwyCQkweDAwNDgKKyNkZWZpbmUgRU1BQ19BUk1fUlhNQUlMMwkJMHgwMDRDCisKKyNkZWZpbmUgRU1BQ19BUk1fRklGT19UWERBVEFCWVRFCTB4NDAwMAorI2RlZmluZSBFTUFDX0FSTV9GSUZPX1JYREFUQUJZVEUJMHg0MDAwCisjZGVmaW5lIEVNQUNfQVJNX0ZJRk9fVFhEQVRBSFdPUkQJMHg4MDAwCisjZGVmaW5lIEVNQUNfQVJNX0ZJRk9fUlhEQVRBSFdPUkQJMHg4MDAwCisjZGVmaW5lIEVNQUNfQVJNX0ZJRk9fVFhEQVRBV09SRAkweEMwMDAKKyNkZWZpbmUgRU1BQ19BUk1fRklGT19SWERBVEFXT1JECTB4QzAwMAorCisvKiBIb3N0IHNpZGUgRklGTyBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBFTUFDX0hPU1RfRklGT19DT05UUk9MCQkweEQwMDAKKyNkZWZpbmUgRU1BQ19IT1NUX0ZJRk9fU1RBVFVTCQkweEQwMDQKKyNkZWZpbmUgRU1BQ19IT1NUX0ZJRk9fSUFDSwkJMHhEMDA0CisjZGVmaW5lIEVNQUNfSE9TVF9GSUZPX1RYU0laRQkJMHhEMDEwCisjZGVmaW5lIEVNQUNfSE9TVF9GSUZPX1RYSElHSAkJMHhEMDE0CisjZGVmaW5lIEVNQUNfSE9TVF9GSUZPX1RYTE9XCQkweEQwMTgKKyNkZWZpbmUgRU1BQ19IT1NUX0ZJRk9fUlhTSVpFCQkweEQwMjAKKyNkZWZpbmUgRU1BQ19IT1NUX0ZJRk9fUlhISUdICQkweEQwMjQKKyNkZWZpbmUgRU1BQ19IT1NUX0ZJRk9fUlhMT1cJCTB4RDAyOAorI2RlZmluZSBFTUFDX0hPU1RfVFhNQUlMMAkJMHhEMDMwCisjZGVmaW5lIEVNQUNfSE9TVF9UWE1BSUwxCQkweEQwMzQKKyNkZWZpbmUgRU1BQ19IT1NUX1RYTUFJTDIJCTB4RDAzOAorI2RlZmluZSBFTUFDX0hPU1RfVFhNQUlMMwkJMHhEMDNDCisjZGVmaW5lIEVNQUNfSE9TVF9SWE1BSUwwCQkweEQwNDAKKyNkZWZpbmUgRU1BQ19IT1NUX1JYTUFJTDEJCTB4RDA0NAorI2RlZmluZSBFTUFDX0hPU1RfUlhNQUlMMgkJMHhEMDQ4CisjZGVmaW5lIEVNQUNfSE9TVF9SWE1BSUwzCQkweEQwNEMKKworI2RlZmluZSBFTUFDX0hPU1RfRklGT19UWERBVEEJCTB4RDEwMAorI2RlZmluZSBFTUFDX0hPU1RfRklGT19SWERBVEEJCTB4RDEwMAorCisvKiBFTUFDIEludGVyZmFjZSAqLworI2RlZmluZSBFTUFDX09DUgkJCTB4RTAwMAorI2RlZmluZSBFTUFDX0lDUgkJCTB4RTAwNAorI2RlZmluZSBFTUFDX0lGX0lOVAkJCTB4RTAwOAorI2RlZmluZSBFTUFDX09VVFBVVAkJCTB4RTAwQworI2RlZmluZSBFTUFDX1JYX1NUQVRfRklGT19ERVBUSAkJMHhFMDEwCisjZGVmaW5lIEVNQUNfUlhfU1RBVF9GSUZPX0RBVEEJCTB4RTAyMAorCisvKiBFTUFDIEFSQyBUYWJsZSAqLworI2RlZmluZSBFTUFDX0FSQ19UQUJMRQkJCTB4RTIwMAorCisKKy8qIEVNQUMgSVAgRmxvdyBDb250cm9sIENTUiAqLworI2RlZmluZSBFTUFDX0ZMT1dDVFJMX0JBU0UJCTB4RTMzMAorCisjZGVmaW5lIEVNQUNfRkxPV0NUUkxfUEFVU0VDTlQJCShFTUFDX0ZMT1dDVFJMX0JBU0UgKyAweDAwKQorI2RlZmluZSBFTUFDX0ZMT1dDVFJMX1JFTVBBVVNFQ05UCShFTUFDX0ZMT1dDVFJMX0JBU0UgKyAweDA0KQorCisvKiBFTUFDIElQIENvbnRyb2wgQ1NSICovCisjZGVmaW5lIEVNQUNfQ1RSTF9CQVNFCQkJMHhFMzQwCisjZGVmaW5lIEVNQUNfTUFDQ1RSTAkJCShFTUFDX0NUUkxfQkFTRSArIDB4MDApCisjZGVmaW5lIEVNQUNfQVJDQ1RSTAkJCShFTUFDX0NUUkxfQkFTRSArIDB4MDQpCisjZGVmaW5lIEVNQUNfVFhDVFJMCQkJKEVNQUNfQ1RSTF9CQVNFICsgMHgwOCkKKyNkZWZpbmUgRU1BQ19UWFNUQVRVUwkJCShFTUFDX0NUUkxfQkFTRSArIDB4MEMpCisjZGVmaW5lIEVNQUNfUlhDVFJMCQkJKEVNQUNfQ1RSTF9CQVNFICsgMHgxMCkgCisjZGVmaW5lIEVNQUNfUlhTVEFUVVMJCQkoRU1BQ19DVFJMX0JBU0UgKyAweDE0KQorCisjZGVmaW5lIEVNQUNfTUREQVRBCQkJKEVNQUNfQ1RSTF9CQVNFICsgMHgxOCkKKyNkZWZpbmUgRU1BQ19NRENBCQkJKEVNQUNfQ1RSTF9CQVNFICsgMHgxQykKKworI2RlZmluZSBFTUFDX0FSQ0VOQQkJCShFTUFDX0NUUkxfQkFTRSArIDB4MjgpCisKKyNkZWZpbmUgRU1BQ19QUk9NQ1RMCQkJKEVNQUNfQ1RSTF9CQVNFICsgMHgyQykKKyNkZWZpbmUgRU1BQ19QUk9NREFUQQkJCShFTUFDX0NUUkxfQkFTRSArIDB4MzApCisKKyNkZWZpbmUgRU1BQ19NSVNTQ05UCQkJKEVNQUNfQ1RSTF9CQVNFICsgMHgzQykKKworI2RlZmluZSBFTUFDX1JNT05fQkFTRQkJCTB4RTQwMAorI2RlZmluZSBFTUFDX0NOVERBVEEJCQkoRU1BQ19STU9OX0JBU0UgKyAweDAwKQorI2RlZmluZSBFTUFDX0NOVEFDQwkJCShFTUFDX1JNT05fQkFTRSArIDB4MDQpCisjZGVmaW5lIEVNQUNfVFhSTU9OSUUJCQkoRU1BQ19STU9OX0JBU0UgKyAweDA4KQorI2RlZmluZSBFTUFDX1JYUk1PTklFCQkJKEVNQUNfUk1PTl9CQVNFICsgMHgwQykKKworCisjZGVmaW5lIE1BWF9BUkNfRU5UUklFUyAJCQkJCTIxCisKKy8qIEFSTSBmaWZvIGNvbnRyb2wgYml0cyAqLworI2RlZmluZSBFTUFDX0FSTV9SWERSRVFXRQkJCQkweDAwMDQKKyNkZWZpbmUgRU1BQ19BUk1fVFhEUkVRUkUJCQkJCTB4MDAwOAorI2RlZmluZSBFTUFDX0FSTV9UWENNUExUSUUJCQkJMHgwMDIwCisjZGVmaW5lIEVNQUNfQVJNX1RYRklFCQkJCQkJMHgwMDQwCisjZGVmaW5lIEVNQUNfQVJNX1RYVEhJRQkJCQkJMHgwMDgwCisjZGVmaW5lIEVNQUNfQVJNX1JYRUlFCQkJCQkJMHgwMTAwCisjZGVmaW5lIEVNQUNfQVJNX1JYVEhJRQkJCQkJMHgwMjAwCisjZGVmaW5lIEVNQUNfQVJNX1RYTTNJRQkJCQkJMHgwNDAwCisjZGVmaW5lIEVNQUNfQVJNX1JYTTNJRQkJCQkJMHgwODAwCisjZGVmaW5lIEVNQUNfQVJNX1RYRkZfUkVTCQkJCQkweDEwMDAKKyNkZWZpbmUgRU1BQ19BUk1fUlhGRl9SRVMJCQkJCTB4MjAwMAorCisKKy8qIEhvc3QgZmlmbyBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgRU1BQ19IT1NUX1RYRkZfRU4JCQkJCTB4MDAwMQorI2RlZmluZSBFTUFDX0hPU1RfSEJUWFJRX0VOCQkJCTB4MDAwMgorI2RlZmluZSBFTUFDX0hPU1RfUlhGRl9FTgkJCQkJMHgwMDA4CisjZGVmaW5lIEVNQUNfSE9TVF9IQlJYUlFfRU4JCQkJMHgwMDEwCisjZGVmaW5lIEVNQUNfSE9TVF9UWENQX0lOSAkJCQkweDAwMjAKKyNkZWZpbmUgRU1BQ19IT1NUX1RYRUlFCQkJCQkweDAxMDAKKyNkZWZpbmUgRU1BQ19IT1NUX1RYVEhJRQkJCQkJMHgwMjAwCisjZGVmaW5lIEVNQUNfSE9TVF9UWE0zSUUJCQkJCTB4MDQwMAorI2RlZmluZSBFTUFDX0hPU1RfUlhDTVBMVElFCQkJCTB4MDgwMAorI2RlZmluZSBFTUFDX0hPU1RfUlhGSUUJCQkJCTB4MTAwMAorI2RlZmluZSBFTUFDX0hPU1RfUlhUSElFCQkJCQkweDIwMDAKKyNkZWZpbmUgRU1BQ19IT1NUX1JYTTNJRQkJCQkJMHg0MDAwCisjZGVmaW5lIEVNQUNfSE9TVF9UUkdBQk9SVElFCQkJCTB4ODAwMAorCisvKiBNZW1vcnkgQklTVCByZWdpc3RlciBtYXNrcyAqLworI2RlZmluZSBFTUFDX1JYQklTVF9SRVNFVAkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBFTUFDX1JYQklTVF9URVNUCQkJCQkweDAwMDAwMDAyCisjZGVmaW5lIEVNQUNfUlhCSVNUX0RCRwkJCQkJMHgwMDAwMDAwNAorI2RlZmluZSBFTUFDX1JYQklTVF9SRVNVTUVfUlROCQkJMHgwMDAwMDAwOAorI2RlZmluZSBFTUFDX1JYQklTVF9ET05FCQkJCQkweDAwMDAwMDEwCisjZGVmaW5lIEVNQUNfUlhCSVNUX0ZBSUwJCQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgRU1BQ19SWEJJU1RfU1RBUlRfUlROCQkJCTB4MDAwMDAwNDAgCisjZGVmaW5lIEVNQUNfVFhCSVNUX1JFU0VUCQkJCQkweDAwMDAwMTAwCisjZGVmaW5lIEVNQUNfVFhCSVNUX1RFU1QJCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgRU1BQ19UWEJJU1RfREJHCQkJCQkweDAwMDAwNDAwCisjZGVmaW5lIEVNQUNfVFhCSVNUX1JFU1VNRV9SVE4JCQkweDAwMDAwODAwCisjZGVmaW5lIEVNQUNfVFhCSVNUX0RPTkUJCQkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgRU1BQ19UWEJJU1RfRkFJTAkJCQkJMHgwMDAwMjAwMAorI2RlZmluZSBFTUFDX1RYQklTVF9TVEFSVF9SVE4JCQkJMHgwMDAwNDAwMAorCisvKiBFTUFDIE9wZXJhdGlvbiBDb250cm9saW5nIFJlZ2lzdGVyIG1hc2tzKi8KKyNkZWZpbmUgRU1BQ19PQ1JfUk9NQ0tTRQkJCQkweDAwMDAwMDAzCisjZGVmaW5lIEVNQUNfT0NSX01EQ0NLU0UJCQkJMHgwMDAwMDAwQworI2RlZmluZSBFTUFDX09DUl9NSUlGREwJCQkJMHgwMDAwMDAxMAorI2RlZmluZSBFTUFDX09DUl9NSUkxMDBMCQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgRU1BQ19PQ1JfTUlJTElOS0wJCQkJMHgwMDAwMDA0MAorI2RlZmluZSBFTUFDX09DUl9NSUlDT05OCQkJCTB4MDAwMDAwODAKKyNkZWZpbmUgRU1BQ19PQ1JfVEVTVE1PREUJCQkJMHgwMDAwMDEwMAorI2RlZmluZSBFTUFDX09DUl9DQU1ISVRMCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgRU1BQ19PQ1JfRU1BQ0xQQksJCQkJMHgwMDAwMDQwMAorI2RlZmluZSBFTUFDX09DUl9UT1NTX0lOSElCSVQJCQkweDAwMDAwODAwCisjZGVmaW5lIEVNQUNfT0NSX09CX1NSRVNFVAkJCQkweDAwMDAxMDAwCisjZGVmaW5lIEVNQUNfT0NSX0lCX1NSRVNFVAkJCQkweDAwMDAyMDAwCisjZGVmaW5lIEVNQUNfT0NSX0lQX0hSRVNFVAkJCQkweDAwMDA0MDAwCisjZGVmaW5lIEVNQUNfT0NSX1JYUENLU0laRQkJCQkweDAwRkY4MDAwCisjZGVmaW5lIEVNQUNfT0NSX1JFUzI0CQkJCQkweDAxMDAwMDAwCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fNTE1KSB8fCBkZWZpbmVkKENPTkZJR19DT01DRVJUT184MDApCisjZGVmaW5lIEVNQUNfT0NSX1NFTF9NSUlfTU9ERQkJCQkweDAyMDAwMDAwCisjZGVmaW5lIEVNQUNfT0NSX1NXX1NNSUlfT1ZSRAkJCQkweDA0MDAwMDAwCisjZGVmaW5lIEVNQUNfT0NSX1NXX1NNSUlfTU9ERQkJCQkweDA4MDAwMDAwCisjZW5kaWYKKyNkZWZpbmUgRU1BQ19PQ1JfU1RTRkZSRVFJRQkJCQkweDEwMDAwMDAwCisjZGVmaW5lIEVNQUNfT0NSX1JYU1RBVElFCQkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgRU1BQ19PQ1JfVFhTVEFUSUUJCQkJMHg0MDAwMDAwMAorI2RlZmluZSBFTUFDX09DUl9NSUlSUUlFCQkJCTB4ODAwMDAwMDAKKworLyogRU1BQyBJbnB1dCBDb250cm9sbGVkIFJlZ2lzdGVyIG1hc2tzICovCisjZGVmaW5lIEVNQUNfSUNSX1RYRlJNT1BUCQkJCTB4MDAwMDAwMDcKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT181MTUpIHx8IGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzgwMCkKKyNkZWZpbmUgRU1BQ19JQ1JfTUlJMTAwTF9QT0wJCQkJMHgwMDAwMDEwMAorI2RlZmluZSBFTUFDX0lDUl9NSUlGRExfUE9MCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgRU1BQ19JQ1JfTUlJTElOS19QT0wJCQkJMHgwMDAwMDQwMAorI2RlZmluZSBFTUFDX0lDUl9QSFlDVFJMRElTCQkJCTB4MDAwMDgwMDAKKyNlbmRpZgorCisvKiBFTUFDIEkvRiBJbnRlcnJ1cHQgUmVnaXN0ZXIgU3RhdHVzIG1hc2tzICovCisjZGVmaW5lIEVNQUNfSU5QVVRfU1RTRkZSRVFJUlEJCQkweDEwMDAwMDAwCS8vIFJlYWQgT25seQorI2RlZmluZSBFTUFDX0lOUFVUX1JYU1RBVElSUQkJCQkweDIwMDAwMDAwCisjZGVmaW5lIEVNQUNfSU5QVVRfVFhTVEFUSVJRCQkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgRU1BQ19JTlBVVF9NSUlSUUlSUQkJCQkweDgwMDAwMDAwCisvLyBFTUFDIEkvRiBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgKHNhbWUgYXMgcHJldmlzb3VzKQorI2RlZmluZSBFTUFDX0lOUFVUX1NUU0ZGUkVRSUFLCQkJMHgxMDAwMDAwMCAgIC8vIFdyaXRlIE9ubHkKKyNkZWZpbmUgRU1BQ19JTlBVVF9SWFNUQVRJQUsJCQkJMHgyMDAwMDAwMAorI2RlZmluZSBFTUFDX0lOUFVUX1RYU1RBVElBSwkJCQkweDQwMDAwMDAwCisKKy8qIEVNQUMgT3V0cHV0IFN0YXR1cyBtYXNrcyAqLworI2RlZmluZSBFTUFDX09VVF9SRVZfSUQJCQkJCTB4MDAwMDAwMEYKKyNkZWZpbmUgUkVWX1NJTQkJCQkJCQkJMHgwMDAwMDAwRQorCisjZGVmaW5lIEVNQUNfT1VUX0lOVExJTksJCQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgRU1BQ19PVVRfQ0FNTE9BRAkJCQkJMHgwMDAwMDAyMAorCisKKy8qIEVNQUMgUlggc3RhdHVzIEZJRk8gZGF0YSBtYXNrcyAqLworCisjZGVmaW5lIEVNQUNfUlhfU1RBVF9UWVBFCQkJCQkweDE4MDAwMDAwCisjZGVmaW5lIEVNQUNfUlhfU1RBVF9QS1RDTlQJCQkJMHgwMDAwMDBGRgorI2RlZmluZSBFTUFDX1JYX1NUQVRfSVBTVEEJCQkJCTB4MDNGRkZGRkYKKworCisKKy8qIEVNQUNfTUFDQ1RSTCAgYml0cyAqLworI2RlZmluZSBNQUNfSEFMVFJFUQkJMHgwMDAxCisjZGVmaW5lIE1BQ19IQUxUSU1NCQkweDAwMDIKKyNkZWZpbmUgTUFDX1JFU0VUCQkJMHgwMDA0CisjZGVmaW5lIE1BQ19GVUxMRFVQCQkweDAwMDgKKyNkZWZpbmUgTUFDX0xPT1BCQUNLCQkweDAwMTAKKworI2RlZmluZSBNQUNfQ09OTl9NU0sJCTB4MDA2MAorI2RlZmluZSBNQUNfQVVUT1JBVEUJCTB4MDAwMAorI2RlZmluZSBNQUNfMTBNQklUUwkJCTB4MDAyMAorI2RlZmluZSBNQUNfTUlJUkFURQkJCTB4MDA0MAorCisjZGVmaW5lIE1BQ19MT09QMTAJCQkweDAwODAKKyNkZWZpbmUgTUFDX0xOS0NIRwkJCTB4MDEwMAorI2RlZmluZSBNQUNfUkVTOQkJCTB4MDIwMAorI2RlZmluZSBNQUNfTUlTU1JPTEwJCTB4MDQwMAorI2RlZmluZSBNQUNfUkVTMTEJCQkweDA4MDAKKyNkZWZpbmUgTUFDX1JFUzEyCQkJMHgxMDAwCisjZGVmaW5lIE1BQ19FTk1JU1NST0xMCQkweDIwMDAKKyNkZWZpbmUgTUFDX1JFUzE0CQkJMHg0MDAwCisjZGVmaW5lIE1BQ19MSU5LMTAJCQkweDgwMDAKKworLyogRU1BQ19BUkNDVFJMIGJpdHMgKi8KKworI2RlZmluZSBBUkNfU1RBVElPTkFDQwkJMHgwMDAxCisjZGVmaW5lIEFSQ19HUk9VUEFDQwkJMHgwMDAyCisjZGVmaW5lIEFSQ19CUk9BREFDQwkJMHgwMDA0CisjZGVmaW5lIEFSQ19ORUdBUkMJCQkweDAwMDgKKyNkZWZpbmUgQVJDX0NPTVBFTkEJCTB4MDAxMAorI2RlZmluZSBBUkNfUkVTRVJWRUQJCTB4RkZFMAorCisvKiBFTUFDX1RYQ1RSTCBiaXRzICovCisjZGVmaW5lIFRYX0VOCQkJCTB4MDAwMQorI2RlZmluZSBUWF9IQUxUCQkJCTB4MDAwMgorI2RlZmluZSBUWF9OT1BBRAkJCTB4MDAwNAorI2RlZmluZSBUWF9OT0NSQwkJCTB4MDAwOAorI2RlZmluZSBUWF9GQkFDSwkJCTB4MDAxMAorI2RlZmluZSBUWF9OT0VYREVGCQkJMHgwMDIwCisjZGVmaW5lIFRYX1NEUEFVU0UJCQkweDAwNDAKKyNkZWZpbmUgVFhfTUlJMTAJCQkJMHgwMDgwCisKKyNkZWZpbmUgVFhfRU5fVU5ERVIJCTB4MDEwMAorI2RlZmluZSBUWF9FTl9FWERFRgkJCTB4MDIwMAorI2RlZmluZSBUWF9FTl9MQ0FSUgkJCTB4MDQwMAorI2RlZmluZSBUWF9FTl9FWENPTEwJCTB4MDgwMAorI2RlZmluZSBUWF9FTl9MQVRFQ09MTAkJMHgxMDAwCisjZGVmaW5lIFRYX0VOX1RYUEFSCQkJMHgyMDAwCisjZGVmaW5lIFRYX0VOX0NPTVAJCQkweDQwMDAKKworLyogRU1BQ19SWENUUkwgYml0cyAqLworI2RlZmluZSBSWF9FTgkJCQkweDAwMDEKKyNkZWZpbmUgUlhfSEFMVAkJCQkweDAwMDIKKyNkZWZpbmUgUlhfTE9OR0VOCQkJMHgwMDA0CisjZGVmaW5lIFJYX1NIT1JURU4JCQkweDAwMDgKKyNkZWZpbmUgUlhfU1RSSVBDUkMJCQkweDAwMTAKKyNkZWZpbmUgUlhfUEFTU0NUTAkJCTB4MDAyMAorI2RlZmluZSBSWF9JR05PUkVDUkMJCTB4MDA0MAorI2RlZmluZSBSWF9SRVM3CQkJCTB4MDA4MCAvLyByZXNlcnZlZAorCisjZGVmaW5lIFJYX0VOX0FMSUdOCQkJMHgwMTAwCisjZGVmaW5lIFJYX0VOX0NSQ0VSUgkJMHgwMjAwCisjZGVmaW5lIFJYX0VOX09WRVJGTE9XCQkweDA0MDAKKyNkZWZpbmUgUlhfRU5fTE9OR0VSUgkJMHgwODAwCisjZGVmaW5lIFJYX1JFUzEyCQkJMHgxMDAwIC8vIHJlc2VydmVkCisjZGVmaW5lIFJYX0VOX1JYUEFSCQkJMHgyMDAwCisjZGVmaW5lIFJYX0VOX0dPT0QJCQkweDQwMDAKKyNkZWZpbmUgUlhfUkVTMTUJCQkweDgwMDAgLy8gcmVzZXJ2ZWQKKworCisjZGVmaW5lIEVNQUNfTURJT19XUklURQkJCQkJMHg0MDAKKyNkZWZpbmUgRU1BQ19NRElPX0JVU1kJCQkJCTB4ODAwCisjZGVmaW5lIEVNQUNfTURJT19QUkVTVVAJCQkJMHgxMDAwCisjZGVmaW5lIEVNQUNfTURJT19PUEVSQVRJT05fVElNRU9VVAkJMTAKKworCisjZGVmaW5lIEVNQUNfTUlJX01PREUJCTAKKyNkZWZpbmUgRU1BQ19GT1JDRV9STUlJX01PREUJMQorI2RlZmluZSBFTUFDX0ZPUkNFX1NNSUlfTU9ERQkyCisjZGVmaW5lCUVNQUNfUk1JSV9TTUlJX01PREUJMworCisjZW5kaWYgLyogX0VNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vZXhwLWJ1c19jMjAwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vZXhwLWJ1c19jMjAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMDM0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9leHAtYnVzX2MyMDAwLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvZXhwLWJ1cy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMSBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19DT01DRVJUT19FWFBfQlVTX0hfXworI2RlZmluZSBfX0NPTUNFUlRPX0VYUF9CVVNfSF9fCisKKy8qCisgKiAgRXhwYW5zaW9uIEJ1cyBjb250cm9sIHJlZ2lzdGVycworICovCisjZGVmaW5lIEVYUF9TV1JTVF9SRUcgICAgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MDApCisjZGVmaW5lIEVYUF9DU0VOX1JFRyAgICAgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MDQpCisjZGVmaW5lIEVYUF9DUzBfQkFTRV9SRUcgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MDgpCisjZGVmaW5lIEVYUF9DUzFfQkFTRV9SRUcgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MEMpCisjZGVmaW5lIEVYUF9DUzJfQkFTRV9SRUcgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MTApCisjZGVmaW5lIEVYUF9DUzNfQkFTRV9SRUcgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MTQpCisjZGVmaW5lIEVYUF9DUzRfQkFTRV9SRUcgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MTgpCisjZGVmaW5lIEVYUF9DUzBfU0VHX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MUMpCisjZGVmaW5lIEVYUF9DUzFfU0VHX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MjApCisjZGVmaW5lIEVYUF9DUzJfU0VHX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MjQpCisjZGVmaW5lIEVYUF9DUzNfU0VHX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MjgpCisjZGVmaW5lIEVYUF9DUzRfU0VHX1JFRyAgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MkMpCisjZGVmaW5lIEVYUF9DUzBfQ0ZHX1JFRwkJIChDT01DRVJUT19FWFBfQ09ORl9CQVNFICsgMHgzMCkKKyNkZWZpbmUgRVhQX0NTMV9DRkdfUkVHCQkgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDM0KQorI2RlZmluZSBFWFBfQ1MyX0NGR19SRUcJCSAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MzgpCisjZGVmaW5lIEVYUF9DUzNfQ0ZHX1JFRwkJIChDT01DRVJUT19FWFBfQ09ORl9CQVNFICsgMHgzQykKKyNkZWZpbmUgRVhQX0NTNF9DRkdfUkVHCQkgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDQwKQorI2RlZmluZSBFWFBfQ1MwX1RNRzFfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDQ0KQorI2RlZmluZSBFWFBfQ1MxX1RNRzFfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDQ4KQorI2RlZmluZSBFWFBfQ1MyX1RNRzFfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDRDKQorI2RlZmluZSBFWFBfQ1MzX1RNRzFfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDUwKQorI2RlZmluZSBFWFBfQ1M0X1RNRzFfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDU0KQorI2RlZmluZSBFWFBfQ1MwX1RNRzJfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDU4KQorI2RlZmluZSBFWFBfQ1MxX1RNRzJfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDVDKQorI2RlZmluZSBFWFBfQ1MyX1RNRzJfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDYwKQorI2RlZmluZSBFWFBfQ1MzX1RNRzJfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDY0KQorI2RlZmluZSBFWFBfQ1M0X1RNRzJfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDY4KQorI2RlZmluZSBFWFBfQ1MwX1RNRzNfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDZDKQorI2RlZmluZSBFWFBfQ1MxX1RNRzNfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDcwKQorI2RlZmluZSBFWFBfQ1MyX1RNRzNfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDc0KQorI2RlZmluZSBFWFBfQ1MzX1RNRzNfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDc4KQorI2RlZmluZSBFWFBfQ1M0X1RNRzNfUkVHICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDdDKQorI2RlZmluZSBFWFBfQ0xPQ0tfRElWX1JFRyAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDgwKQorCisjZGVmaW5lIEVYUF9NRlNNX1JFRyAgICAgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MTAwKQorI2RlZmluZSBFWFBfQ1NGU01fUkVHICAgICAgICAgICAgKENPTUNFUlRPX0VYUF9DT05GX0JBU0UgKyAweDEwNCkKKyNkZWZpbmUgRVhQX1dSRlNNX1JFRyAgICAgICAgICAgIChDT01DRVJUT19FWFBfQ09ORl9CQVNFICsgMHgxMDgpCisjZGVmaW5lIEVYUF9SREZTTV9SRUcgICAgICAgICAgICAoQ09NQ0VSVE9fRVhQX0NPTkZfQkFTRSArIDB4MTBDKQorCisjZGVmaW5lIEVYUF9TV19SU1QJIDB4MDAwMDAwMDEKKyNkZWZpbmUgRVhQX0NMS19FTiAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEVYUF9DU0JPT1RfRU4gICAgMHgwMDAwMDAwMgorI2RlZmluZSBFWFBfQ1MwX0VOICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRVhQX0NTMV9FTiAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVYUF9DUzJfRU4gICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBFWFBfQ1MzX0VOICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRVhQX0NTNF9FTiAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEVYUF9NRU1fQlVTXzggICAgMHgwMDAwMDAwMAorI2RlZmluZSBFWFBfTUVNX0JVU18xNiAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRVhQX0NTX0hJR0ggICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEVYUF9XRV9ISUdIICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBFWFBfUkVfSElHSCAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRVhQX0FMRV9NT0RFICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVYUF9TVFJCX01PREUgICAgMHgwMDAwMDA4MAorI2RlZmluZSBFWFBfRE1fTU9ERSAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRVhQX05BTkRfTU9ERSAgICAweDAwMDAwMjAwCisjZGVmaW5lIEVYUF9SRFlfRU4gICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBFWFBfUkRZX0VER0UgICAgIDB4MDAwMDA4MDAKKworI2RlZmluZSBDT01DRVJUT19OQU5EX1JEWQlHUElPXzI5CisjZGVmaW5lIENPTUNFUlRPX05BTkRfQ0UJR1BJT18yOAorCisjZGVmaW5lIEJJVF85X01TSwkweDAwMDAwMjAwCisjZGVmaW5lIEJJVF8xMF9NU0sJMHgwMDAwMDQwMAorCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9DT01DRVJUT19DMktfQVNJQykgJiYgZGVmaW5lZChDT05GSUdfTkFORF9UWVBFX1NMQykKKy8vU0xDIE5BTkQgb24gQVNJQyBpcyAxNi1iaXQsIGFuZCBiaXRbMF0gb2YgRXhwIGJ1cyBpcyB1c2VkIGZvciBkYXRhIG1hc2sKKy8vaGVuY2UgdGhlIEFMRSBhbmQgQ0xFIHNpZ25hbCBpcyBzaGlmdGVkIGJ5IDEgYml0CisjZGVmaW5lIENPTUNFUlRPX05BTkRfQUxFCShCSVRfOV9NU0sgPDwgMSkKKyNkZWZpbmUgQ09NQ0VSVE9fTkFORF9DTEUJKEJJVF8xMF9NU0sgPDwgMSkKKyNlbHNlCisjZGVmaW5lIENPTUNFUlRPX05BTkRfQUxFCUJJVF85X01TSworI2RlZmluZSBDT01DRVJUT19OQU5EX0NMRQlCSVRfMTBfTVNLCisjZW5kaWYKKworI2VuZGlmCS8qIF9fQ09NQ0VSVE9fRVhQX0JVU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2dwaW9fYzIwMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2dwaW9fYzIwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTExZTUxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vZ3Bpb19jMjAwMC5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfX0dQSU9fQzIwMDBfSF9fCisjZGVmaW5lIF9fR1BJT19DMjAwMF9IX18KKworLyoqKioqIEdQSU8gICoqKioqLworI2RlZmluZSBDT01DRVJUT19HUElPX09VVFBVVF9SRUcJCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4MDApCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fT0VfUkVHCQkJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHgwNCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19JTlRfQ0ZHX1JFRwkJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHgwOCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19BUk1fVU5BTElHTkVEX0xPR0lDX0VOQUJMRQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4MEMpCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fSU5QVVRfUkVHCQkJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHgxMCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19BUEJfV1MJCQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDE0KQorI2RlZmluZSBDT01DRVJUT19HUElPX1NZU1RFTV9DT05GSUcJCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4MUMpCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fTUJJU1QJCQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDIwKQorI2RlZmluZSBDT01DRVJUT19HUElPX1RETV9NVVgJCQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDI4KQorI2RlZmluZSBDT01DRVJUT19HUElPX0FSTV9JRAkJCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4MzApCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fUEFEX0NUUkwJCQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDM0KQorI2RlZmluZSBDT01DRVJUT19HUElPX0JPT1RTVFJBUF9TVEFUVVMJCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4NDApCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fQk9PVFNUUkFQX09WRVJSSURFCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4NDQpCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fVVNCX1BIWV9CSVNUX1NUQVRVU19SRUcJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHg0OCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19HRU5FUkFMX0NPTlRST0xfUkVHCQkoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4NEMpCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fREVWSUNFX0lEX1JFRwkJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHg1MCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19BUk1fTUVNT1JZX1NFTlNFX0FNUAkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDU0KQorI2RlZmluZSBDT01DRVJUT19HUElPX1BJTl9TRUxFQ1RfUkVHCQkJKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDU4KQorI2RlZmluZSBDT01DRVJUT19HUElPX01JU0NfUElOX1NFTEVDVF9SRUcJCShDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHg2MCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHMCAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDEwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHMyAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDEwQykKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHNCAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDExMCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19QQURfQ09ORklHNSAgICAgICAgICAgICAgICAgICAgICAgKENPTUNFUlRPX0FQQl9HUElPX0JBU0UgKyAweDExNCkKKyNkZWZpbmUgQ09NQ0VSVE9fR1BJT19NRU1fRU1BX0NPTkZJRzAgICAgICAgICAgICAgICAgICAgICAgIChDT01DRVJUT19BUEJfR1BJT19CQVNFICsgMHgxQTApCisjZGVmaW5lIENPTUNFUlRPX0dQSU9fTUVNX0VNQV9DT05GSUcxICAgICAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fQVBCX0dQSU9fQkFTRSArIDB4MUE0KQorCisjZGVmaW5lIEdQSU9fMAkJMHgwMDAwMDAwMQorI2RlZmluZSBHUElPXzEJCTB4MDAwMDAwMDIKKyNkZWZpbmUgR1BJT18yCQkweDAwMDAwMDA0CisjZGVmaW5lIEdQSU9fMwkJMHgwMDAwMDAwOAorI2RlZmluZSBHUElPXzQJCTB4MDAwMDAwMTAKKyNkZWZpbmUgR1BJT181CQkweDAwMDAwMDIwCisjZGVmaW5lIEdQSU9fNgkgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgR1BJT183CQkweDAwMDAwMDgwCisjZGVmaW5lIEdQSU9fOAkJMHgwMDAwMDEwMAorI2RlZmluZSBHUElPXzkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgR1BJT18xMAkJMHgwMDAwMDQwMAorI2RlZmluZSBHUElPXzExCQkweDAwMDAwODAwCisjZGVmaW5lIEdQSU9fMTIJCTB4MDAwMDEwMDAKKyNkZWZpbmUgR1BJT18xMwkJMHgwMDAwMjAwMAorI2RlZmluZSBHUElPXzE0CQkweDAwMDA0MDAwCisjZGVmaW5lIEdQSU9fMTUJCTB4MDAwMDgwMDAKKyNkZWZpbmUgR1BJT18xNgkJMHgwMDAxMDAwMAorI2RlZmluZSBHUElPXzE3CQkweDAwMDIwMDAwCisjZGVmaW5lIEdQSU9fMTgJCTB4MDAwNDAwMDAKKyNkZWZpbmUgR1BJT18xOQkJMHgwMDA4MDAwMAorI2RlZmluZSBHUElPXzIwCQkweDAwMTAwMDAwCisjZGVmaW5lIEdQSU9fMjEJCTB4MDAyMDAwMDAKKyNkZWZpbmUgR1BJT18yMgkJMHgwMDQwMDAwMAorI2RlZmluZSBHUElPXzIzCQkweDAwODAwMDAwCisjZGVmaW5lIEdQSU9fMjQJCTB4MDEwMDAwMDAKKyNkZWZpbmUgR1BJT18yNQkJMHgwMjAwMDAwMAorI2RlZmluZSBHUElPXzI2CQkweDA0MDAwMDAwCisjZGVmaW5lIEdQSU9fMjcJCTB4MDgwMDAwMDAKKyNkZWZpbmUgR1BJT18yOAkJMHgxMDAwMDAwMAorI2RlZmluZSBHUElPXzI5CQkweDIwMDAwMDAwCisjZGVmaW5lIEdQSU9fMzAJCTB4NDAwMDAwMDAKKyNkZWZpbmUgR1BJT18zMQkJMHg4MDAwMDAwMAorCisKKworLyogQm9vdHN0cmFwIGNvbmZpZ3VyYXRpb24gYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIEJPT1RTVFJBUF9TRVJERVMyX0NORl9TR01JSQkoMSA8PCAxMCkKKyNkZWZpbmUgQk9PVFNUUkFQX1NFUkRFUzFfQ05GX1NBVEEwCSgxIDw8IDExKQorCisKKy8qIEdQSU8gUGluIFNlbGVjdCBQaW5zICovCisjZGVmaW5lIEVYUF9OQU5EX1JEWQlHUElPXzI5CisjZGVmaW5lIEVYUF9OQU5EX0NTCUdQSU9fMjgKKworI2RlZmluZSBESVNBQkxFX0ZBQlJJQ19SRU1BUCAweDEwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwNGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2hhcmR3YXJlLmgKQEAgLTAsMCArMSwyNiBAQAorI2lmbmRlZiBfX0hBUkRXQVJFX0hfXworI2RlZmluZSBfX0hBUkRXQVJFX0hfXworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDAwKQorI2luY2x1ZGUgImNvbWNlcnRvXzEwMDAuaCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzEwMCkKKyNpbmNsdWRlICJjb21jZXJ0b18xMDAuaCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzUzMCkKKyNpbmNsdWRlICJjb21jZXJ0b181MzAuaCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzUxNSkKKyNpbmNsdWRlICJjb21jZXJ0b181MTUuaCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzgwMCkKKyNpbmNsdWRlICJjb21jZXJ0b184MDAuaCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzkwMCkKKyNpbmNsdWRlICJjb21jZXJ0b185MDAuaCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzIwMDApCisjaW5jbHVkZSAiY29tY2VydG9fMjAwMC5oIgorI2Vsc2UKKyNlcnJvciBubyBhcmNoaXRlY3R1cmUgc2VsZWN0ZWQhISEKKyNlbmRpZgorCisKKyNkZWZpbmUgQ1NFX0JPT1QJNAorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9pZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9pZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkwYjlhNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2lkbWEuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX0lETUFfSAorI2RlZmluZSBfSURNQV9ICisKKyNkZWZpbmUgSERNQV9TT0ZUX1JFU0VUCQkJKElETUFfQkFTRUFERFIgKyAweDAwMDApCisKKyNkZWZpbmUgSURNQV9FTUFDMF9CQVNFQUREUgkJKElETUFfQkFTRUFERFIgKyAweDAxMDApCisKKyNkZWZpbmUgTU1QVV9TVEFSVAkJCShJRE1BX0JBU0VBRERSICsgMHgwMjAwKQorI2RlZmluZSBNTVBVX0hFQUQJCQkoSURNQV9CQVNFQUREUiArIDB4MDIwNCkKKyNkZWZpbmUgTU1QVV9CVVJTVAkJCShJRE1BX0JBU0VBRERSICsgMHgwMjA4KQorI2RlZmluZSBNTVBVX1NPRlRfUkVTRVQJCQkoSURNQV9CQVNFQUREUiArIDB4MDIyMCkKKworI2RlZmluZSBQVU1NX1NUQVJUCQkJKElETUFfQkFTRUFERFIgKyAweDAyODApCisjZGVmaW5lIFBVTU1fSEVBRAkJCShJRE1BX0JBU0VBRERSICsgMHgwMjg0KQorI2RlZmluZSBQVU1NX0JVUlNUCQkJKElETUFfQkFTRUFERFIgKyAweDAyODgpCisjZGVmaW5lIFBVTU1fU09GVF9SRVNFVAkJCShJRE1BX0JBU0VBRERSICsgMHgwMkEwKQorCisjZGVmaW5lIE1NRklGT19TVEFSVAkJCShJRE1BX0JBU0VBRERSICsgMHgwMzAwKQorI2RlZmluZSBNTUZJRk9fSEVBRAkJCShJRE1BX0JBU0VBRERSICsgMHgwMzA0KQorI2RlZmluZSBNTUZJRk9fQlVSU1QJCQkoSURNQV9CQVNFQUREUiArIDB4MDMwOCkKKyNkZWZpbmUgTU1GSUZPX1NPRlRfUkVTRVQJCShJRE1BX0JBU0VBRERSICsgMHgwMzIwKQorCisjZGVmaW5lIEZJRk9NTV9TVEFSVAkJCShJRE1BX0JBU0VBRERSICsgMHgwMzgwKQorI2RlZmluZSBGSUZPTU1fSEVBRAkJCShJRE1BX0JBU0VBRERSICsgMHgwMzg0KQorI2RlZmluZSBGSUZPTU1fQlVSU1QJCQkoSURNQV9CQVNFQUREUiArIDB4MDM4OCkKKyNkZWZpbmUgRklGT01NX1NPRlRfUkVTRVQJCShJRE1BX0JBU0VBRERSICsgMHgwM0EwKQorCisjZGVmaW5lIElETUFfRU1BQzFfQkFTRUFERFIJCShJRE1BX0JBU0VBRERSICsgMHgwNzAwKQorCisvKiBNZW1vcnkgdG8gRU1BQyByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIE1NRU1fU1RBUlQJCQkweDAwCisjZGVmaW5lIE1NRU1fSEVBRAkJCTB4MDQKKyNkZWZpbmUgTU1FTV9CVVJTVAkJCTB4MDgKKyNkZWZpbmUgTU1FTV9TT0ZUX1JFU0VUCQkJMHgyMAorCisKKy8qIEVNQUMgdG8gTWVtb3J5IHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgRU1NTV9TVEFSVAkJCTB4ODAKKyNkZWZpbmUgRU1NTV9IRUFECQkJMHg4NAorI2RlZmluZSBFTU1NX0JVUlNUCQkJMHg4OAorI2RlZmluZSBFTU1NX1NPRlRfUkVTRVQJCQkweEEwCisKKworCisjZGVmaW5lCUZERVNDX0FMSUdOX0JZVEVTCQkweDEwCisKKy8vKioqKioqKioqKioqIElETUEgcmVnaXN0ZXJzIGFuZCBtYXNrcyAqKioqKioqKioqKioqKioqKgorI2RlZmluZSBJRE1BX0ZTVEFUVVNfRlJBTUVfRE9ORV9NQVNLCTB4ODAwMDAwMDAKKyNkZWZpbmUgSURNQV9GU1RBVFVTX1NUQVRVU19NQVNLCQkJMHgwM0ZGRkZGRgorCisjZGVmaW5lIElETUFfRkNPTlRST0xfUEhZX05CX01BU0sJCTB4MDAwMDAwNzAKKyNkZWZpbmUgSURNQV9GQ09OVFJPTF9QSFlfT0ZGU0VUCQkJMHgwMDAwMDAwNAorCisjZGVmaW5lIElETUFfRkNPTlRST0xfSVJRRU4JCQkJMHgwMDAwMDAwNAorI2RlZmluZSBJRE1BX0ZDT05UUk9MX0ZMQVNUCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgSURNQV9GQ09OVFJPTF9GUkVBRFkJCQkJMHgwMDAwMDAwMQorCisjZGVmaW5lIElETUFfQkNPTlRST0xfQkxBU1QJCQkJMHgwMDAxMDAwMAorI2RlZmluZSBJRE1BX0JDT05UUk9MX0JMRU5fTUFTSwkJCTB4MDAwMEZGRkYKKworI2RlZmluZSBJRE1BX0ZTVEFUVVNfRkRPTkUJCQkJMHg4MDAwMDAwMAorI2RlZmluZSBJRE1BX0ZTVEFUVVNfQklUMjcJCQkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgSURNQV9GU1RBVFVTX0ZLRUVQCQkJCTB4MDQwMDAwMDAKKworCisjZGVmaW5lIElETUFfU1RBUlQJCQkJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBJRE1BX0JVUlNUX01BU0sJCQkJCTB4MDAwMDAwRkYKKyNkZWZpbmUgSURNQV9QUlRZX01BU0sJCQkJCQkweDAwMDAwNzAwCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2xpbmthZ2VfYzIwMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL2xpbmthZ2VfYzIwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTI1NjMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vbGlua2FnZV9jMjAwMC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19BU01fTElOS0FHRV9ICisjZGVmaW5lIF9fQVNNX0xJTktBR0VfSAorCisjZGVmaW5lIF9fQUxJR04gLmFsaWduIDAKKyNkZWZpbmUgX19BTElHTl9TVFIgIi5hbGlnbiAwIgorCisjZGVmaW5lIEVORFBST0MobmFtZSkgXAorICAudHlwZSBuYW1lLCAlZnVuY3Rpb247IFwKKyAgRU5EKG5hbWUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vc3BpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjAxMzY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8vc3BpLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNworICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqICBSZXZpc2lvbiAxLjIgIDIwMDcvMDQvMjggCUl1cmlpLkdvbG92YWNoCisgKiAgCXRoZSBTUiBzdGF0dXMgcmVnaXN0ZXIgYml0cyB3ZXJlIGFkZGVkCisgKi8KKworI2lmbmRlZiBfU1BJX0gKKyNkZWZpbmUgX1NQSV9ICisKKy8qIFNQSSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1BJX0NUUkxSMAkoU1BJX0JBU0VBRERSICsgMHgwMCkKKyNkZWZpbmUgU1BJX0NUUkxSMQkoU1BJX0JBU0VBRERSICsgMHgwNCkKKyNkZWZpbmUgU1BJX1NTSUVOUgkoU1BJX0JBU0VBRERSICsgMHgwOCkKKyNkZWZpbmUgU1BJX01XQ1IJKFNQSV9CQVNFQUREUiArIDB4MGMpCisjZGVmaW5lIFNQSV9TRVIJCShTUElfQkFTRUFERFIgKyAweDEwKQorI2RlZmluZSBTUElfQkFVRFIJKFNQSV9CQVNFQUREUiArIDB4MTQpCisjZGVmaW5lIFNQSV9UWEZUTFIJKFNQSV9CQVNFQUREUiArIDB4MTgpCisjZGVmaW5lIFNQSV9SWEZUTFIJKFNQSV9CQVNFQUREUiArIDB4MWMpCisjZGVmaW5lIFNQSV9UWEZMUgkoU1BJX0JBU0VBRERSICsgMHgyMCkKKyNkZWZpbmUgU1BJX1JYRkxSCShTUElfQkFTRUFERFIgKyAweDI0KQorI2RlZmluZSBTUElfU1IJCShTUElfQkFTRUFERFIgKyAweDI4KQorI2RlZmluZSBTUElfSU1SCQkoU1BJX0JBU0VBRERSICsgMHgyYykKKyNkZWZpbmUgU1BJX0lTUgkJKFNQSV9CQVNFQUREUiArIDB4MzApCisjZGVmaW5lIFNQSV9SSVNSCShTUElfQkFTRUFERFIgKyAweDM0KQorI2RlZmluZSBTUElfVFhPSUNSCShTUElfQkFTRUFERFIgKyAweDM4KQorI2RlZmluZSBTUElfUlhPSUNSCShTUElfQkFTRUFERFIgKyAweDNjKQorI2RlZmluZSBTUElfUlhVSUNSCShTUElfQkFTRUFERFIgKyAweDQwKQorI2RlZmluZSBTUElfTVNUSUNSCShTUElfQkFTRUFERFIgKyAweDQ0KQorI2RlZmluZSBTUElfSUNSCQkoU1BJX0JBU0VBRERSICsgMHg0OCkKKyNkZWZpbmUgU1BJX0lEUgkJKFNQSV9CQVNFQUREUiArIDB4NTgpCisjZGVmaW5lIFNQSV9EUgkJKFNQSV9CQVNFQUREUiArIDB4NjApCisKKy8qIFNSIC0gc3RhdHVzIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgQlVTWQkJKDEgPDwgMCkJLyogU1NJIGJ1c3kgZmxhZywgc2VyaWFsIHRyYW5zZmVyIGluIHByb2dyZXNzICovCisjZGVmaW5lIFRGTkYJCSgxIDw8IDEpCS8qIFRyYW5zbWl0IEZJRk8gbm90IGZ1bGwgKi8KKyNkZWZpbmUgVEZFCQkoMSA8PCAyKQkvKiBUcmFuc21pdCBGSUZPIGVtcHR5ICovCisjZGVmaW5lIFJGTkUJCSgxIDw8IDMpCS8qIFJlY2VpdmUgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgUkZGCQkoMSA8PCA0KQkvKiBSZWNlaXZlIEZJRk8gZnVsbCAqLworI2RlZmluZSBUWEUJCSgxIDw8IDUpCS8qIFRyYW5zbWlzc2lvbiBlcnJvciAqLworI2RlZmluZSBEQ09MCQkoMSA8PCA2KQkvKiBEYXRhIGNvbGxpc2lvbiBlcnJvciAqLworCisjZW5kaWYgLyogX1NQSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9zeXNfcHJvdG8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL3N5c19wcm90by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNjFkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9zeXNfcHJvdG8uaApAQCAtMCwwICsxLDY3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA0LTIwMDgKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgL1BVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgICovCisjaWZuZGVmIF9TWVNfUFJPVE9fSF8KKyNkZWZpbmUgX1NZU19QUk9UT19IXworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIG10eXBlOworCWNoYXIgKmJvYXJkX3N0cmluZzsKKwljaGFyICpuYW5kX3N0cmluZzsKK30gb21hcDNfc3lzaW5mbzsKKwordm9pZCBwcmNtX2luaXQodm9pZCk7Cit2b2lkIHBlcl9jbG9ja3NfZW5hYmxlKHZvaWQpOworCit2b2lkIG1lbWlmX2luaXQodm9pZCk7Cit2b2lkIHNkcmNfaW5pdCh2b2lkKTsKK3ZvaWQgZG9fc2RyY19pbml0KHUzMiwgdTMyKTsKK3ZvaWQgZ3BtY19pbml0KHZvaWQpOworCit2b2lkIHdhdGNoZG9nX2luaXQodm9pZCk7Cit2b2lkIHNldF9tdXhjb25mX3JlZ3Modm9pZCk7CisKK3UzMiBnZXRfY3B1X3Jldih2b2lkKTsKK3UzMiBnZXRfbWVtX3R5cGUodm9pZCk7Cit1MzIgZ2V0X3N5c2Jvb3RfdmFsdWUodm9pZCk7Cit1MzIgaXNfZ3BtY19tdXhlZCh2b2lkKTsKK3UzMiBnZXRfZ3BtYzBfdHlwZSh2b2lkKTsKK3UzMiBnZXRfZ3BtYzBfd2lkdGgodm9pZCk7Cit1MzIgZ2V0X3Nkcl9jc19zaXplKHUzMik7Cit1MzIgZ2V0X3Nkcl9jc19vZmZzZXQodTMyKTsKK3UzMiBpc19ydW5uaW5nX2luX3NkcmFtKHZvaWQpOwordTMyIGlzX3J1bm5pbmdfaW5fc3JhbSh2b2lkKTsKK3UzMiBpc19ydW5uaW5nX2luX2ZsYXNoKHZvaWQpOwordTMyIGdldF9kZXZpY2VfdHlwZSh2b2lkKTsKK3ZvaWQgbDJjYWNoZV9lbmFibGUodm9pZCk7Cit2b2lkIHNlY3VyZXdvcmxkX2V4aXQodm9pZCk7Cit2b2lkIHNldHVwX2F1eGNyKHZvaWQpOwordm9pZCB0cnlfdW5sb2NrX21lbW9yeSh2b2lkKTsKK3UzMiBnZXRfYm9vdF90eXBlKHZvaWQpOwordm9pZCB2N19mbHVzaF9kY2FjaGVfYWxsKHUzMik7Cit2b2lkIHNyMzIodm9pZCAqLCB1MzIsIHUzMiwgdTMyKTsKK3UzMiB3YWl0X29uX3ZhbHVlKHUzMiwgdTMyLCB2b2lkICosIHUzMik7Cit2b2lkIHNkZWxheSh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgbWFrZV9jczFfY29udGlndW91cyh2b2lkKTsKK3ZvaWQgb21hcF9uYW5kX3N3aXRjaF9lY2MoaW50KTsKK3ZvaWQgcG93ZXJfaW5pdF9yKHZvaWQpOwordm9pZCBkaWVpZF9udW1fcih2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9zeXN0ZW1fYzIwMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNvbWNlcnRvL3N5c3RlbV9jMjAwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZDYzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0by9zeXN0ZW1fYzIwMDAuaApAQCAtMCwwICsxLDcyIEBACisjaWZuZGVmIF9fQVNNX0FSTV9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9BUk1fU1lTVEVNX0gKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA3CisjZGVmaW5lIGlzYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgiaXNiIiA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgZHNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJkc2IiIDogOiA6ICJtZW1vcnkiKQorI2RlZmluZSBkbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRtYiIgOiA6IDogIm1lbW9yeSIpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfWFNDMykgfHwgX19MSU5VWF9BUk1fQVJDSF9fID09IDYKKyNkZWZpbmUgaXNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA0IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDogInIiICgwKSA6ICJtZW1vcnkiKQorI2RlZmluZSBkc2IoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDogInIiICgwKSA6ICJtZW1vcnkiKQorI2RlZmluZSBkbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA1IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDogInIiICgwKSA6ICJtZW1vcnkiKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZBNTI2KQorI2RlZmluZSBpc2IoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTUsIDAsICUwLCBjNywgYzUsIDQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogOiAiciIgKDApIDogIm1lbW9yeSIpCisjZGVmaW5lIGRzYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogOiAiciIgKDApIDogIm1lbW9yeSIpCisjZGVmaW5lIGRtYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgiIiA6IDogOiAibWVtb3J5IikKKyNlbHNlCisjZGVmaW5lIGlzYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgiIiA6IDogOiAibWVtb3J5IikKKyNkZWZpbmUgZHNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKKyNkZWZpbmUgZG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogOiA6ICJtZW1vcnkiKQorI2VuZGlmCisKKy8qCisgKiBDUjEgYml0cyAoQ1AjMTUgQ1IxKQorICovCisjZGVmaW5lIENSX00gICAgKDEgPDwgMCkJLyogTU1VIGVuYWJsZQkJCQkqLworI2RlZmluZSBDUl9BICAgICgxIDw8IDEpCS8qIEFsaWdubWVudCBhYm9ydCBlbmFibGUJCSovCisjZGVmaW5lIENSX0MgICAgKDEgPDwgMikJLyogRGNhY2hlIGVuYWJsZQkJCSovCisjZGVmaW5lIENSX1cgICAgKDEgPDwgMykJLyogV3JpdGUgYnVmZmVyIGVuYWJsZQkJCSovCisjZGVmaW5lIENSX1AgICAgKDEgPDwgNCkJLyogMzItYml0IGV4Y2VwdGlvbiBoYW5kbGVyCQkqLworI2RlZmluZSBDUl9EICAgICgxIDw8IDUpCS8qIDMyLWJpdCBkYXRhIGFkZHJlc3MgcmFuZ2UJCSovCisjZGVmaW5lIENSX0wgICAgKDEgPDwgNikJLyogSW1wbGVtZW50YXRpb24gZGVmaW5lZAkJKi8KKyNkZWZpbmUgQ1JfQiAgICAoMSA8PCA3KQkvKiBCaWcgZW5kaWFuCQkJCSovCisjZGVmaW5lIENSX1MgICAgKDEgPDwgOCkJLyogU3lzdGVtIE1NVSBwcm90ZWN0aW9uCQkqLworI2RlZmluZSBDUl9SICAgICgxIDw8IDkpCS8qIFJPTSBNTVUgcHJvdGVjdGlvbgkJCSovCisjZGVmaW5lIENSX0YgICAgKDEgPDwgMTApCS8qIEltcGxlbWVudGF0aW9uIGRlZmluZWQJCSovCisjZGVmaW5lIENSX1ogICAgKDEgPDwgMTEpCS8qIEltcGxlbWVudGF0aW9uIGRlZmluZWQJCSovCisjZGVmaW5lIENSX0kgICAgKDEgPDwgMTIpCS8qIEljYWNoZSBlbmFibGUJCQkqLworI2RlZmluZSBDUl9WICAgICgxIDw8IDEzKQkvKiBWZWN0b3JzIHJlbG9jYXRlZCB0byAweGZmZmYwMDAwCSovCisjZGVmaW5lIENSX1JSICAgKDEgPDwgMTQpCS8qIFJvdW5kIFJvYmluIGNhY2hlIHJlcGxhY2VtZW50CSovCisjZGVmaW5lIENSX0w0ICAgKDEgPDwgMTUpCS8qIExEUiBwYyBjYW4gc2V0IFQgYml0CQkJKi8KKyNkZWZpbmUgQ1JfRFQgICAoMSA8PCAxNikKKyNkZWZpbmUgQ1JfSVQgICAoMSA8PCAxOCkKKyNkZWZpbmUgQ1JfU1QgICAoMSA8PCAxOSkKKyNkZWZpbmUgQ1JfRkkgICAoMSA8PCAyMSkJLyogRmFzdCBpbnRlcnJ1cHQgKGxvd2VyIGxhdGVuY3kgbW9kZSkJKi8KKyNkZWZpbmUgQ1JfVSAgICAoMSA8PCAyMikJLyogVW5hbGlnbmVkIGFjY2VzcyBvcGVyYXRpb24JCSovCisjZGVmaW5lIENSX1hQICAgKDEgPDwgMjMpCS8qIEV4dGVuZGVkIHBhZ2UgdGFibGVzCQkJKi8KKyNkZWZpbmUgQ1JfVkUgICAoMSA8PCAyNCkJLyogVmVjdG9yZWQgaW50ZXJydXB0cwkJCSovCisjZGVmaW5lIENSX0VFICAgKDEgPDwgMjUpCS8qIEV4Y2VwdGlvbiAoQmlnKSBFbmRpYW4JCSovCisjZGVmaW5lIENSX1RSRSAgKDEgPDwgMjgpCS8qIFRFWCByZW1hcCBlbmFibGUJCQkqLworI2RlZmluZSBDUl9BRkUgICgxIDw8IDI5KQkvKiBBY2Nlc3MgZmxhZyBlbmFibGUJCQkqLworI2RlZmluZSBDUl9URSAgICgxIDw8IDMwKQkvKiBUaHVtYiBleGNlcHRpb24gZW5hYmxlCQkqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfY3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWFzbSgibXJjIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCAgQCBnZXQgQ1IiIDogIj1yIiAodmFsKSA6IDogImNjIik7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9jcih1bnNpZ25lZCBpbnQgdmFsKQoreworCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCBAIHNldCBDUiIKKwkgIDogOiAiciIgKHZhbCkgOiAiY2MiKTsKKwlpc2IoKTsKK30KKyNlbmRpZiAvKiBfX0FTTV9BUk1fU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hc3NlbWJsZXIuaCBiL2luY2x1ZGUvYXNtLWFybS9hc3NlbWJsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTE2ZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2Fzc2VtYmxlci5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2Fzc2VtYmxlci5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ni0yMDAwIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyBhcm0gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGRlZmluZXMKKyAqICBmb3IgdGhlIGRpZmZlcmVudCBwcm9jZXNzb3JzLgorICoKKyAqICBEbyBub3QgaW5jbHVkZSBhbnkgQyBkZWNsYXJhdGlvbnMgaW4gdGhpcyBmaWxlIC0gaXQgaXMgaW5jbHVkZWQgYnkKKyAqICBhc3NlbWJsZXIgc291cmNlLgorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2Vycm9yICJPbmx5IGluY2x1ZGUgdGhpcyBmcm9tIGFzc2VtYmx5IGNvZGUiCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyoKKyAqIEVuZGlhbiBpbmRlcGVuZGVudCBtYWNyb3MgZm9yIHNoaWZ0aW5nIGJ5dGVzIHdpdGhpbiByZWdpc3RlcnMuCisgKi8KKyNpZm5kZWYgX19BUk1FQl9fCisjZGVmaW5lIHB1bGwgICAgICAgICAgICBsc3IKKyNkZWZpbmUgcHVzaCAgICAgICAgICAgIGxzbAorI2RlZmluZSBnZXRfYnl0ZV8wICAgICAgbHNsICMwCisjZGVmaW5lIGdldF9ieXRlXzEJbHNyICM4CisjZGVmaW5lIGdldF9ieXRlXzIJbHNyICMxNgorI2RlZmluZSBnZXRfYnl0ZV8zCWxzciAjMjQKKyNkZWZpbmUgcHV0X2J5dGVfMCAgICAgIGxzbCAjMAorI2RlZmluZSBwdXRfYnl0ZV8xCWxzbCAjOAorI2RlZmluZSBwdXRfYnl0ZV8yCWxzbCAjMTYKKyNkZWZpbmUgcHV0X2J5dGVfMwlsc2wgIzI0CisjZWxzZQorI2RlZmluZSBwdWxsICAgICAgICAgICAgbHNsCisjZGVmaW5lIHB1c2ggICAgICAgICAgICBsc3IKKyNkZWZpbmUgZ2V0X2J5dGVfMAlsc3IgIzI0CisjZGVmaW5lIGdldF9ieXRlXzEJbHNyICMxNgorI2RlZmluZSBnZXRfYnl0ZV8yCWxzciAjOAorI2RlZmluZSBnZXRfYnl0ZV8zICAgICAgbHNsICMwCisjZGVmaW5lIHB1dF9ieXRlXzAJbHNsICMyNAorI2RlZmluZSBwdXRfYnl0ZV8xCWxzbCAjMTYKKyNkZWZpbmUgcHV0X2J5dGVfMglsc2wgIzgKKyNkZWZpbmUgcHV0X2J5dGVfMyAgICAgIGxzbCAjMAorI2VuZGlmCisKKy8qCisgKiBEYXRhIHByZWxvYWQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0CisgKi8KKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNQorI2RlZmluZSBQTEQoY29kZS4uLikJY29kZQorI2Vsc2UKKyNkZWZpbmUgUExEKGNvZGUuLi4pCisjZW5kaWYKKworLyoKKyAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGNvZGUgdG8gY2FjaGVsaW5lIGFsaWduIHRoZSBkZXN0aW5hdGlvbgorICogcG9pbnRlciB3aGVuIGJ1bGsgd3JpdGluZyB0byBtZW1vcnkuICBFeHBlcmltZW50cyBvbiBTdHJvbmdBUk0gYW5kCisgKiBYU2NhbGUgZGlkbid0IHNob3cgdGhpcyBhIHdvcnRod2hpbGUgdGhpbmcgdG8gZG8gd2hlbiB0aGUgY2FjaGUgaXMgbm90CisgKiBzZXQgdG8gd3JpdGUtYWxsb2NhdGUgKHRoaXMgd291bGQgbmVlZCBmdXJ0aGVyIHRlc3Rpbmcgb24gWFNjYWxlIHdoZW4gV0EKKyAqIGlzIHVzZWQpLgorICoKKyAqIE9uIEZlcm9jZW9uIHRoZXJlIGlzIG11Y2ggdG8gZ2FpbiBob3dldmVyLCByZWdhcmRsZXNzIG9mIGNhY2hlIG1vZGUuCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX0ZFUk9DRU9OCisjZGVmaW5lIENBTEdOKGNvZGUuLi4pIGNvZGUKKyNlbHNlCisjZGVmaW5lIENBTEdOKGNvZGUuLi4pCisjZW5kaWYKKworLyoKKyAqIEVuYWJsZSBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzCisgKi8KKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgorCS5tYWNybwlkaXNhYmxlX2lycQorCWNwc2lkCWkKKwkuZW5kbQorCisJLm1hY3JvCWVuYWJsZV9pcnEKKwljcHNpZQlpCisJLmVuZG0KKyNlbHNlCisJLm1hY3JvCWRpc2FibGVfaXJxCisJbXNyCWNwc3JfYywgI1BTUl9JX0JJVCB8IFNWQ19NT0RFCisJLmVuZG0KKworCS5tYWNybwllbmFibGVfaXJxCisJbXNyCWNwc3JfYywgI1NWQ19NT0RFCisJLmVuZG0KKyNlbmRpZgorCisvKgorICogU2F2ZSB0aGUgY3VycmVudCBJUlEgc3RhdGUgYW5kIGRpc2FibGUgSVJRcy4gIE5vdGUgdGhhdCB0aGlzIG1hY3JvCisgKiBhc3N1bWVzIEZJUXMgYXJlIGVuYWJsZWQsIGFuZCB0aGF0IHRoZSBwcm9jZXNzb3IgaXMgaW4gU1ZDIG1vZGUuCisgKi8KKwkubWFjcm8Jc2F2ZV9hbmRfZGlzYWJsZV9pcnFzLCBvbGRjcHNyCisJbXJzCVxvbGRjcHNyLCBjcHNyCisJZGlzYWJsZV9pcnEKKwkuZW5kbQorCisvKgorICogUmVzdG9yZSBpbnRlcnJ1cHQgc3RhdGUgcHJldmlvdXNseSBzdG9yZWQgaW4gYSByZWdpc3Rlci4gIFdlIGRvbid0CisgKiBndWFyYW50ZWUgdGhhdCB0aGlzIHdpbGwgcHJlc2VydmUgdGhlIGZsYWdzLgorICovCisJLm1hY3JvCXJlc3RvcmVfaXJxcywgb2xkY3BzcgorCW1zcgljcHNyX2MsIFxvbGRjcHNyCisJLmVuZG0KKworI2RlZmluZSBVU0VSKHguLi4pCQkJCVwKKzk5OTk6CXg7CQkJCQlcCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSI7CQlcCisJLmFsaWduCTM7CQkJCVwKKwkubG9uZwk5OTk5Yiw5MDAxZjsJCQlcCisJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC10eXBlcy5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gtdHlwZXMuaAppbmRleCA3ZDc4ODhlLi5kNGVhZTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC10eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoLXR5cGVzLmgKQEAgLTczNyw2ICs3MzcsNyBAQAogI2RlZmluZSBNQUNIX1RZUEVfQ0IzUlVGQyAgICAgICAgICAgICAgNzI2CiAjZGVmaW5lIE1BQ0hfVFlQRV9NUDJVU0IgICAgICAgICAgICAgICA3MjcKICNkZWZpbmUgTUFDSF9UWVBFX1BETkIzICAgICAgICAgICAgICAgMTAwMgorI2RlZmluZSBNQUNIX1RZUEVfQ09NQ0VSVE8gICAgICAgICAgICAgMTA5NAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfRUJTQTExMAogIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1hcm0vdHlwZXMuaAppbmRleCAxM2U5ODA2Li5iYTc5OTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdHlwZXMuaApAQCAtNDUsNiArNDUsOSBAQAogCiB0eXBlZGVmIHUzMiBkbWFfYWRkcl90OwogCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGh5c19zaXplX3Q7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3UtYm9vdC5oIGIvaW5jbHVkZS9hc20tYXJtL3UtYm9vdC5oCmluZGV4IGMxMjAzMTIuLmZmMjRiNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS91LWJvb3QuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdS1ib290LmgKQEAgLTU3LDQgKzU3LDcgQEAKICNkZWZpbmUgYmlfZW52X2RhdGEgYmlfZW52LT5kYXRhCiAjZGVmaW5lIGJpX2Vudl9jcmMgIGJpX2Vudi0+Y3JjCiAKKy8qIEZvciBpbWFnZS5oOmltYWdlX2NoZWNrX3RhcmdldF9hcmNoKCkgKi8KKyNkZWZpbmUgSUhfQVJDSF9ERUZBVUxUIElIX0FSQ0hfQVJNCisKICNlbmRpZgkvKiBfVV9CT09UX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Jvb3RzdGFnZS5oIGIvaW5jbHVkZS9ib290c3RhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDAwNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9ib290c3RhZ2UuaApAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHJlY29yZGluZyBvZiBlYWNoIHN0YWdlIG9mIHRoZSBib290IHByb2Nlc3MuIEl0IGlzCisgKiBpbnRlbmRlZCB0byBpbXBsZW1lbnQgdGltaW5nIG9mIGVhY2ggc3RhZ2UsIHJlcG9ydGluZyB0aGlzIGluZm9ybWF0aW9uCisgKiB0byB0aGUgdXNlciBhbmQgcGFzc2luZyBpdCB0byB0aGUgT1MgZm9yIGxvZ2dpbmcgLyBmdXJ0aGVyIGFuYWx5c2lzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gT1MgQXV0aG9ycy4KKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQk9PVFNUQUdFX0gKKyNkZWZpbmUgX0JPT1RTVEFHRV9ICisKKy8qIFRoZSBudW1iZXIgb2YgYm9vdCBzdGFnZSByZWNvcmRzIGF2YWlsYWJsZSBmb3IgdGhlIHVzZXIgKi8KKyNpZm5kZWYgQ09ORklHX0JPT1RTVEFHRV9VU0VSX0NPVU5UCisjZGVmaW5lIENPTkZJR19CT09UU1RBR0VfVVNFUl9DT1VOVAkyMAorI2VuZGlmCisKKy8qCisgKiBBIGxpc3Qgb2YgYm9vdCBzdGFnZXMgdGhhdCB3ZSBrbm93IGFib3V0LiBFYWNoIG9mIHRoZXNlIGluZGljYXRlcyB0aGUKKyAqIHN0YXRlIHRoYXQgd2UgYXJlIGF0LCBhbmQgdGhlIGFjdGlvbiB0aGF0IHdlIGFyZSBhYm91dCB0byBwZXJmb3JtLiBGb3IKKyAqIGVycm9ycywgd2UgaXNzdWUgYW4gZXJyb3IgZm9yIGFuIGl0ZW0gd2hlbiBpdCBmYWlscy4gVGhlcmVmb3JlIHRoZQorICogbm9ybWFsIHNlcXVlbmNlIGlzOgorICoKKyAqIHByb2dyZXNzIGFjdGlvbjEKKyAqIHByb2dyZXNzIGFjdGlvbjIKKyAqIHByb2dyZXNzIGFjdGlvbjMKKyAqCisgKiBhbmQgYW4gZXJyb3IgY29uZGl0aW9uIHdoZXJlIGFjdGlvbiAzIGZhaWxlZCB3b3VsZCBiZToKKyAqCisgKiBwcm9ncmVzcyBhY3Rpb24xCisgKiBwcm9ncmVzcyBhY3Rpb24yCisgKiBwcm9ncmVzcyBhY3Rpb24zCisgKiBlcnJvciBvbiBhY3Rpb24zCisgKi8KK2VudW0gYm9vdHN0YWdlX2lkIHsKKwlCT09UU1RBR0VfSURfU1RBUlQgPSAwLAorCUJPT1RTVEFHRV9JRF9DSEVDS19NQUdJQywJLyogQ2hlY2tpbmcgaW1hZ2UgbWFnaWMgKi8KKwlCT09UU1RBR0VfSURfQ0hFQ0tfSEVBREVSLAkvKiBDaGVja2luZyBpbWFnZSBoZWFkZXIgKi8KKwlCT09UU1RBR0VfSURfQ0hFQ0tfQ0hFQ0tTVU0sCS8qIENoZWNraW5nIGltYWdlIGNoZWNrc3VtICovCisJQk9PVFNUQUdFX0lEX0NIRUNLX0FSQ0gsCS8qIENoZWNraW5nIGFyY2hpdGVjdHVyZSAqLworCisJQk9PVFNUQUdFX0lEX0NIRUNLX0lNQUdFVFlQRSA9IDUsLyogQ2hlY2tpbmcgaW1hZ2UgdHlwZSAqLworCUJPT1RTVEFHRV9JRF9ERUNPTVBfSU1BR0UsCS8qIERlY29tcHJlc3NpbmcgaW1hZ2UgKi8KKwlCT09UU1RBR0VfSURfS0VSTkVMX0xPQURFRCwJLyogS2VybmVsIGhhcyBiZWVuIGxvYWRlZCAqLworCUJPT1RTVEFHRV9JRF9ERUNPTVBfVU5JTVBMID0gNywJLyogT2RkIGRlY29tcHJlc3Npb24gYWxnb3JpdGhtICovCisJQk9PVFNUQUdFX0lEX0NIRUNLX0JPT1RfT1MsCS8qIENhbGxpbmcgT1Mtc3BlY2lmaWMgYm9vdCBmdW5jdGlvbiAqLworCUJPT1RTVEFHRV9JRF9CT09UX09TX1JFVFVSTkVELAkvKiBUcmllZCB0byBib290IE9TLCBidXQgaXQgcmV0dXJuZWQgKi8KKwlCT09UU1RBR0VfSURfQ0hFQ0tfUkFNRElTSyA9IDksCS8qIENoZWNraW5nIHJhbSBkaXNrICovCisKKwlCT09UU1RBR0VfSURfUkRfTUFHSUMsCQkvKiBDaGVja2luZyByYW0gZGlzayBtYWdpYyAqLworCUJPT1RTVEFHRV9JRF9SRF9IRFJfQ0hFQ0tTVU0sCS8qIENoZWNraW5nIHJhbSBkaXNrIGhlZGVyIGNoZWNrc3VtICovCisJQk9PVFNUQUdFX0lEX1JEX0NIRUNLU1VNLAkvKiBDaGVja2luZyByYW0gZGlzayBjaGVja3N1bSAqLworCUJPT1RTVEFHRV9JRF9DT1BZX1JBTURJU0sgPSAxMiwJLyogQ29weWluZyByYW0gZGlzayBpbnRvIHBsYWNlICovCisJQk9PVFNUQUdFX0lEX1JBTURJU0ssCQkvKiBDaGVja2luZyBmb3IgdmFsaWQgcmFtZGlzayAqLworCUJPT1RTVEFHRV9JRF9OT19SQU1ESVNLLAkvKiBObyByYW0gZGlzayBmb3VuZCAobm90IGFuIGVycm9yKSAqLworCisJQk9PVFNUQUdFX0lEX1JVTl9PUwk9IDE1LAkvKiBFeGl0aW5nIFUtQm9vdCwgZW50ZXJpbmcgT1MgKi8KKworCUJPT1RTVEFHRV9JRF9ORUVEX1JFU0VUID0gMzAsCisJQk9PVFNUQUdFX0lEX1BPU1RfRkFJTCwJCS8qIFBvc3QgZmFpbHVyZSAqLworCUJPT1RTVEFHRV9JRF9QT1NUX0ZBSUxfUiwJLyogUG9zdCBmYWlsdXJlIHJlcG9ydGVkIGFmdGVyIHJlbG9jICovCisKKwkvKgorCSAqIFRoaXMgc2V0IGlzIHJlcG9ydGVkIG9ueSBieSB4ODYsIGFuZCB0aGUgbWVhbmluZyBpcyBkaWZmZXJlbnQuIEluCisJICogdGhpcyBjYXNlIHdlIGFyZSByZXBvcnRpbmcgY29tcGxldGlvbiBvZiBhIHBhcnRpY3VsYXIgc3RhZ2UuCisJICogVGhpcyBzaG91bGQgcHJvYmFibHkgY2hhbmdlIGluIGhlIHg4NiBjb2RlICh3aGljaCBkb2Vzbid0IHJlcG9ydAorCSAqIGVycm9ycyBpbiBhbnkgY2FzZSksIGJ1dCBkaXNjdXNzaW9uIHRoaXMgY2FuIHBlcmhhcHMgd2FpdCB1bnRpbCB3ZQorCSAqIGhhdmUgYSBnZW5lcmljIGJvYXJkIGltcGxlbWVudGF0aW9uLgorCSAqLworCUJPT1RTVEFHRV9JRF9CT0FSRF9JTklUX1IsCS8qIFdlIGhhdmUgcmVsb2NhdGVkICovCisJQk9PVFNUQUdFX0lEX0JPQVJEX0dMT0JBTF9EQVRBLAkvKiBHbG9iYWwgZGF0YSBpcyBzZXQgdXAgKi8KKworCUJPT1RTVEFHRV9JRF9CT0FSRF9JTklUX1NFUSwJLyogV2UgY29tcGxldGVkIHRoZSBpbml0IHNlcXVlbmNlICovCisJQk9PVFNUQUdFX0lEX0JPQVJEX0ZMQVNILAkvKiBXZSBoYXZlIGNvbmZpZ3VyZWQgZmxhc2ggYmFua3MgKi8KKwlCT09UU1RBR0VfSURfQk9BUkRfRkxBU0hfMzcsCS8qIEluIGNhc2UgeW91IGRpZG4ndCBoZWFyLi4uICovCisJQk9PVFNUQUdFX0lEX0JPQVJEX0VOViwJCS8qIEVudmlyb25tZW50IGlzIHJlbG9jYXRlZCAmIHJlYWR5ICovCisJQk9PVFNUQUdFX0lEX0JPQVJEX1BDSSwJCS8qIFBDSSBpcyB1cCAqLworCisJQk9PVFNUQUdFX0lEX0JPQVJEX0lOVEVSUlVQVFMsCS8qIEV4Y2VwdGlvbnMgLyBpbnRlcnJ1cHRzIHJlYWR5ICovCisJQk9PVFNUQUdFX0lEX0JPQVJEX0RPTkUsCS8qIEJvYXJkIGluaXQgZG9uZSwgb2ZmIHRvIG1haW4gbG9vcCAqLworCS8qIF5eXiBoZXJlIGVuZHMgdGhlIHg4NiBzZXF1ZW5jZSAqLworCisJLyogQm9vdCBzdGFnZXMgcmVsYXRlZCB0byBsb2FkaW5nIGEga2VybmVsIGZyb20gYW4gSURFIGRldmljZSAqLworCUJPT1RTVEFHRV9JRF9JREVfU1RBUlQgPSA0MSwKKwlCT09UU1RBR0VfSURfSURFX0FERFIsCisJQk9PVFNUQUdFX0lEX0lERV9CT09UX0RFVklDRSwKKwlCT09UU1RBR0VfSURfSURFX1RZUEUsCisKKwlCT09UU1RBR0VfSURfSURFX1BBUlQsCisJQk9PVFNUQUdFX0lEX0lERV9QQVJUX0lORk8sCisJQk9PVFNUQUdFX0lEX0lERV9QQVJUX1RZUEUsCisJQk9PVFNUQUdFX0lEX0lERV9QQVJUX1JFQUQsCisJQk9PVFNUQUdFX0lEX0lERV9GT1JNQVQsCisKKwlCT09UU1RBR0VfSURfSURFX0NIRUNLU1VNLAkvKiA1MCAqLworCUJPT1RTVEFHRV9JRF9JREVfUkVBRCwKKworCS8qIEJvb3Qgc3RhZ2VzIHJlbGF0ZWQgdG8gbG9hZGluZyBhIGtlcm5lbCBmcm9tIGFuIE5BTkQgZGV2aWNlICovCisJQk9PVFNUQUdFX0lEX05BTkRfUEFSVCwKKwlCT09UU1RBR0VfSURfTkFORF9TVUZGSVgsCisJQk9PVFNUQUdFX0lEX05BTkRfQk9PVF9ERVZJQ0UsCisJQk9PVFNUQUdFX0lEX05BTkRfSERSX1JFQUQgPSA1NSwKKwlCT09UU1RBR0VfSURfTkFORF9BVkFJTEFCTEUgPSA1NSwKKwlCT09UU1RBR0VfSURfTkFORF9UWVBFID0gNTcsCisJQk9PVFNUQUdFX0lEX05BTkRfUkVBRCwKKworCS8qIEJvb3Qgc3RhZ2VzIHJlbGF0ZWQgdG8gbG9hZGluZyBhIGtlcm5lbCBmcm9tIGFuIG5ldHdvcmsgZGV2aWNlICovCisJQk9PVFNUQUdFX0lEX05FVF9DSEVDS1NVTSA9IDYwLAorCUJPT1RTVEFHRV9JRF9ORVRfRVRIX1NUQVJUID0gNjQsCisJQk9PVFNUQUdFX0lEX05FVF9FVEhfSU5JVCwKKworCUJPT1RTVEFHRV9JRF9ORVRfU1RBUlQgPSA4MCwKKwlCT09UU1RBR0VfSURfTkVUX05FVExPT1BfT0ssCisJQk9PVFNUQUdFX0lEX05FVF9MT0FERUQsCisJQk9PVFNUQUdFX0lEX05FVF9ET05FX0VSUiwKKwlCT09UU1RBR0VfSURfTkVUX0RPTkUsCisKKwkvKgorCSAqIEJvb3Qgc3RhZ2VzIHJlbGF0ZWQgdG8gbG9hZGluZyBhIEZJVCBpbWFnZS4gU29tZSBvZiB0aGVzZSBhcmUgYQorCSAqIGJpdCB3b25reS4KKwkgKi8KKwlCT09UU1RBR0VfSURfRklUX0ZPUk1BVCA9IDEwMCwKKwlCT09UU1RBR0VfSURfRklUX05PX1VOSVRfTkFNRSwKKwlCT09UU1RBR0VfSURfRklUX1VOSVRfTkFNRSwKKwlCT09UU1RBR0VfSURfRklUX0NPTkZJRywKKwlCT09UU1RBR0VfSURfRklUX0NIRUNLX1NVQklNQUdFLAorCUJPT1RTVEFHRV9JRF9GSVRfQ0hFQ0tfSEFTSCA9IDEwNCwKKworCUJPT1RTVEFHRV9JRF9GSVRfQ0hFQ0tfQVJDSCwKKwlCT09UU1RBR0VfSURfRklUX0NIRUNLX0tFUk5FTCwKKwlCT09UU1RBR0VfSURfRklUX0NIRUNLRUQsCisKKwlCT09UU1RBR0VfSURfRklUX0tFUk5FTF9JTkZPX0VSUiA9IDEwNywKKwlCT09UU1RBR0VfSURfRklUX0tFUk5FTF9JTkZPLAorCUJPT1RTVEFHRV9JRF9GSVRfVFlQRSwKKworCUJPT1RTVEFHRV9JRF9GSVRfQ09NUFJFU1NJT04sCisJQk9PVFNUQUdFX0lEX0ZJVF9PUywKKwlCT09UU1RBR0VfSURfRklUX0xPQURBRERSLAorCUJPT1RTVEFHRV9JRF9PVkVSV1JJVFRFTiwKKworCUJPT1RTVEFHRV9JRF9GSVRfUkRfRk9STUFUID0gMTIwLAorCUJPT1RTVEFHRV9JRF9GSVRfUkRfRk9STUFUX09LLAorCUJPT1RTVEFHRV9JRF9GSVRfUkRfTk9fVU5JVF9OQU1FLAorCUJPT1RTVEFHRV9JRF9GSVRfUkRfVU5JVF9OQU1FLAorCUJPT1RTVEFHRV9JRF9GSVRfUkRfU1VCTk9ERSwKKworCUJPT1RTVEFHRV9JRF9GSVRfUkRfQ0hFQ0ssCisJQk9PVFNUQUdFX0lEX0ZJVF9SRF9IQVNIID0gMTI1LAorCUJPT1RTVEFHRV9JRF9GSVRfUkRfQ0hFQ0tfQUxMLAorCUJPT1RTVEFHRV9JRF9GSVRfUkRfR0VUX0RBVEEsCisJQk9PVFNUQUdFX0lEX0ZJVF9SRF9DSEVDS19BTExfT0sgPSAxMjcsCisJQk9PVFNUQUdFX0lEX0ZJVF9SRF9HRVRfREFUQV9PSywKKwlCT09UU1RBR0VfSURfRklUX1JEX0xPQUQsCisKKwlCT09UU1RBR0VfSURfSURFX0ZJVF9SRUFEID0gMTQwLAorCUJPT1RTVEFHRV9JRF9JREVfRklUX1JFQURfT0ssCisKKwlCT09UU1RBR0VfSURfTkFORF9GSVRfUkVBRCA9IDE1MCwKKwlCT09UU1RBR0VfSURfTkFORF9GSVRfUkVBRF9PSywKKworCS8qCisJICogVGhlc2UgYm9vdCBzdGFnZXMgYXJlIG5ldywgaGlnaGVyIGxldmVsLCBhbmQgbm90IGRpcmVjdGx5IHJlbGF0ZWQKKwkgKiB0byB0aGUgb2xkIGJvb3QgcHJvZ3Jlc3MgbnVtYmVycy4gVGhleSBhcmUgdXNlZnVsIGZvciByZWNvcmRpbmcKKwkgKiByb3VnaCBib290IHRpbWluZyBpbmZvcm1hdGlvbi4KKwkgKi8KKwlCT09UU1RBR0VfSURfQVdBS0UsCisJQk9PVFNUQUdFX0lEX1NUQVJUX1VCT09UX0YsCisJQk9PVFNUQUdFX0lEX1NUQVJUX1VCT09UX1IsCisJQk9PVFNUQUdFX0lEX1VTQl9TVEFSVCwKKwlCT09UU1RBR0VfSURfRVRIX1NUQVJULAorCUJPT1RTVEFHRV9JRF9CT09UUF9TVEFSVCwKKwlCT09UU1RBR0VfSURfQk9PVFBfU1RPUCwKKwlCT09UU1RBR0VfSURfQk9PVE1fU1RBUlQsCisJQk9PVFNUQUdFX0lEX0JPT1RNX0hBTkRPRkYsCisJQk9PVFNUQUdFX0lEX01BSU5fTE9PUCwKKwlCT09UU1RBR0VfS0VSTkVMUkVBRF9TVEFSVCwKKwlCT09UU1RBR0VfS0VSTkVMUkVBRF9TVE9QLAorCisJQk9PVFNUQUdFX0lEX0NQVV9BV0FLRSwKKwlCT09UU1RBR0VfSURfTUFJTl9DUFVfQVdBS0UsCisJQk9PVFNUQUdFX0lEX01BSU5fQ1BVX1JFQURZLAorCisJLyogYSBmZXcgc3BhcmUgZm9yIHRoZSB1c2VyLCBmcm9tIGhlcmUgKi8KKwlCT09UU1RBR0VfSURfVVNFUiwKKwlCT09UU1RBR0VfSURfQ09VTlQgPSBCT09UU1RBR0VfSURfVVNFUiArIENPTkZJR19CT09UU1RBR0VfVVNFUl9DT1VOVCwKKwlCT09UU1RBR0VfSURfQUxMT0MsCit9OworCisvKgorICogUmV0dXJuIHRoZSB0aW1lIHNpbmNlIGJvb3QgaW4gbWljcm9zZWNvbmRzLCBUaGlzIGlzIG5lZWRlZCBmb3IgYm9vdHN0YWdlCisgKiBhbmQgc2hvdWxkIGJlIGRlZmluZWQgaW4gQ1BVLSBvciBib2FyZC1zcGVjaWZpYyBjb2RlLiBJZiB1bmRlZmluZWQgdGhlbgorICogbWlsbGlzZWNvbmQgcmVzb2x1dGlvbiB3aWxsIGJlIHVzZWQgKHRoZSBzdGFuZGFyZCBnZXRfdGltZXIoKSkuCisgKi8KK3Vsb25nIHRpbWVyX2dldF9ib290X3VzKHZvaWQpOworCisvKgorICogQm9hcmQgY29kZSBjYW4gaW1wbGVtZW50IHNob3dfYm9vdF9wcm9ncmVzcygpIGlmIG5lZWRlZC4KKyAqCisgKiBAcGFyYW0gdmFsCVByb2dyZXNzIHN0YXRlIChlbnVtIGJvb3RzdGFnZV9pZCksIG9yIC1pZCBpZiBhbiBlcnJvcgorICoJCWhhcyBvY2N1cnJlZC4KKyAqLwordm9pZCBzaG93X2Jvb3RfcHJvZ3Jlc3MoaW50IHZhbCk7CisKKyNpZmRlZiBDT05GSUdfQk9PVFNUQUdFCisvKiBUaGlzIGlzIHRoZSBmdWxsIGJvb3RzdGFnZSBpbXBsZW1lbnRhdGlvbiAqLworCisvKgorICogTWFyayBhIHRpbWUgc3RhbXAgZm9yIHRoZSBjdXJyZW50IGJvb3Qgc3RhZ2UuCisgKi8KK3Vsb25nIGJvb3RzdGFnZV9tYXJrKGVudW0gYm9vdHN0YWdlX2lkIGlkKTsKKwordWxvbmcgYm9vdHN0YWdlX2Vycm9yKGVudW0gYm9vdHN0YWdlX2lkIGlkKTsKKwordWxvbmcgYm9vdHN0YWdlX21hcmtfbmFtZShlbnVtIGJvb3RzdGFnZV9pZCBpZCwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIFByaW50IGEgcmVwb3J0IGFib3V0IGJvb3QgdGltZSAqLwordm9pZCBib290c3RhZ2VfcmVwb3J0KHZvaWQpOworCisjZWxzZQorLyoKKyAqIFRoaXMgaXMgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiB3aGljaCBqdXN0IGNhbGxzIHNob3dfYm9vdF9wcm9ncmVzcygpLAorICogYW5kIHdvbid0IGV2ZW4gZG8gdGhhdCB1bmxlc3MgQ09ORklHX1NIT1dfQk9PVF9QUk9HUkVTUyBpcyBkZWZpbmVkCisgKi8KKworc3RhdGljIGlubGluZSB1bG9uZyBib290c3RhZ2VfbWFyayhlbnVtIGJvb3RzdGFnZV9pZCBpZCkKK3sKKwlzaG93X2Jvb3RfcHJvZ3Jlc3MoaWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVsb25nIGJvb3RzdGFnZV9lcnJvcihlbnVtIGJvb3RzdGFnZV9pZCBpZCkKK3sKKwlzaG93X2Jvb3RfcHJvZ3Jlc3MoLWlkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1bG9uZyBib290c3RhZ2VfbWFya19uYW1lKGVudW0gYm9vdHN0YWdlX2lkIGlkLCBjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAwOworfQorCisKKyNlbmRpZiAvKiBDT05GSUdfQk9PVFNUQUdFICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tYW5kLmggYi9pbmNsdWRlL2NvbW1hbmQuaAppbmRleCBhMjkzNmFkLi42Zjg3MjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1hbmQuaAorKysgYi9pbmNsdWRlL2NvbW1hbmQuaApAQCAtNzYsNiArNzYsMjMgQEAKIAogdHlwZWRlZgl2b2lkIAljb21tYW5kX3QgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwogCisvKgorICogRXJyb3IgY29kZXMgdGhhdCBjb21tYW5kcyByZXR1cm4gdG8gY21kX3Byb2Nlc3MoKS4gV2UgdXNlIHRoZSBzdGFuZGFyZCAwCisgKiBhbmQgMSBmb3Igc3VjY2VzcyBhbmQgZmFpbHVyZSwgYnV0IGFkZCBvbmUgbW9yZSBjYXNlIC0gZmFpbHVyZSB3aXRoIGEKKyAqIHJlcXVlc3QgdG8gY2FsbCBjbWRfdXNhZ2UoKS4gQnV0IHRoZSBjbWRfcHJvY2VzcygpIGZ1bmN0aW9uIGhhbmRsZXMKKyAqIENNRF9SRVRfVVNBR0UgaXRzZWxmIGFuZCBhZnRlciBjYWxsaW5nIGNtZF91c2FnZSgpIGl0IHdpbGwgcmV0dXJuIDEuCisgKiBUaGlzIGlzIGp1c3QgYSBjb252ZW5pZW5jZSBmb3IgY29tbWFuZHMgdG8gYXZvaWQgdGhlbSBoYXZpbmcgdG8gY2FsbAorICogY21kX3VzYWdlKCkgYWxsIG92ZXIgdGhlIHBsYWNlLgorICovCitlbnVtIGNvbW1hbmRfcmV0X3QgeworCUNNRF9SRVRfU1VDQ0VTUywJLyogMCA9IFN1Y2Nlc3MgKi8KKwlDTURfUkVUX0ZBSUxVUkUsCS8qIDEgPSBGYWlsdXJlICovCisJQ01EX1JFVF9VU0FHRSA9IC0xLAkvKiBGYWlsdXJlLCBwbGVhc2UgcmVwb3J0ICd1c2FnZScgZXJyb3IgKi8KK307CisKKworCisKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uLmggYi9pbmNsdWRlL2NvbW1vbi5oCmluZGV4IDM0OWQ1Y2YuLjQyZTMzZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb21tb24uaApAQCAtNjI2LDQgKzYyNiw4OCBAQAogI2Vycm9yIFJlYWQgc2VjdGlvbiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUIGluIFJFQURNRS4KICNlbmRpZgogCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQorCisjZGVmaW5lIFJPVU5EKGEsYikJCSgoKGEpICsgKGIpIC0gMSkgJiB+KChiKSAtIDEpKQorI2RlZmluZSBESVZfUk9VTkQobixkKQkJKCgobikgKyAoKGQpLzIpKSAvIChkKSkKKyNkZWZpbmUgRElWX1JPVU5EX1VQKG4sZCkJKCgobikgKyAoZCkgLSAxKSAvIChkKSkKKyNkZWZpbmUgcm91bmR1cCh4LCB5KQkJKCgoKHgpICsgKCh5KSAtIDEpKSAvICh5KSkgKiAoeSkpCisKKyNkZWZpbmUgQUxJR04oeCxhKQkJX19BTElHTl9NQVNLKCh4KSwodHlwZW9mKHgpKShhKS0xKQorI2RlZmluZSBfX0FMSUdOX01BU0soeCxtYXNrKQkoKCh4KSsobWFzaykpJn4obWFzaykpCisKKyNpZiAwCisvKgorICogQVJDSF9ETUFfTUlOQUxJR04gaXMgZGVmaW5lZCBpbiBhc20vY2FjaGUuaCBmb3IgZWFjaCBhcmNoaXRlY3R1cmUuICBJdAorICogaXMgdXNlZCB0byBhbGlnbiBETUEgYnVmZmVycy4KKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNlbmRpZgorCisvKgorICogVGhlIEFMTE9DX0NBQ0hFX0FMSUdOX0JVRkZFUiBtYWNybyBpcyB1c2VkIHRvIGFsbG9jYXRlIGEgYnVmZmVyIG9uIHRoZQorICogc3RhY2sgdGhhdCBtZWV0cyB0aGUgbWluaW11bSBhcmNoaXRlY3R1cmUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBmb3IgRE1BLgorICogU3VjaCBhIGJ1ZmZlciBpcyB1c2VmdWwgZm9yIERNQSBvcGVyYXRpb25zIHdoZXJlIGZsdXNoaW5nIGFuZCBpbnZhbGlkYXRpbmcKKyAqIHRoZSBjYWNoZSBiZWZvcmUgYW5kIGFmdGVyIGEgcmVhZCBhbmQvb3Igd3JpdGUgb3BlcmF0aW9uIGlzIHJlcXVpcmVkIGZvcgorICogY29ycmVjdCBvcGVyYXRpb25zLgorICoKKyAqIFdoZW4gY2FsbGVkIHRoZSBtYWNybyBjcmVhdGVzIGFuIGFycmF5IG9uIHRoZSBzdGFjayB0aGF0IGlzIHNpemVkIHN1Y2gKKyAqIHRoYXQ6CisgKgorICogMSkgVGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkgY2FuIGJlIGFkdmFuY2VkIGVub3VnaCB0byBiZSBhbGlnbmVkLgorICoKKyAqIDIpIFRoZSBzaXplIG9mIHRoZSBhbGlnbmVkIHBvcnRpb24gb2YgdGhlIGFycmF5IGlzIGEgbXVsdGlwbGUgb2YgdGhlIG1pbmltdW0KKyAqICAgIGFyY2hpdGVjdHVyZSBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yIERNQS4KKyAqCisgKiAzKSBUaGUgYWxpZ25lZCBwb3J0aW9uIGNvbnRhaW5zIGVub3VnaCBzcGFjZSBmb3IgdGhlIG9yaWdpbmFsIG51bWJlciBvZgorICogICAgZWxlbWVudHMgcmVxdWVzdGVkLgorICoKKyAqIFRoZSBtYWNybyB0aGVuIGNyZWF0ZXMgYSBwb2ludGVyIHRvIHRoZSBhbGlnbmVkIHBvcnRpb24gb2YgdGhpcyBhcnJheSBhbmQKKyAqIGFzc2lnbnMgdG8gdGhlIHBvaW50ZXIgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGFsaWduZWQKKyAqIHBvcnRpb24gb2YgdGhlIGFycmF5LgorICoKKyAqIENhbGxpbmcgdGhlIG1hY3JvIGFzOgorICoKKyAqICAgICBBTExPQ19DQUNIRV9BTElHTl9CVUZGRVIodWludDMyX3QsIGJ1ZmZlciwgMTAyNCk7CisgKgorICogV2lsbCByZXN1bHQgaW4gc29tZXRoaW5nIHNpbWlsYXIgdG8gc2F5aW5nOgorICoKKyAqICAgICB1aW50MzJfdCAgICBidWZmZXJbMTAyNF07CisgKgorICogVGhlIGZvbGxvd2luZyBkaWZmZXJlbmNlcyBleGlzdDoKKyAqCisgKiAxKSBUaGUgcmVzdWx0aW5nIGJ1ZmZlciBpcyBndWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgdG8gdGhlIHZhbHVlIG9mCisgKiAgICBBUkNIX0RNQV9NSU5BTElHTi4KKyAqCisgKiAyKSBUaGUgYnVmZmVyIHZhcmlhYmxlIGNyZWF0ZWQgYnkgdGhlIG1hY3JvIGlzIGEgcG9pbnRlciB0byB0aGUgc3BlY2lmaWVkCisgKiAgICB0eXBlLCBhbmQgTk9UIGFuIGFycmF5IG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4gIFRoaXMgY2FuIGJlIHZlcnkgaW1wb3J0YW50CisgKiAgICBpZiB5b3Ugd2FudCB0aGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLCB3aGljaCB5b3UgcHJvYmFibHkgZG8sIHRvIHBhc3MgaXQKKyAqICAgIHRvIHRoZSBETUEgaGFyZHdhcmUuICBUaGUgdmFsdWUgb2YgJmJ1ZmZlciBpcyBkaWZmZXJlbnQgaW4gdGhlIHR3byBjYXNlcy4KKyAqICAgIEluIHRoZSBtYWNybyBjYXNlIGl0IHdpbGwgYmUgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIsIG5vdCB0aGUgYWRkcmVzcworICogICAgb2YgdGhlIHNwYWNlIHJlc2VydmVkIGZvciB0aGUgYnVmZmVyLiAgSG93ZXZlciwgaW4gdGhlIHNlY29uZCBjYXNlIGl0CisgKiAgICB3b3VsZCBiZSB0aGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLiAgU28gaWYgeW91IGFyZSByZXBsYWNpbmcgaGFyZCBjb2RlZAorICogICAgc3RhY2sgYnVmZmVycyB3aXRoIHRoaXMgbWFjcm8geW91IG5lZWQgdG8gbWFrZSBzdXJlIHlvdSByZW1vdmUgdGhlICYgZnJvbQorICogICAgdGhlIGxvY2F0aW9ucyB3aGVyZSB5b3UgYXJlIHRha2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgc2l6ZSBwYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBvZiBhcnJheSBlbGVtZW50cyB0byBhbGxvY2F0ZSwKKyAqIG5vdCB0aGUgbnVtYmVyIG9mIGJ5dGVzLgorICoKKyAqIFRoaXMgbWFjcm8gY2FuIG5vdCBiZSB1c2VkIG91dHNpZGUgb2YgZnVuY3Rpb24gc2NvcGUsIG9yIGZvciB0aGUgY3JlYXRpb24KKyAqIG9mIGEgZnVuY3Rpb24gc2NvcGVkIHN0YXRpYyBidWZmZXIuICBJdCBjYW4gbm90IGJlIHVzZWQgdG8gY3JlYXRlIGEgY2FjaGUKKyAqIGxpbmUgYWxpZ25lZCBnbG9iYWwgYnVmZmVyLgorICovCisjZGVmaW5lIEFMTE9DX0NBQ0hFX0FMSUdOX0JVRkZFUih0eXBlLCBuYW1lLCBzaXplKQkJCVwKKwljaGFyIF9fIyNuYW1lW1JPVU5EKHNpemUgKiBzaXplb2YodHlwZSksIEFSQ0hfRE1BX01JTkFMSUdOKSArCVwKKwkJICAgICAgQVJDSF9ETUFfTUlOQUxJR04gLSAxXTsJCQkJXAorCQkJCQkJCQkJXAorCXR5cGUgKm5hbWUgPSAodHlwZSAqKSBBTElHTigodWludHB0cl90KV9fIyNuYW1lLCBBUkNIX0RNQV9NSU5BTElHTikKKworLyogUHVsbCBpbiBzdHVmZiBmb3IgdGhlIGJ1aWxkIHN5c3RlbSAqLworI2lmZGVmIERPX0RFUFNfT05MWQorIyBpbmNsdWRlIDxlbnZpcm9ubWVudC5oPgorI2VuZGlmCisKKworI2VuZGlmCiAjZW5kaWYJLyogX19DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tcGlsZXIuaCBiL2luY2x1ZGUvY29tcGlsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzM0ZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb21waWxlci5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogS2VlcCBhbGwgdGhlIHVnbHkgI2lmZGVmIGZvciBzeXN0ZW0gc3R1ZmYgaGVyZQorICovCisKKyNpZm5kZWYgX19DT01QSUxFUl9IX18KKyNkZWZpbmUgX19DT01QSUxFUl9IX18KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYgVVNFX0hPU1RDQworCisjaWYgZGVmaW5lZChfX0JFT1NfXykJIHx8IFwKKyAgICBkZWZpbmVkKF9fTmV0QlNEX18pICB8fCBcCisgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgXAorICAgIGRlZmluZWQoX19zdW5fXykJIHx8IFwKKyAgICBkZWZpbmVkKF9fQVBQTEVfXykKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbGlmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmICFkZWZpbmVkKF9fV0lOMzJfXykgJiYgIWRlZmluZWQoX19NSU5HVzMyX18pCisjIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjZW5kaWYKKworLyogTm90IGFsbCBzeXN0ZW1zIChsaWtlIFdpbmRvd3MpIGhhcyB0aGlzIGRlZmluZSwgYW5kIHllcworICogd2UgZG8gcmVwbGFjZS9lbXVsYXRlIG1tYXAoKSBvbiB0aG9zZSBzeXN0ZW1zIC4uLgorICovCisjaWZuZGVmIE1BUF9GQUlMRUQKKyMgZGVmaW5lIE1BUF9GQUlMRUQgKCh2b2lkICopLTEpCisjZW5kaWYKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZuZGVmIE9fQklOQVJZCQkvKiBzaG91bGQgYmUgZGVmaW5lJ2Qgb24gX19XSU4zMl9fICovCisjZGVmaW5lIE9fQklOQVJZCTAKKyNlbmRpZgorCisjaWZkZWYgX19saW51eF9fCisjIGluY2x1ZGUgPGVuZGlhbi5oPgorIyBpbmNsdWRlIDxieXRlc3dhcC5oPgorI2VsaWYgZGVmaW5lZChfX01BQ0hfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyMgaW5jbHVkZSA8bWFjaGluZS9lbmRpYW4uaD4KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKKyNlbmRpZgorCit0eXBlZGVmIHVpbnQ4X3QgX191ODsKK3R5cGVkZWYgdWludDE2X3QgX191MTY7Cit0eXBlZGVmIHVpbnQzMl90IF9fdTMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKKworI2RlZmluZSB1c3dhcF8xNih4KSBcCisJKCgoKHgpICYgMHhmZjAwKSA+PiA4KSB8IFwKKwkgKCgoeCkgJiAweDAwZmYpIDw8IDgpKQorI2RlZmluZSB1c3dhcF8zMih4KSBcCisJKCgoKHgpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgXAorCSAoKCh4KSAmIDB4MDBmZjAwMDApID4+ICA4KSB8IFwKKwkgKCgoeCkgJiAweDAwMDBmZjAwKSA8PCAgOCkgfCBcCisJICgoKHgpICYgMHgwMDAwMDBmZikgPDwgMjQpKQorI2RlZmluZSBfdXN3YXBfNjQoeCwgc2Z4KSBcCisJKCgoKHgpICYgMHhmZjAwMDAwMDAwMDAwMDAwIyNzZngpID4+IDU2KSB8IFwKKwkgKCgoeCkgJiAweDAwZmYwMDAwMDAwMDAwMDAjI3NmeCkgPj4gNDApIHwgXAorCSAoKCh4KSAmIDB4MDAwMGZmMDAwMDAwMDAwMCMjc2Z4KSA+PiAyNCkgfCBcCisJICgoKHgpICYgMHgwMDAwMDBmZjAwMDAwMDAwIyNzZngpID4+ICA4KSB8IFwKKwkgKCgoeCkgJiAweDAwMDAwMDAwZmYwMDAwMDAjI3NmeCkgPDwgIDgpIHwgXAorCSAoKCh4KSAmIDB4MDAwMDAwMDAwMGZmMDAwMCMjc2Z4KSA8PCAyNCkgfCBcCisJICgoKHgpICYgMHgwMDAwMDAwMDAwMDBmZjAwIyNzZngpIDw8IDQwKSB8IFwKKwkgKCgoeCkgJiAweDAwMDAwMDAwMDAwMDAwZmYjI3NmeCkgPDwgNTYpKQorI2lmIGRlZmluZWQoX19HTlVDX18pCisjIGRlZmluZSB1c3dhcF82NCh4KSBfdXN3YXBfNjQoeCwgdWxsKQorI2Vsc2UKKyMgZGVmaW5lIHVzd2FwXzY0KHgpIF91c3dhcF82NCh4LCApCisjZW5kaWYKKworI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyMgZGVmaW5lIGNwdV90b19sZTE2KHgpCQkoeCkKKyMgZGVmaW5lIGNwdV90b19sZTMyKHgpCQkoeCkKKyMgZGVmaW5lIGNwdV90b19sZTY0KHgpCQkoeCkKKyMgZGVmaW5lIGxlMTZfdG9fY3B1KHgpCQkoeCkKKyMgZGVmaW5lIGxlMzJfdG9fY3B1KHgpCQkoeCkKKyMgZGVmaW5lIGxlNjRfdG9fY3B1KHgpCQkoeCkKKyMgZGVmaW5lIGNwdV90b19iZTE2KHgpCQl1c3dhcF8xNih4KQorIyBkZWZpbmUgY3B1X3RvX2JlMzIoeCkJCXVzd2FwXzMyKHgpCisjIGRlZmluZSBjcHVfdG9fYmU2NCh4KQkJdXN3YXBfNjQoeCkKKyMgZGVmaW5lIGJlMTZfdG9fY3B1KHgpCQl1c3dhcF8xNih4KQorIyBkZWZpbmUgYmUzMl90b19jcHUoeCkJCXVzd2FwXzMyKHgpCisjIGRlZmluZSBiZTY0X3RvX2NwdSh4KQkJdXN3YXBfNjQoeCkKKyNlbHNlCisjIGRlZmluZSBjcHVfdG9fbGUxNih4KQkJdXN3YXBfMTYoeCkKKyMgZGVmaW5lIGNwdV90b19sZTMyKHgpCQl1c3dhcF8zMih4KQorIyBkZWZpbmUgY3B1X3RvX2xlNjQoeCkJCXVzd2FwXzY0KHgpCisjIGRlZmluZSBsZTE2X3RvX2NwdSh4KQkJdXN3YXBfMTYoeCkKKyMgZGVmaW5lIGxlMzJfdG9fY3B1KHgpCQl1c3dhcF8zMih4KQorIyBkZWZpbmUgbGU2NF90b19jcHUoeCkJCXVzd2FwXzY0KHgpCisjIGRlZmluZSBjcHVfdG9fYmUxNih4KQkJKHgpCisjIGRlZmluZSBjcHVfdG9fYmUzMih4KQkJKHgpCisjIGRlZmluZSBjcHVfdG9fYmU2NCh4KQkJKHgpCisjIGRlZmluZSBiZTE2X3RvX2NwdSh4KQkJKHgpCisjIGRlZmluZSBiZTMyX3RvX2NwdSh4KQkJKHgpCisjIGRlZmluZSBiZTY0X3RvX2NwdSh4KQkJKHgpCisjZW5kaWYKKworI2Vsc2UgLyogIVVTRV9IT1NUQ0MgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWYgX19TSVpFT0ZfTE9OR19fID09IDgKKyMgZGVmaW5lIF9fV09SRFNJWkUJNjQKKyNlbGlmIF9fU0laRU9GX0xPTkdfXyA9PSA0CisjIGRlZmluZSBfX1dPUkRTSVpFCTMyCisjZWxzZQorLyoKKyAqIEFzc3VtZSAzMi1iaXQgZm9yIG5vdyAtIG9ubHkgbmV3ZXIgdG9vbGNoYWlucyBzdXBwb3J0IHRoaXMgZmVhdHVyZSBhbmQKKyAqIHRoaXMgaXMgb25seSByZXF1aXJlZCBmb3Igc2FuZGJveCBzdXBwb3J0IGF0IHByZXNlbnQuCisgKi8KKyNkZWZpbmUgX19XT1JEU0laRQkzMgorI2VuZGlmCisKKy8qIFR5cGUgZm9yIGB2b2lkIConIHBvaW50ZXJzLiAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50cHRyX3Q7CisKKyNlbmRpZiAvKiBVU0VfSE9TVENDICovCisKKy8qIGNvbXBpbGVyIG9wdGlvbnMgKi8KKyNkZWZpbmUgdW5pbml0aWFsaXplZF92YXIoeCkJCXggPSB4CisKKyNkZWZpbmUgbGlrZWx5KHgpCV9fYnVpbHRpbl9leHBlY3QoISEoeCksIDEpCisjZGVmaW5lIHVubGlrZWx5KHgpCV9fYnVpbHRpbl9leHBlY3QoISEoeCksIDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0RVNDA1LmggYi9pbmNsdWRlL2NvbmZpZ3MvRFU0MDUuaAppbmRleCA1NDg5YTUzLi4xNjQwYjFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvRFU0MDUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvRFU0MDUuaApAQCAtMzIsNyArMzIsNyBAQAogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqIChlYXN5IHRvIGNoYW5nZSkKICAqLwotI2RlZmluZSBDT05GSUdfSURFTlRfU1RSSU5HICAgICAiICROYW1lOiAgJCIKKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORyAgICAgIiAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgogCiAjZGVmaW5lIENPTkZJR180MDVHUAkJMQkvKiBUaGlzIGlzIGEgUFBDNDA1IENQVQkJKi8KICNkZWZpbmUgQ09ORklHXzR4eAkJMQkvKiAuLi5tZW1iZXIgb2YgUFBDNHh4IGZhbWlseQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1dVSDQwNS5oIGIvaW5jbHVkZS9jb25maWdzL1dVSDQwNS5oCmluZGV4IGZhZjg1NWQuLjNjMGQyZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9XVUg0MDUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvV1VINDA1LmgKQEAgLTMyLDcgKzMyLDcgQEAKICAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCiAgKiAoZWFzeSB0byBjaGFuZ2UpCiAgKi8KLSNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORyAgICAgIiAkTmFtZTogICQiCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcgICAgICIgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKIAogI2RlZmluZSBDT05GSUdfNDA1RVAJCTEJLyogVGhpcyBpcyBhIFBQQzQwNSBDUFUJCSovCiAjZGVmaW5lIENPTkZJR180eHgJCTEJLyogLi4ubWVtYmVyIG9mIFBQQzR4eCBmYW1pbHkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hc2ljLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXNpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjE4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYXNpYy5oCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKy8vI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorLy8jZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCTB4ODAwMDAwMDAKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFICAgICAgICAgMHgxMDAwMDAwMCAvKiAyNTZNQiAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLyAgCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKy8qCisgKiBFbWFjIFNldHRpbmdzCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX0dFTUFDCTEKKworLy8gR0VNQUMgbW9kZSBjb25maWd1cmVkIGJ5IGJvb3RzdHJhcCBwaW5zIG9yIFNXCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisvLyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfR01JSQorI2RlZmluZSBHRU1BQzBfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzBfUEhZX0ZMQUdTCUdFTUFDX1BIWV9BVVRPTkVHCisjZGVmaW5lIEdFTUFDMF9QSFlJRFgJCTAKKworI2RlZmluZSBHRU1BQzFfUEhZX0FERFIJCTAKKyNkZWZpbmUgR0VNQUMxX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQorI2RlZmluZSBHRU1BQzFfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzFfUEhZX0ZMQUdTCUdFTUFDX1BIWV9BVVRPTkVHCisjZGVmaW5lIEdFTUFDMV9QSFlJRFgJCTAKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCAgLypDRkdfQ01EX05BTkQgfCovIENGR19DTURfSkZGUzIgfCBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX05GUyB8IENGR19DTURfRUxGIHwgQ0ZHX0NNRF9NSUkpCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTEwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCVwKKwkiaG9zdG5hbWU9Y29tY2VydG8xMDBcMCIJCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbmZzIHJ3ICIJCVwKKwkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIJCQkJXAorCSJmbGFzaGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiCVwKKwkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImluaXRfcHJvY2Vzcz0vZXRjL3ByZWluaXRcMCIgXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImZsYXNoX3NlbGY9cnVuIGZsYXNoYXJncyBhZGRpcCBhZGR0dHk7IgkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJib290X25mcz1uZnMgODA2MDAwMDAgJHtyb290cGF0aH0vYm9vdC8ke2tlcm5lbGZpbGV9O3J1biBuZnNhcmdzIGFkZGV0aCBhZGRpcCBhZGR0dHk7IiAgICAgXAorCSAgICAgICAgImJvb3RtIDgwNjAwMDAwXDAiCQkJCQkJXAorCSJib290X2ZsYXNoPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGZzbG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKwkicm9vdHBhdGg9L2RldmVsL2ZzLWFzaWNcMCIgXAorCSJrZXJuZWxmaWxlPXVJbWFnZVwwIiBcCisJIm10ZGlkcz0iIE1URElEU19ERUZBVUxUICJcMCIgXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIiBcCisJInBhcnRpdGlvbj0iIE1URFBBUlRJVElPTl9ERUZBVUxUICJcMCIgXAorCSJtdGRkZXZudW09MlwwIiBcCisJIm10ZGRldm5hbWU9ZnNcMCIgXAorCSJmc2ZpbGU9cm9vdGZzLmpmZnMyLTY0a1wwIiBcCisJInVwZGF0ZWZzPXRmdHAgODEwMDAwMDAgJHtmc2ZpbGV9O3Byb3RlY3Qgb2ZmIDE6Ni0xMjdcO2VyYXNlIDE6Ni0xMjc7Y3AuYiA4MTAwMDAwMCAyMDA2MDAwMCAke2ZpbGVzaXplfVwwIiBcCisJInVwZGF0ZWJvb3Q9dGZ0cCA4MTAwMDAwMCB1LWJvb3QuYmluO3Byb3RlY3Qgb2ZmIDE6MC0zXDtlcmFzZSAxOjAtMztjcC5iIDgxMDAwMDAwIDIwMDAwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkiIgorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJKFBIWVNfU0RSQU0gKyAweDAxMDAwMDAwKQkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4ODAwMDAwCS8qIDggTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAJCS8qIDAgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbiAtIFVzaW5nIENGSSBkcml2ZXIgCisgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZGlzYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEyOAkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjdW5kZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMQkJCTB4MjAwMDAwMDAJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMTAwMDAJLyogNjQgS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxICAgICAgIC8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXsgUEhZU19GTEFTSDEgfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorICAKKy8qCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICBQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAoMiAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogUmVzZXJ2ZSAxMjggS2lCIGZvciBNb25pdG9yICovCisjZW5kaWYKKworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDQgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgNCBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisgIAorI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisKKworCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTUDRfQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JNgorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTI5CisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTMxCisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTMwCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1jb21jZXJ0b2ZsYXNoLjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvZmxhc2guMDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDc4MDhrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMjQwMDAwMDAJLyogMjQgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTE2NTAwMDAwMAkvKiAxNjUgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDMzTUh6ICovCisjZGVmaW5lIENGR19BUk1fQ0xPQ0sJCTQ1MDAwMDAwMAkvKiA0NTAgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1TUh6ICovCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDBBMDAwMDAwIC8qIEFSQU1fQkFTRUFERFIgQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwMDAxMDAwMCAvKiA2NEsgKi8KKyNkZWZpbmUgQ0ZHX0FSQU1fQ09ERV9TSVpFCTB4MDAwMDgwMDAgLyogMzJLICovCisKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQgLSBDRkdfQVJBTV9DT0RFX1NJWkUKKworCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisvKgorKiBERFIgVHJhaW5pbmcgYWxnb3JpdGhtCisqLworI2RlZmluZSBERFJfVFJBSU5JTkcKKy8vI3VuZGVmIEREUl9UUkFJTklORworCisjZGVmaW5lIEREUl9UUkFJTklOR19EQkcgCisKKy8qIE5ldyBERFIgdHJhaW5pbmcgZGVmaW5lcyAoQnVnICM0NDEzMSkgKi8KKyNkZWZpbmUgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKy8vI3VuZGVmIE5FV19ERFJfVFJBSU5JTkcgIC8vdW5kZWYgdGhpcyBmb3Igb2xkIHRyYWluaW5nCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYXNpY19hcmFtLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXNpY19hcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2ZGY1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9hc2ljX2FyYW0uaApAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkxCS8qIFRoaXMgaXMgYW4gYXJtMTEzNmotcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMTAwCTEJLyogSXQncyBhbiAgU29DICovCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19VQk9PVF9MT0FERURfSU5fQVJBTQorLy8jZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorCisvKgorICogUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworCisvKgorICogTWVtb3J5IE1hcHBpbmcKKyAqLworCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJMHg4MDAwMDAwMAorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUgICAgICAgICAweDEwMDAwMDAwIC8qIDI1Nk1CICovCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovICAKKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworLyoKKyAqIEVtYWMgU2V0dGluZ3MKKyAqLworI3VuZGVmIENPTkZJR19DT01DRVJUT19HRU1BQworCisvLyBHRU1BQyBtb2RlIGNvbmZpZ3VyZWQgYnkgYm9vdHN0cmFwIHBpbnMgb3IgU1cKKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKy8vI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKworI2RlZmluZSBHRU1BQzBfUEhZX0FERFIJCTAKKyNkZWZpbmUgR0VNQUMwX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9HTUlJCisjZGVmaW5lIEdFTUFDMF9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMF9QSFlfRkxBR1MJR0VNQUNfUEhZX0FVVE9ORUcKKyNkZWZpbmUgR0VNQUMwX1BIWUlEWAkJMAorCisjZGVmaW5lIEdFTUFDMV9QSFlfQUREUgkJMAorI2RlZmluZSBHRU1BQzFfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMV9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMV9QSFlfRkxBR1MJR0VNQUNfUEhZX0FVVE9ORUcKKyNkZWZpbmUgR0VNQUMxX1BIWUlEWAkJMAorCisjdW5kZWYgQ09ORklHX05FVF9NVUxUSQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCAvKkNGR19DTURfRU5WIHwqLyBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIC8qfCBDRkdfQ01EX05FVCB8ICBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX0pGRlMyIHwgQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9ORlMgfCBDRkdfQ01EX0kyQyB8IENGR19DTURfRUVQUk9NICovKQorCisjZGVmaW5lIENPTkZJR19OT19HWklQCQkxCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMTAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9JHtyb290ZnN0eXBlfSByd1wwIglcCisJInJvb3Rmc3R5cGU9amZmczJcMCIgXAorCSJpbml0X3Byb2Nlc3M9L2V0Yy9wcmVpbml0XDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJrZXJuZWxmaWxlPXVJbWFnZVwwIiBcCisJIm10ZGlkcz0iIE1URElEU19ERUZBVUxUICJcMCIgXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIiBcCisJInBhcnRpdGlvbj0iIE1URFBBUlRJVElPTl9ERUZBVUxUICJcMCIgXAorCSJtdGRkZXZudW09MlwwIiBcCisJIm10ZGRldm5hbWU9ZnNcMCIgXAorCSJ3cml0ZWJvb3Q9cHJvdGVjdCBvZmYgMTowLTNcO2VyYXNlIDE6MC0zO2NwLmIgODEwMDAwMDAgMjAwMDAwMDAgNDAwMDBcMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlciAKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJMHgyMDAwMDAwMAkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAxMDAwMAkvKiA2NCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisgIAorLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgyICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKyNlbmRpZgorCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyN1bmRlZiBDRkdfRU5WX0lTX0lOX0ZMQVNICisjZGVmaW5lIENGR19FTlZfSVNfTk9XSEVSRQkxCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0gxICsgNCAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCA0IHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKyAgCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwk2CisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMjkKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JMzEKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JMzAKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksNzgwOGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwyIgorCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkyNDAwMDAwMAkvKiAyNCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisjZGVmaW5lIENGR19IWl9DTE9DSwkJMTY1MDAwMDAwCS8qIDE2NSBNSHosIG11c3QgYmUgbXVsdGlwbGUgb2YgMzNNSHogKi8KKyNkZWZpbmUgQ0ZHX0FSTV9DTE9DSwkJNDUwMDAwMDAwCS8qIDQ1MCBNSHosIG11c3QgYmUgbXVsdGlwbGUgb2YgMjVNSHogKi8KKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4MEEwMDAwMDAgLyogQVJBTV9CQVNFQUREUiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDAwMDEwMDAwIC8qIDY0SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAwMDQwMCAvKiAxSyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworLyoKKyogRERSIFRyYWluaW5nIGFsZ29yaXRobQorKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKworI2RlZmluZSBERFJfVFJBSU5JTkdfREJHIAorCisvKiBOZXcgRERSIHRyYWluaW5nIGRlZmluZXMgKEJ1ZyAjNDQxMzEpICovCisjZGVmaW5lIE5FV19ERFJfVFJBSU5JTkcgIC8vdW5kZWYgdGhpcyBmb3Igb2xkIHRyYWluaW5nCisvLyN1bmRlZiBORVdfRERSX1RSQUlOSU5HICAvL3VuZGVmIHRoaXMgZm9yIG9sZCB0cmFpbmluZworCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2Mxa2FzaWMtbmFuZC5oIGIvaW5jbHVkZS9jb25maWdzL2Mxa2FzaWMtbmFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMGRjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYzFrYXNpYy1uYW5kLmgKQEAgLTAsMCArMSw3MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPCQkxCisjZGVmaW5lIENPTkZJR19BUk0xMTM2IAkJMQkvKiBUaGlzIGlzIGFuIGFybTExMzZqLXMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzEwMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX0MxS0FTSUMJMQorI3VuZGVmICBDT05GSUdfVVNFX0lSUQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCUREUl9CQVNFQUREUgorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCSg1MTIgKiAxMDI0ICogMTAyNCkKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8gIAorLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogRW1hYyBTZXR0aW5ncworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19HRU1BQwkxCisKKy8vIEdFTUFDIG1vZGUgY29uZmlndXJlZCBieSBib290c3RyYXAgcGlucyBvciBTVworLy8jdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorCisjZGVmaW5lIEdFTUFDMF9QSFlfQUREUgkJMAorI2RlZmluZSBHRU1BQzBfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMF9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMF9QSFlfRkxBR1MJR0VNQUNfUEhZX0FVVE9ORUcKKyNkZWZpbmUgR0VNQUMwX1BIWUlEWAkJMAorCisjZGVmaW5lIEdFTUFDMV9QSFlfQUREUgkJOAorI2RlZmluZSBHRU1BQzFfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMV9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMV9QSFlfRkxBR1MJR0VNQUNfUEhZX0FVVE9ORUcKKyNkZWZpbmUgR0VNQUMxX1BIWUlEWAkJMAorCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJMQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKC8qQ0ZHX0NNRF9GTEFTSCB8Ki8gQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfTUVNVEVTVCB8IENGR19DTURfTUlJIHwgQ0ZHX0NNRF9SVU4gfCBDRkdfQ01EX05FVCB8IENGR19DTURfTkFORCB8IENGR19DTURfSkZGUzIgfCAgQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9ORlMgfCBDRkdfQ01EX0kyQyB8IENGR19DTURfRUVQUk9NIHwgQ0ZHX0NNRF9FTEYvKnwgQ0ZHX0NNRF9TUEkqLykKKworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tMTAwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCVwKKwkiaG9zdG5hbWU9Y29tY2VydG8xMDAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0vZGV2L25mcyBydyAiCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PSJST09UX01UREJMT0NLIiByb290ZnN0eXBlPSR7cm9vdGZzdHlwZX0gcndcMCIJXAorCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkiaW5pdF9wcm9jZXNzPS9ldGMvcHJlaW5pdFwwIiBcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKKwkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIJXAorCQkiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmZcMCIgXAorCSJhZGRldGg9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgXAorCSJod2FkZHJlc3M9JHtuZXRkZXZ9LCR7ZXRoYWRkcn1cMCIgXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIgXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiIFwKKwkiZmxhc2hfc2VsZj1ydW4gZmxhc2hhcmdzIGFkZGlwIGFkZHR0eTsiCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCisJImJvb3RfbmZzPW5mcyA4MDYwMDAwMCAke3Jvb3RwYXRofS9ib290LyR7a2VybmVsZmlsZX07cnVuIG5mc2FyZ3MgYWRkZXRoIGFkZGlwIGFkZHR0eTsiICAgICBcCisJICAgICAgICAiYm9vdG0gODA2MDAwMDBcMCIJCQkJCQlcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgdWxvYWQgL2Jvb3QvdUltYWdlOyBib290bVwwIiBcCisJImJvb3RfZmxhc2hvbGQ9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJyb290cGF0aD0vZGV2ZWwvZnMtYzFrYXNpY1wwIiBcCisJImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKwkibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisJIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKwkicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisJIm10ZGRldm51bT0yXDAiIFwKKwkibXRkZGV2bmFtZT1mc1wwIiBcCisJImZzZmlsZT1yb290LmpmZnMyLTEyOGtcMCIgXAorCSJib290ZmlsZT11LWJvb3QtbmFuZC5iaW5cMCJcCisJInVwZGF0ZW5hbmRmcz10ZnRwIDg1MDAwMDAwICR7ZnNmaWxlfTtuYW5kIGVyYXNlIDEwMDAwMCAke2ZpbGVzaXplfTtuYW5kIHdyaXRlLmpmZnMyIDg1MDAwMDAwIDEwMDAwMCAke2ZpbGVzaXplfVwwIiBcCisJInVwZGF0ZW5hbmRib290PXRmdHAgODEwMDAwMDAgJHtib290ZmlsZX07bmFuZCBlcmFzZSAwIDQwMDAwO25hbmQgd3JpdGUuamZmczIgODEwMDAwMDAgMCA0MDAwMFwwIiBcCisJImVlcHJvbWZpbGU9ZWVwcm9tLmJpblwwIiBcCisJInVwZGF0ZWVwcm9tPXRmdHAgODEwMDAwMDAgJHtlZXByb21maWxlfTtlZXByb20gd3JpdGUgODEwMDAwMDAgMCAke2ZpbGVzaXplfVwwIiBcCisJIiIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisjZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkyNTYJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1MwX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDIwMDAwCS8qIDEyOCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisjdW5kZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKy8vICNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgICAgICAgICAgICAgICAgICAwCisjaWYgZGVmaW5lZChDRkdfQ01EX0VFUFJPTSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDIgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNiAvKiBtYXggNjQgYnl0ZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSDEgKyAyICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDIgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKworCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1M0X0JBU0VBRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECQkxCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GTEFTSCkKKy8vVE9ETworI2Vsc2UKKy8qCisgKkVFUE9STSBib290IGxvYWRlciBkb2VzIHRoZSByZWxvY2F0ZSBhbmQgbG93bGV2ZWwgaW5pdCB3b3JrCisgKi8KKyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorLyogRW52aXJvbm1lbnQgaXMgaW4gTkFORCAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX05BTkQJMQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMHgwMDA4MDAwMAkvKiBPZmZzZXQgb2YgRW52aXJvbm1lbnQgU2VjdG9yKDUxMktCKSAqLworI2RlZmluZSBOQU5EX01BWF9DSElQUyAgICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg4MDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDUxMktpQiAqLworI2VuZGlmCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTYKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwkzMQorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwkzMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9uYW5kIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b25hbmQ6NTEyayh1LWJvb3QpLDUxMmsoZW52KSwxNjM4NGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibmFuZDAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2Vsc2UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2syIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX1BIWV9DTE9DSwkJMTI1MDAwMDAwCS8qIDEyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMF9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMV9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMjAwMDAgLyogMTI4SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAxMDAwMCAvKiA2NEsgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKy8qCisqIEREUiBUcmFpbmluZyBhbGdvcml0aG0KKyovCisjZGVmaW5lIEREUl9UUkFJTklORworLy8jdW5kZWYgRERSX1RSQUlOSU5HCisKKy8vIEREUiBDb25maWdzCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMxCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzEJMHgwMTAwMDAwMTAxMDEwMTAxTEwgLy8weDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkcxCTB4MDEwMDAxMDAwMTAwMDAwMExMIC8vMHgwMTAwMDEwMDAxMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMQkweDAyMDAwMDAwMDAwMTAxMDBMTCAvLzB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzEJMHgwMjAyMDIwMjAyMDIwMjAyTEwgLy8weDAyMDIwMjAyMDIwMjAyMDJMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzA0X1ZBTF9DRkcxCTB4MDAwMDAxMDEwMDAwMDAwMUxMCisvLyBPcmlnaW5hbCBWYWx1ZQorLy8gI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcxCTB4MDAwMzAxMDUwMDAxMDAwMUxMCisvLyBEcm9yJ3MgbW9kaWZpY2F0aW9uICBydHRfMD0xIAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcxCTB4MDAwMzAxMDUwMDAxMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzEJMHgwYTBhMDQwMzAwMDMwMzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMQkweDAwMDAwMDA1MDAwMDAyMGFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkcxCTB4NjQwMDAwM2YzZjE2MDIwZUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzEJMHgwMDAwNjQwMDY0MDA2NDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMQkweDAxMjAyMDIwMjAxOTFhMThMTAorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkcxCTB4MDAwMDAwMzMwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAxMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMQkweDAwMTAwMDEwMDAxMDAwMTBMTAkKKyNkZWZpbmUgREVOQUxJX0NUTF8xNF9WQUxfQ0ZHMQkweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkcxCTB4MGMyZDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzEJMHgwMDAwMDAwMDZkNTYwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xN19WQUxfQ0ZHMQkweDAwMDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkcxCTB4MDYwMDAxMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzEJMHgwMDAwMzcwMGM4MDUwYjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMQkweDAwMDAwMTAxMzg4MDAwYzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkcxCTB4MDIwMjAyMDEwMDAwMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjJfVkFMX0NGRzEJMHgwMDAwMDIwMDA3MDAwMDAyTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8yM19WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzI0X1ZBTF9DRkcxCTB4MDAwMDAwMDIwMGEwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjVfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMQkweDk0NDA0OTI3OTQ0MDQ5MjdMTAorI2RlZmluZSBERU5BTElfQ1RMXzI3X1ZBTF9DRkcxCTB4OTQ0MDQ5Mjc5NDQwNDkyN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjhfVkFMX0NGRzEJMHgwN2MwMDQwMTA3YzAwNDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yOV9WQUxfQ0ZHMQkweDA3YzAwNDAxMDdjMDA0MDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzMwX1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwNUxMCisjZGVmaW5lIERFTkFMSV9DVExfMzFfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMl9WQUxfQ0ZHMQkweDBjMDIwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMzX1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwNExMCisjZGVmaW5lIERFTkFMSV9DVExfMzRfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNV9WQUxfQ0ZHMQkweDAwMzQzNDM0MzQwNTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM2X1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwNExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzM3X1ZBTF9DRkcxCTB4MGE1MjAwMDAwMDA0MDAwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MgcnR0PTExIGJpdFsxXT0xCisjZGVmaW5lIERFTkFMSV9DVExfMzdfVkFMX0NGRzEJMHgwYTUyMDAwMDAwNDQwMjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOF9WQUxfQ0ZHMQkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM5X1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDBfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMGM4TEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMQkweDAwY2MwMDUwMDBjYzAwNTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQxX1ZBTF9DRkcxCTB4MDAxNzAwNTAwMDE3MDA1MExMCisjZGVmaW5lIERFTkFMSV9DVExfNDJfVkFMX0NGRzEJREVOQUxJX0NUTF80MV9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzQzX1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDRfVkFMX0NGRzEJREVOQUxJX0NUTF80M19WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzQ1X1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDZfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80N19WQUxfQ0ZHMQkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ4X1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDUwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MF9WQUxfQ0ZHMQkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUxX1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTJfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81M19WQUxfQ0ZHMQkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU0X1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTVfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81Nl9WQUxfQ0ZHMQkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU3X1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNThfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81OV9WQUxfQ0ZHMQkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYwX1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjFfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Ml9WQUxfQ0ZHMQkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzYzX1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjRfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82NV9WQUxfQ0ZHMQkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY2X1ZBTF9DRkcxCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjdfVkFMX0NGRzEJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OF9WQUxfQ0ZHMQkweDAwMDAwMDAwMDIwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY5X1ZBTF9DRkcxCTB4MDAwMDAwMDNlODA1MDAwMExMCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMyCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzIJMHgwMTAwMDAwMTAxMDEwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMV9WQUxfQ0ZHMgkweDAxMDAwMTAwMDEwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAyX1ZBTF9DRkcyCTB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzIJMHgwMjAyMDIwMjAyMDIwMjAyTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8wNF9WQUxfQ0ZHMgkweDAwMDAwMTAxMDAwMDAwMDFMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8wNV9WQUxfQ0ZHMgkweDAwMDMwMTA1MDAwMTAwMDFMTAorLy8gRHJvcidzIHNldHRpbmdzIHJ0dF8wPTEKKyNkZWZpbmUgREVOQUxJX0NUTF8wNV9WQUxfQ0ZHMgkweDAwMDMwMTAzMDAwMTAwMDFMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMgkweDBhMGEwNDAzMDAwMzAzMDBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzIJMHgwNjBhMDIwMjAwMDIwMjAwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzIJMHgwMDAwMDAwNTAwMDAwMjBhTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzA3X1ZBTF9DRkcyCTB4MDAwMDAwMDMwMDAwMDIwNUxMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkcyCTB4NjQwMDAwM2YzZjE2MDIwZUxMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8wOF9WQUxfQ0ZHMgkweDY0MDAwMDNmM2YwYjAyMDdMTAorI2RlZmluZSBERU5BTElfQ1RMXzA5X1ZBTF9DRkcyCTB4MDAwMDY0MDA2NDAwNjQwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMTBfVkFMX0NGRzIJMHgwMTIwMjAyMDIwMTkxYTE4TEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzIJMHgwMDAwMDAzMzAwMDAwMDAwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkcyCTB4MDAwMDAwMWEwMDAwMDAwMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMTAwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8xMl9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDA4MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEzX1ZBTF9DRkcyCTB4MDAxMDAwMTAwMDEwMDAxMExMCQorI2RlZmluZSBERU5BTElfQ1RMXzE0X1ZBTF9DRkcyCTB4MDAxMDAwMTAwMDEwMDAxMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkcyCTB4MGMyZDAwMDAwMDAwMDAwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8xNV9WQUxfQ0ZHMgkweDA2MTIwMDAwMDAwMDAwMDBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMgkweDAwMDAwMDAwNmQ1NjAwMDBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzIJMHgwMDAwMDAwMDM2YTYwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xN19WQUxfQ0ZHMgkweDAwMDAwMTAwMDAwMDAwMDBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xOF9WQUxfQ0ZHMgkweDA2MDAwMTAwMDAwMDAwMDBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMThfVkFMX0NGRzIJMHgwMzAwMDEwMDAwMDAwMDAwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzIJMHgwMDAwMzcwMGM4MDUwYjAwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzE5X1ZBTF9DRkcyCTB4MDAwMDFjMDBjODAzMDYwMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzIwX1ZBTF9DRkcyCTB4MDAwMDAxMDEzODgwMDBjOExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMgkweDAwMDAwMTAwOWM0MDAwYzhMTAorLyogT3JpZ2luYWwgc2V0dGluZ3MsIEFIQi9ERFIgc3luY2hyb25vdXMgKi8KKyNkZWZpbmUgREVOQUxJX0NUTF8yMV9WQUxfQ0ZHMgkweDAzMDMwMzAxMDAwMDAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkcyCTB4MDAwMDAyMDAwNjAwMDAwM0xMCisvKiBBSEIvRERSIGFzeW5jaHJvbm91cyAqLworLy8jZGVmaW5lIERFTkFMSV9DVExfMjFfVkFMX0NGRzIJMHgwMDAwMDAwMTAwMDAwMTAxTEwKKy8vI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkcyCTB4MDAwMDAyMDAwNjAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMjNfVkFMX0NGRzIKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMjRfVkFMX0NGRzIJMHgwMDAwMDAwMjAwYTAwMDAwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzI0X1ZBTF9DRkcyCTB4MDAwMDAwMDIwMDUwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjVfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMgkweDkzNDA0OTI3OTM0MDQ5MjdMTAorI2RlZmluZSBERU5BTElfQ1RMXzI3X1ZBTF9DRkcyCTB4OTM0MDQ5Mjc5MzQwNDkyN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjhfVkFMX0NGRzIJMHgwN2MwMDQwMTA3YzAwNDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yOV9WQUxfQ0ZHMgkweDA3YzAwNDAxMDdjMDA0MDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzMwX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwNExMCisjZGVmaW5lIERFTkFMSV9DVExfMzFfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMl9WQUxfQ0ZHMgkweDBjMDIwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMzX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwNExMCisjZGVmaW5lIERFTkFMSV9DVExfMzRfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzIJMHgwMDM0MzQzNDM0MDUwMDAwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzM1X1ZBTF9DRkcyCTB4MDA3NDc0NzQ3NDAzMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzZfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDA0TEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMzdfVkFMX0NGRzIJMHgwYTUyMDAwMDAwMDQwMDAwTEwKKy8vIERyb3IncyBzZXR0aW5ncyBydHQ9MTEgYml0WzFdPTEKKyNkZWZpbmUgREVOQUxJX0NUTF8zN19WQUxfQ0ZHMgkweDA0MzIwMDAwMDAwNDAyMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM4X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzlfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNDBfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMGM4TEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzQwX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDA2NExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzIJMHgwMGNjMDA1MDAwY2MwMDUwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzIJMHgwMDE3MDA1MDAwMTcwMDUwTEwKKy8vIERyb3IncyBzZXR0aW5ncyBhZGoxID0gMHgyOCAKKyNkZWZpbmUgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMgkweDAwMjgwMDkwMDAyODAwOTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkcyCURFTkFMSV9DVExfNDFfVkFMX0NGRzIKKyNkZWZpbmUgREVOQUxJX0NUTF80M19WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ0X1ZBTF9DRkcyCURFTkFMSV9DVExfNDNfVkFMX0NGRzIKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ2X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDdfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF80OV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwNTBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDI4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUxX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTJfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81M19WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU0X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTVfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81Nl9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU3X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNThfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81OV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYwX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjFfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Ml9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzYzX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjRfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82NV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY2X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjdfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDIwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY5X1ZBTF9DRkcyCTB4MDAwMDAwMDNlODA1MDAwMExMCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMzCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzMJMHgwMTAwMDAwMTAxMDEwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMV9WQUxfQ0ZHMwkweDAxMDAwMTAwMDEwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAyX1ZBTF9DRkczCTB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzMJMHgwMjAyMDIwMjAyMDIwMjAyTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8wNF9WQUxfQ0ZHMwkweDAwMDAwMTAxMDAwMDAwMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkczCTB4MDAwMzAxMDUwMDAxMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzMJMHgwYTBhMDQwMzAwMDMwMzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMwkweDAwMDAwMDA1MDAwMDAyMGFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkczCTB4NjQwMDAwM2YzZjE1MDIwZUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzMJMHgwMDAwNjQwMDY0MDA2NDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMwkweDAxMjAyMDIwMjAxOTFhMThMTAorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkczCTB4MDAwMDAwMzAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwZjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMwkweDAwMTAwMDEwMDAxMDAwMTBMTAkKKyNkZWZpbmUgREVOQUxJX0NUTF8xNF9WQUxfQ0ZHMwkweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkczCTB4MGI1MDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzMJMHgwMDAwMDAwMDY1OWQwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xN19WQUxfQ0ZHMwkweDAwMDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkczCTB4MDYwMDAxMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzMJMHgwMDAwMzQwMGM4MDUwYjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMwkweDAwMDAwMTAxMjI2ZTAwYzhMTAorLyogT3JpZ2luYWwgc2V0dGluZ3MsIEFIQi9ERFIgc3luY2hyb25vdXMgKi8KKyNkZWZpbmUgREVOQUxJX0NUTF8yMV9WQUxfQ0ZHMwkweDAyMDIwMjAxMDAwMDAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkczCTB4MDAwMDAyMDAwNzAwMDAwMkxMCisvKiBBSEIvRERSIGFzeW5jaHJvbm91cyAqLworLy8jZGVmaW5lIERFTkFMSV9DVExfMjFfVkFMX0NGRzMJMHgwMDAwMDAwMTAwMDAwMTAxTEwKKy8vI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkczCTB4MDAwMDAyMDAwNzAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMjNfVkFMX0NGRzMKKyNkZWZpbmUgREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMwkweDAwMDAwMDAyMDA5NTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjZfVkFMX0NGRzMJMHg5NDQwNDkyNzk0NDA0OTI3TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yN19WQUxfQ0ZHMwkweDk0NDA0OTI3OTQ0MDQ5MjdMTAorI2RlZmluZSBERU5BTElfQ1RMXzI4X1ZBTF9DRkczCTB4MDdjMDA0MDEwN2MwMDQwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjlfVkFMX0NGRzMJMHgwN2MwMDQwMTA3YzAwNDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMF9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDVMTAorI2RlZmluZSBERU5BTElfQ1RMXzMxX1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzMJMHgwYzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zM19WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM0X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzMJMHgwMDM0MzQzNDM0MDUwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM3X1ZBTF9DRkczCTB4MGE1MjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQwX1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDBiYUxMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzMJMHgwMGNjMDA1MDAwY2MwMDUwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMwkweDAwY2MwMDUwMDBjYzAwNTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkczCURFTkFMSV9DVExfNDFfVkFMX0NGRzMKKyNkZWZpbmUgREVOQUxJX0NUTF80M19WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ0X1ZBTF9DRkczCURFTkFMSV9DVExfNDNfVkFMX0NGRzMKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ2X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDdfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ5X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDA0YkxMCisjZGVmaW5lIERFTkFMSV9DVExfNTBfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUyX1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTNfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU1X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTZfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU4X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTlfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYxX1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjJfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82M19WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzY0X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjVfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY3X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjhfVkFMX0NGRzMJMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHMwkweDAwMDAwMDAzZTgwNTAwMDBMTAorCisvL0RFTkFMSSBDT05GSUdSQVRJT04gRk9SIEJPQVJEIENPTkZJRyAjNAorI2RlZmluZSBERU5BTElfQ1RMXzAwX1ZBTF9DRkc0CTB4MDEwMDAwMDEwMTAxMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDFfVkFMX0NGRzQJMHgwMTAwMDEwMDAxMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHNAkweDAyMDAwMDAwMDAwMTAxMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAzX1ZBTF9DRkc0CTB4MDIwMjAyMDIwMjAyMDIwMkxMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMDRfVkFMX0NGRzQJMHgwMDAwMDEwMTAwMDAwMDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNV9WQUxfQ0ZHNAkweDAwMDMwMTA1MDAwMTAwMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA2X1ZBTF9DRkc0CTB4MGEwYTA0MDMwMDAzMDMwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzQJMHgwMDAwMDAwNTAwMDAwMjBhTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOF9WQUxfQ0ZHNAkweDY0MDAwMDNmM2YxMjAyMGNMTAorI2RlZmluZSBERU5BTElfQ1RMXzA5X1ZBTF9DRkc0CTB4MDAwMDY0MDA2NDAwNjQwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMTBfVkFMX0NGRzQJMHgwMTIwMjAyMDIwMTkxYTE4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMV9WQUxfQ0ZHNAkweDAwMDAwMDJhMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMTAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTNfVkFMX0NGRzQJMHgwMDEwMDAxMDAwMTAwMDEwTEwJCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzQJMHgwMDEwMDAxMDAwMTAwMDEwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNV9WQUxfQ0ZHNAkweDA5ZTAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE2X1ZBTF9DRkc0CTB4MDAwMDAwMDA1OGJlMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzQJMHgwMDAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOF9WQUxfQ0ZHNAkweDA1MDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE5X1ZBTF9DRkc0CTB4MDAwMDJkMDBjODA1MGEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzQJMHgwMDAwMDEwMGZkYTAwMGM4TEwKKy8qIE9yaWdpbmFsIHNldHRpbmdzLCBwc2V1ZG8gc3luY2hyb25vdXMgKi8KKy8vI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkc0CTB4MDIwMjAyMDEwMDAwMDEwMUxMCisvLyNkZWZpbmUgREVOQUxJX0NUTF8yMl9WQUxfQ0ZHNAkweDAwMDAwMjAwMDcwMDAwMDJMTAorLyogQUhCL0REUiBhc3luY2hyb25vdXMgKi8KKyNkZWZpbmUgREVOQUxJX0NUTF8yMV9WQUxfQ0ZHNAkweDAwMDAwMDAxMDAwMDAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkc0CTB4MDAwMDAyMDAwNzAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMjNfVkFMX0NGRzQKKyNkZWZpbmUgREVOQUxJX0NUTF8yNF9WQUxfQ0ZHNAkweDAwMDAwMDAyMDA4MjAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjZfVkFMX0NGRzQJMHg5NDQwNDkyNzk0NDA0OTI3TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yN19WQUxfQ0ZHNAkweDk0NDA0OTI3OTQ0MDQ5MjdMTAorI2RlZmluZSBERU5BTElfQ1RMXzI4X1ZBTF9DRkc0CTB4MDdjMDA0MDEwN2MwMDQwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjlfVkFMX0NGRzQJMHgwN2MwMDQwMTA3YzAwNDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMF9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDVMTAorI2RlZmluZSBERU5BTElfQ1RMXzMxX1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzQJMHgwYzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zM19WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM0X1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzQJMHgwMDRiNGI0YjRiMDUwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNl9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM3X1ZBTF9DRkc0CTB4MDg1MjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzQJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOV9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQwX1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDBhM0xMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzQJMHgwMGNjMDA1MDAwY2MwMDUwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MV9WQUxfQ0ZHNAkweDAwMTYwMDVhMDAxNjAwNWFMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkc0CURFTkFMSV9DVExfNDFfVkFMX0NGRzQKKyNkZWZpbmUgREVOQUxJX0NUTF80M19WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ0X1ZBTF9DRkc0CURFTkFMSV9DVExfNDNfVkFMX0NGRzQKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ2X1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDdfVkFMX0NGRzQJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ5X1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDA0MUxMCisjZGVmaW5lIERFTkFMSV9DVExfNTBfVkFMX0NGRzQJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUyX1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTNfVkFMX0NGRzQJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU1X1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTZfVkFMX0NGRzQJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU4X1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTlfVkFMX0NGRzQJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYxX1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjJfVkFMX0NGRzQJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82M19WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzY0X1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjVfVkFMX0NGRzQJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHNAkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY3X1ZBTF9DRkc0CTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjhfVkFMX0NGRzQJMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHNAkweDAwMDAwMDAzZTgwNTAwMDBMTAorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2Mxa2FzaWMuaCBiL2luY2x1ZGUvY29uZmlncy9jMWthc2ljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzZmE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9jMWthc2ljLmgKQEAgLTAsMCArMSw2NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPCQkxCisjZGVmaW5lIENPTkZJR19BUk0xMTM2IAkJMQkvKiBUaGlzIGlzIGFuIGFybTExMzZqLXMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzEwMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX0MxS0FTSUMJMQorI3VuZGVmICBDT05GSUdfVVNFX0lSUQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQlERFJfQkFTRUFERFIKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkoNTEyICogMTAyNCAqIDEwMjQpCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovICAKKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworLyoKKyAqIEVtYWMgU2V0dGluZ3MKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fR0VNQUMJMQorCisvLyBHRU1BQyBtb2RlIGNvbmZpZ3VyZWQgYnkgYm9vdHN0cmFwIHBpbnMgb3IgU1cKKy8vI3VuZGVmIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKworI2RlZmluZSBHRU1BQzBfUEhZX0FERFIJCTAKKyNkZWZpbmUgR0VNQUMwX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQorI2RlZmluZSBHRU1BQzBfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzBfUEhZX0ZMQUdTCShHRU1BQ19QSFlfQVVUT05FRyB8IEdFTUFDX0dFTV9ERUxBWV9ESVNBQkxFIHwgR0VNQUNfTTg4RTExMTFfUEhZX1JHTUlJX0FERF9ERUxBWSkKKyNkZWZpbmUgR0VNQUMwX1BIWUlEWAkJMAorCisjZGVmaW5lIEdFTUFDMV9QSFlfQUREUgkJOAorI2RlZmluZSBHRU1BQzFfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMV9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMV9QSFlfRkxBR1MJKEdFTUFDX1BIWV9BVVRPTkVHIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUgfCBHRU1BQ19NODhFMTExMV9QSFlfUkdNSUlfQUREX0RFTEFZKQorI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCisKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkxCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX01FTVRFU1QgfCBDRkdfQ01EX01JSSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCAvKkNGR19DTURfTkFORCB8Ki8gQ0ZHX0NNRF9KRkZTMiB8ICBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX05GUyB8IENGR19DTURfSTJDIHwgQ0ZHX0NNRF9FRVBST00gfCBDRkdfQ01EX0VMRi8qfCBDRkdfQ01EX1NQSSovKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAwID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJXAorCSJob3N0bmFtZT1jb21jZXJ0bzEwMDBcMCIJCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbmZzIHJ3ICIJCVwKKwkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIJCQkJXAorCSJmbGFzaGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiCVwKKwkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImluaXRfcHJvY2Vzcz0vZXRjL3ByZWluaXRcMCIgXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImZsYXNoX3NlbGY9cnVuIGZsYXNoYXJncyBhZGRpcCBhZGR0dHk7IgkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJib290X25mcz1uZnMgODA2MDAwMDAgJHtyb290cGF0aH0vYm9vdC8ke2tlcm5lbGZpbGV9O3J1biBuZnNhcmdzIGFkZGV0aCBhZGRpcCBhZGR0dHk7IiAgICAgXAorCSAgICAgICAgImJvb3RtIDgwNjAwMDAwXDAiCQkJCQkJXAorCSJib290X2ZsYXNoPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IHVsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJib290X2ZsYXNob2xkPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGZzbG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKwkicm9vdHBhdGg9L2RldmVsL2ZzLWMxa2FzaWNcMCIgXAorCSJrZXJuZWxmaWxlPXVJbWFnZVwwIiBcCisJIm10ZGlkcz0iIE1URElEU19ERUZBVUxUICJcMCIgXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIiBcCisJInBhcnRpdGlvbj0iIE1URFBBUlRJVElPTl9ERUZBVUxUICJcMCIgXAorCSJtdGRkZXZudW09MlwwIiBcCisJIm10ZGRldm5hbWU9ZnNcMCIgXAorCSJmc2ZpbGU9cm9vdC5qZmZzMi0xMjhrXDAiIFwKKwkidXBkYXRlbmFuZGZzPXRmdHAgODEwMDAwMDAgJHtmc2ZpbGV9O25hbmQgZXJhc2UgNjAwMDAgODgwMDAwO25hbmQgd3JpdGUgODEwMDAwMDAgNjAwMDAgODgwMDAwXDAiIFwKKyAJInVwZGF0ZWZzPXRmdHAgODEwMDAwMDAgJHtmc2ZpbGV9O3Byb3RlY3Qgb2ZmIDE6My0xMjdcO2VyYXNlIDE6My0xMjc7Y3AuYiA4MTAwMDAwMCAyMDA2MDAwMCAke2ZpbGVzaXplfVwwIiBcCisJInVwZGF0ZWJvb3Q9dGZ0cCA4MTAwMDAwMCB1LWJvb3QuYmluO3Byb3RlY3Qgb2ZmIDE6MC0xXDtlcmFzZSAxOjAtMTtjcC5iIDgxMDAwMDAwIDIwMDAwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkiZWVwcm9tZmlsZT1lZXByb20uYmluXDAiIFwKKwkidXBkYXRlZXByb209dGZ0cCA4MTAwMDAwMCAke2VlcHJvbWZpbGV9O2VlcHJvbSB3cml0ZSA4MTAwMDAwMCAwICR7ZmlsZXNpemV9XDAiIFwKKwkiIgorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJKFBIWVNfU0RSQU0gKyAweDAxMDAwMDAwKQkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4ODAwMDAwCS8qIDggTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAJCS8qIDAgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbiAtIFVzaW5nIENGSSBkcml2ZXIgCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkxCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZGlzYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTI1NgkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjdW5kZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMQkJCUVYUF9DUzBfQkFTRUFERFIJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMjAwMDAJLyogMTI4IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMSAgICAgICAvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7IFBIWVNfRkxBU0gxIH0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworLyoKKyAqIENGSSBkcml2ZXIgCisgKi8KKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJMQkvKiBmbGFzaCBpcyBDRkkgY29uZm9ybWFudCAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKyN1bmRlZiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworLy8gI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDEgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgMHg0MDAwICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisjZW5kaWYKKworLyoKKyAqIEkyQyBzdXBwb3J0CisgKi8KKyNpZiBkZWZpbmVkKENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ0ZHX1RDTEsgICAgICAgICAgICAgICAgICAgICAgIENGR19IWl9DTE9DSworI2RlZmluZSBDRkdfSTJDX1NQRUVEICAgICAgICAgICAgICAgICAgNDAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRSAgICAgICAgICAgICAgICAgIDAKKyNpZiBkZWZpbmVkKENGR19DTURfRUVQUk9NKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMiAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2IC8qIG1heCA2NCBieXRlICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDIgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMiBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisKKworCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1M0X0JBU0VBRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECQkxCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GTEFTSCkKKy8vVE9ETworI2Vsc2UKKy8qCisgKkVFUE9STSBib290IGxvYWRlciBkb2VzIHRoZSByZWxvY2F0ZSBhbmQgbG93bGV2ZWwgaW5pdCB3b3JrCisgKi8KKyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorLyogRW52aXJvbm1lbnQgaXMgaW4gTkFORCAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX05BTkQJMQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMHgwMDA0MDAwMAkvKiBPZmZzZXQgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTICAgICAgICAgIDEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTI4S2lCICovCisjZW5kaWYKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JNgorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTI5CisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTMxCisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTMwCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSkZGUzIpCisvLyNkZWZpbmUgQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTCisjZW5kaWYgLyogQ0ZHX0NNRF9KRkZTMiAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJuYW5kMD1jb21jZXJ0b25hbmQiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvbmFuZDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDE2MDAwayhmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJuYW5kMCwyIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazMiCisjZWxzZQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9Y29tY2VydG9mbGFzaC4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b2ZsYXNoLjA6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwyIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazIiCisjZW5kaWYKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMjQwMDAwMDAJLyogMjQgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfQ0xLCQkJQ0ZHX0NMS182NTBfMTg3XzM3NQorI2RlZmluZSBDRkdfUEhZX0NMT0NLCQkxMjUwMDAwMDAJLyogMTI1IE1IeiovCisjZGVmaW5lIENGR19HRU0wX0NMT0NLCQkgMjUwMDAwMDAJLyogIDI1IE1IeiovCisjZGVmaW5lIENGR19HRU0xX0NMT0NLCQkgMjUwMDAwMDAJLyogIDI1IE1IeiovCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDBBMDAwMDAwIC8qIEFSQU1fQkFTRUFERFIgQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwMDAyMDAwMCAvKiAxMjhLICovCisjZGVmaW5lIENGR19BUkFNX0NPREVfU0laRQkweDAwMDEwMDAwIC8qIDY0SyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworLyoKKyogRERSIFRyYWluaW5nIGFsZ29yaXRobQorKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKworI2RlZmluZSBBREoyX01JTl9WQUwgICAgIDkwCisjZGVmaW5lIEFESjJfTUFYX1ZBTCAgICAxNTAKKworI2RlZmluZSBBREoyX01JTl9BQ0NFUFRFRF9SQU5HRSAgICAgMjAgICAgLyogYWRqMl92YWwxOiBlcnJvciAqLworI2RlZmluZSBBREoyX0FDQ0VQVEVEX1JBTkdFICAgICAgICAgMjUgICAgLyogYWRqMl92YWwyOiB3YXJuaW5nICovCisKKyNkZWZpbmUgQURKMV9NSU5fVkFMICAgICAxCisjZGVmaW5lIEFESjFfTUFYX1ZBTCAgICA4MAorCisjZGVmaW5lIEFESjFfTUlOX0FDQ0VQVEVEX1dJTkRPVyAgICAxOCAgICAgLyogYWRqMV92YWwxOiBpZ25vcmUgKi8KKyNkZWZpbmUgQURKMV9BQ0NFUFRFRF9XSU5ET1cgICAgICAgIDIzICAgICAvKiBhZGoxX3ZhbDI6IHdhcm5pbmcgKi8KKworI2RlZmluZSBERFJfVFJBSU5JTkdfREJHCisKKy8vIEREUiBDb25maWdzCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMxCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzEgICAweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkcxICAgMHgwMTAwMDEwMDAxMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMSAgIDB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzEgICAweDAyMDIwMjAyMDIwMjAyMDJMTAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcxICAgMHgwMDAzMDEwNTAwMDEwMDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMSAgIDB4MEEwQTA0MDMwMDAzMDMwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzEgICAweDAwMDAwMDA1MDAwMDAyMEFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkcxICAgMHg2NDAwMDAzRjNGMTYwMjBFTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMSAgIDB4MDAwMDY0MDA2NDAwNjQwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzEgICAweDAwMDAwMDMxMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAxMjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMSAgIDB4MDAxMDAwMTAwMDEwMDAxMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzEgICAweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkcxICAgMHgwQjYwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDA2NjUzMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzEgICAweDAwMDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkcxICAgMHgwNjAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMSAgIDB4MDAwMDM0MDBDODA1MEIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzEgICAweDAwMDAwMTAxMjVCNDAwQzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkcxICAgMHgwMjAyMDIwMTAwMDAwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMSAgIDB4MDAwMDAyMDAwNzAwMDAwMkxMCisjZGVmaW5lIERFTkFMSV9DVExfMjRfVkFMX0NGRzEgICAweDAwMDAwMDAyMDA5NzAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMSAgIDB4OTQwMDU5Mzc5NDAwNTkzN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjdfVkFMX0NGRzEgICBERU5BTElfQ1RMXzI2X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMjhfVkFMX0NGRzEgICAweDA3QzAwNDAxMDdDMDA0MDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzI5X1ZBTF9DRkcxICAgREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzMwX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDA1TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzEgICAweDBjMDIwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMzX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzEgICAweDAwNzg3ODc4NzgwNTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zN19WQUxfQ0ZHMSAgIDB4MEE1MjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM5X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDBjOExMCisjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzEgICAweDAwMjAxMzgxMDAyMDEzODFMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkcxICAgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzQzX1ZBTF9DRkcxICAgMHgwMDAwMTMwMDAwMDAxMzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80NF9WQUxfQ0ZHMSAgIERFTkFMSV9DVExfNDNfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDZfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ3X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwNTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUwX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTJfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUzX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTVfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNThfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU5X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjFfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYyX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjdfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY4X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDNlODA1MDAwMExMCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMyCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzIgICAweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkcyICAgMHgwMTAwMDEwMDAxMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMiAgIDB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzIgICAweDAyMDIwMjAyMDIwMjAyMDJMTAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcyICAgMHgwMDAzMDEwMzAwMDEwMDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMiAgIDB4MDYwQTAyMDIwMDAyMDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzIgICAweDAwMDAwMDAzMDAwMDAyMDVMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkcyICAgMHg2NDAwMDAzRjNGMEMwMjA4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMiAgIDB4MDAwMDY0MDA2NDAwNjQwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzIgICAweDAwMDAwMDFBMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwQTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMiAgIDB4MDAxMDAwMTAwMDEwMDAxMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzIgICAweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkcyICAgMHgwNjA0MDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAzNjM4MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzIgICAweDAwMDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkcyICAgMHgwNDAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMiAgIDB4MDAwMDFDMDBDODAzMDYwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzIgICAweDAwMDAwMTAwOUM0MDAwQzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkcyICAgMHgwMzAzMDMwMTAwMDAwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMiAgIDB4MDAwMDAyMDAwNzAwMDAwM0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjRfVkFMX0NGRzIgICAweDAwMDAwMDAyMDA1MTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMiAgIDB4OTQwMDU5Mzc5NDAwNTkzN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjdfVkFMX0NGRzIgICBERU5BTElfQ1RMXzI2X1ZBTF9DRkcyCisjZGVmaW5lIERFTkFMSV9DVExfMjhfVkFMX0NGRzIgICAweDA3QzAwNDAxMDdDMDA0MDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzI5X1ZBTF9DRkcyICAgREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMgorI2RlZmluZSBERU5BTElfQ1RMXzMwX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDA1TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzIgICAweDBjMDIwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMzX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzIgICAweDAwRTZFNkU2RTYwMzAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM2X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zN19WQUxfQ0ZHMiAgIDB4MDYzMjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM5X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDBjOExMCisjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzIgICAweDAwNEIzN0VGMDA0QjM3RUZMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkcyICAgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMgorI2RlZmluZSBERU5BTElfQ1RMXzQzX1ZBTF9DRkcyICAgMHgwMDAwMzcwMDAwMDAzNzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80NF9WQUxfQ0ZHMiAgIERFTkFMSV9DVExfNDNfVkFMX0NGRzIKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDZfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ3X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwNTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUwX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTJfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUzX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTVfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU2X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNThfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU5X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjFfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYyX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjdfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY4X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDNlODA1MDAwMExMCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMzCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzMJREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkczCURFTkFMSV9DVExfMDFfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMwlERU5BTElfQ1RMXzAyX1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzMJREVOQUxJX0NUTF8wM19WQUxfQ0ZHMQorLy8gI2RlZmluZSBERU5BTElfQ1RMXzA0X1ZBTF9DRkczCURFTkFMSV9DVExfMDRfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8wNV9WQUxfQ0ZHMwlERU5BTElfQ1RMXzA1X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzMJREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzA3X1ZBTF9DRkczCURFTkFMSV9DVExfMDdfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8wOF9WQUxfQ0ZHMwkweDY0MDAwMDNmM2YxNTAyMGVMTAorI2RlZmluZSBERU5BTElfQ1RMXzA5X1ZBTF9DRkczCURFTkFMSV9DVExfMDlfVkFMX0NGRzEKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMwlERU5BTElfQ1RMXzAxMF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkczCTB4MDAwMDAwMzAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwZjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMwlERU5BTElfQ1RMXzEzX1ZBTF9DRkcxCQorI2RlZmluZSBERU5BTElfQ1RMXzE0X1ZBTF9DRkczCURFTkFMSV9DVExfMTRfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8xNV9WQUxfQ0ZHMwkweDBiNTAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE2X1ZBTF9DRkczCTB4MDAwMDAwMDA2NTlkMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzMJREVOQUxJX0NUTF8xN19WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkczCURFTkFMSV9DVExfMThfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMwkweDAwMDAzNDAwYzgwNTBiMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzIwX1ZBTF9DRkczCTB4MDAwMDAxMDEyMjZlMDBjOExMCisjZGVmaW5lIERFTkFMSV9DVExfMjFfVkFMX0NGRzMJREVOQUxJX0NUTF8yMV9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkczCURFTkFMSV9DVExfMjJfVkFMX0NGRzEKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8yM19WQUxfQ0ZHMworI2RlZmluZSBERU5BTElfQ1RMXzI0X1ZBTF9DRkczCTB4MDAwMDAwMDIwMDk1MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjVfVkFMX0NGRzMJREVOQUxJX0NUTF8yNV9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzI2X1ZBTF9DRkczCURFTkFMSV9DVExfMjZfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8yN19WQUxfQ0ZHMwlERU5BTElfQ1RMXzI3X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMjhfVkFMX0NGRzMJREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzI5X1ZBTF9DRkczCURFTkFMSV9DVExfMjlfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8zMF9WQUxfQ0ZHMwlERU5BTElfQ1RMXzMwX1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMzFfVkFMX0NGRzMJREVOQUxJX0NUTF8zMV9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzMyX1ZBTF9DRkczCURFTkFMSV9DVExfMzJfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8zM19WQUxfQ0ZHMwlERU5BTElfQ1RMXzMzX1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMzRfVkFMX0NGRzMJREVOQUxJX0NUTF8zNF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzM1X1ZBTF9DRkczCTB4MDAzYTNhM2EzYTAzMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzZfVkFMX0NGRzMJREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzM3X1ZBTF9DRkczCURFTkFMSV9DVExfMzdfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8zOF9WQUxfQ0ZHMwlERU5BTElfQ1RMXzM4X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMzlfVkFMX0NGRzMJREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzQwX1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDBiYUxMCisjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzMJMHgwMDFhMDA1MDAwMWEwMDUwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80Ml9WQUxfQ0ZHMwlERU5BTElfQ1RMXzQxX1ZBTF9DRkczCisjZGVmaW5lIERFTkFMSV9DVExfNDNfVkFMX0NGRzMJREVOQUxJX0NUTF80M19WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzQ0X1ZBTF9DRkczCURFTkFMSV9DVExfNDRfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHMwlERU5BTElfQ1RMXzQ1X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNDZfVkFMX0NGRzMJREVOQUxJX0NUTF80Nl9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzQ3X1ZBTF9DRkczCURFTkFMSV9DVExfNDdfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHMwlERU5BTElfQ1RMXzQ4X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDRiTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MF9WQUxfQ0ZHMwlERU5BTElfQ1RMXzUwX1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNTFfVkFMX0NGRzMJREVOQUxJX0NUTF81MV9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzUyX1ZBTF9DRkczCURFTkFMSV9DVExfNTJfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF81M19WQUxfQ0ZHMwlERU5BTElfQ1RMXzUzX1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNTRfVkFMX0NGRzMJREVOQUxJX0NUTF81NF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzU1X1ZBTF9DRkczCURFTkFMSV9DVExfNTVfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF81Nl9WQUxfQ0ZHMwlERU5BTElfQ1RMXzU2X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNTdfVkFMX0NGRzMJREVOQUxJX0NUTF81N19WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzU4X1ZBTF9DRkczCURFTkFMSV9DVExfNThfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF81OV9WQUxfQ0ZHMwlERU5BTElfQ1RMXzU5X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNjBfVkFMX0NGRzMJREVOQUxJX0NUTF82MF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzYxX1ZBTF9DRkczCURFTkFMSV9DVExfNjFfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF82Ml9WQUxfQ0ZHMwlERU5BTElfQ1RMXzYyX1ZBTF9DRkcxCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjNfVkFMX0NGRzMJREVOQUxJX0NUTF82M19WQUxfQ0ZHMQorLy8gI2RlZmluZSBERU5BTElfQ1RMXzY0X1ZBTF9DRkczCURFTkFMSV9DVExfNjRfVkFMX0NGRzEKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82NV9WQUxfQ0ZHMwlERU5BTElfQ1RMXzY1X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNjZfVkFMX0NGRzMJREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzY3X1ZBTF9DRkczCURFTkFMSV9DVExfNjdfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF82OF9WQUxfQ0ZHMwlERU5BTElfQ1RMXzY4X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNjlfVkFMX0NGRzMJREVOQUxJX0NUTF82OV9WQUxfQ0ZHMQorCisvL0RFTkFMSSBDT05GSUdSQVRJT04gRk9SIEJPQVJEIENPTkZJRyAjNAorI2RlZmluZSBERU5BTElfQ1RMXzAwX1ZBTF9DRkc0ICAgMHgwMTAwMDAwMTAxMDEwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMV9WQUxfQ0ZHNCAgIDB4MDEwMDAxMDAwMTAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDJfVkFMX0NGRzQgICAweDAyMDAwMDAwMDAwMTAxMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAzX1ZBTF9DRkc0ICAgMHgwMjAyMDIwMjAyMDIwMjAyTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNV9WQUxfQ0ZHNCAgIDB4MDAwMzAxMDUwMDAxMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzQgICAweDBBMEEwNDAzMDAwMzAzMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzA3X1ZBTF9DRkc0ICAgMHgwMDAwMDAwNTAwMDAwMjBBTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOF9WQUxfQ0ZHNCAgIDB4NjQwMDAwM0YzRjEzMDIwQ0xMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzQgICAweDAwMDA2NDAwNjQwMDY0MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkc0ICAgMHgwMDAwMDAyQTAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMl9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMEYwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTNfVkFMX0NGRzQgICAweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE0X1ZBTF9DRkc0ICAgMHgwMDEwMDAxMDAwMTAwMDEwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNV9WQUxfQ0ZHNCAgIDB4MDlEODAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzQgICAweDAwMDAwMDAwNTg5OTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE3X1ZBTF9DRkc0ICAgMHgwMDAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOF9WQUxfQ0ZHNCAgIDB4MDUwMDAxMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzQgICAweDAwMDAyRDAwQzgwNTBBMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzIwX1ZBTF9DRkc0ICAgMHgwMDAwMDEwMEZFN0IwMEM4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDEwMDAwMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjJfVkFMX0NGRzQgICAweDAwMDAwMjAwMDcwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI0X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMjAwODMwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjZfVkFMX0NGRzQgICAweDk0MDA1OTM3OTQwMDU5MzdMTAorI2RlZmluZSBERU5BTElfQ1RMXzI3X1ZBTF9DRkc0ICAgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHNAorI2RlZmluZSBERU5BTElfQ1RMXzI4X1ZBTF9DRkc0ICAgMHgwN0MwMDQwMTA3QzAwNDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yOV9WQUxfQ0ZHNCAgIERFTkFMSV9DVExfMjhfVkFMX0NGRzQKKyNkZWZpbmUgREVOQUxJX0NUTF8zMF9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwNUxMCisjZGVmaW5lIERFTkFMSV9DVExfMzFfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMyX1ZBTF9DRkc0ICAgMHgwYzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zM19WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwNExMCisjZGVmaW5lIERFTkFMSV9DVExfMzRfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM1X1ZBTF9DRkc0ICAgMHgwMDg3ODc4Nzg3MDQwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNl9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwNExMCisjZGVmaW5lIERFTkFMSV9DVExfMzdfVkFMX0NGRzQgICAweDA4NTIwMDAwMDAwNDAyMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM4X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDBfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwYzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzQxX1ZBTF9DRkc0ICAgMHgwMDI0MTk5MzAwMjQxOTkzTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80Ml9WQUxfQ0ZHNCAgIERFTkFMSV9DVExfNDFfVkFMX0NGRzQKKyNkZWZpbmUgREVOQUxJX0NUTF80M19WQUxfQ0ZHNCAgIDB4MDAwMDE5MDAwMDAwMTkwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDRfVkFMX0NGRzQgICBERU5BTElfQ1RMXzQzX1ZBTF9DRkc0CisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzQgICAweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkc0ICAgMHgwMTAwMDEwMDAxMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHNCAgIDB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzQgICAweDAyMDIwMjAyMDIwMjAyMDJMTAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkc0ICAgMHgwMDAzMDEwNTAwMDEwMDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHNCAgIDB4MEEwQTA0MDMwMDAzMDMwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzQgICAweDAwMDAwMDA1MDAwMDAyMEFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkc0ICAgMHg2NDAwMDAzRjNGMTMwMjBDTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOV9WQUxfQ0ZHNCAgIDB4MDAwMDY0MDA2NDAwNjQwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzQgICAweDAwMDAwMDJBMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwRjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHNCAgIDB4MDAxMDAwMTAwMDEwMDAxMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzQgICAweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkc0ICAgMHgwOUQ4MDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDA1ODk5MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzQgICAweDAwMDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkc0ICAgMHgwNTAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHNCAgIDB4MDAwMDJEMDBDODA1MEEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzQgICAweDAwMDAwMTAwRkU3QjAwQzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkc0ICAgMHgwMDAwMDAwMTAwMDAwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMl9WQUxfQ0ZHNCAgIDB4MDAwMDAyMDAwNzAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjRfVkFMX0NGRzQgICAweDAwMDAwMDAyMDA4MzAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHNCAgIDB4OTQwMDU5Mzc5NDAwNTkzN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjdfVkFMX0NGRzQgICBERU5BTElfQ1RMXzI2X1ZBTF9DRkc0CisjZGVmaW5lIERFTkFMSV9DVExfMjhfVkFMX0NGRzQgICAweDA3QzAwNDAxMDdDMDA0MDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzI5X1ZBTF9DRkc0ICAgREVOQUxJX0NUTF8yOF9WQUxfQ0ZHNAorI2RlZmluZSBERU5BTElfQ1RMXzMwX1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDA1TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzQgICAweDBjMDIwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMzX1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNF9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzQgICAweDAwODc4Nzg3ODcwNDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM2X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zN19WQUxfQ0ZHNCAgIDB4MDg1MjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM5X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MF9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDBjOExMCisjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzQgICAweDAwMjQxOTkzMDAyNDE5OTNMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkc0ICAgREVOQUxJX0NUTF80MV9WQUxfQ0ZHNAorI2RlZmluZSBERU5BTElfQ1RMXzQzX1ZBTF9DRkc0ICAgMHgwMDAwMTkwMDAwMDAxOTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80NF9WQUxfQ0ZHNCAgIERFTkFMSV9DVExfNDNfVkFMX0NGRzQKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDZfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ3X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwNTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUwX1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTJfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUzX1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTVfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU2X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNThfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU5X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjFfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYyX1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjdfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY4X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDNlODA1MDAwMExMCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYzFrYXNpY19hcmFtLmggYi9pbmNsdWRlL2NvbmZpZ3MvYzFrYXNpY19hcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2NDg0NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9jMWthc2ljX2FyYW0uaApAQCAtMCwwICsxLDU5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkxCS8qIFRoaXMgaXMgYW4gYXJtMTEzNmotcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMTAwMAkxCS8qIEl0J3MgYW4gIFNvQyAqLworI2RlZmluZSBDT05GSUdfQk9BUkRfQzFLQVNJQwkxCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQlERFJfQkFTRUFERFIKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkoNTEyICogMTAyNCAqIDEwMjQpCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovICAKKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworLyoKKyAqIEVtYWMgU2V0dGluZ3MKKyAqLworI3VuZGVmIENPTkZJR19DT01DRVJUT19HRU1BQworCisvLyBHRU1BQyBtb2RlIGNvbmZpZ3VyZWQgYnkgYm9vdHN0cmFwIHBpbnMgb3IgU1cKKy8vI3VuZGVmIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKworI2RlZmluZSBHRU1BQzBfUEhZX0FERFIJCTAKKyNkZWZpbmUgR0VNQUMwX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQorI2RlZmluZSBHRU1BQzBfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzBfUEhZX0ZMQUdTCShHRU1BQ19QSFlfQVVUT05FRyB8IEdFTUFDX0dFTV9ERUxBWV9ESVNBQkxFIHwgR0VNQUNfTTg4RTExMTFfUEhZX1JHTUlJX0FERF9ERUxBWSkKKyNkZWZpbmUgR0VNQUMwX1BIWUlEWAkJMAorCisjZGVmaW5lIEdFTUFDMV9QSFlfQUREUgkJOAorI2RlZmluZSBHRU1BQzFfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMV9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMV9QSFlfRkxBR1MJKEdFTUFDX1BIWV9BVVRPTkVHIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUgfCBHRU1BQ19NODhFMTExMV9QSFlfUkdNSUlfQUREX0RFTEFZKQorI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCisKKyN1bmRlZiBDT05GSUdfTkVUX01VTFRJCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX1JVTikKKworLy8jZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAwID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJKFBIWVNfU0RSQU0gKyAweDAxMDAwMDAwKQkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4ODAwMDAwCS8qIDggTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAJCS8qIDAgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbiAtIFVzaW5nIENGSSBkcml2ZXIgCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkxCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZGlzYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTI1NgkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjdW5kZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMQkJCUVYUF9DUzBfQkFTRUFERFIJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMjAwMDAJLyogMTI4IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMSAgICAgICAvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7IFBIWVNfRkxBU0gxIH0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworLyoKKyAqIENGSSBkcml2ZXIgCisgKi8KKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJMQkvKiBmbGFzaCBpcyBDRkkgY29uZm9ybWFudCAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKyN1bmRlZiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworLy8gI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDEgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgMHg0MDAwICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisjZW5kaWYKKworLyoKKyAqIEkyQyBzdXBwb3J0CisgKi8KKyNpZiBkZWZpbmVkKENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ0ZHX1RDTEsgICAgICAgICAgICAgICAgICAgICAgIENGR19IWl9DTE9DSworI2RlZmluZSBDRkdfSTJDX1NQRUVEICAgICAgICAgICAgICAgICAgNDAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRSAgICAgICAgICAgICAgICAgIDAKKyNpZiBkZWZpbmVkKENGR19DTURfRUVQUk9NKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMiAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2IC8qIG1heCA2NCBieXRlICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDIgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMiBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisKKworCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1M0X0JBU0VBRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECQkxCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GTEFTSCkKKy8vVE9ETworI2Vsc2UKKy8qCisgKkVFUE9STSBib290IGxvYWRlciBkb2VzIHRoZSByZWxvY2F0ZSBhbmQgbG93bGV2ZWwgaW5pdCB3b3JrCisgKi8KKyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorLyogRW52aXJvbm1lbnQgaXMgaW4gTkFORCAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX05BTkQJMQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMHgwMDA0MDAwMAkvKiBPZmZzZXQgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTICAgICAgICAgIDEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTI4S2lCICovCisjZW5kaWYKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JNgorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTI5CisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTMxCisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTMwCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSkZGUzIpCisvLyNkZWZpbmUgQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTCisjZW5kaWYgLyogQ0ZHX0NNRF9KRkZTMiAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJuYW5kMD1jb21jZXJ0b25hbmQiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvbmFuZDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDE2MDAwayhmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJuYW5kMCwyIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazMiCisjZWxzZQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9Y29tY2VydG9mbGFzaC4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b2ZsYXNoLjA6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwyIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazIiCisjZW5kaWYKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMjQwMDAwMDAJLyogMjQgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfQ0xLCQkJQ0ZHX0NMS182NTBfMTg3XzM3NQorI2RlZmluZSBDRkdfUEhZX0NMT0NLCQkxMjUwMDAwMDAJLyogMTI1IE1IeiovCisjZGVmaW5lIENGR19HRU0wX0NMT0NLCQkgMjUwMDAwMDAJLyogIDI1IE1IeiovCisjZGVmaW5lIENGR19HRU0xX0NMT0NLCQkgMjUwMDAwMDAJLyogIDI1IE1IeiovCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDBBMDAwMDAwIC8qIEFSQU1fQkFTRUFERFIgQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwMDAyMDAwMCAvKiAxMjhLICovCisjZGVmaW5lIENGR19BUkFNX0NPREVfU0laRQkweDAwMDFBMDAwIC8qIDEwNEsgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyA0ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKy8qCisqIEREUiBUcmFpbmluZyBhbGdvcml0aG0KKyovCisjZGVmaW5lIEREUl9UUkFJTklORworLy8jdW5kZWYgRERSX1RSQUlOSU5HCisKKyNkZWZpbmUgQURKMl9NSU5fVkFMICAgICA5MAorI2RlZmluZSBBREoyX01BWF9WQUwgICAgMTUwCisKKyNkZWZpbmUgQURKMl9NSU5fQUNDRVBURURfUkFOR0UgICAgIDIwICAgIC8qIGFkajJfdmFsMTogZXJyb3IgKi8KKyNkZWZpbmUgQURKMl9BQ0NFUFRFRF9SQU5HRSAgICAgICAgIDI1ICAgIC8qIGFkajJfdmFsMjogd2FybmluZyAqLworCisjZGVmaW5lIEFESjFfTUlOX1ZBTCAgICAgMQorI2RlZmluZSBBREoxX01BWF9WQUwgICAgODAKKworI2RlZmluZSBBREoxX01JTl9BQ0NFUFRFRF9XSU5ET1cgICAgMTggICAgIC8qIGFkajFfdmFsMTogaWdub3JlICovCisjZGVmaW5lIEFESjFfQUNDRVBURURfV0lORE9XICAgICAgICAyMyAgICAgLyogYWRqMV92YWwyOiB3YXJuaW5nICovCisKKy8vIEREUiBDb25maWdzCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMxCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzEgICAweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkcxICAgMHgwMTAwMDEwMDAxMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMSAgIDB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzEgICAweDAyMDIwMjAyMDIwMjAyMDJMTAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcxICAgMHgwMDAzMDEwNTAwMDEwMDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMSAgIDB4MEEwQTA0MDMwMDAzMDMwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzEgICAweDAwMDAwMDA1MDAwMDAyMEFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkcxICAgMHg2NDAwMDAzRjNGMTYwMjBFTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMSAgIDB4MDAwMDY0MDA2NDAwNjQwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzEgICAweDAwMDAwMDMxMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAxMjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMSAgIDB4MDAxMDAwMTAwMDEwMDAxMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzEgICAweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkcxICAgMHgwQjYwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDA2NjUzMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzEgICAweDAwMDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkcxICAgMHgwNjAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMSAgIDB4MDAwMDM0MDBDODA1MEIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzEgICAweDAwMDAwMTAxMjVCNDAwQzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkcxICAgMHgwMjAyMDIwMTAwMDAwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMSAgIDB4MDAwMDAyMDAwNzAwMDAwMkxMCisjZGVmaW5lIERFTkFMSV9DVExfMjRfVkFMX0NGRzEgICAweDAwMDAwMDAyMDA5NzAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMSAgIDB4OTQwMDU5Mzc5NDAwNTkzN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjdfVkFMX0NGRzEgICBERU5BTElfQ1RMXzI2X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMjhfVkFMX0NGRzEgICAweDA3QzAwNDAxMDdDMDA0MDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzI5X1ZBTF9DRkcxICAgREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzMwX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDA1TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzEgICAweDBjMDIwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMzX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzEgICAweDAwNzg3ODc4NzgwNTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zN19WQUxfQ0ZHMSAgIDB4MEE1MjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM5X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDBjOExMCisjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzEgICAweDAwMjAxMzgxMDAyMDEzODFMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkcxICAgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzQzX1ZBTF9DRkcxICAgMHgwMDAwMTMwMDAwMDAxMzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80NF9WQUxfQ0ZHMSAgIERFTkFMSV9DVExfNDNfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDZfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ3X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwNTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUwX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTJfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUzX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTVfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNThfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU5X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjFfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYyX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjdfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY4X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDNlODA1MDAwMExMCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMyCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzIgICAweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkcyICAgMHgwMTAwMDEwMDAxMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMiAgIDB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzIgICAweDAyMDIwMjAyMDIwMjAyMDJMTAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcyICAgMHgwMDAzMDEwMzAwMDEwMDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMiAgIDB4MDYwQTAyMDIwMDAyMDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzIgICAweDAwMDAwMDAzMDAwMDAyMDVMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkcyICAgMHg2NDAwMDAzRjNGMEMwMjA4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMiAgIDB4MDAwMDY0MDA2NDAwNjQwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzIgICAweDAwMDAwMDFBMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwQTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMiAgIDB4MDAxMDAwMTAwMDEwMDAxMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzIgICAweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkcyICAgMHgwNjA0MDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAzNjM4MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzIgICAweDAwMDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkcyICAgMHgwNDAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMiAgIDB4MDAwMDFDMDBDODAzMDYwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzIgICAweDAwMDAwMTAwOUM0MDAwQzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkcyICAgMHgwMzAzMDMwMTAwMDAwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMiAgIDB4MDAwMDAyMDAwNzAwMDAwM0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjRfVkFMX0NGRzIgICAweDAwMDAwMDAyMDA1MTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMiAgIDB4OTQwMDU5Mzc5NDAwNTkzN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjdfVkFMX0NGRzIgICBERU5BTElfQ1RMXzI2X1ZBTF9DRkcyCisjZGVmaW5lIERFTkFMSV9DVExfMjhfVkFMX0NGRzIgICAweDA3QzAwNDAxMDdDMDA0MDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzI5X1ZBTF9DRkcyICAgREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMgorI2RlZmluZSBERU5BTElfQ1RMXzMwX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDA1TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzIgICAweDBjMDIwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMzX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzIgICAweDAwRTZFNkU2RTYwMzAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM2X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zN19WQUxfQ0ZHMiAgIDB4MDYzMjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM5X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDBjOExMCisjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzIgICAweDAwNEIzN0VGMDA0QjM3RUZMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkcyICAgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMgorI2RlZmluZSBERU5BTElfQ1RMXzQzX1ZBTF9DRkcyICAgMHgwMDAwMzcwMDAwMDAzNzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80NF9WQUxfQ0ZHMiAgIERFTkFMSV9DVExfNDNfVkFMX0NGRzIKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDZfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ3X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwNTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUwX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTJfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUzX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTVfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU2X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNThfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU5X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjFfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYyX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjdfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY4X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDNlODA1MDAwMExMCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMzCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzMJMHgwMTAwMDAwMTAxMDEwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMV9WQUxfQ0ZHMwkweDAxMDAwMTAwMDEwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAyX1ZBTF9DRkczCTB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzMJMHgwMjAyMDIwMjAyMDIwMjAyTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8wNF9WQUxfQ0ZHMwkweDAwMDAwMTAxMDAwMDAwMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkczCTB4MDAwMzAxMDUwMDAxMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzMJMHgwYTBhMDQwMzAwMDMwMzAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMwkweDAwMDAwMDA1MDAwMDAyMGFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkczCTB4NjQwMDAwM2YzZjE1MDIwZUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzMJMHgwMDAwNjQwMDY0MDA2NDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMwkweDAxMjAyMDIwMjAxOTFhMThMTAorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkczCTB4MDAwMDAwMzAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwZjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMwkweDAwMTAwMDEwMDAxMDAwMTBMTAkKKyNkZWZpbmUgREVOQUxJX0NUTF8xNF9WQUxfQ0ZHMwkweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkczCTB4MGI1MDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzMJMHgwMDAwMDAwMDY1OWQwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xN19WQUxfQ0ZHMwkweDAwMDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkczCTB4MDYwMDAxMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzMJMHgwMDAwMzQwMGM4MDUwYjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMwkweDAwMDAwMTAxMjI2ZTAwYzhMTAorLyogT3JpZ2luYWwgc2V0dGluZ3MsIEFIQi9ERFIgc3luY2hyb25vdXMgKi8KKyNkZWZpbmUgREVOQUxJX0NUTF8yMV9WQUxfQ0ZHMwkweDAyMDIwMjAxMDAwMDAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkczCTB4MDAwMDAyMDAwNzAwMDAwMkxMCisvKiBBSEIvRERSIGFzeW5jaHJvbm91cyAqLworLy8jZGVmaW5lIERFTkFMSV9DVExfMjFfVkFMX0NGRzMJMHgwMDAwMDAwMTAwMDAwMTAxTEwKKy8vI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkczCTB4MDAwMDAyMDAwNzAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMjNfVkFMX0NGRzMKKyNkZWZpbmUgREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMwkweDAwMDAwMDAyMDA5NTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjZfVkFMX0NGRzMJMHg5NDQwNDkyNzk0NDA0OTI3TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yN19WQUxfQ0ZHMwkweDk0NDA0OTI3OTQ0MDQ5MjdMTAorI2RlZmluZSBERU5BTElfQ1RMXzI4X1ZBTF9DRkczCTB4MDdjMDA0MDEwN2MwMDQwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjlfVkFMX0NGRzMJMHgwN2MwMDQwMTA3YzAwNDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMF9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDVMTAorI2RlZmluZSBERU5BTElfQ1RMXzMxX1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzMJMHgwYzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zM19WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM0X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzMJMHgwMDNhM2EzYTNhMDUwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM3X1ZBTF9DRkczCTB4MGE1MjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQwX1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDBiYUxMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzMJMHgwMGNjMDA1MDAwY2MwMDUwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMwkweDAwMWEwMDUwMDAxYTAwNTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkczCURFTkFMSV9DVExfNDFfVkFMX0NGRzMKKyNkZWZpbmUgREVOQUxJX0NUTF80M19WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ0X1ZBTF9DRkczCURFTkFMSV9DVExfNDNfVkFMX0NGRzMKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ2X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDdfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ5X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDA0YkxMCisjZGVmaW5lIERFTkFMSV9DVExfNTBfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUyX1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTNfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU1X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTZfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU4X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTlfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYxX1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjJfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82M19WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzY0X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjVfVkFMX0NGRzMJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMwkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY3X1ZBTF9DRkczCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjhfVkFMX0NGRzMJMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHMwkweDAwMDAwMDAzZTgwNTAwMDBMTAorCisvL0RFTkFMSSBDT05GSUdSQVRJT04gRk9SIEJPQVJEIENPTkZJRyAjNAorI2RlZmluZSBERU5BTElfQ1RMXzAwX1ZBTF9DRkc0ICAgMHgwMTAwMDAwMTAxMDEwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMV9WQUxfQ0ZHNCAgIDB4MDEwMDAxMDAwMTAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDJfVkFMX0NGRzQgICAweDAyMDAwMDAwMDAwMTAxMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAzX1ZBTF9DRkc0ICAgMHgwMjAyMDIwMjAyMDIwMjAyTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNV9WQUxfQ0ZHNCAgIDB4MDAwMzAxMDUwMDAxMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzQgICAweDBBMEEwNDAzMDAwMzAzMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzA3X1ZBTF9DRkc0ICAgMHgwMDAwMDAwNTAwMDAwMjBBTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOF9WQUxfQ0ZHNCAgIDB4NjQwMDAwM0YzRjEzMDIwQ0xMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzQgICAweDAwMDA2NDAwNjQwMDY0MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkc0ICAgMHgwMDAwMDAyQTAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMl9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMEYwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTNfVkFMX0NGRzQgICAweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE0X1ZBTF9DRkc0ICAgMHgwMDEwMDAxMDAwMTAwMDEwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNV9WQUxfQ0ZHNCAgIDB4MDlEODAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzQgICAweDAwMDAwMDAwNTg5OTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE3X1ZBTF9DRkc0ICAgMHgwMDAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOF9WQUxfQ0ZHNCAgIDB4MDUwMDAxMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzQgICAweDAwMDAyRDAwQzgwNTBBMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzIwX1ZBTF9DRkc0ICAgMHgwMDAwMDEwMEZFN0IwMEM4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDEwMDAwMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjJfVkFMX0NGRzQgICAweDAwMDAwMjAwMDcwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI0X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMjAwODMwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjZfVkFMX0NGRzQgICAweDk0MDA1OTM3OTQwMDU5MzdMTAorI2RlZmluZSBERU5BTElfQ1RMXzI3X1ZBTF9DRkc0ICAgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHNAorI2RlZmluZSBERU5BTElfQ1RMXzI4X1ZBTF9DRkc0ICAgMHgwN0MwMDQwMTA3QzAwNDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yOV9WQUxfQ0ZHNCAgIERFTkFMSV9DVExfMjhfVkFMX0NGRzQKKyNkZWZpbmUgREVOQUxJX0NUTF8zMF9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwNUxMCisjZGVmaW5lIERFTkFMSV9DVExfMzFfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMyX1ZBTF9DRkc0ICAgMHgwYzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zM19WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwNExMCisjZGVmaW5lIERFTkFMSV9DVExfMzRfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM1X1ZBTF9DRkc0ICAgMHgwMDg3ODc4Nzg3MDQwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNl9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwNExMCisjZGVmaW5lIERFTkFMSV9DVExfMzdfVkFMX0NGRzQgICAweDA4NTIwMDAwMDAwNDAyMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM4X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDBfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwYzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzQxX1ZBTF9DRkc0ICAgMHgwMDI0MTk5MzAwMjQxOTkzTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80Ml9WQUxfQ0ZHNCAgIERFTkFMSV9DVExfNDFfVkFMX0NGRzQKKyNkZWZpbmUgREVOQUxJX0NUTF80M19WQUxfQ0ZHNCAgIDB4MDAwMDE5MDAwMDAwMTkwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDRfVkFMX0NGRzQgICBERU5BTElfQ1RMXzQzX1ZBTF9DRkc0CisjZGVmaW5lIERFTkFMSV9DVExfNDVfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ2X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80N19WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDhfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ5X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDUwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MF9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTFfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUyX1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81M19WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTRfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU1X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81Nl9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTdfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU4X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81OV9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjBfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYxX1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Ml9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjZfVkFMX0NGRzQgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY3X1ZBTF9DRkc0ICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OF9WQUxfQ0ZHNCAgIDB4MDAwMDAwMDAwMjAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjlfVkFMX0NGRzQgICAweDAwMDAwMDAzZTgwNTAwMDBMTAorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2Mxa2V2bS1uYW5kLmggYi9pbmNsdWRlL2NvbmZpZ3MvYzFrZXZtLW5hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Y0ZDUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2Mxa2V2bS1uYW5kLmgKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPCQkxCisjZGVmaW5lIENPTkZJR19BUk0xMTM2IAkJMQkvKiBUaGlzIGlzIGFuIGFybTExMzZqLXMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzEwMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX0MxS0VWTQkxCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorCisvKgorICogUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworCisvKgorICogTWVtb3J5IE1hcHBpbmcKKyAqLworCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJRERSX0JBU0VBRERSCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJMHgxMDAwMDAwMAkvKiAyNTYgTUIgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8gIAorLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogRW1hYyBTZXR0aW5ncworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19HRU1BQwkxCisKKy8vIEdFTUFDIG1vZGUgY29uZmlndXJlZCBieSBib290c3RyYXAgcGlucyBvciBTVworI3VuZGVmIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorLy8jZGVmaW5lIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorCisjZGVmaW5lIEdFTUFDMF9QSFlfQUREUgkJMAorI2RlZmluZSBHRU1BQzBfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMF9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMF9QSFlfRkxBR1MJKEdFTUFDX1BIWV9BVVRPTkVHIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUpCisjZGVmaW5lIEdFTUFDMF9QSFlJRFgJCTAKKworI2RlZmluZSBHRU1BQzFfUEhZX0FERFIJCTAJLy9ub3QgdXNlZAorI2RlZmluZSBHRU1BQzFfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMV9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMV9QSFlfRkxBR1MJKEdFTUFDX05PX1BIWSB8IEdFTUFDX0dFTV9ERUxBWV9ESVNBQkxFKQorI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCS8vbm90IHVzZWQKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCSgvKkNGR19DTURfRkxBU0ggfCovIENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX01FTVRFU1QgfCBDRkdfQ01EX01JSSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX0pGRlMyIHwgIENGR19DTURfUElORyB8IENGR19DTURfTkZTIHwgQ0ZHX0NNRF9JMkMgfCBDRkdfQ01EX0VFUFJPTSB8IENGR19DTURfRUxGLyp8IENGR19DTURfU1BJKi8pCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTEwMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMTAwMFwwIgkJCQkJCVwKKwkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJCQlcCisJIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9uZnMgcncgIgkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCQlcCisJImZsYXNoYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0iUk9PVF9NVERCTE9DSyIgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiCVwKKwkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImluaXRfcHJvY2Vzcz0vZXRjL3ByZWluaXRcMCIgXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImZsYXNoX3NlbGY9cnVuIGZsYXNoYXJncyBhZGRpcCBhZGR0dHk7IgkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJib290X25mcz1uZnMgODA2MDAwMDAgJHtyb290cGF0aH0vYm9vdC8ke2tlcm5lbGZpbGV9O3J1biBuZnNhcmdzIGFkZGV0aCBhZGRpcCBhZGR0dHk7IiAgICAgXAorCSAgICAgICAgImJvb3RtIDgwNjAwMDAwXDAiCQkJCQkJXAorCSJib290X2ZsYXNoPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IHVsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJib290X2ZsYXNob2xkPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGZzbG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKwkicm9vdHBhdGg9L2RldmVsL2ZzLWMxa2V2bVwwIiBcCisJImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKwkibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisJIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKwkicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisJIm10ZGRldm51bT0yXDAiIFwKKwkibXRkZGV2bmFtZT1mc1wwIiBcCisJImZzZmlsZT1yb290LmpmZnMyLTEyOGtcMCIgXAorICAgICAgICAiYm9vdGZpbGU9dS1ib290LW5hbmQuYmluXDAiXAorCSJ1cGRhdGVuYW5kZnM9dGZ0cCA4NTAwMDAwMCAke2ZzZmlsZX07bmFuZCBlcmFzZSA2MDAwMCAke2ZpbGVzaXplfTtuYW5kIHdyaXRlLmpmZnMyIDg1MDAwMDAwIDYwMDAwICR7ZmlsZXNpemV9XDAiIFwKKyAgICAgICAgInVwZGF0ZW5hbmRib290PXRmdHAgODEwMDAwMDAgJHtib290ZmlsZX07bmFuZCBlcmFzZSAwIDQwMDAwO25hbmQgd3JpdGUuamZmczIgODEwMDAwMDAgMCA0MDAwMFwwIiBcCisJImVlcHJvbWZpbGU9ZWVwcm9tLmJpblwwIiBcCisJInVwZGF0ZWVwcm9tPXRmdHAgODEwMDAwMDAgJHtlZXByb21maWxlfTtlZXByb20gd3JpdGUgODEwMDAwMDAgMCAke2ZpbGVzaXplfVwwIiBcCisJIiIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkxCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkxMjgJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1MwX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDIwMDAwCS8qIDEyOCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisjdW5kZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKy8vICNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgICAgICAgICAgICAgICAgICAwCisjaWYgZGVmaW5lZChDRkdfQ01EX0VFUFJPTSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDIgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNiAvKiBtYXggNjQgYnl0ZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSDEgKyAyICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDIgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisvL1RPRE8KKyNlbHNlCisvKgorICpFRVBPUk0gYm9vdCBsb2FkZXIgZG9lcyB0aGUgcmVsb2NhdGUgYW5kIGxvd2xldmVsIGluaXQgd29yaworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKy8qIEVudmlyb25tZW50IGlzIGluIE5BTkQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9OQU5ECTEKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBOQU5EX01BWF9DSElQUyAgICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDEyOEtpQiAqLworI2VuZGlmCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTYKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwkzMQorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwkzMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9uYW5kIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b25hbmQ6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibmFuZDAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2Vsc2UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2syIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX1BIWV9DTE9DSwkJMTI1MDAwMDAwCS8qIDEyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMF9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMV9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMjAwMDAgLyogMTI4SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAxMDAwMCAvKiA2NEsgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKy8qCisqIEREUiBUcmFpbmluZyBhbGdvcml0aG0KKyovCisjZGVmaW5lIEREUl9UUkFJTklORworLy8jdW5kZWYgRERSX1RSQUlOSU5HCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYzFrZXZtLmggYi9pbmNsdWRlL2NvbmZpZ3MvYzFrZXZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwMzhlMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9jMWtldm0uaApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkxCS8qIFRoaXMgaXMgYW4gYXJtMTEzNmotcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMTAwMAkxCS8qIEl0J3MgYW4gIFNvQyAqLworI2RlZmluZSBDT05GSUdfQk9BUkRfQzFLRVZNCTEKKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvKiBNaW5kc3BlZWQgdmVyc2lvbiAqLworI2RlZmluZSBDT05GSUdfSURFTlRfU1RSSU5HCSIgTWluZHNwZWVkICROYW1lOiB1Ym9vdF9jMmtfMV8wMF8xICQiCisKKy8qCisgKiBMaW51eCBib290IGNvbmZpZ3VyYXRpb24KKyAqLworCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAgICAgICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJKFBIWVNfU0RSQU0gKyBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgMHgxMDApCisKKy8qCisgKglSZWxvY2F0aW9uIG9wdGlvbnMKKyAqLworLy8jZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorCisvKgorICogUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworCisvKgorICogTWVtb3J5IE1hcHBpbmcKKyAqLworCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJRERSX0JBU0VBRERSCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJMHgxMDAwMDAwMAkvKiAyNTYgTUIgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8gIAorLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogRW1hYyBTZXR0aW5ncworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19HRU1BQwkxCisKKy8vIEdFTUFDIG1vZGUgY29uZmlndXJlZCBieSBib290c3RyYXAgcGlucyBvciBTVworI3VuZGVmIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorLy8jZGVmaW5lIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorCisjZGVmaW5lIEdFTUFDMF9QSFlfQUREUgkJMAorI2RlZmluZSBHRU1BQzBfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMF9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMF9QSFlfRkxBR1MJKEdFTUFDX1BIWV9BVVRPTkVHIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUpCisjZGVmaW5lIEdFTUFDMF9QSFlJRFgJCTAKKworI2RlZmluZSBHRU1BQzFfUEhZX0FERFIJCTAJLy9ub3QgdXNlZAorI2RlZmluZSBHRU1BQzFfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMV9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMV9QSFlfRkxBR1MJKEdFTUFDX05PX1BIWSB8IEdFTUFDX0dFTV9ERUxBWV9ESVNBQkxFKQorI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCS8vbm90IHVzZWQKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfTUVNVEVTVCB8IENGR19DTURfTUlJIHwgQ0ZHX0NNRF9SVU4gfCBDRkdfQ01EX05FVCAgIC8qIHwgQ0ZHX0NNRF9OQU5EICovIHwgQ0ZHX0NNRF9KRkZTMiB8ICBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX05GUyB8IENGR19DTURfSTJDIHwgQ0ZHX0NNRF9FRVBST00gfCBDRkdfQ01EX0VMRi8qfCBDRkdfQ01EX1NQSSovKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAwID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJXAorCSJob3N0bmFtZT1jb21jZXJ0bzEwMDBcMCIJCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbmZzIHJ3ICIJCVwKKwkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIJCQkJXAorCSJmbGFzaGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiCVwKKwkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImluaXRfcHJvY2Vzcz0vZXRjL3ByZWluaXRcMCIgXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImZsYXNoX3NlbGY9cnVuIGZsYXNoYXJncyBhZGRpcCBhZGR0dHk7IgkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJib290X25mcz1uZnMgODA2MDAwMDAgJHtyb290cGF0aH0vYm9vdC8ke2tlcm5lbGZpbGV9O3J1biBuZnNhcmdzIGFkZGV0aCBhZGRpcCBhZGR0dHk7IiAgICAgXAorCSAgICAgICAgImJvb3RtIDgwNjAwMDAwXDAiCQkJCQkJXAorICAgICJib290X2ZsYXNoPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IHVsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorICAgICJib290X2ZsYXNob2xkPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGZzbG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKwkicm9vdHBhdGg9L2RldmVsL2ZzLWMxa2V2bVwwIiBcCisJImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKwkibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisJIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKwkicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisJIm10ZGRldm51bT0yXDAiIFwKKwkibXRkZGV2bmFtZT1mc1wwIiBcCisJImZzZmlsZT1yb290LmpmZnMyLTEyOGtcMCIgXAorCSJ1cGRhdGVuYW5kZnM9dGZ0cCA4MTAwMDAwMCAke2ZzZmlsZX07bmFuZCBlcmFzZSA2MDAwMCA4ODAwMDA7bmFuZCB3cml0ZSA4MTAwMDAwMCA2MDAwMCA4ODAwMDBcMCIgXAorIAkidXBkYXRlZnM9dGZ0cCA4MTAwMDAwMCAke2ZzZmlsZX07cHJvdGVjdCBvZmYgMTozLTEyN1w7ZXJhc2UgMTozLTEyNztjcC5iIDgxMDAwMDAwIDIwMDYwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRlYm9vdD10ZnRwIDgxMDAwMDAwIHUtYm9vdC5iaW47cHJvdGVjdCBvZmYgMTowLTFcO2VyYXNlIDE6MC0xO2NwLmIgODEwMDAwMDAgMjAwMDAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSJlZXByb21maWxlPWVlcHJvbS5iaW5cMCIgXAorCSJ1cGRhdGVlcHJvbT10ZnRwIDgxMDAwMDAwICR7ZWVwcm9tZmlsZX07ZWVwcm9tIHdyaXRlIDgxMDAwMDAwIDAgJHtmaWxlc2l6ZX1cMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlciAKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJRVhQX0NTMF9CQVNFQUREUgkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAyMDAwMAkvKiAxMjggS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxICAgICAgIC8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXsgUEhZU19GTEFTSDEgfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorI3VuZGVmIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisvLyAjZGVmaW5lIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisKKy8qCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICBQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAoMSAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogUmVzZXJ2ZSAxMjggS2lCIGZvciBNb25pdG9yICovCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAweDQwMDAgIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKyNlbmRpZgorCisvKgorICogSTJDIHN1cHBvcnQKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0NNRF9JMkMpCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDRkdfVENMSyAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0haX0NMT0NLCisjZGVmaW5lIENGR19JMkNfU1BFRUQgICAgICAgICAgICAgICAgICA0MDAwMAorI2RlZmluZSBDRkdfSTJDX1NMQVZFICAgICAgICAgICAgICAgICAgMAorI2lmIGRlZmluZWQoQ0ZHX0NNRF9FRVBST00pCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFIgICAgICAgICAgICAweDUwCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfTEVOICAgICAgICAyIC8qIEJ5dGVzIG9mIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgICAgIDYgLyogbWF4IDY0IGJ5dGUgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TIDEwCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0gxICsgMiAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCAyIHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJCUVYUF9DUzRfQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZMQVNIKQorLy9UT0RPCisjZWxzZQorLyoKKyAqRUVQT1JNIGJvb3QgbG9hZGVyIGRvZXMgdGhlIHJlbG9jYXRlIGFuZCBsb3dsZXZlbCBpbml0IHdvcmsKKyAqLworI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisvKiBFbnZpcm9ubWVudCBpcyBpbiBOQU5EICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fTkFORAkxCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDAwMDQwMDAwCS8qIE9mZnNldCBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMgICAgICAgICAgMQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxMjhLaUIgKi8KKyNlbmRpZgorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwk2CisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMjkKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JMzEKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JMzAKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9KRkZTMikKKy8vI2RlZmluZSBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMKKyNlbmRpZiAvKiBDRkdfQ01EX0pGRlMyICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvbmFuZCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9uYW5kOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5hbmQwLDIiCisjZGVmaW5lIFJPT1RfTVREQkxPQ0sJCSIvZGV2L210ZGJsb2NrMyIKKyNlbHNlCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1jb21jZXJ0b2ZsYXNoLjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvZmxhc2guMDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDE2MDAwayhmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJub3IwLDIiCisjZGVmaW5lIFJPT1RfTVREQkxPQ0sJCSIvZGV2L210ZGJsb2NrMiIKKyNlbmRpZgorCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkyNDAwMDAwMAkvKiAyNCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisjZGVmaW5lIENGR19QSFlfQ0xPQ0sJCTEyNTAwMDAwMAkvKiAxMjUgTUh6Ki8KKyNkZWZpbmUgQ0ZHX0dFTTBfQ0xPQ0sJCSAyNTAwMDAwMAkvKiAgMjUgTUh6Ki8KKyNkZWZpbmUgQ0ZHX0dFTTFfQ0xPQ0sJCSAyNTAwMDAwMAkvKiAgMjUgTUh6Ki8KKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4MEEwMDAwMDAgLyogQVJBTV9CQVNFQUREUiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDAwMDIwMDAwIC8qIDEyOEsgKi8KKyNkZWZpbmUgQ0ZHX0FSQU1fQ09ERV9TSVpFCTB4MDAwMTAwMDAgLyogNjRLICovCisKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQgLSBDRkdfQVJBTV9DT0RFX1NJWkUKKworCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisvKgorKiBERFIgVHJhaW5pbmcgYWxnb3JpdGhtCisqLworI2RlZmluZSBERFJfVFJBSU5JTkcKKy8vI3VuZGVmIEREUl9UUkFJTklORworI2RlZmluZSBERFJfVFJBSU5JTkdfREJHCisKKworCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2Mxa2V2bV9hcmFtLmggYi9pbmNsdWRlL2NvbmZpZ3MvYzFrZXZtX2FyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmE2NTlhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2Mxa2V2bV9hcmFtLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPCQkxCisjZGVmaW5lIENPTkZJR19BUk0xMTM2IAkJMQkvKiBUaGlzIGlzIGFuIGFybTExMzZqLXMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzEwMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX0MxS0VWTQkxCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQlERFJfQkFTRUFERFIKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkweDEwMDAwMDAwCS8qIDI1NiBNQiAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLyAgCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKy8qCisgKiBFbWFjIFNldHRpbmdzCisgKi8KKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fR0VNQUMKKworLy8gR0VNQUMgbW9kZSBjb25maWd1cmVkIGJ5IGJvb3RzdHJhcCBwaW5zIG9yIFNXCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisvLyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwkoR0VNQUNfUEhZX0FVVE9ORUcgfCBHRU1BQ19HRU1fREVMQVlfRElTQUJMRSkKKyNkZWZpbmUgR0VNQUMwX1BIWUlEWAkJMAorCisjZGVmaW5lIEdFTUFDMV9QSFlfQUREUgkJMAkvL25vdCB1c2VkCisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwkoR0VNQUNfTk9fUEhZIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUpCisjZGVmaW5lIEdFTUFDMV9QSFlJRFgJCTAJLy9ub3QgdXNlZAorCisjdW5kZWYgQ09ORklHX05FVF9NVUxUSQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0VOViB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9SVU4pCisKKy8vI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tMTAwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisjZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCTEJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkxMjgJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1MwX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDIwMDAwCS8qIDEyOCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisjdW5kZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKy8vICNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgICAgICAgICAgICAgICAgICAwCisjaWYgZGVmaW5lZChDRkdfQ01EX0VFUFJPTSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDIgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNiAvKiBtYXggNjQgYnl0ZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSDEgKyAyICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDIgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisvL1RPRE8KKyNlbHNlCisvKgorICpFRVBPUk0gYm9vdCBsb2FkZXIgZG9lcyB0aGUgcmVsb2NhdGUgYW5kIGxvd2xldmVsIGluaXQgd29yaworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKy8qIEVudmlyb25tZW50IGlzIGluIE5BTkQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9OQU5ECTEKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBOQU5EX01BWF9DSElQUyAgICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDEyOEtpQiAqLworI2VuZGlmCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTYKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwkzMQorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwkzMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9uYW5kIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b25hbmQ6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibmFuZDAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2Vsc2UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2syIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX1BIWV9DTE9DSwkJMTI1MDAwMDAwCS8qIDEyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMF9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMV9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMjAwMDAgLyogMTI4SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAxQTAwMCAvKiAxMDRLICovCisKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQgLSBDRkdfQVJBTV9DT0RFX1NJWkUKKworCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgNCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisvKgorKiBERFIgVHJhaW5pbmcgYWxnb3JpdGhtCisqLworI2RlZmluZSBERFJfVFJBSU5JTkcKKy8vI3VuZGVmIEREUl9UUkFJTklORworCisKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jMWttODMyNDAtbmFuZC5oIGIvaW5jbHVkZS9jb25maWdzL2Mxa204MzI0MC1uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1OTRkZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9jMWttODMyNDAtbmFuZC5oCkBAIC0wLDAgKzEsMzQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAwCTEJLyogSXQncyBhbiAgU29DICovCisjZGVmaW5lIENPTkZJR19CT0FSRF9DMUtNODMyNDAJMQorI3VuZGVmICBDT05GSUdfVVNFX0lSUQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCUREUl9CQVNFQUREUgorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCTB4ODAwMDAwMAkvKiAxMjggTUIgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8gIAorLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogRW1hYyBTZXR0aW5ncworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19HRU1BQwkxCisKKy8vIEdFTUFDIG1vZGUgY29uZmlndXJlZCBieSBib290c3RyYXAgcGlucyBvciBTVworI3VuZGVmIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorLy8jZGVmaW5lIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorCisjZGVmaW5lIEdFTUFDMF9QSFlfQUREUgkJMAorI2RlZmluZSBHRU1BQzBfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMF9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMF9QSFlfRkxBR1MJKEdFTUFDX1BIWV9BVVRPTkVHIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUpCisjZGVmaW5lIEdFTUFDMF9QSFlJRFgJCTAKKworI2RlZmluZSBHRU1BQzFfUEhZX0FERFIJCTAJLy9ub3QgdXNlZAorI2RlZmluZSBHRU1BQzFfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMV9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMV9QSFlfRkxBR1MJKEdFTUFDX05PX1BIWSB8IEdFTUFDX0dFTV9ERUxBWV9ESVNBQkxFKQorI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCS8vbm90IHVzZWQKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCSgvKkNGR19DTURfRkxBU0ggfCovIENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX01FTVRFU1QgfCBDRkdfQ01EX01JSSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX0pGRlMyIHwgIENGR19DTURfUElORyB8IENGR19DTURfTkZTIHxDRkdfQ01EX0kyQyB8IENGR19DTURfRUVQUk9NIHwgQ0ZHX0NNRF9FTEYvKnwgQ0ZHX0NNRF9TUEkqLykKKworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tMTAwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTICAgICAgICAgICAgICAgXAorICAgICJob3N0bmFtZT1jb21jZXJ0bzEwMDBcMCIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAibmV0ZGV2PWV0aDBcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9uZnMgcncgIiAgICAgICAgXAorICAgICAgICAibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIiAgICAgICAgICAgICBcCisgICAgImZsYXNoYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0iUk9PVF9NVERCTE9DSyIgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiICBcCisgICAgInJvb3Rmc3R5cGU9amZmczJcMCIgXAorICAgICJpbml0X3Byb2Nlc3M9L2V0Yy9wcmVpbml0XDAiIFwKKyAgICAiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgICAgICAgICAgICAgICAgXAorICAgICAgICAiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IiAgXAorICAgICAgICAiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmZcMCIgXAorICAgICJhZGRldGg9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgXAorICAgICJod2FkZHJlc3M9JHtuZXRkZXZ9LCR7ZXRoYWRkcn1cMCIgXAorICAgICJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIgXAorICAgICJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiIFwKKyAgICAiZmxhc2hfc2VsZj1ydW4gZmxhc2hhcmdzIGFkZGlwIGFkZHR0eTsiICAgICAgICBcCisgICAgICAgICJib290bSAke2tlcm5lbF9hZGRyfVwwIiAgICAgICAgICAgICAgICBcCisgICAgImJvb3RfbmZzPW5mcyA4MDYwMDAwMCAke3Jvb3RwYXRofS9ib290LyR7a2VybmVsZmlsZX07cnVuIG5mc2FyZ3MgYWRkZXRoIGFkZGlwIGFkZHR0eTsiICAgICBcCisgICAgICAgICAgICAiYm9vdG0gODA2MDAwMDBcMCIgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJib290X2ZsYXNoPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IHVsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorICAgICJib290X2ZsYXNob2xkPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGZzbG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKyAgICAicm9vdHBhdGg9L2RldmVsL2ZzLWMxa204MzI0MFwwIiBcCisgICAgImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKyAgICAibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisgICAgIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKyAgICAicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisgICAgIm10ZGRldm51bT0yXDAiIFwKKyAgICAibXRkZGV2bmFtZT1mc1wwIiBcCisgICAgImZzZmlsZT1yb290LmpmZnMyLTEyOGtcMCIgXAorICAgICAgICAiYm9vdGZpbGU9dS1ib290LW5hbmQuYmluXDAiXAorICAgICJ1cGRhdGVuYW5kZnM9dGZ0cCA4MTAwMDAwMCAke2ZzZmlsZX07bmFuZCBlcmFzZSA2MDAwMCAke2ZpbGVzaXplfTtuYW5kIHdyaXRlLmpmZnMyIDgxMDAwMDAwIDYwMDAwICR7ZmlsZXNpemV9XDAiIFwKKyAgICAgICAgInVwZGF0ZW5hbmRib290PXRmdHAgODEwMDAwMDAgJHtib290ZmlsZX07bmFuZCBlcmFzZSAwIDQwMDAwO25hbmQgd3JpdGUuamZmczIgODEwMDAwMDAgMCA0MDAwMFwwIiBcCisJImVlcHJvbWZpbGU9ZWVwcm9tLmJpblwwIiBcCisJInVwZGF0ZWVwcm9tPXRmdHAgODEwMDAwMDAgJHtlZXByb21maWxlfTtlZXByb20gd3JpdGUgODEwMDAwMDAgMCAke2ZpbGVzaXplfVwwIiBcCisgICAgIiIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkxCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkyNTYJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1MwX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDIwMDAwCS8qIDEyOCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisjdW5kZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKy8vICNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgICAgICAgICAgICAgICAgICAwCisjaWYgZGVmaW5lZChDRkdfQ01EX0VFUFJPTSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDIgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNiAvKiBtYXggNjQgYnl0ZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSDEgKyAyICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDIgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisvL1RPRE8KKyNlbHNlCisvKgorICpFRVBPUk0gYm9vdCBsb2FkZXIgZG9lcyB0aGUgcmVsb2NhdGUgYW5kIGxvd2xldmVsIGluaXQgd29yaworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKy8qIEVudmlyb25tZW50IGlzIGluIE5BTkQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9OQU5ECTEKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBOQU5EX01BWF9DSElQUyAgICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDEyOEtpQiAqLworI2VuZGlmCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTYKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwkzMQorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwkzMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9uYW5kIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b25hbmQ6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwzMjM4NGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibmFuZDAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2Vsc2UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMzIzODRrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2syIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX1BIWV9DTE9DSwkJMTI1MDAwMDAwCS8qIDEyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMF9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMV9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworCisjZGVmaW5lIENGR19ERFJfMTZCSVQJCTEKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4MEEwMDAwMDAgLyogQVJBTV9CQVNFQUREUiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDAwMDIwMDAwIC8qIDEyOEsgKi8KKyNkZWZpbmUgQ0ZHX0FSQU1fQ09ERV9TSVpFCTB4MDAwMTAwMDAgLyogNjRLICovCisKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQgLSBDRkdfQVJBTV9DT0RFX1NJWkUKKworCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisvKgorKiBERFIgVHJhaW5pbmcgYWxnb3JpdGhtCisqLworI2RlZmluZSBERFJfVFJBSU5JTkcKKy8vI3VuZGVmIEREUl9UUkFJTklORworI2RlZmluZSBERFJfVFJBSU5JTkdfREJHCisKKworCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2Mxa204MzI0MC5oIGIvaW5jbHVkZS9jb25maWdzL2Mxa204MzI0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODA4MzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYzFrbTgzMjQwLmgKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPCQkxCisjZGVmaW5lIENPTkZJR19BUk0xMTM2IAkJMQkvKiBUaGlzIGlzIGFuIGFybTExMzZqLXMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzEwMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX0MxS004MzI0MAkxCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKy8vI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorLy8jZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCUREUl9CQVNFQUREUgorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCTB4ODAwMDAwMAkvKiAxMjggTUIgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8gIAorLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogRW1hYyBTZXR0aW5ncworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19HRU1BQwkxCisKKy8vIEdFTUFDIG1vZGUgY29uZmlndXJlZCBieSBib290c3RyYXAgcGlucyBvciBTVworI3VuZGVmIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorLy8jZGVmaW5lIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorCisjZGVmaW5lIEdFTUFDMF9QSFlfQUREUgkJMAorI2RlZmluZSBHRU1BQzBfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMF9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMF9QSFlfRkxBR1MJKEdFTUFDX1BIWV9BVVRPTkVHIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUpCisjZGVmaW5lIEdFTUFDMF9QSFlJRFgJCTAKKworI2RlZmluZSBHRU1BQzFfUEhZX0FERFIJCTAJLy9ub3QgdXNlZAorI2RlZmluZSBHRU1BQzFfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX1JHTUlJCisjZGVmaW5lIEdFTUFDMV9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMUcpCisjZGVmaW5lIEdFTUFDMV9QSFlfRkxBR1MJKEdFTUFDX05PX1BIWSB8IEdFTUFDX0dFTV9ERUxBWV9ESVNBQkxFKQorI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCS8vbm90IHVzZWQKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfTUVNVEVTVCB8IENGR19DTURfTUlJIHwgQ0ZHX0NNRF9SVU4gfCBDRkdfQ01EX05FVCAgIC8qIHwgQ0ZHX0NNRF9OQU5EICovIHwgQ0ZHX0NNRF9KRkZTMiB8ICBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX05GUyB8IENGR19DTURfSTJDIHwgQ0ZHX0NNRF9FRVBST00gfCBDRkdfQ01EX0VMRi8qfCBDRkdfQ01EX1NQSSovKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAwID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJXAorCSJob3N0bmFtZT1jb21jZXJ0bzEwMDBcMCIJCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbmZzIHJ3ICIJCVwKKwkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIJCQkJXAorCSJmbGFzaGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiCVwKKwkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImluaXRfcHJvY2Vzcz0vZXRjL3ByZWluaXRcMCIgXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImZsYXNoX3NlbGY9cnVuIGZsYXNoYXJncyBhZGRpcCBhZGR0dHk7IgkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJib290X25mcz1uZnMgODA2MDAwMDAgJHtyb290cGF0aH0vYm9vdC8ke2tlcm5lbGZpbGV9O3J1biBuZnNhcmdzIGFkZGV0aCBhZGRpcCBhZGR0dHk7IiAgICAgXAorCSAgICAgICAgImJvb3RtIDgwNjAwMDAwXDAiCQkJCQkJXAorCSJib290X2ZsYXNoPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IHVsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJib290X2ZsYXNob2xkPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGZzbG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKwkicm9vdHBhdGg9L2RldmVsL2ZzLWMxa204MzI0MFwwIiBcCisJImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKwkibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisJIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKwkicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisJIm10ZGRldm51bT0yXDAiIFwKKwkibXRkZGV2bmFtZT1mc1wwIiBcCisJImZzZmlsZT1yb290LmpmZnMyLTEyOGtcMCIgXAorCSJ1cGRhdGVuYW5kZnM9dGZ0cCA4MTAwMDAwMCAke2ZzZmlsZX07bmFuZCBlcmFzZSA2MDAwMCA4ODAwMDA7bmFuZCB3cml0ZSA4MTAwMDAwMCA2MDAwMCA4ODAwMDBcMCIgXAorIAkidXBkYXRlZnM9dGZ0cCA4MTAwMDAwMCAke2ZzZmlsZX07cHJvdGVjdCBvZmYgMTozLTI1NVw7ZXJhc2UgMTozLTI1NTtjcC5iIDgxMDAwMDAwIDIwMDYwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRlYm9vdD10ZnRwIDgxMDAwMDAwIHUtYm9vdC5iaW47cHJvdGVjdCBvZmYgMTowLTFcO2VyYXNlIDE6MC0xO2NwLmIgODEwMDAwMDAgMjAwMDAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSJlZXByb21maWxlPWVlcHJvbS5iaW5cMCIgXAorCSJ1cGRhdGVlcHJvbT10ZnRwIDgxMDAwMDAwICR7ZWVwcm9tZmlsZX07ZWVwcm9tIHdyaXRlIDgxMDAwMDAwIDAgJHtmaWxlc2l6ZX1cMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlciAKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMjU2CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJRVhQX0NTMF9CQVNFQUREUgkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAyMDAwMAkvKiAxMjggS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxICAgICAgIC8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXsgUEhZU19GTEFTSDEgfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorI3VuZGVmIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisvLyAjZGVmaW5lIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisKKy8qCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICBQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAoMSAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogUmVzZXJ2ZSAxMjggS2lCIGZvciBNb25pdG9yICovCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAweDQwMDAgIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKyNlbmRpZgorCisvKgorICogSTJDIHN1cHBvcnQKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0NNRF9JMkMpCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDRkdfVENMSyAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0haX0NMT0NLCisjZGVmaW5lIENGR19JMkNfU1BFRUQgICAgICAgICAgICAgICAgICA0MDAwMAorI2RlZmluZSBDRkdfSTJDX1NMQVZFICAgICAgICAgICAgICAgICAgMAorI2lmIGRlZmluZWQoQ0ZHX0NNRF9FRVBST00pCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFIgICAgICAgICAgICAweDUwCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfTEVOICAgICAgICAyIC8qIEJ5dGVzIG9mIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgICAgIDYgLyogbWF4IDY0IGJ5dGUgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TIDEwCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0gxICsgMiAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCAyIHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJCUVYUF9DUzRfQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZMQVNIKQorLy9UT0RPCisjZWxzZQorLyoKKyAqRUVQT1JNIGJvb3QgbG9hZGVyIGRvZXMgdGhlIHJlbG9jYXRlIGFuZCBsb3dsZXZlbCBpbml0IHdvcmsKKyAqLworI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisvKiBFbnZpcm9ubWVudCBpcyBpbiBOQU5EICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fTkFORAkxCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDAwMDQwMDAwCS8qIE9mZnNldCBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMgICAgICAgICAgMQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxMjhLaUIgKi8KKyNlbmRpZgorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwk2CisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMjkKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JMzEKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JMzAKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9KRkZTMikKKy8vI2RlZmluZSBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMKKyNlbmRpZiAvKiBDRkdfQ01EX0pGRlMyICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvbmFuZCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9uYW5kOjI1NmsodS1ib290KSwxMjhrKGVudiksMzIzODRrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5hbmQwLDIiCisjZGVmaW5lIFJPT1RfTVREQkxPQ0sJCSIvZGV2L210ZGJsb2NrMyIKKyNlbHNlCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1jb21jZXJ0b2ZsYXNoLjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvZmxhc2guMDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDMyMzg0ayhmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJub3IwLDIiCisjZGVmaW5lIFJPT1RfTVREQkxPQ0sJCSIvZGV2L210ZGJsb2NrMiIKKyNlbmRpZgorCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkyNDAwMDAwMAkvKiAyNCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisjZGVmaW5lIENGR19QSFlfQ0xPQ0sJCTEyNTAwMDAwMAkvKiAxMjUgTUh6Ki8KKyNkZWZpbmUgQ0ZHX0dFTTBfQ0xPQ0sJCSAyNTAwMDAwMAkvKiAgMjUgTUh6Ki8KKyNkZWZpbmUgQ0ZHX0dFTTFfQ0xPQ0sJCSAyNTAwMDAwMAkvKiAgMjUgTUh6Ki8KKworI2RlZmluZSBDRkdfRERSXzE2QklUCQkxCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDBBMDAwMDAwIC8qIEFSQU1fQkFTRUFERFIgQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwMDAyMDAwMCAvKiAxMjhLICovCisjZGVmaW5lIENGR19BUkFNX0NPREVfU0laRQkweDAwMDEwMDAwIC8qIDY0SyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworLyoKKyogRERSIFRyYWluaW5nIGFsZ29yaXRobQorKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKyNkZWZpbmUgRERSX1RSQUlOSU5HX0RCRworCisKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jMWttODMyNDBfYXJhbS5oIGIvaW5jbHVkZS9jb25maWdzL2Mxa204MzI0MF9hcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0ZWRjZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9jMWttODMyNDBfYXJhbS5oCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAwCTEJLyogSXQncyBhbiAgU29DICovCisjZGVmaW5lIENPTkZJR19CT0FSRF9DMUtNODMyNDAJMQorI3VuZGVmICBDT05GSUdfVVNFX0lSUQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorCisvKgorICogUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworCisvKgorICogTWVtb3J5IE1hcHBpbmcKKyAqLworCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJRERSX0JBU0VBRERSCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJMHg4MDAwMDAwCS8qIDEyOCBNQiAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLyAgCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKy8qCisgKiBFbWFjIFNldHRpbmdzCisgKi8KKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fR0VNQUMKKworLy8gR0VNQUMgbW9kZSBjb25maWd1cmVkIGJ5IGJvb3RzdHJhcCBwaW5zIG9yIFNXCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisvLyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwkoR0VNQUNfUEhZX0FVVE9ORUcgfCBHRU1BQ19HRU1fREVMQVlfRElTQUJMRSkKKyNkZWZpbmUgR0VNQUMwX1BIWUlEWAkJMAorCisjZGVmaW5lIEdFTUFDMV9QSFlfQUREUgkJMAkvL25vdCB1c2VkCisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwkoR0VNQUNfTk9fUEhZIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUpCisjZGVmaW5lIEdFTUFDMV9QSFlJRFgJCTAJLy9ub3QgdXNlZAorCisjdW5kZWYgQ09ORklHX05FVF9NVUxUSQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0VOViB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9SVU4pCisKKy8vI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tMTAwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisjZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCTEJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkyNTYJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1MwX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDIwMDAwCS8qIDEyOCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisjdW5kZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKy8vICNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgICAgICAgICAgICAgICAgICAwCisjaWYgZGVmaW5lZChDRkdfQ01EX0VFUFJPTSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDIgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNiAvKiBtYXggNjQgYnl0ZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSDEgKyAyICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDIgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisvL1RPRE8KKyNlbHNlCisvKgorICpFRVBPUk0gYm9vdCBsb2FkZXIgZG9lcyB0aGUgcmVsb2NhdGUgYW5kIGxvd2xldmVsIGluaXQgd29yaworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKy8qIEVudmlyb25tZW50IGlzIGluIE5BTkQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9OQU5ECTEKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBOQU5EX01BWF9DSElQUyAgICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDEyOEtpQiAqLworI2VuZGlmCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTYKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwkzMQorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwkzMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9uYW5kIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b25hbmQ6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwzMjM4NGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibmFuZDAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2Vsc2UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMzIzODRrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2syIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX1BIWV9DTE9DSwkJMTI1MDAwMDAwCS8qIDEyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMF9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMV9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworCisjZGVmaW5lIENGR19ERFJfMTZCSVQJCTEKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4MEEwMDAwMDAgLyogQVJBTV9CQVNFQUREUiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDAwMDIwMDAwIC8qIDEyOEsgKi8KKyNkZWZpbmUgQ0ZHX0FSQU1fQ09ERV9TSVpFCTB4MDAwMUEwMDAgLyogMTA0SyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDQgKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworLyoKKyogRERSIFRyYWluaW5nIGFsZ29yaXRobQorKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKworCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYzFrbWZjbi1ldm0tbmFuZC5oIGIvaW5jbHVkZS9jb25maWdzL2Mxa21mY24tZXZtLW5hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWQzOGY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2Mxa21mY24tZXZtLW5hbmQuaApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkxCS8qIFRoaXMgaXMgYW4gYXJtMTEzNmotcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMTAwMAkxCS8qIEl0J3MgYW4gIFNvQyAqLworI2RlZmluZSBDT05GSUdfQk9BUkRfQzFLTUZDTl9FVk0JMQorI3VuZGVmICBDT05GSUdfVVNFX0lSUQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCUREUl9CQVNFQUREUgorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCTB4MTAwMDAwMDAJLyogMjU2IE1CICovCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovICAKKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworLyoKKyAqIEVtYWMgU2V0dGluZ3MKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fR0VNQUMJMQorCisvLyBHRU1BQyBtb2RlIGNvbmZpZ3VyZWQgYnkgYm9vdHN0cmFwIHBpbnMgb3IgU1cKKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKy8vI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKworI2RlZmluZSBHRU1BQzBfUEhZX0FERFIJCTAKKyNkZWZpbmUgR0VNQUMwX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQorI2RlZmluZSBHRU1BQzBfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzBfUEhZX0ZMQUdTCShHRU1BQ19QSFlfQVVUT05FRyB8IEdFTUFDX0dFTV9ERUxBWV9ESVNBQkxFKQorI2RlZmluZSBHRU1BQzBfUEhZSURYCQkwCisKKyNkZWZpbmUgR0VNQUMxX1BIWV9BRERSCQkwCS8vbm90IHVzZWQKKyNkZWZpbmUgR0VNQUMxX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQorI2RlZmluZSBHRU1BQzFfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzFfUEhZX0ZMQUdTCShHRU1BQ19OT19QSFkgfCBHRU1BQ19HRU1fREVMQVlfRElTQUJMRSkKKyNkZWZpbmUgR0VNQUMxX1BIWUlEWAkJMAkvL25vdCB1c2VkCisKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkxCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoLypDRkdfQ01EX0ZMQVNIIHwqLyBDRkdfQ01EX0VOViB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9NRU1URVNUIHwgQ0ZHX0NNRF9NSUkgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIHwgQ0ZHX0NNRF9OQU5EIHwgQ0ZHX0NNRF9KRkZTMiB8ICBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX05GUyB8Q0ZHX0NNRF9JMkMgfCBDRkdfQ01EX0VFUFJPTSB8IENGR19DTURfRUxGLyp8IENGR19DTURfU1BJKi8pCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTEwMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyAgICAgICAgICAgICAgIFwKKyAgICAiaG9zdG5hbWU9Y29tY2VydG8xMDAwXDAiICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIm5ldGRldj1ldGgwXDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICJuZnNhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbmZzIHJ3ICIgICAgICAgIFwKKyAgICAgICAgIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIgICAgICAgICAgICAgXAorICAgICJmbGFzaGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9IlJPT1RfTVREQkxPQ0siIHJvb3Rmc3R5cGU9JHtyb290ZnN0eXBlfSByd1wwIiAgXAorICAgICJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKyAgICAiaW5pdF9wcm9jZXNzPS9ldGMvcHJlaW5pdFwwIiBcCisgICAgImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiICAgICAgICAgICAgICAgIFwKKyAgICAgICAgImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIgIFwKKyAgICAgICAgIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiIFwKKyAgICAiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKyAgICAiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKyAgICAiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKyAgICAiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisgICAgImZsYXNoX3NlbGY9cnVuIGZsYXNoYXJncyBhZGRpcCBhZGR0dHk7IiAgICAgICAgXAorICAgICAgICAiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIgICAgICAgICAgICAgICAgXAorICAgICJib290X25mcz1uZnMgODA2MDAwMDAgJHtyb290cGF0aH0vYm9vdC8ke2tlcm5lbGZpbGV9O3J1biBuZnNhcmdzIGFkZGV0aCBhZGRpcCBhZGR0dHk7IiAgICAgXAorICAgICAgICAgICAgImJvb3RtIDgwNjAwMDAwXDAiICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiYm9vdF9mbGFzaD1ydW4gZmxhc2hhcmdzIGFkZGV0aCBhZGR0dHkgYWRkbXRkOyB1bG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKyAgICAiYm9vdF9mbGFzaG9sZD1ydW4gZmxhc2hhcmdzIGFkZGV0aCBhZGR0dHkgYWRkbXRkOyBmc2xvYWQgL2Jvb3QvdUltYWdlOyBib290bVwwIiBcCisgICAgInJvb3RwYXRoPS9kZXZlbC9mcy1jMWttZmNuLWV2bVwwIiBcCisgICAgImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKyAgICAibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisgICAgIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKyAgICAicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisgICAgIm10ZGRldm51bT0yXDAiIFwKKyAgICAibXRkZGV2bmFtZT1mc1wwIiBcCisgICAgImZzZmlsZT1yb290LmpmZnMyLTEyOGtcMCIgXAorICAgICAgICAiYm9vdGZpbGU9dS1ib290LW5hbmQuYmluXDAiXAorICAgICJ1cGRhdGVuYW5kZnM9dGZ0cCA4NTAwMDAwMCAke2ZzZmlsZX07bmFuZCBlcmFzZSA2MDAwMCAke2ZpbGVzaXplfTtuYW5kIHdyaXRlLmpmZnMyIDg1MDAwMDAwIDYwMDAwICR7ZmlsZXNpemV9XDAiIFwKKyAgICAgICAgInVwZGF0ZW5hbmRib290PXRmdHAgODEwMDAwMDAgJHtib290ZmlsZX07bmFuZCBlcmFzZSAwIDQwMDAwO25hbmQgd3JpdGUuamZmczIgODEwMDAwMDAgMCA0MDAwMFwwIiBcCisJImVlcHJvbWZpbGU9ZWVwcm9tLmJpblwwIiBcCisJInVwZGF0ZWVwcm9tPXRmdHAgODEwMDAwMDAgJHtlZXByb21maWxlfTtlZXByb20gd3JpdGUgODEwMDAwMDAgMCAke2ZpbGVzaXplfVwwIiBcCisgICAgIiIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkxCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkyNTYJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1MwX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDIwMDAwCS8qIDEyOCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisjdW5kZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKy8vICNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgICAgICAgICAgICAgICAgICAwCisjaWYgZGVmaW5lZChDRkdfQ01EX0VFUFJPTSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDIgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNiAvKiBtYXggNjQgYnl0ZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSDEgKyAyICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDIgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisvL1RPRE8KKyNlbHNlCisvKgorICpFRVBPUk0gYm9vdCBsb2FkZXIgZG9lcyB0aGUgcmVsb2NhdGUgYW5kIGxvd2xldmVsIGluaXQgd29yaworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKy8qIEVudmlyb25tZW50IGlzIGluIE5BTkQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9OQU5ECTEKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBOQU5EX01BWF9DSElQUyAgICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDEyOEtpQiAqLworI2VuZGlmCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTYKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwkzMQorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwkzMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9uYW5kIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b25hbmQ6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibmFuZDAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2Vsc2UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2syIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX1BIWV9DTE9DSwkJMTI1MDAwMDAwCS8qIDEyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMF9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMV9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMjAwMDAgLyogMTI4SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAxMDAwMCAvKiA2NEsgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKy8qCisqIEREUiBUcmFpbmluZyBhbGdvcml0aG0KKyovCisjZGVmaW5lIEREUl9UUkFJTklORworLy8jdW5kZWYgRERSX1RSQUlOSU5HCisjZGVmaW5lIEREUl9UUkFJTklOR19EQkcKKworCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYzFrbWZjbi1ldm0uaCBiL2luY2x1ZGUvY29uZmlncy9jMWttZmNuLWV2bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDUwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYzFrbWZjbi1ldm0uaApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkxCS8qIFRoaXMgaXMgYW4gYXJtMTEzNmotcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMTAwMAkxCS8qIEl0J3MgYW4gIFNvQyAqLworI2RlZmluZSBDT05GSUdfQk9BUkRfQzFLTUZDTl9FVk0JMQorI3VuZGVmICBDT05GSUdfVVNFX0lSUQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQlERFJfQkFTRUFERFIKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkweDEwMDAwMDAwCS8qIDI1NiBNQiAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLyAgCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKy8qCisgKiBFbWFjIFNldHRpbmdzCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX0dFTUFDCTEKKworLy8gR0VNQUMgbW9kZSBjb25maWd1cmVkIGJ5IGJvb3RzdHJhcCBwaW5zIG9yIFNXCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisvLyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwkoR0VNQUNfUEhZX0FVVE9ORUcgfCBHRU1BQ19HRU1fREVMQVlfRElTQUJMRSkKKyNkZWZpbmUgR0VNQUMwX1BIWUlEWAkJMAorCisjZGVmaW5lIEdFTUFDMV9QSFlfQUREUgkJMAkvL25vdCB1c2VkCisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwkoR0VNQUNfTk9fUEhZIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUpCisjZGVmaW5lIEdFTUFDMV9QSFlJRFgJCTAJLy9ub3QgdXNlZAorCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJMQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0VOViB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9NRU1URVNUIHwgQ0ZHX0NNRF9NSUkgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUICAgLyogfCBDRkdfQ01EX05BTkQgKi8gfCBDRkdfQ01EX0pGRlMyIHwgIENGR19DTURfUElORyB8IENGR19DTURfTkZTIHwgQ0ZHX0NNRF9JMkMgfCBDRkdfQ01EX0VFUFJPTSB8IENGR19DTURfRUxGLyp8IENGR19DTURfU1BJKi8pCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTEwMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMTAwMFwwIgkJCQkJCVwKKwkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJCQlcCisJIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9uZnMgcncgIgkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCQlcCisJImZsYXNoYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPSR7cm9vdGZzdHlwZX0gcndcMCIJXAorCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkiaW5pdF9wcm9jZXNzPS9ldGMvcHJlaW5pdFwwIiBcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKKwkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIJXAorCQkiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmZcMCIgXAorCSJhZGRldGg9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgXAorCSJod2FkZHJlc3M9JHtuZXRkZXZ9LCR7ZXRoYWRkcn1cMCIgXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIgXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiIFwKKwkiZmxhc2hfc2VsZj1ydW4gZmxhc2hhcmdzIGFkZGlwIGFkZHR0eTsiCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCisJImJvb3RfbmZzPW5mcyA4MDYwMDAwMCAke3Jvb3RwYXRofS9ib290LyR7a2VybmVsZmlsZX07cnVuIG5mc2FyZ3MgYWRkZXRoIGFkZGlwIGFkZHR0eTsiICAgICBcCisJICAgICAgICAiYm9vdG0gODA2MDAwMDBcMCIJCQkJCQlcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgdWxvYWQgL2Jvb3QvdUltYWdlOyBib290bVwwIiBcCisJImJvb3RfZmxhc2hvbGQ9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJyb290cGF0aD0vZGV2ZWwvZnMtYzFrbWZjbi1ldm1cMCIgXAorCSJrZXJuZWxmaWxlPXVJbWFnZVwwIiBcCisJIm10ZGlkcz0iIE1URElEU19ERUZBVUxUICJcMCIgXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIiBcCisJInBhcnRpdGlvbj0iIE1URFBBUlRJVElPTl9ERUZBVUxUICJcMCIgXAorCSJtdGRkZXZudW09MlwwIiBcCisJIm10ZGRldm5hbWU9ZnNcMCIgXAorCSJmc2ZpbGU9cm9vdC5qZmZzMi0xMjhrXDAiIFwKKwkidXBkYXRlbmFuZGZzPXRmdHAgODEwMDAwMDAgJHtmc2ZpbGV9O25hbmQgZXJhc2UgNjAwMDAgODgwMDAwO25hbmQgd3JpdGUgODEwMDAwMDAgNjAwMDAgODgwMDAwXDAiIFwKKyAJInVwZGF0ZWZzPXRmdHAgODEwMDAwMDAgJHtmc2ZpbGV9O3Byb3RlY3Qgb2ZmIDE6My0xMjdcO2VyYXNlIDE6My0xMjc7Y3AuYiA4MTAwMDAwMCAyMDA2MDAwMCAke2ZpbGVzaXplfVwwIiBcCisJInVwZGF0ZWJvb3Q9dGZ0cCA4MTAwMDAwMCB1LWJvb3QuYmluO3Byb3RlY3Qgb2ZmIDE6MC0xXDtlcmFzZSAxOjAtMTtjcC5iIDgxMDAwMDAwIDIwMDAwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkiZWVwcm9tZmlsZT1lZXByb20uYmluXDAiIFwKKwkidXBkYXRlZXByb209dGZ0cCA4MTAwMDAwMCAke2VlcHJvbWZpbGV9O2VlcHJvbSB3cml0ZSA4MTAwMDAwMCAwICR7ZmlsZXNpemV9XDAiIFwKKwkiIgorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJKFBIWVNfU0RSQU0gKyAweDAxMDAwMDAwKQkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4ODAwMDAwCS8qIDggTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAJCS8qIDAgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbiAtIFVzaW5nIENGSSBkcml2ZXIgCisgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZGlzYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTI1NgkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjdW5kZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMQkJCUVYUF9DUzBfQkFTRUFERFIJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMjAwMDAJLyogMTI4IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMSAgICAgICAvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7IFBIWVNfRkxBU0gxIH0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworLyoKKyAqIENGSSBkcml2ZXIgCisgKi8KKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJMQkvKiBmbGFzaCBpcyBDRkkgY29uZm9ybWFudCAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKyN1bmRlZiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworLy8gI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDEgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgMHg0MDAwICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisjZW5kaWYKKworLyoKKyAqIEkyQyBzdXBwb3J0CisgKi8KKyNpZiBkZWZpbmVkKENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ0ZHX1RDTEsgICAgICAgICAgICAgICAgICAgICAgIENGR19IWl9DTE9DSworI2RlZmluZSBDRkdfSTJDX1NQRUVEICAgICAgICAgICAgICAgICAgNDAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRSAgICAgICAgICAgICAgICAgIDAKKyNpZiBkZWZpbmVkKENGR19DTURfRUVQUk9NKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMiAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2IC8qIG1heCA2NCBieXRlICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDIgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMiBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisKKworCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1M0X0JBU0VBRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECQkxCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GTEFTSCkKKy8vVE9ETworI2Vsc2UKKy8qCisgKkVFUE9STSBib290IGxvYWRlciBkb2VzIHRoZSByZWxvY2F0ZSBhbmQgbG93bGV2ZWwgaW5pdCB3b3JrCisgKi8KKyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorLyogRW52aXJvbm1lbnQgaXMgaW4gTkFORCAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX05BTkQJMQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMHgwMDA0MDAwMAkvKiBPZmZzZXQgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTICAgICAgICAgIDEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTI4S2lCICovCisjZW5kaWYKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JNgorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTI5CisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTMxCisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTMwCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSkZGUzIpCisvLyNkZWZpbmUgQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTCisjZW5kaWYgLyogQ0ZHX0NNRF9KRkZTMiAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJuYW5kMD1jb21jZXJ0b25hbmQiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvbmFuZDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDE2MDAwayhmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJuYW5kMCwyIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazMiCisjZWxzZQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9Y29tY2VydG9mbGFzaC4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b2ZsYXNoLjA6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwyIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazIiCisjZW5kaWYKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMjQwMDAwMDAJLyogMjQgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfUEhZX0NMT0NLCQkxMjUwMDAwMDAJLyogMTI1IE1IeiovCisjZGVmaW5lIENGR19HRU0wX0NMT0NLCQkgMjUwMDAwMDAJLyogIDI1IE1IeiovCisjZGVmaW5lIENGR19HRU0xX0NMT0NLCQkgMjUwMDAwMDAJLyogIDI1IE1IeiovCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDBBMDAwMDAwIC8qIEFSQU1fQkFTRUFERFIgQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwMDAyMDAwMCAvKiAxMjhLICovCisjZGVmaW5lIENGR19BUkFNX0NPREVfU0laRQkweDAwMDEwMDAwIC8qIDY0SyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworLyoKKyogRERSIFRyYWluaW5nIGFsZ29yaXRobQorKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKyNkZWZpbmUgRERSX1RSQUlOSU5HX0RCRworCisKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jMWttZmNuLWV2bV9hcmFtLmggYi9pbmNsdWRlL2NvbmZpZ3MvYzFrbWZjbi1ldm1fYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWJhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYzFrbWZjbi1ldm1fYXJhbS5oCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAwCTEJLyogSXQncyBhbiAgU29DICovCisjZGVmaW5lIENPTkZJR19CT0FSRF9DMUtNRkNOX0VWTQkxCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQlERFJfQkFTRUFERFIKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkweDEwMDAwMDAwCS8qIDI1NiBNQiAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLyAgCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKy8qCisgKiBFbWFjIFNldHRpbmdzCisgKi8KKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fR0VNQUMKKworLy8gR0VNQUMgbW9kZSBjb25maWd1cmVkIGJ5IGJvb3RzdHJhcCBwaW5zIG9yIFNXCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisvLyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwkoR0VNQUNfUEhZX0FVVE9ORUcgfCBHRU1BQ19HRU1fREVMQVlfRElTQUJMRSkKKyNkZWZpbmUgR0VNQUMwX1BIWUlEWAkJMAorCisjZGVmaW5lIEdFTUFDMV9QSFlfQUREUgkJMAkvL25vdCB1c2VkCisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwkoR0VNQUNfTk9fUEhZIHwgR0VNQUNfR0VNX0RFTEFZX0RJU0FCTEUpCisjZGVmaW5lIEdFTUFDMV9QSFlJRFgJCTAJLy9ub3QgdXNlZAorCisjdW5kZWYgQ09ORklHX05FVF9NVUxUSQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0VOViB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9SVU4pCisKKy8vI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tMTAwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisjZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCTEJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkyNTYJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1MwX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDIwMDAwCS8qIDEyOCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisjdW5kZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKy8vICNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgICAgICAgICAgICAgICAgICAwCisjaWYgZGVmaW5lZChDRkdfQ01EX0VFUFJPTSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDIgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNiAvKiBtYXggNjQgYnl0ZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSDEgKyAyICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDIgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisvL1RPRE8KKyNlbHNlCisvKgorICpFRVBPUk0gYm9vdCBsb2FkZXIgZG9lcyB0aGUgcmVsb2NhdGUgYW5kIGxvd2xldmVsIGluaXQgd29yaworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKy8qIEVudmlyb25tZW50IGlzIGluIE5BTkQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9OQU5ECTEKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBOQU5EX01BWF9DSElQUyAgICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDEyOEtpQiAqLworI2VuZGlmCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTYKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwkzMQorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwkzMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9uYW5kIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b25hbmQ6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibmFuZDAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2Vsc2UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2syIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX1BIWV9DTE9DSwkJMTI1MDAwMDAwCS8qIDEyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMF9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworI2RlZmluZSBDRkdfR0VNMV9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMjAwMDAgLyogMTI4SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAxQTAwMCAvKiAxMDRLICovCisKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQgLSBDRkdfQVJBTV9DT0RFX1NJWkUKKworCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgNCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisvKgorKiBERFIgVHJhaW5pbmcgYWxnb3JpdGhtCisqLworI2RlZmluZSBERFJfVFJBSU5JTkcKKy8vI3VuZGVmIEREUl9UUkFJTklORworCisKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jMmthc2ljLW5hbmQuaCBiL2luY2x1ZGUvY29uZmlncy9jMmthc2ljLW5hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWZlMjc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2Mya2FzaWMtbmFuZC5oCkBAIC0wLDAgKzEsNDA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNVjcgCQkxCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18yMDAwCTEJLyogSXQncyBhbiAgU29DICovCisjZGVmaW5lIENPTkZJR19CT0FSRF9DMktBU0lDCTEKKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworI2RlZmluZQlDT05GSUdfQVJNX0VYQ0VQVElPTlMJMQorI2RlZmluZQlDT05GSUdfQVJDSF9IQVNfTE9XTEVWRUxfSU5JVAkxCisjZGVmaW5lCUNPTkZJR19NTVUJMQorI2RlZmluZSBDRkdfSFpfQ0xPQ0sgICAgICAgICAgMjUwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSFogICAgICAgICAgIDEwMDAgICAgICAgICAgICAvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzICovCisKKyNkZWZpbmUgQ1BVXzNYWF9FUzIwICAgICAgICAgICAgMQorI2RlZmluZQlDTURfU0FWRUVOVgkxCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKy8vI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorLy8jZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCUNPTUNFUlRPX0FYSV9ERFJfQkFTRQorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCSg1MTIgKiAxMDI0ICogMTAyNCkKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8KKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworLyoKKyAqIEdlbWFjIFNldHRpbmdzCisgKi8KKyNkZWZpbmUgRU1BQzBfUEhZX0FERFIgIDQKKyNkZWZpbmUgRU1BQzFfUEhZX0FERFIgIDUKKyNkZWZpbmUgRU1BQzBfRkxBR1MgICAgIDAKKyNkZWZpbmUgRU1BQzFfRkxBR1MgICAgIDAgCisjZGVmaW5lIEVNQUMyX0ZMQUdTICAgICAwCisKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkxCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WICB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9NRU1URVNUIHwgQ0ZHX0NNRF9NSUkgIHwgQ0ZHX0NNRF9SVU4gfCBDRkdfQ01EX05FVCB8IENGR19DTURfTkFORCB8IENGR19DTURfSkZGUzIgfCAgQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9ORlMgIHwgQ0ZHX0NNRF9JMkMgfCBDRkdfQ01EX0VFUFJPTSAvKnwgQ0ZHX0NNRF9FTEZ8IENGR19DTURfU1BJKi8pCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTIwMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMjAwMFwwIgkJCQkJCVwKKwkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJCQlcCisJIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9uZnMgcncgIgkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCQlcCisJImZsYXNoYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0vZGV2L210ZGJsb2NrNCByb290ZnN0eXBlPSR7cm9vdGZzdHlwZX0gcndcMCIJXAorCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkiaW5pdF9wcm9jZXNzPS9ldGMvcHJlaW5pdFwwIiBcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKKwkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIJXAorCQkiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmZcMCIgXAorCSJhZGRldGg9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgXAorCSJod2FkZHJlc3M9JHtuZXRkZXZ9LCR7ZXRoYWRkcn1cMCIgXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsMTE1MjAwbjhcMCIgXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiIFwKKwkiZmxhc2hfc2VsZj1ydW4gZmxhc2hhcmdzIGFkZGlwIGFkZHR0eTsiCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCisJImJvb3RfbmZzPW5mcyA4MDYwMDAwMCAke3Jvb3RwYXRofS9ib290LyR7a2VybmVsZmlsZX07cnVuIG5mc2FyZ3MgYWRkZXRoIGFkZGlwIGFkZHR0eTsiICAgICBcCisJICAgICAgICAiYm9vdG0gODA2MDAwMDBcMCIJCQkJCQlcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgYm9vdG0gMHhjMDA4MDAwMFwwIiBcCisJImJvb3RfZmxhc2hvbGQ9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJyb290cGF0aD0vZGV2ZWwvZnMtYzJrYXNpY1wwIiBcCisJImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKwkiYm9vdGZpbGU9dS1ib290LmJpblwwIiBcCisJIm10ZGlkcz0iIE1URElEU19ERUZBVUxUICJcMCIgXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIiBcCisJInBhcnRpdGlvbj0iIE1URFBBUlRJVElPTl9ERUZBVUxUICJcMCIgXAorCSJtdGRkZXZudW09MlwwIiBcCisJIm10ZGRldm5hbWU9ZnNcMCIgXAorCSJmc2ZpbGU9cm9vdC5qZmZzMi0xMjhrXDAiIFwKKyAJInVwZGF0ZWZzPXRmdHAgMzAwMDAwMCAke2ZzZmlsZX07cHJvdGVjdCBvZmYgMTozNS0xMjdcO2VyYXNlIDE6MzUtMTI3O2NwLmIgMzAwMDAwMCBjMDQ4MDAwMCAke2ZpbGVzaXplfVwwIiBcCisgCSJ1cGRhdGVrZXJuZWw9dGZ0cCAzMDAwMDAwICR7a2VybmVsZmlsZX07cHJvdGVjdCBvZmYgMTo0LTM1XDtlcmFzZSAxOjQtMzU7Y3AuYiAzMDAwMDAwIGMwMDgwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRlYm9vdD10ZnRwIDMwMDAwMDAgJHtib290ZmlsZX07cHJvdGVjdCBvZmYgMToxLTNcO2VyYXNlIDE6MS0zO2NwLmIgMzAwMDAwMCBjMDAyMDAwMCAke2ZpbGVzaXplfVwwIiBcCisJInVwZGF0ZXVsb2FkZXI9dGZ0cCAzMDAwMDAwIHVsb2FkZXIuYmluO3Byb3RlY3Qgb2ZmIDE6MC0xXDtlcmFzZSAxOjAtMTtjcC5iIDMwMDAwMDAgYzAwMDAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjEKKy8vI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lCUNPTkZJR19TWVNfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUJQ09ORklHX1NZU19QUk9NUFQJIj0+ICIJCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQJKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DTURfS0dEQikKKyNkZWZpbmUJQ09ORklHX1NZU19DQlNJWkUJMTAyNAkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbHNlCisjZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNlbmRpZgorI2RlZmluZQlDT05GSUdfU1lTX1BCU0laRSAoQ09ORklHX1NZU19DQlNJWkUrc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSsxNikgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCUNPTkZJR19TWVNfQ0JTSVpFCS8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUJKi8KKworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfU1RBUlQJMHgwMzAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgwNzAwMDAwCS8qIDMgLi4uIDcgTUIgaW4gRFJBTQkqLworCisKKyNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIgQ0ZHX0xPQURfQUREUgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworLy8jZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4ODAwMDAwCS8qIDggTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAJCS8qIDAgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbiAtIFVzaW5nIENGSSBkcml2ZXIKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTAyNAkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjdW5kZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMQkJCTB4QzAwMDAwMDAgLy9FWFBfQ1MwX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDIwMDAwCS8qIDEyOCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDEgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyCisgKi8KKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJMQkvKiBmbGFzaCBpcyBDRkkgY29uZm9ybWFudCAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKyN1bmRlZiBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworLy8jZGVmaW5lIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisKKy8qCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICBQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAoMSAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogUmVzZXJ2ZSAxMjggS2lCIGZvciBNb25pdG9yICovCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAweDQwMDAgIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKyNlbmRpZgorCisvKgorICogSTJDIHN1cHBvcnQKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0NNRF9JMkMpCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDRkdfVENMSyAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0haX0NMT0NLCisjZGVmaW5lIENGR19JMkNfU1BFRUQgICAgICAgICAgICAgICAgICA0MDAwMAorI2RlZmluZSBDRkdfSTJDX1NMQVZFICAgICAgICAgICAgICAgICAgMAorI2lmIGRlZmluZWQoQ0ZHX0NNRF9FRVBST00pCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFIgICAgICAgICAgICAweDUwCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfTEVOICAgICAgICAyIC8qIEJ5dGVzIG9mIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgICAgIDYgLyogbWF4IDY0IGJ5dGUgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TIDEwCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0gxICsgMyAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCAyIHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworCisjZGVmaW5lIENPTkZJR19DTURfTkFORAorI2RlZmluZSBDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRSAgICAgIDEgICAgICAgICAvKiBNYXggbnVtYmVyIG9mIE5BTkQgZGV2aWNlcyAqLworI2RlZmluZSBDRkdfNjRCSVRfU1RSVE9VTAorCisjZGVmaW5lIEVYUF9DUzBfQkFTRV9WQUwJMHgwCisjZGVmaW5lIEVYUF9DUzBfU0VHX1NJWkVfVkFMICAgIDB4N0ZGRgorI2RlZmluZSBFWFBfQ1MwX1NFR19FTkRfVkFMICAgICAoRVhQX0NTMF9CQVNFX1ZBTCArIEVYUF9DUzBfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIEVYUF9DUzFfQkFTRV9WQUwgICAgICAgIChFWFBfQ1MwX1NFR19FTkRfVkFMICsgMSkKKyNkZWZpbmUgRVhQX0NTMV9TRUdfU0laRV9WQUwgICAgMHhGRgorI2RlZmluZSBFWFBfQ1MxX1NFR19FTkRfVkFMICAgICAoRVhQX0NTMV9CQVNFX1ZBTCArIEVYUF9DUzFfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIEVYUF9DUzJfQkFTRV9WQUwgICAgICAgIChFWFBfQ1MxX1NFR19FTkRfVkFMICsgMSkKKyNkZWZpbmUgRVhQX0NTMl9TRUdfU0laRV9WQUwgICAgMHhGRgorI2RlZmluZSBFWFBfQ1MyX1NFR19FTkRfVkFMICAgICAoRVhQX0NTMl9CQVNFX1ZBTCArIEVYUF9DUzJfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIEVYUF9DUzNfQkFTRV9WQUwgICAgICAgIChFWFBfQ1MyX1NFR19FTkRfVkFMICsgMSkKKyNkZWZpbmUgRVhQX0NTM19TRUdfU0laRV9WQUwgICAgMHhGRgorI2RlZmluZSBFWFBfQ1MzX1NFR19FTkRfVkFMICAgICAoRVhQX0NTM19CQVNFX1ZBTCArIEVYUF9DUzNfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIEVYUF9DUzRfQkFTRV9WQUwgICAgICAgIChFWFBfQ1MzX1NFR19FTkRfVkFMICsgMSkKKyNkZWZpbmUgRVhQX0NTNF9TRUdfU0laRV9WQUwgICAgMHhGRgorI2RlZmluZSBFWFBfQ1M0X1NFR19FTkRfVkFMICAgICAoRVhQX0NTNF9CQVNFX1ZBTCArIEVYUF9DUzRfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIFNISUZUXzRLX01VTCAgICAxMgorCisjZGVmaW5lIENPTUNFUlRPX0VYUF9DUzRfQkFTRV9BRERSICAgICAgKENPTUNFUlRPX0FYSV9FWFBfQkFTRSArIChFWFBfQ1M0X0JBU0VfVkFMIDw8IFNISUZUXzRLX01VTCkpCisKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0VfTElTVCAgICAgICB7IENPTUNFUlRPX0VYUF9DUzRfQkFTRV9BRERSIH0KKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0UgICAgICAgQ09NQ0VSVE9fRVhQX0NTNF9CQVNFX0FERFIKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0UgICAgICAxICAgICAgICAgLyogTWF4IG51bWJlciBvZiBOQU5EIGRldmljZXMgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfU0VMRl9JTklUCisKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX09ORklfREVURUNUSU9OCisKKy8qIE5BTkQgZGVidWdnaW5nICovCisjZGVmaW5lIENGR19ERkNfREVCVUcxIC8qIHVzZWZ1bGwgKi8KKyNkZWZpbmUgQ0ZHX0RGQ19ERUJVRzIgIC8qIG5vaXN5ICovCisjZGVmaW5lIENGR19ERkNfREVCVUczICAvKiBleHRyZW1seSBub2lzeSAgKi8KKworI2RlZmluZSBDT05GSUdfTVREX0RFQlVHCisjZGVmaW5lIENPTkZJR19NVERfREVCVUdfVkVSQk9TRSAxCisKKy8vSW4gY2FzZSBNTEMgTkFORCBpcyB1c2VkIG9uIHRoZSBBc2ljIEJvYXJkLCBjb21tZW50IHRoaXMgb3V0CisvLyNkZWZpbmUgQ09ORklHX05BTkRfVFlQRV9TTEMKKworI2lmIGRlZmluZWQgKENPTkZJR19OQU5EX1RZUEVfU0xDKQorI2RlZmluZSBDT01DRVJUT19OQU5EX0ZMQVNIX1NJWkUgICAgICAgICg1MTJVTCAqIDEwMjRVTCAqIDEwMjRVTCkKKyNlbHNlCisjZGVmaW5lIENPTUNFUlRPX05BTkRfRkxBU0hfU0laRSAgICAgICAgKDJVTCAqIDEwMjRVTCAqIDEwMjRVTCAqIDEwMjRVTCkKKyNlbmRpZgorCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlDT01DRVJUT19FWFBfQ1M0X0JBU0VfQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjZW5kaWYKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GTEFTSCkKKy8vVE9ETworI2Vsc2UKKy8qCisgKkVFUE9STSBib290IGxvYWRlciBkb2VzIHRoZSByZWxvY2F0ZSBhbmQgbG93bGV2ZWwgaW5pdCB3b3JrCisgKi8KKy8vI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorLy8jZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKy8qIEVudmlyb25tZW50IGlzIGluIE5BTkQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9OQU5ECTEKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBOQU5EX01BWF9DSElQUyAgICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDEyOEtpQiAqLworI2VuZGlmCisKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTI4CisjZGVmaW5lIENGR19OQU5EX0NMRQkJMHgwMDAwMDQwMAorI2RlZmluZSBDRkdfTkFORF9BTEUJCTB4MDAwMDAyMDAKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKy8vI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9uYW5kIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b25hbmQ6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibmFuZDAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2Vsc2UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjEyOGsodWxvYWRlciksMjU2ayh1LWJvb3QpLDEyOGsoZW52KSw0TShrZXJuZWwpLDE2TShmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJub3IwLDMiCisjZGVmaW5lIFJPT1RfTVREQkxPQ0sJCSIvZGV2L210ZGJsb2NrMyIKKyNlbmRpZgorCisjZGVmaW5lIENGR19IWiAgICAgICAgICAgICAgICAgIDEwMDAKKworI2lmIDAKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTIwMDAKKy8vI2RlZmluZSBDRkdfQ0xLCQkJQ0ZHX0NMS182NTBfMTg3XzM3NQorLy8jZGVmaW5lIENGR19QSFlfQ0xPQ0sJCTEyNTAwMDAwMAkvKiAxMjUgTUh6Ki8KKy8vI2RlZmluZSBDRkdfR0VNMF9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworLy8jZGVmaW5lIENGR19HRU0xX0NMT0NLCQkgMjUwMDAwMDAJLyogIDI1IE1IeiovCisjZW5kaWYKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4ODMwMDAwMDAJLy8weDBBMDAwMDAwIC8qIEFSQU1fQkFTRUFERFIgQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwMDAyMDAwMCAvKiAxMjhLICovCisjZGVmaW5lIENGR19BUkFNX0NPREVfU0laRQkweDAwMDEwMDAwIC8qIDY0SyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lCUNPTkZJR19TWVNfR0JMX0RBVEFfU0laRQkxMjgKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2Mya2FzaWMuaCBiL2luY2x1ZGUvY29uZmlncy9jMmthc2ljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ1YTAxZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9jMmthc2ljLmgKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPCQkxCisjZGVmaW5lIENPTkZJR19BUk1WNyAJCTEKKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzIwMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX0MyS0FTSUMJMQorI3VuZGVmICBDT05GSUdfVVNFX0lSUQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAqLworCisjZGVmaW5lCUNPTkZJR19BUk1fRVhDRVBUSU9OUwkxCisjZGVmaW5lCUNPTkZJR19BUkNIX0hBU19MT1dMRVZFTF9JTklUCTEKKyNkZWZpbmUJQ09ORklHX01NVQkxCisjZGVmaW5lIENGR19IWl9DTE9DSyAgICAgICAgICAyNTAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19IWiAgICAgICAgICAgMTAwMCAgICAgICAgICAgIC8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MgKi8KKworI2RlZmluZSBDUFVfM1hYX0VTMjAgICAgICAgICAgICAxCisjZGVmaW5lCUNNRF9TQVZFRU5WCTEKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDAiCisKKy8qCisgKiBMaW51eCBib290IGNvbmZpZ3VyYXRpb24KKyAqLworCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAgICAgICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJKFBIWVNfU0RSQU0gKyBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgMHgxMDApCisKKy8qCisgKglSZWxvY2F0aW9uIG9wdGlvbnMKKyAqLworLy8jZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorCisvKgorICogUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworCisvKgorICogTWVtb3J5IE1hcHBpbmcKKyAqLworCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJQ09NQ0VSVE9fQVhJX0REUl9CQVNFCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJKDUxMiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLworLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogR2VtYWMgU2V0dGluZ3MKKyAqLworI2RlZmluZSBFTUFDMF9QSFlfQUREUiAgNAorI2RlZmluZSBFTUFDMV9QSFlfQUREUiAgNQorI2RlZmluZSBFTUFDMF9GTEFHUyAgICAgMAorI2RlZmluZSBFTUFDMV9GTEFHUyAgICAgMAorI2RlZmluZSBFTUFDMl9GTEFHUyAgICAgMAorCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJMQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0VOViAgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfTUVNVEVTVCB8IENGR19DTURfTUlJICB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgLyp8IENGR19DTURfTkFORCAqLyB8IENGR19DTURfSkZGUzIgfCAgQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9ORlMgIHwgQ0ZHX0NNRF9JMkMgfCBDRkdfQ01EX0VFUFJPTSAvKnwgQ0ZHX0NNRF9FTEZ8IENGR19DTURfU1BJKi8pCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTIwMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMjAwMFwwIgkJCQkJCVwKKwkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJCQlcCisJIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9uZnMgcncgIgkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCQlcCisJImZsYXNoYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0vZGV2L210ZGJsb2NrNCByb290ZnN0eXBlPSR7cm9vdGZzdHlwZX0gcndcMCIJXAorCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkiaW5pdF9wcm9jZXNzPS9ldGMvcHJlaW5pdFwwIiBcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKKwkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIJXAorCQkiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmZcMCIgXAorCSJhZGRldGg9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgXAorCSJod2FkZHJlc3M9JHtuZXRkZXZ9LCR7ZXRoYWRkcn1cMCIgXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsMTE1MjAwbjhcMCIgXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiIFwKKwkiZmxhc2hfc2VsZj1ydW4gZmxhc2hhcmdzIGFkZGlwIGFkZHR0eTsiCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCisJImJvb3RfbmZzPW5mcyA4MDYwMDAwMCAke3Jvb3RwYXRofS9ib290LyR7a2VybmVsZmlsZX07cnVuIG5mc2FyZ3MgYWRkZXRoIGFkZGlwIGFkZHR0eTsiICAgICBcCisJICAgICAgICAiYm9vdG0gODA2MDAwMDBcMCIJCQkJCQlcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgYm9vdG0gMHhjMDA4MDAwMFwwIiBcCisJImJvb3RfZmxhc2hvbGQ9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJsb2FkYWRkcj0weDMwMDAwMDBcMCIJCVwKKwkicm9vdHBhdGg9L2RldmVsL2ZzLWMya2FzaWNcMCIgXAorCSJrZXJuZWxmaWxlPXVJbWFnZVwwIiBcCisJImJvb3RmaWxlPXUtYm9vdC5iaW5cMCIgXAorCSJtdGRpZHM9IiBNVERJRFNfREVGQVVMVCAiXDAiIFwKKwkibXRkcGFydHM9IiBNVERQQVJUU19ERUZBVUxUICJcMCIgXAorCSJwYXJ0aXRpb249IiBNVERQQVJUSVRJT05fREVGQVVMVCAiXDAiIFwKKwkibXRkZGV2bnVtPTJcMCIgXAorCSJtdGRkZXZuYW1lPWZzXDAiIFwKKwkiZnNmaWxlPXJvb3QuamZmczItMTI4a1wwIiBcCisgCSJ1cGRhdGVmcz10ZnRwIDMwMDAwMDAgJHtmc2ZpbGV9O3Byb3RlY3Qgb2ZmIDE6MzUtMTI3XDtlcmFzZSAxOjM1LTEyNztjcC5iIDMwMDAwMDAgYzA0ODAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorIAkidXBkYXRla2VybmVsPXRmdHAgMzAwMDAwMCAke2tlcm5lbGZpbGV9O3Byb3RlY3Qgb2ZmIDE6NC0zNVw7ZXJhc2UgMTo0LTM1O2NwLmIgMzAwMDAwMCBjMDA4MDAwMCAke2ZpbGVzaXplfVwwIiBcCisJInVwZGF0ZWJvb3Q9dGZ0cCAzMDAwMDAwICR7Ym9vdGZpbGV9O3Byb3RlY3Qgb2ZmIDE6MS0zXDtlcmFzZSAxOjEtMztjcC5iIDMwMDAwMDAgYzAwMjAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSJ1cGRhdGV1bG9hZGVyPXRmdHAgMzAwMDAwMCB1bG9hZGVyLmJpbjtwcm90ZWN0IG9mZiAxOjAtMVw7ZXJhc2UgMTowLTE7Y3AuYiAzMDAwMDAwIGMwMDAwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkiIgorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4xCisvLyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZQlDT05GSUdfU1lTX0xPTkdIRUxQCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lCUNPTkZJR19TWVNfUFJPTVBUCSI9PiAiCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCisjaWYgZGVmaW5lZChDT05GSUdfQ01EX0tHREIpCisjZGVmaW5lCUNPTkZJR19TWVNfQ0JTSVpFCTEwMjQJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCisjZWxzZQorI2RlZmluZQlDT05GSUdfU1lTX0NCU0laRQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCisjZW5kaWYKKyNkZWZpbmUJQ09ORklHX1NZU19QQlNJWkUgKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lCUNPTkZJR19TWVNfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MJKi8KKyNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCisKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MDMwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uCSovCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9FTkQJCTB4MDcwMDAwMAkvKiAzIC4uLiA3IE1CIGluIERSQU0JKi8KKworCisjZGVmaW5lIENPTkZJR19TWVNfTE9BRF9BRERSIENGR19MT0FEX0FERFIKKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKy8vI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyCisgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZGlzYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEwMjQJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQkweEMwMDAwMDAwIC8vRVhQX0NTMF9CQVNFQUREUgkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAyMDAwMAkvKiAxMjggS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxICAgICAgIC8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXsgUEhZU19GTEFTSDEgfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgxICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlcgorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisjdW5kZWYgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKy8vI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDEgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgMHg0MDAwICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisjZW5kaWYKKworLyoKKyAqIEkyQyBzdXBwb3J0CisgKi8KKyNpZiBkZWZpbmVkKENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ0ZHX1RDTEsgICAgICAgICAgICAgICAgICAgICAgIENGR19IWl9DTE9DSworI2RlZmluZSBDRkdfSTJDX1NQRUVEICAgICAgICAgICAgICAgICAgNDAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRSAgICAgICAgICAgICAgICAgIDAKKyNpZiBkZWZpbmVkKENGR19DTURfRUVQUk9NKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMiAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2IC8qIG1heCA2NCBieXRlICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMiBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisKKworI2RlZmluZSBDT05GSUdfQ01EX05BTkQKKyNkZWZpbmUgQ09ORklHX1NZU19NQVhfTkFORF9ERVZJQ0UgICAgICAxICAgICAgICAgLyogTWF4IG51bWJlciBvZiBOQU5EIGRldmljZXMgKi8KKyNkZWZpbmUgQ0ZHXzY0QklUX1NUUlRPVUwKKworI2RlZmluZSBFWFBfQ1MwX0JBU0VfVkFMCTB4MAorI2RlZmluZSBFWFBfQ1MwX1NFR19TSVpFX1ZBTCAgICAweDdGRkYKKyNkZWZpbmUgRVhQX0NTMF9TRUdfRU5EX1ZBTCAgICAgKEVYUF9DUzBfQkFTRV9WQUwgKyBFWFBfQ1MwX1NFR19TSVpFX1ZBTCkKKworI2RlZmluZSBFWFBfQ1MxX0JBU0VfVkFMICAgICAgICAoRVhQX0NTMF9TRUdfRU5EX1ZBTCArIDEpCisjZGVmaW5lIEVYUF9DUzFfU0VHX1NJWkVfVkFMICAgIDB4RkYKKyNkZWZpbmUgRVhQX0NTMV9TRUdfRU5EX1ZBTCAgICAgKEVYUF9DUzFfQkFTRV9WQUwgKyBFWFBfQ1MxX1NFR19TSVpFX1ZBTCkKKworI2RlZmluZSBFWFBfQ1MyX0JBU0VfVkFMICAgICAgICAoRVhQX0NTMV9TRUdfRU5EX1ZBTCArIDEpCisjZGVmaW5lIEVYUF9DUzJfU0VHX1NJWkVfVkFMICAgIDB4RkYKKyNkZWZpbmUgRVhQX0NTMl9TRUdfRU5EX1ZBTCAgICAgKEVYUF9DUzJfQkFTRV9WQUwgKyBFWFBfQ1MyX1NFR19TSVpFX1ZBTCkKKworI2RlZmluZSBFWFBfQ1MzX0JBU0VfVkFMICAgICAgICAoRVhQX0NTMl9TRUdfRU5EX1ZBTCArIDEpCisjZGVmaW5lIEVYUF9DUzNfU0VHX1NJWkVfVkFMICAgIDB4RkYKKyNkZWZpbmUgRVhQX0NTM19TRUdfRU5EX1ZBTCAgICAgKEVYUF9DUzNfQkFTRV9WQUwgKyBFWFBfQ1MzX1NFR19TSVpFX1ZBTCkKKworI2RlZmluZSBFWFBfQ1M0X0JBU0VfVkFMICAgICAgICAoRVhQX0NTM19TRUdfRU5EX1ZBTCArIDEpCisjZGVmaW5lIEVYUF9DUzRfU0VHX1NJWkVfVkFMICAgIDB4RkYKKyNkZWZpbmUgRVhQX0NTNF9TRUdfRU5EX1ZBTCAgICAgKEVYUF9DUzRfQkFTRV9WQUwgKyBFWFBfQ1M0X1NFR19TSVpFX1ZBTCkKKworI2RlZmluZSBTSElGVF80S19NVUwgICAgMTIKKworI2RlZmluZSBDT01DRVJUT19FWFBfQ1M0X0JBU0VfQUREUiAgICAgIChDT01DRVJUT19BWElfRVhQX0JBU0UgKyAoRVhQX0NTNF9CQVNFX1ZBTCA8PCBTSElGVF80S19NVUwpKQorCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFX0xJU1QgICAgICAgeyBDT01DRVJUT19FWFBfQ1M0X0JBU0VfQUREUiB9CisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFICAgICAgIENPTUNFUlRPX0VYUF9DUzRfQkFTRV9BRERSCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFICAgICAgMSAgICAgICAgIC8qIE1heCBudW1iZXIgb2YgTkFORCBkZXZpY2VzICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1NFTEZfSU5JVAorCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9PTkZJX0RFVEVDVElPTgorCisvKiBOQU5EIGRlYnVnZ2luZyAqLworI2RlZmluZSBDRkdfREZDX0RFQlVHMSAvKiB1c2VmdWxsICovCisjZGVmaW5lIENGR19ERkNfREVCVUcyICAvKiBub2lzeSAqLworI2RlZmluZSBDRkdfREZDX0RFQlVHMyAgLyogZXh0cmVtbHkgbm9pc3kgICovCisKKyNkZWZpbmUgQ09ORklHX01URF9ERUJVRworI2RlZmluZSBDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0UgMQorCisvL0luIGNhc2UgTUxDIE5BTkQgaXMgdXNlZCBvbiB0aGUgQXNpYyBCb2FyZCwgY29tbWVudCB0aGlzIG91dAorLy8jZGVmaW5lIENPTkZJR19OQU5EX1RZUEVfU0xDCisKKyNpZiBkZWZpbmVkIChDT05GSUdfTkFORF9UWVBFX1NMQykKKyNkZWZpbmUgQ09NQ0VSVE9fTkFORF9GTEFTSF9TSVpFICAgICAgICAoNTEyVUwgKiAxMDI0VUwgKiAxMDI0VUwpCisjZWxzZQorI2RlZmluZSBDT01DRVJUT19OQU5EX0ZMQVNIX1NJWkUgICAgICAgICgyVUwgKiAxMDI0VUwgKiAxMDI0VUwgKiAxMDI0VUwpCisjZW5kaWYKKworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJQ09NQ0VSVE9fRVhQX0NTNF9CQVNFX0FERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEKKworI2VuZGlmCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisvL1RPRE8KKyNlbHNlCisvKgorICpFRVBPUk0gYm9vdCBsb2FkZXIgZG9lcyB0aGUgcmVsb2NhdGUgYW5kIGxvd2xldmVsIGluaXQgd29yaworICovCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisvKiBFbnZpcm9ubWVudCBpcyBpbiBOQU5EICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fTkFORAkxCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDAwMDQwMDAwCS8qIE9mZnNldCBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMgICAgICAgICAgMQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxMjhLaUIgKi8KKyNlbmRpZgorCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JMjkKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOAorI2RlZmluZSBDRkdfTkFORF9DTEUJCTB4MDAwMDA0MDAKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFCQkweDAwMDAwMjAwCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisvLyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9KRkZTMikKKy8vI2RlZmluZSBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMKKyNlbmRpZiAvKiBDRkdfQ01EX0pGRlMyICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvbmFuZCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9uYW5kOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5hbmQwLDIiCisjZGVmaW5lIFJPT1RfTVREQkxPQ0sJCSIvZGV2L210ZGJsb2NrMyIKKyNlbHNlCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1jb21jZXJ0b2ZsYXNoLjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvZmxhc2guMDoxMjhrKHVsb2FkZXIpLDI1NmsodS1ib290KSwxMjhrKGVudiksNE0oa2VybmVsKSwxNk0oZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwzIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazMiCisjZW5kaWYKKworI2RlZmluZSBDRkdfSFogICAgICAgICAgICAgICAgICAxMDAwCisKKyNpZiAwCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkyNDAwMDAwMAkvKiAyNCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkyMDAwCisvLyNkZWZpbmUgQ0ZHX0NMSwkJCUNGR19DTEtfNjUwXzE4N18zNzUKKy8vI2RlZmluZSBDRkdfUEhZX0NMT0NLCQkxMjUwMDAwMDAJLyogMTI1IE1IeiovCisvLyNkZWZpbmUgQ0ZHX0dFTTBfQ0xPQ0sJCSAyNTAwMDAwMAkvKiAgMjUgTUh6Ki8KKy8vI2RlZmluZSBDRkdfR0VNMV9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworI2VuZGlmCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDgzMDAwMDAwCS8vMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMjAwMDAgLyogMTI4SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAxMDAwMCAvKiA2NEsgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZQlDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jMmtldm0tbmFuZC5oIGIvaW5jbHVkZS9jb25maWdzL2Mya2V2bS1uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3MjFiMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9jMmtldm0tbmFuZC5oCkBAIC0wLDAgKzEsNDEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNVjcgCQkxCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18yMDAwCTEJLyogSXQncyBhbiAgU29DICovCisjZGVmaW5lIENPTkZJR19CT0FSRF9DMktFVk0JMQorI3VuZGVmICBDT05GSUdfVVNFX0lSUQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICAqLworCisjZGVmaW5lCUNPTkZJR19BUk1fRVhDRVBUSU9OUwkxCisjZGVmaW5lCUNPTkZJR19BUkNIX0hBU19MT1dMRVZFTF9JTklUCTEKKyNkZWZpbmUJQ09ORklHX01NVQkxCisjZGVmaW5lIENGR19IWl9DTE9DSyAgICAgICAgICAyNTAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19IWiAgICAgICAgICAgMTAwMCAgICAgICAgICAgIC8qIGRlY3JlbWVudGVyIGZyZXE6IDEgbXMgdGlja3MgKi8KKworI2RlZmluZSBDUFVfM1hYX0VTMjAgICAgICAgICAgICAxCisjZGVmaW5lCUNNRF9TQVZFRU5WCTEKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDAiCisKKy8qCisgKiBMaW51eCBib290IGNvbmZpZ3VyYXRpb24KKyAqLworCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAgICAgICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJKFBIWVNfU0RSQU0gKyBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFICsgMHgxMDApCisKKy8qCisgKglSZWxvY2F0aW9uIG9wdGlvbnMKKyAqLworLy8jZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorCisvKgorICogUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworCisvKgorICogTWVtb3J5IE1hcHBpbmcKKyAqLworCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJQ09NQ0VSVE9fQVhJX0REUl9CQVNFCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJKDUxMiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLworLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogR2VtYWMgU2V0dGluZ3MKKyAqLworI2RlZmluZSBFTUFDMF9QSFlfQUREUiAgNAorI2RlZmluZSBFTUFDMV9QSFlfQUREUiAgMAorI2RlZmluZSBFTUFDMF9GTEFHUyAgICAgMAorI2RlZmluZSBFTUFDMV9GTEFHUyAgICAgMSAKKyNkZWZpbmUgRU1BQzJfRkxBR1MgICAgIDAKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX01FTVRFU1QgfCBDRkdfQ01EX01JSSAgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIHwgQ0ZHX0NNRF9OQU5EIHwgQ0ZHX0NNRF9KRkZTMiB8ICBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX05GUyAgfCBDRkdfQ01EX0kyQyB8IENGR19DTURfRUVQUk9NIC8qfCBDRkdfQ01EX0VMRnwgQ0ZHX0NNRF9TUEkqLykKKworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tMjAwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCVwKKwkiaG9zdG5hbWU9Y29tY2VydG8yMDAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0vZGV2L25mcyBydyAiCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbXRkYmxvY2s0IHJvb3Rmc3R5cGU9JHtyb290ZnN0eXBlfSByd1wwIglcCisJInJvb3Rmc3R5cGU9amZmczJcMCIgXAorCSJpbml0X3Byb2Nlc3M9L2V0Yy9wcmVpbml0XDAiIFwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCisJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZlwwIiBcCisJImFkZGV0aD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIiBcCisJImh3YWRkcmVzcz0ke25ldGRldn0sJHtldGhhZGRyfVwwIiBcCisJImFkZHR0eT1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gY29uc29sZT10dHlTMCwxMTUyMDBuOFwwIiBcCisJImFkZG10ZD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gJHttdGRwYXJ0c31cMCIgXAorCSJmbGFzaF9zZWxmPXJ1biBmbGFzaGFyZ3MgYWRkaXAgYWRkdHR5OyIJCVwKKwkJImJvb3RtICR7a2VybmVsX2FkZHJ9XDAiCQkJCVwKKwkiYm9vdF9uZnM9bmZzIDgwNjAwMDAwICR7cm9vdHBhdGh9L2Jvb3QvJHtrZXJuZWxmaWxlfTtydW4gbmZzYXJncyBhZGRldGggYWRkaXAgYWRkdHR5OyIgICAgIFwKKwkgICAgICAgICJib290bSA4MDYwMDAwMFwwIgkJCQkJCVwKKwkiYm9vdF9mbGFzaD1ydW4gZmxhc2hhcmdzIGFkZGV0aCBhZGR0dHkgYWRkbXRkOyBib290bSAweGMwMDgwMDAwXDAiIFwKKwkiYm9vdF9mbGFzaG9sZD1ydW4gZmxhc2hhcmdzIGFkZGV0aCBhZGR0dHkgYWRkbXRkOyBmc2xvYWQgL2Jvb3QvdUltYWdlOyBib290bVwwIiBcCisJInJvb3RwYXRoPS9kZXZlbC9mcy1jMmthc2ljXDAiIFwKKwkia2VybmVsZmlsZT11SW1hZ2VcMCIgXAorCSJib290ZmlsZT11LWJvb3QuYmluXDAiIFwKKwkibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisJIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKwkicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisJIm10ZGRldm51bT0yXDAiIFwKKwkibXRkZGV2bmFtZT1mc1wwIiBcCisJImZzZmlsZT1yb290LmpmZnMyLTEyOGtcMCIgXAorIAkidXBkYXRlZnM9dGZ0cCAzMDAwMDAwICR7ZnNmaWxlfTtwcm90ZWN0IG9mZiAxOjM1LTEyN1w7ZXJhc2UgMTozNS0xMjc7Y3AuYiAzMDAwMDAwIGMwNDgwMDAwICR7ZmlsZXNpemV9XDAiIFwKKyAJInVwZGF0ZWtlcm5lbD10ZnRwIDMwMDAwMDAgJHtrZXJuZWxmaWxlfTtwcm90ZWN0IG9mZiAxOjQtMzVcO2VyYXNlIDE6NC0zNTtjcC5iIDMwMDAwMDAgYzAwODAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSJ1cGRhdGVib290PXRmdHAgMzAwMDAwMCAke2Jvb3RmaWxlfTtwcm90ZWN0IG9mZiAxOjEtM1w7ZXJhc2UgMToxLTM7Y3AuYiAzMDAwMDAwIGMwMDIwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRldWxvYWRlcj10ZnRwIDMwMDAwMDAgdWxvYWRlci5iaW47cHJvdGVjdCBvZmYgMTowLTFcO2VyYXNlIDE6MC0xO2NwLmIgMzAwMDAwMCBjMDAwMDAwMCAke2ZpbGVzaXplfVwwIiBcCisJIiIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMQorLy8jZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZQlDT05GSUdfU1lTX1BST01QVAkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLworI2lmIGRlZmluZWQoQ09ORklHX0NNRF9LR0RCKQorI2RlZmluZQlDT05GSUdfU1lTX0NCU0laRQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2Vsc2UKKyNkZWZpbmUJQ09ORklHX1NZU19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2VuZGlmCisjZGVmaW5lCUNPTkZJR19TWVNfUEJTSVpFIChDT05GSUdfU1lTX0NCU0laRStzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZQlDT05GSUdfU1lTX01BWEFSR1MJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCisjZGVmaW5lIENPTkZJR19TWVNfQkFSR1NJWkUJQ09ORklHX1NZU19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDAzMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbgkqLworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkweDA3MDAwMDAJLyogMyAuLi4gNyBNQiBpbiBEUkFNCSovCisKKworI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUiBDRkdfTE9BRF9BRERSCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJKFBIWVNfU0RSQU0gKyAweDAxMDAwMDAwKQkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisvLyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlcgorICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkxCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCTEJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkxMDI0CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJMHhDMDAwMDAwMCAvL0VYUF9DUzBfQkFTRUFERFIJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMjAwMDAJLyogMTI4IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMSAgICAgICAvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7IFBIWVNfRkxBU0gxIH0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMSAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworLyoKKyAqIENGSSBkcml2ZXIKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorI3VuZGVmIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NQRUVECSAgICAgICA0MDAwMAorI2RlZmluZSBDRkdfSTJDX1NMQVZFICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TTEFWRQkgICAgICAgMAorI2lmIGRlZmluZWQoQ0ZHX0NNRF9FRVBST00pCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFIgICAgICAgICAgICAweDUwCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfTEVOICAgICAgICAyIC8qIEJ5dGVzIG9mIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgICAgIDYgLyogbWF4IDY0IGJ5dGUgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TIDEwCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0gxICsgMyAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCAyIHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworCisjZGVmaW5lIENPTkZJR19DTURfTkFORAorI2RlZmluZSBDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRSAgICAgIDEgICAgICAgICAvKiBNYXggbnVtYmVyIG9mIE5BTkQgZGV2aWNlcyAqLworI2RlZmluZSBDRkdfNjRCSVRfU1RSVE9VTAorCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRSAgICAgIDEgICAgICAgICAvKiBNYXggbnVtYmVyIG9mIE5BTkQgZGV2aWNlcyAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9TRUxGX0lOSVQKKworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfT05GSV9ERVRFQ1RJT04KKworLyogTkFORCBkZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgQ0ZHX0RGQ19ERUJVRzEgLyogdXNlZnVsbCAqLworI2RlZmluZSBDRkdfREZDX0RFQlVHMiAgLyogbm9pc3kgKi8KKyNkZWZpbmUgQ0ZHX0RGQ19ERUJVRzMgIC8qIGV4dHJlbWx5IG5vaXN5ICAqLworCisjZGVmaW5lIENPTkZJR19NVERfREVCVUcKKyNkZWZpbmUgQ09ORklHX01URF9ERUJVR19WRVJCT1NFIDEKKworCisjZGVmaW5lIEVYUF9DUzBfQkFTRV9WQUwJMHgwCisjZGVmaW5lIEVYUF9DUzBfU0VHX1NJWkVfVkFMICAgIDB4N0ZGRgorI2RlZmluZSBFWFBfQ1MwX1NFR19FTkRfVkFMICAgICAoRVhQX0NTMF9CQVNFX1ZBTCArIEVYUF9DUzBfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIEVYUF9DUzFfQkFTRV9WQUwgICAgICAgIChFWFBfQ1MwX1NFR19FTkRfVkFMICsgMSkKKyNkZWZpbmUgRVhQX0NTMV9TRUdfU0laRV9WQUwgICAgMHhGRgorI2RlZmluZSBFWFBfQ1MxX1NFR19FTkRfVkFMICAgICAoRVhQX0NTMV9CQVNFX1ZBTCArIEVYUF9DUzFfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIEVYUF9DUzJfQkFTRV9WQUwgICAgICAgIChFWFBfQ1MxX1NFR19FTkRfVkFMICsgMSkKKyNkZWZpbmUgRVhQX0NTMl9TRUdfU0laRV9WQUwgICAgMHhGRgorI2RlZmluZSBFWFBfQ1MyX1NFR19FTkRfVkFMICAgICAoRVhQX0NTMl9CQVNFX1ZBTCArIEVYUF9DUzJfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIEVYUF9DUzNfQkFTRV9WQUwgICAgICAgIChFWFBfQ1MyX1NFR19FTkRfVkFMICsgMSkKKyNkZWZpbmUgRVhQX0NTM19TRUdfU0laRV9WQUwgICAgMHhGRgorI2RlZmluZSBFWFBfQ1MzX1NFR19FTkRfVkFMICAgICAoRVhQX0NTM19CQVNFX1ZBTCArIEVYUF9DUzNfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIEVYUF9DUzRfQkFTRV9WQUwgICAgICAgIChFWFBfQ1MzX1NFR19FTkRfVkFMICsgMSkKKyNkZWZpbmUgRVhQX0NTNF9TRUdfU0laRV9WQUwgICAgMHhGRgorI2RlZmluZSBFWFBfQ1M0X1NFR19FTkRfVkFMICAgICAoRVhQX0NTNF9CQVNFX1ZBTCArIEVYUF9DUzRfU0VHX1NJWkVfVkFMKQorCisjZGVmaW5lIFNISUZUXzRLX01VTCAgICAxMgorCisjZGVmaW5lIENPTUNFUlRPX0VYUF9DUzRfQkFTRV9BRERSICAgICAgKENPTUNFUlRPX0FYSV9FWFBfQkFTRSArIChFWFBfQ1M0X0JBU0VfVkFMIDw8IFNISUZUXzRLX01VTCkpCisKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0VfTElTVCAgICAgICB7IENPTUNFUlRPX0VYUF9DUzRfQkFTRV9BRERSIH0KKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0JBU0UgICAgICAgQ09NQ0VSVE9fRVhQX0NTNF9CQVNFX0FERFIKKworLy9JbiBjYXNlIE1MQyBOQU5EIGlzIHVzZWQgb24gdGhlIEFzaWMgQm9hcmQsIGNvbW1lbnQgdGhpcyBvdXQKKy8vI2RlZmluZSBDT05GSUdfTkFORF9UWVBFX1NMQworCisjaWYgZGVmaW5lZCAoQ09ORklHX05BTkRfVFlQRV9TTEMpCisjZGVmaW5lIENPTUNFUlRPX05BTkRfRkxBU0hfU0laRSAgICAgICAgKDUxMlVMICogMTAyNFVMICogMTAyNFVMKQorI2Vsc2UKKyNkZWZpbmUgQ09NQ0VSVE9fTkFORF9GTEFTSF9TSVpFICAgICAgICAoMlVMICogMTAyNFVMICogMTAyNFVMICogMTAyNFVMKQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJCUNPTUNFUlRPX0VYUF9DUzRfQkFTRV9BRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECQkxCisKKyNlbmRpZgorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZMQVNIKQorLy9UT0RPCisjZWxzZQorLyoKKyAqRUVQT1JNIGJvb3QgbG9hZGVyIGRvZXMgdGhlIHJlbG9jYXRlIGFuZCBsb3dsZXZlbCBpbml0IHdvcmsKKyAqLworLy8jZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorLyogRW52aXJvbm1lbnQgaXMgaW4gTkFORCAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX05BTkQJMQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMHgwMDA0MDAwMAkvKiBPZmZzZXQgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTICAgICAgICAgIDEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTI4S2lCICovCisjZW5kaWYKKworCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTI5CisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMjgKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFCQkweDAwMDAwNDAwCisjZGVmaW5lIENGR19OQU5EX0FMRQkJMHgwMDAwMDIwMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworLy8jZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSkZGUzIpCisvLyNkZWZpbmUgQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTCisjZW5kaWYgLyogQ0ZHX0NNRF9KRkZTMiAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJuYW5kMD1jb21jZXJ0b25hbmQiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvbmFuZDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDE2MDAwayhmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJuYW5kMCwyIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazMiCisjZWxzZQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9Y29tY2VydG9mbGFzaC4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b2ZsYXNoLjA6MTI4ayh1bG9hZGVyKSwyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDRNKGtlcm5lbCksMTZNKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMyIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX0haICAgICAgICAgICAgICAgICAgMTAwMAorCisjaWYgMAorI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMjQwMDAwMDAJLyogMjQgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMjAwMAorLy8jZGVmaW5lIENGR19DTEsJCQlDRkdfQ0xLXzY1MF8xODdfMzc1CisvLyNkZWZpbmUgQ0ZHX1BIWV9DTE9DSwkJMTI1MDAwMDAwCS8qIDEyNSBNSHoqLworLy8jZGVmaW5lIENGR19HRU0wX0NMT0NLCQkgMjUwMDAwMDAJLyogIDI1IE1IeiovCisvLyNkZWZpbmUgQ0ZHX0dFTTFfQ0xPQ0sJCSAyNTAwMDAwMAkvKiAgMjUgTUh6Ki8KKyNlbmRpZgorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHg4MzAwMDAwMAkvLzB4MEEwMDAwMDAgLyogQVJBTV9CQVNFQUREUiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDAwMDIwMDAwIC8qIDEyOEsgKi8KKyNkZWZpbmUgQ0ZHX0FSQU1fQ09ERV9TSVpFCTB4MDAwMTAwMDAgLyogNjRLICovCisKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQgLSBDRkdfQVJBTV9DT0RFX1NJWkUKKworCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUJQ09ORklHX1NZU19HQkxfREFUQV9TSVpFCTEyOAorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYzJrZXZtLmggYi9pbmNsdWRlL2NvbmZpZ3MvYzJrZXZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2ZTliZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9jMmtldm0uaApAQCAtMCwwICsxLDQwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTVY3IAkJMQorI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMjAwMAkxCS8qIEl0J3MgYW4gIFNvQyAqLworI2RlZmluZSBDT05GSUdfQk9BUkRfQzJLRVZNCTEKKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworI2RlZmluZQlDT05GSUdfQVJNX0VYQ0VQVElPTlMJMQorI2RlZmluZQlDT05GSUdfQVJDSF9IQVNfTE9XTEVWRUxfSU5JVAkxCisjZGVmaW5lCUNPTkZJR19NTVUJMQorI2RlZmluZSBDRkdfSFpfQ0xPQ0sgICAgICAgICAgMjUwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfSFogICAgICAgICAgIDEwMDAgICAgICAgICAgICAvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzICovCisKKyNkZWZpbmUgQ1BVXzNYWF9FUzIwICAgICAgICAgICAgMQorI2RlZmluZQlDTURfU0FWRUVOVgkxCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKy8vI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorLy8jZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCUNPTUNFUlRPX0FYSV9ERFJfQkFTRQorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCSg1MTIgKiAxMDI0ICogMTAyNCkKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8KKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworLyoKKyAqIEdlbWFjIFNldHRpbmdzCisgKi8KKyNkZWZpbmUgRU1BQzBfUEhZX0FERFIgIDQKKyNkZWZpbmUgRU1BQzFfUEhZX0FERFIgIDAKKyNkZWZpbmUgRU1BQzBfRkxBR1MgICAgIDAKKyNkZWZpbmUgRU1BQzFfRkxBR1MgICAgIDEKKyNkZWZpbmUgRU1BQzJfRkxBR1MgICAgIDAKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX01FTVRFU1QgfCBDRkdfQ01EX01JSSAgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIC8qfCBDRkdfQ01EX05BTkQgKi8gfCBDRkdfQ01EX0pGRlMyIHwgIENGR19DTURfUElORyB8IENGR19DTURfTkZTICB8IENGR19DTURfSTJDIHwgQ0ZHX0NNRF9FRVBST00gLyp8IENGR19DTURfRUxGfCBDRkdfQ01EX1NQSSovKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0yMDAwID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJXAorCSJob3N0bmFtZT1jb21jZXJ0bzIwMDBcMCIJCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbmZzIHJ3ICIJCVwKKwkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIJCQkJXAorCSJmbGFzaGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9tdGRibG9jazQgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiCVwKKwkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImluaXRfcHJvY2Vzcz0vZXRjL3ByZWluaXRcMCIgXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLDExNTIwMG44XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImZsYXNoX3NlbGY9cnVuIGZsYXNoYXJncyBhZGRpcCBhZGR0dHk7IgkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJib290X25mcz1uZnMgODA2MDAwMDAgJHtyb290cGF0aH0vYm9vdC8ke2tlcm5lbGZpbGV9O3J1biBuZnNhcmdzIGFkZGV0aCBhZGRpcCBhZGR0dHk7IiAgICAgXAorCSAgICAgICAgImJvb3RtIDgwNjAwMDAwXDAiCQkJCQkJXAorCSJib290X2ZsYXNoPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGJvb3RtIDB4YzAwODAwMDBcMCIgXAorCSJib290X2ZsYXNob2xkPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGZzbG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKwkibG9hZGFkZHI9MHgzMDAwMDAwXDAiCQlcCisJInJvb3RwYXRoPS9kZXZlbC9mcy1jMmthc2ljXDAiIFwKKwkia2VybmVsZmlsZT11SW1hZ2VcMCIgXAorCSJib290ZmlsZT11LWJvb3QuYmluXDAiIFwKKwkibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisJIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKwkicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisJIm10ZGRldm51bT0yXDAiIFwKKwkibXRkZGV2bmFtZT1mc1wwIiBcCisJImZzZmlsZT1yb290LmpmZnMyLTEyOGtcMCIgXAorIAkidXBkYXRlZnM9dGZ0cCAzMDAwMDAwICR7ZnNmaWxlfTtwcm90ZWN0IG9mZiAxOjM1LTEyN1w7ZXJhc2UgMTozNS0xMjc7Y3AuYiAzMDAwMDAwIGMwNDgwMDAwICR7ZmlsZXNpemV9XDAiIFwKKyAJInVwZGF0ZWtlcm5lbD10ZnRwIDMwMDAwMDAgJHtrZXJuZWxmaWxlfTtwcm90ZWN0IG9mZiAxOjQtMzVcO2VyYXNlIDE6NC0zNTtjcC5iIDMwMDAwMDAgYzAwODAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSJ1cGRhdGVib290PXRmdHAgMzAwMDAwMCAke2Jvb3RmaWxlfTtwcm90ZWN0IG9mZiAxOjEtM1w7ZXJhc2UgMToxLTM7Y3AuYiAzMDAwMDAwIGMwMDIwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRldWxvYWRlcj10ZnRwIDMwMDAwMDAgdWxvYWRlci5iaW47cHJvdGVjdCBvZmYgMTowLTFcO2VyYXNlIDE6MC0xO2NwLmIgMzAwMDAwMCBjMDAwMDAwMCAke2ZpbGVzaXplfVwwIiBcCisJIiIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMQorLy8jZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUJQ09ORklHX1NZU19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZQlDT05GSUdfU1lTX1BST01QVAkiPT4gIgkJLyogTW9uaXRvciBDb21tYW5kIFByb21wdAkqLworI2lmIGRlZmluZWQoQ09ORklHX0NNRF9LR0RCKQorI2RlZmluZQlDT05GSUdfU1lTX0NCU0laRQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2Vsc2UKKyNkZWZpbmUJQ09ORklHX1NZU19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2VuZGlmCisjZGVmaW5lCUNPTkZJR19TWVNfUEJTSVpFIChDT05GSUdfU1lTX0NCU0laRStzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpKzE2KSAvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZQlDT05GSUdfU1lTX01BWEFSR1MJMTYJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzCSovCisjZGVmaW5lIENPTkZJR19TWVNfQkFSR1NJWkUJQ09ORklHX1NZU19DQlNJWkUJLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZQkqLworCisjZGVmaW5lIENPTkZJR19TWVNfTUVNVEVTVF9TVEFSVAkweDAzMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbgkqLworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkweDA3MDAwMDAJLyogMyAuLi4gNyBNQiBpbiBEUkFNCSovCisKKworI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUiBDRkdfTE9BRF9BRERSCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJKFBIWVNfU0RSQU0gKyAweDAxMDAwMDAwKQkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisvLyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlcgorICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkxCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCTEJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkxMDI0CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJMHhDMDAwMDAwMCAvL0VYUF9DUzBfQkFTRUFERFIJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMjAwMDAJLyogMTI4IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMSAgICAgICAvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7IFBIWVNfRkxBU0gxIH0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMSAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworLyoKKyAqIENGSSBkcml2ZXIKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorI3VuZGVmIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgIDB4NDAwMCAgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgICAgICAgICAgICAgICAgICAwCisjaWYgZGVmaW5lZChDRkdfQ01EX0VFUFJPTSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDIgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNiAvKiBtYXggNjQgYnl0ZSAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSDEgKyAzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDIgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKyNkZWZpbmUgQ09ORklHX0NNRF9OQU5ECisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFICAgICAgMSAgICAgICAgIC8qIE1heCBudW1iZXIgb2YgTkFORCBkZXZpY2VzICovCisjZGVmaW5lIENGR182NEJJVF9TVFJUT1VMCisKKyNkZWZpbmUgRVhQX0NTMF9CQVNFX1ZBTAkweDAKKyNkZWZpbmUgRVhQX0NTMF9TRUdfU0laRV9WQUwgICAgMHg3RkZGCisjZGVmaW5lIEVYUF9DUzBfU0VHX0VORF9WQUwgICAgIChFWFBfQ1MwX0JBU0VfVkFMICsgRVhQX0NTMF9TRUdfU0laRV9WQUwpCisKKyNkZWZpbmUgRVhQX0NTMV9CQVNFX1ZBTCAgICAgICAgKEVYUF9DUzBfU0VHX0VORF9WQUwgKyAxKQorI2RlZmluZSBFWFBfQ1MxX1NFR19TSVpFX1ZBTCAgICAweEZGCisjZGVmaW5lIEVYUF9DUzFfU0VHX0VORF9WQUwgICAgIChFWFBfQ1MxX0JBU0VfVkFMICsgRVhQX0NTMV9TRUdfU0laRV9WQUwpCisKKyNkZWZpbmUgRVhQX0NTMl9CQVNFX1ZBTCAgICAgICAgKEVYUF9DUzFfU0VHX0VORF9WQUwgKyAxKQorI2RlZmluZSBFWFBfQ1MyX1NFR19TSVpFX1ZBTCAgICAweEZGCisjZGVmaW5lIEVYUF9DUzJfU0VHX0VORF9WQUwgICAgIChFWFBfQ1MyX0JBU0VfVkFMICsgRVhQX0NTMl9TRUdfU0laRV9WQUwpCisKKyNkZWZpbmUgRVhQX0NTM19CQVNFX1ZBTCAgICAgICAgKEVYUF9DUzJfU0VHX0VORF9WQUwgKyAxKQorI2RlZmluZSBFWFBfQ1MzX1NFR19TSVpFX1ZBTCAgICAweEZGCisjZGVmaW5lIEVYUF9DUzNfU0VHX0VORF9WQUwgICAgIChFWFBfQ1MzX0JBU0VfVkFMICsgRVhQX0NTM19TRUdfU0laRV9WQUwpCisKKyNkZWZpbmUgRVhQX0NTNF9CQVNFX1ZBTCAgICAgICAgKEVYUF9DUzNfU0VHX0VORF9WQUwgKyAxKQorI2RlZmluZSBFWFBfQ1M0X1NFR19TSVpFX1ZBTCAgICAweEZGCisjZGVmaW5lIEVYUF9DUzRfU0VHX0VORF9WQUwgICAgIChFWFBfQ1M0X0JBU0VfVkFMICsgRVhQX0NTNF9TRUdfU0laRV9WQUwpCisKKyNkZWZpbmUgU0hJRlRfNEtfTVVMICAgIDEyCisKKyNkZWZpbmUgQ09NQ0VSVE9fRVhQX0NTNF9CQVNFX0FERFIgICAgICAoQ09NQ0VSVE9fQVhJX0VYUF9CQVNFICsgKEVYUF9DUzRfQkFTRV9WQUwgPDwgU0hJRlRfNEtfTVVMKSkKKworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkFTRV9MSVNUICAgICAgIHsgQ09NQ0VSVE9fRVhQX0NTNF9CQVNFX0FERFIgfQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfQkFTRSAgICAgICBDT01DRVJUT19FWFBfQ1M0X0JBU0VfQUREUgorCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBDT05GSUdfU1lTX01BWF9OQU5EX0RFVklDRSAgICAgIDEgICAgICAgICAvKiBNYXggbnVtYmVyIG9mIE5BTkQgZGV2aWNlcyAqLworCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9TRUxGX0lOSVQKKworI2RlZmluZSBDT05GSUdfU1lTX05BTkRfT05GSV9ERVRFQ1RJT04KKworLyogTkFORCBkZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgQ0ZHX0RGQ19ERUJVRzEgLyogdXNlZnVsbCAqLworI2RlZmluZSBDRkdfREZDX0RFQlVHMiAgLyogbm9pc3kgKi8KKyNkZWZpbmUgQ0ZHX0RGQ19ERUJVRzMgIC8qIGV4dHJlbWx5IG5vaXN5ICAqLworCisjZGVmaW5lIENPTkZJR19NVERfREVCVUcKKyNkZWZpbmUgQ09ORklHX01URF9ERUJVR19WRVJCT1NFIDEKKworCisvL0luIGNhc2UgTUxDIE5BTkQgaXMgdXNlZCBvbiB0aGUgQXNpYyBCb2FyZCwgY29tbWVudCB0aGlzIG91dAorLy8jZGVmaW5lIENPTkZJR19OQU5EX1RZUEVfU0xDCisKKyNpZiBkZWZpbmVkIChDT05GSUdfTkFORF9UWVBFX1NMQykKKyNkZWZpbmUgQ09NQ0VSVE9fTkFORF9GTEFTSF9TSVpFICAgICAgICAoNTEyVUwgKiAxMDI0VUwgKiAxMDI0VUwpCisjZWxzZQorI2RlZmluZSBDT01DRVJUT19OQU5EX0ZMQVNIX1NJWkUgICAgICAgICgyVUwgKiAxMDI0VUwgKiAxMDI0VUwgKiAxMDI0VUwpCisjZW5kaWYKKworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJQ09NQ0VSVE9fRVhQX0NTNF9CQVNFX0FERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEKKworI2VuZGlmCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisvL1RPRE8KKyNlbHNlCisvKgorICpFRVBPUk0gYm9vdCBsb2FkZXIgZG9lcyB0aGUgcmVsb2NhdGUgYW5kIGxvd2xldmVsIGluaXQgd29yaworICovCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisvKiBFbnZpcm9ubWVudCBpcyBpbiBOQU5EICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fTkFORAkxCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDAwMDQwMDAwCS8qIE9mZnNldCBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMgICAgICAgICAgMQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxMjhLaUIgKi8KKyNlbmRpZgorCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JMjkKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOAorI2RlZmluZSBDRkdfTkFORF9DTEUJCTB4MDAwMDA0MDAKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFCQkweDAwMDAwMjAwCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisvLyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9KRkZTMikKKy8vI2RlZmluZSBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMKKyNlbmRpZiAvKiBDRkdfQ01EX0pGRlMyICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvbmFuZCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9uYW5kOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5hbmQwLDIiCisjZGVmaW5lIFJPT1RfTVREQkxPQ0sJCSIvZGV2L210ZGJsb2NrMyIKKyNlbHNlCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1jb21jZXJ0b2ZsYXNoLjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvZmxhc2guMDoxMjhrKHVsb2FkZXIpLDI1NmsodS1ib290KSwxMjhrKGVudiksNE0oa2VybmVsKSwxNk0oZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwzIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazMiCisjZW5kaWYKKworI2RlZmluZSBDRkdfSFogICAgICAgICAgICAgICAgICAxMDAwCisKKyNpZiAwCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkyNDAwMDAwMAkvKiAyNCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkyMDAwCisvLyNkZWZpbmUgQ0ZHX0NMSwkJCUNGR19DTEtfNjUwXzE4N18zNzUKKy8vI2RlZmluZSBDRkdfUEhZX0NMT0NLCQkxMjUwMDAwMDAJLyogMTI1IE1IeiovCisvLyNkZWZpbmUgQ0ZHX0dFTTBfQ0xPQ0sJCSAyNTAwMDAwMAkvKiAgMjUgTUh6Ki8KKy8vI2RlZmluZSBDRkdfR0VNMV9DTE9DSwkJIDI1MDAwMDAwCS8qICAyNSBNSHoqLworI2VuZGlmCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDgzMDAwMDAwCS8vMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMjAwMDAgLyogMTI4SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAxMDAwMCAvKiA2NEsgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZQlDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9mZXJvdXRlci5oIGIvaW5jbHVkZS9jb25maWdzL2Zlcm91dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzY2U5OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9mZXJvdXRlci5oCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKy8vI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorLy8jZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCTB4ODAwMDAwMDAKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkweDA0MDAwMDAwCS8qIDY0IE1CICovCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovICAKKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworLyoKKyAqIEVtYWMgU2V0dGluZ3MKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fR0VNQUMJMQorCisvLyBHRU1BQyBtb2RlIGNvbmZpZ3VyZWQgYnkgYm9vdHN0cmFwIHBpbnMgb3IgU1cKKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKy8vI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKworI2RlZmluZSBHRU1BQzBfUEhZX0FERFIJCTQKKyNkZWZpbmUgR0VNQUMwX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9NSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xMDBNKQorI2RlZmluZSBHRU1BQzBfUEhZX0ZMQUdTCUdFTUFDX1BIWV9BVVRPTkVHCisjZGVmaW5lIEdFTUFDMF9QSFlJRFgJCTAKKworI2RlZmluZSBHRU1BQzFfUEhZX0FERFIJCTUKKyNkZWZpbmUgR0VNQUMxX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9NSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xMDBNKQorI2RlZmluZSBHRU1BQzFfUEhZX0ZMQUdTCUdFTUFDX1BIWV9BVVRPTkVHCisjZGVmaW5lIEdFTUFDMV9QSFlJRFgJCTAKKworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCAgLypDRkdfQ01EX05BTkQgfCovIENGR19DTURfSkZGUzIgfCBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX05GUyB8IENGR19DTURfTUlJIHwgQ0ZHX0NNRF9TUEkgfCBDRkdfQ01EX0VMRikKKworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tMTAwID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCVwKKwkiaG9zdG5hbWU9Y29tY2VydG8xMDBcMCIJCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbmZzIHJ3ICIJCVwKKwkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIJCQkJXAorCSJmbGFzaGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiCVwKKwkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImluaXRfcHJvY2Vzcz0vZXRjL3ByZWluaXRcMCIgXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImZsYXNoX3NlbGY9cnVuIGZsYXNoYXJncyBhZGRpcCBhZGR0dHk7IgkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJib290X25mcz1uZnMgODA2MDAwMDAgJHtyb290cGF0aH0vYm9vdC8ke2tlcm5lbGZpbGV9O3J1biBuZnNhcmdzIGFkZGV0aCBhZGRpcCBhZGR0dHk7IiAgICAgXAorCSAgICAgICAgImJvb3RtIDgwNjAwMDAwXDAiCQkJCQkJXAorCSJib290X2ZsYXNoPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGZzbG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKwkicm9vdHBhdGg9L2RldmVsL2ZzLWZlcm91dGVyXDAiIFwKKwkia2VybmVsZmlsZT11SW1hZ2VcMCIgXAorCSJtdGRpZHM9IiBNVERJRFNfREVGQVVMVCAiXDAiIFwKKwkibXRkcGFydHM9IiBNVERQQVJUU19ERUZBVUxUICJcMCIgXAorCSJwYXJ0aXRpb249IiBNVERQQVJUSVRJT05fREVGQVVMVCAiXDAiIFwKKwkibXRkZGV2bnVtPTJcMCIgXAorCSJtdGRkZXZuYW1lPWZzXDAiIFwKKwkiZnNmaWxlPXJvb3QuamZmczItNjRrXDAiIFwKKwkidXBkYXRlZnM9dGZ0cCA4MTAwMDAwMCAke2ZzZmlsZX07cHJvdGVjdCBvZmYgMTo2LTI1NVw7ZXJhc2UgMTo2LTI1NTtjcC5iIDgxMDAwMDAwIDIwMDYwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRlYm9vdD10ZnRwIDgxMDAwMDAwIHUtYm9vdC5iaW47cHJvdGVjdCBvZmYgMTowLTNcO2VyYXNlIDE6MC0zO2NwLmIgODEwMDAwMDAgMjAwMDAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlciAKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMjU2CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJMHgyMDAwMDAwMAkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAxMDAwMAkvKiA2NCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKworI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworI2RlZmluZSBDRkdfTk9SX0ZMQVNIX0EyMl9HUElPIDIyCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisKKy8qCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICBQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAoMiAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogUmVzZXJ2ZSAxMjggS2lCIGZvciBNb25pdG9yICovCisjZW5kaWYKKworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDQgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgNCBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisgIAorI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisKKworCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTUDRfQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JNgorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTI5CisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTMxCisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTMwCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1jb21jZXJ0b2ZsYXNoLjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvZmxhc2guMDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDE2MDAwayhmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJub3IwLDIiCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX0haX0NMT0NLCQkxNjUwMDAwMDAJLyogMTY1IE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAzM01IeiAqLworI2RlZmluZSBDRkdfQVJNX0NMT0NLCQk0NTAwMDAwMDAJLyogNDUwIE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAyNU1IeiAqLworCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMTAwMDAgLyogNjRLICovCisjZGVmaW5lIENGR19BUkFNX0NPREVfU0laRQkweDAwMDA4MDAwIC8qIDMySyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworLyoKKyogRERSIFRyYWluaW5nIGFsZ29yaXRobQorKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKyNkZWZpbmUgRERSX1RSQUlOSU5HX0RCRyAKKworLyogTmV3IEREUiB0cmFpbmluZyBkZWZpbmVzIChCdWcgIzQ0MTMxKSAqLworLy8jdW5kZWYgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKyNkZWZpbmUgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9mZXJvdXRlcl9hcmFtLmggYi9pbmNsdWRlL2NvbmZpZ3MvZmVyb3V0ZXJfYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNTE3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZmVyb3V0ZXJfYXJhbS5oCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1VCT09UX0xPQURFRF9JTl9BUkFNCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkweDgwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJMHgwNDAwMDAwMAkvKiA2NCBNQiAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLyAgCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKy8qCisgKiBFbWFjIFNldHRpbmdzCisgKi8KKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fR0VNQUMKKworLy8gR0VNQUMgbW9kZSBjb25maWd1cmVkIGJ5IGJvb3RzdHJhcCBwaW5zIG9yIFNXCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisvLyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQk0CisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfTUlJCisjZGVmaW5lIEdFTUFDMF9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMTAwTSkKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwlHRU1BQ19QSFlfQVVUT05FRworI2RlZmluZSBHRU1BQzBfUEhZSURYCQkwCisKKyNkZWZpbmUgR0VNQUMxX1BIWV9BRERSCQk1CisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfTUlJCisjZGVmaW5lIEdFTUFDMV9NT0RFCQkoR0VNQUNfU1dfQ09ORiB8IEdFTUFDX1NXX0ZVTExfRFVQTEVYIHwgR0VNQUNfU1dfU1BFRURfMTAwTSkKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwlHRU1BQ19QSFlfQVVUT05FRworI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCisKKyN1bmRlZiBDT05GSUdfTkVUX01VTFRJCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ0ZHX0NNRF9GTEFTSCB8IC8qQ0ZHX0NNRF9FTlYgfCovIENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9SVU4gLyp8IENGR19DTURfTkVUIHwgIENGR19DTURfTkFORCB8IENGR19DTURfSkZGUzIgfCBDRkdfQ01EX1BJTkcgfCBDRkdfQ01EX05GUyB8IENGR19DTURfSTJDIHwgQ0ZHX0NNRF9FRVBST00gKi8pCisKKyNkZWZpbmUgQ09ORklHX05PX0daSVAJCTEKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTEwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCVwKKwkiaG9zdG5hbWU9Y29tY2VydG8xMDBcMCIJCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCQkJXAorCSJmbGFzaGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9tdGRibG9jazIgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiCVwKKwkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImluaXRfcHJvY2Vzcz0vZXRjL3ByZWluaXRcMCIgXAorCSJhZGRldGg9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgXAorCSJod2FkZHJlc3M9JHtuZXRkZXZ9LCR7ZXRoYWRkcn1cMCIgXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIgXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiIFwKKwkiYm9vdF9mbGFzaD1ydW4gZmxhc2hhcmdzIGFkZGV0aCBhZGR0dHkgYWRkbXRkOyBmc2xvYWQgL2Jvb3QvdUltYWdlOyBib290bVwwIiBcCisJImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKwkibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisJIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKwkicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisJIm10ZGRldm51bT0yXDAiIFwKKwkibXRkZGV2bmFtZT1mc1wwIiBcCisJIndyaXRlYm9vdD1wcm90ZWN0IG9mZiAxOjAtM1w7ZXJhc2UgMTowLTM7Y3AuYiA4MTAwMDAwMCAyMDAwMDAwMCA0MDAwMFwwIiBcCisJIiIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkxCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCTEJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkyNTYJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQkweDIwMDAwMDAwCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDEwMDAwCS8qIDY0IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMSAgICAgICAvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7IFBIWVNfRkxBU0gxIH0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworCisjZGVmaW5lIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisjZGVmaW5lIENGR19OT1JfRkxBU0hfQTIyX0dQSU8gMjIKKworLyoKKyAqIENGSSBkcml2ZXIgCisgKi8KKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJMQkvKiBmbGFzaCBpcyBDRkkgY29uZm9ybWFudCAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgyICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKyNlbmRpZgorCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyN1bmRlZiBDRkdfRU5WX0lTX0lOX0ZMQVNICisjZGVmaW5lIENGR19FTlZfSVNfTk9XSEVSRQkxCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0gxICsgNCAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCA0IHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKyAgCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwk2CisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMjkKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JMzEKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JMzAKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMjQwMDAwMDAJLyogMjQgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTE2NTAwMDAwMAkvKiAxNjUgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDMzTUh6ICovCisjZGVmaW5lIENGR19BUk1fQ0xPQ0sJCTQ1MDAwMDAwMAkvKiA0NTAgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1TUh6ICovCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDBBMDAwMDAwIC8qIEFSQU1fQkFTRUFERFIgQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwMDAxMDAwMCAvKiA2NEsgKi8KKyNkZWZpbmUgQ0ZHX0FSQU1fQ09ERV9TSVpFCTB4MDAwMDA0MDAgLyogMUsgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKy8qCisqIEREUiBUcmFpbmluZyBhbGdvcml0aG0KKyovCisjZGVmaW5lIEREUl9UUkFJTklORworLy8jdW5kZWYgRERSX1RSQUlOSU5HCisKKyNkZWZpbmUgRERSX1RSQUlOSU5HX0RCRyAKKworLyogTmV3IEREUiB0cmFpbmluZyBkZWZpbmVzIChCdWcgIzQ0MTMxKSAqLworLy8jdW5kZWYgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKyNkZWZpbmUgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9pcG90czQ4LTUxNS5oIGIvaW5jbHVkZS9jb25maWdzL2lwb3RzNDgtNTE1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkYmM3OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9pcG90czQ4LTUxNS5oCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fNTE1CQkJLyogSXQncyBhIFNvQyAqLworI2RlZmluZSBDT05GSUdfSVBPVFM0OF81MTUJCQkvKiBvbiBhIElwb3RzNDgtNTE1IEJvYXJkICovCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkJIiBNaW5kc3BlZWQgMC4wNS4wY3ZzIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJMHgwMTAwMDEwMAorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJCUlSQU1fQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCQkweDEwMDAKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworCisvKgorICogU0RSQU0gY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCQkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCQkweDAwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJCTB4MDgwMDAwMDAJLyogMTI4IE1pQiAqLworCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAKKyN1bmRlZiBDT05GSUdfVUFSVDEKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworCisvKgorICogRU1BQyBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fRU1BQworI2RlZmluZSBDT05GSUdfRU1BQzAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX01JSV9NT0RFCQlFTUFDX1JNSUlfU01JSV9NT0RFCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlDVFJMRElTCQkxCisKKy8qCisgKiBNRElPIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19NSUkKKyNkZWZpbmUgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOCisjZGVmaW5lIENPTkZJR19FTUFDMF9NRENMT0NLCQkyNTAwMDAwCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlfQUREUgkJMHgwCisKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIHwgXAorCQkJCQkgQ0ZHX0NNRF9NSUkgfCBDRkdfQ01EX0VMRiB8IENGR19DTURfTkFORCB8IENGR19DTURfU1BJKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by01MTUgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwlcCisJInRmdHBkaXI9LlwwIgkJCVwKKwkibmZzZGlyPS9ob21lL25mcy9mc21pbmltYWwtZGViaWFuX3NhcmdlLTAuMTNcMCIJCQlcCisJIm1zcG5hbWU9ZmlybXdhcmUuYXhmXDAiCVwKKwkiY3NwbmFtZT16SW1hZ2VcMCIJCVwKKwkiZnNuYW1lPWZzaW1hZ2UuamZmczJcMCIJXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIglcCisJInVwZGF0ZWJvb3Q9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vdS1ib290LmJpbjsgZXJhc2UgMTowLTI7IGNwLmIgJHtmaWxlYWRkcn0gMTEwMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVib290Tk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDI6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGVyYXNlIDI6NC0zMTsgY3AuYiAke2ZpbGVhZGRyfSA4MDA0MDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZW1zcE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBlcmFzZSAyOjMyLTYzOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMjAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBuYW5kIGVyYXNlIDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IG5hbmQgZXJhc2UgMjAwMDAwIDIwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSAyMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVmc05BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtmc25hbWV9OyBuYW5kIGVyYXNlIDQwMDAwMCA3YzAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDQwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJImJvb3R0dD1ydW4gc2V0Ym9vdGFyZ3M7IHRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGxvYWRtc3AgJHtmaWxlYWRkcn0gJHtmaWxlc2l6ZX07IHRmdHAgMjAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGJvb3Rjb21jZXJ0byAke2ZpbGVhZGRyfVwwIglcCisJImJvb3Rvbz1ydW4gc2V0Ym9vdGFyZ3M7IGxvYWRtc3AgODAyMDAwMDAgMjAwMDAwOyBjcC5iIDgwMDQwMDAwIDIwMDAwMDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJImJvb3RhYT1ydW4gc2V0Ym9vdGFyZ3M7IG5hbmQgcmVhZC5qZmZzMiAxMDAwMDAwIDIwMDAwMCAyMDAwMDA7IGxvYWRtc3AgMTAwMDAwMCAyMDAwMDA7IG5hbmQgcmVhZC5qZmZzMiAyMDAwMDAwIDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJIm10ZGJvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9tdGRibG9jazIgcncgcm9vdGZzdHlwZT1qZmZzMlwwIglcCisJIm5mc2Jvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0ke3NlcnZlcmlwfToke25mc2Rpcn1cMCIJXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9OjpldGgwXDAiCVwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiCVwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIglcCisJInNldGJvb3RhcmdzPXJ1biBtdGRib290IGFkZHR0eSBhZGRpcCBhZGRtdGRcMCIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMworI2RlZmluZSBDT05GSUdfR0FURVdBWUlQCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJCTMKKworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qIEluY2x1ZGUgYmFzaWMgTU1VIHN1cHBvcnQgaWYgRUxGIHN1cHBvcnQgaXMgaW5jbHVkZWQKKyAqCisgKiBOT1RFOiBrZWVwIHRoaXMgc3R1ZmYgYWZ0ZXIgImNtZF9jb25mZGVmcy5oIiBpbmNsdWRlCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FTEYpCisjZGVmaW5lIFVTRV85MjBUX01NVQorI2VuZGlmCisKKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkJMHgxMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCQkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgxMDAwMDAwCS8qIDE2IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwMTAwMDAwCS8qIDEgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCQkweDgwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gyCQkJMHg4MDAwMDAwMAkvKiBGbGFzaCBCYW5rICMyICovCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1NCT09UX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDEwMDAwCS8qIDY0IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMgkvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7UEhZU19GTEFTSDEsIFBIWVNfRkxBU0gyfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIAlQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAJKDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgNjQgS2lCIGZvciBNb25pdG9yICovCisKKyNlbmRpZgorCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCQkoUEhZU19GTEFTSDEgKyAzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDMgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECQkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQMF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwkxCisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMworI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwk0CisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTUKKworI2RlZmluZSBDT05GSUdfU1BJCQkJMQkJLyogZGVmaW5lIHRvIGVuYWJsZSBTUEkgdXNpbmcgKi8KKy8qIAorKiBTUEkgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgdmFsdWVzIAorKi8KKy8qIENvbnRyb2wgUmVnaXN0ZXIgMCB2YWx1ZXMqLworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1BPTEFSSVRZCQkxCQkvKiBJbmFjdGl2ZSBzdGF0ZSBvZiBzZXJpYWwgY2xvY2sgaXMgaGlnaCAqLworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1BIQVNFCQkxCQkvKiBTZXJpYWwgQ2xvY2sgdG9nZ2xlcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGRhdGEgYml0ICovCisjZGVmaW5lIENGR19TUElfRlJBTUVTSVpFIAkJOAkJLyogZGVmaW5lIHRlaCBTUEkgZnJhbWUgc2l6ZWluIGJpdHMuIDgtYml0IHN1cHBvcnRlZCBvbmx5ICovCisvKiBCYXVkIFJhdGUgU2VsZWN0IFJlZ2lzdGVyIHZhbHVlKi8KKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19TUEVFRAkJMjAxNTE1MQkJLyogdGhlIFNQSSBzcGVlZCBpbiBIeiAqLworCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvX25hbmQwLG5vcjA9Y29tY2VydG9fbm9yMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9fbmFuZDA6Mm0oY3NwKSwybShtc3ApLDEyNG0oZnMpO2NvbWNlcnRvX25vcjA6MTkyayhib290bG9hZGVyKSw2NGsoYm9vdGxvYWRlciBlbnYpLDE3OTJrKGNzcCksMm0obXNwKSIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMTAwMDAwMDAJLyogMTAgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTEzMzAwMDAwMAkvKiAxMzMgTUh6ICovCisKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvaXBvdHM0OC04MDAuaCBiL2luY2x1ZGUvY29uZmlncy9pcG90czQ4LTgwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllN2EzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvaXBvdHM0OC04MDAuaApAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzgwMAkJCS8qIEl0J3MgYSBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX0lQT1RTNDhfODAwCQkJLyogb24gYSBJcG90czQ4LTgwMCBCb2FyZCAqLworI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJCSIgTWluZHNwZWVkIDAuMDUuMGN2cyIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCTB4MDEwMDAxMDAKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCQlJUkFNX0JBU0VBRERSCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAkJMHgxMDAwCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKworLyoKKyAqIFNEUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkJMHgwMDAwMDAwMAorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCQkweDA4MDAwMDAwCS8qIDEyOCBNaUIgKi8KKworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLworLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCisjdW5kZWYgQ09ORklHX1VBUlQxCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKworLyoKKyAqIEVNQUMgZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX0VNQUMKKyNkZWZpbmUgQ09ORklHX0VNQUMwCisjZGVmaW5lIENPTkZJR19FTUFDMF9NSUlfTU9ERQkJRU1BQ19STUlJX1NNSUlfTU9ERQorI2RlZmluZSBDT05GSUdfRU1BQzBfUEhZQ1RSTERJUwkJMQorCisjdW5kZWYgQ09ORklHX0VNQUMxCisjZGVmaW5lIENPTkZJR19FTUFDMV9NSUlfTU9ERQkJRU1BQ19STUlJX1NNSUlfTU9ERQorI2RlZmluZSBDT05GSUdfRU1BQzFfUEhZQ1RSTERJUwkJMQorCisKKy8qCisgKiBNRElPIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19NSUkKKyNkZWZpbmUgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOCisjZGVmaW5lIENPTkZJR19FTUFDMF9NRENMT0NLCQkyNTAwMDAwCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlfQUREUgkJMHgwCisKKyNkZWZpbmUgQ09ORklHX0VNQUMxX01EQ0xPQ0sJCTI1MDAwMDAKKyNkZWZpbmUgQ09ORklHX0VNQUMxX1BIWV9BRERSCQkweDAKKworCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCBcCisJCQkJCSBDRkdfQ01EX01JSSB8IENGR19DTURfRUxGIHwgQ0ZHX0NNRF9OQU5EKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by04MDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwlcCisJInRmdHBkaXI9LlwwIgkJCVwKKwkibmZzZGlyPS9ob21lL25mcy9mc21pbmltYWwtZGViaWFuX3NhcmdlLTAuMTNcMCIJCQlcCisJIm1zcG5hbWU9ZmlybXdhcmUuYXhmXDAiCVwKKwkiY3NwbmFtZT16SW1hZ2VcMCIJCVwKKwkiZnNuYW1lPWZzaW1hZ2UuamZmczJcMCIJXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIglcCisJInVwZGF0ZWJvb3Q9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vdS1ib290LmJpbjsgZXJhc2UgMTowLTI7IGNwLmIgJHtmaWxlYWRkcn0gMTEwMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVib290Tk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDI6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGVyYXNlIDI6NC0zMTsgY3AuYiAke2ZpbGVhZGRyfSA4MDA0MDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZW1zcE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBlcmFzZSAyOjMyLTYzOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMjAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBuYW5kIGVyYXNlIDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IG5hbmQgZXJhc2UgMjAwMDAwIDIwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSAyMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVmc05BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtmc25hbWV9OyBuYW5kIGVyYXNlIDQwMDAwMCA3YzAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDQwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJImJvb3R0dD1ydW4gc2V0Ym9vdGFyZ3M7IHRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGxvYWRtc3AgJHtmaWxlYWRkcn0gJHtmaWxlc2l6ZX07IHRmdHAgMjAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGJvb3Rjb21jZXJ0byAke2ZpbGVhZGRyfVwwIglcCisJImJvb3Rvbz1ydW4gc2V0Ym9vdGFyZ3M7IGxvYWRtc3AgODAyMDAwMDAgMjAwMDAwOyBjcC5iIDgwMDQwMDAwIDIwMDAwMDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJImJvb3RhYT1ydW4gc2V0Ym9vdGFyZ3M7IG5hbmQgcmVhZC5qZmZzMiAxMDAwMDAwIDIwMDAwMCAyMDAwMDA7IGxvYWRtc3AgMTAwMDAwMCAyMDAwMDA7IG5hbmQgcmVhZC5qZmZzMiAyMDAwMDAwIDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJIm10ZGJvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9tdGRibG9jazIgcncgcm9vdGZzdHlwZT1qZmZzMlwwIglcCisJIm5mc2Jvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0ke3NlcnZlcmlwfToke25mc2Rpcn1cMCIJXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9OjpldGgwXDAiCVwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiCVwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIglcCisJInNldGJvb3RhcmdzPXJ1biBtdGRib290IGFkZHR0eSBhZGRpcCBhZGRtdGRcMCIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0VUSDFBRERSICAgICAgICAgMDA6YWE6YmI6Y2M6ZGQ6ZmYKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMworI2RlZmluZSBDT05GSUdfR0FURVdBWUlQCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJCTMKKworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qIEluY2x1ZGUgYmFzaWMgTU1VIHN1cHBvcnQgaWYgRUxGIHN1cHBvcnQgaXMgaW5jbHVkZWQKKyAqCisgKiBOT1RFOiBrZWVwIHRoaXMgc3R1ZmYgYWZ0ZXIgImNtZF9jb25mZGVmcy5oIiBpbmNsdWRlCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FTEYpCisjZGVmaW5lIFVTRV85MjBUX01NVQorI2VuZGlmCisKKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkJMHgxMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCQkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgxMDAwMDAwCS8qIDE2IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwMTAwMDAwCS8qIDEgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCQkweDgwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gyCQkJMHg4MDAwMDAwMAkvKiBGbGFzaCBCYW5rICMyICovCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1NCT09UX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDEwMDAwCS8qIDY0IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMgkvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7UEhZU19GTEFTSDEsIFBIWVNfRkxBU0gyfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIAlQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAJKDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgNjQgS2lCIGZvciBNb25pdG9yICovCisKKyNlbmRpZgorCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCQkoUEhZU19GTEFTSDEgKyAzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDMgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECQkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQMF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwkxCisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMworI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwk0CisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTUKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJuYW5kMD1jb21jZXJ0b19uYW5kMCxub3IwPWNvbWNlcnRvX25vcjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvX25hbmQwOjJtKGNzcCksMm0obXNwKSwxMjRtKGZzKTtjb21jZXJ0b19ub3IwOjE5MmsoYm9vdGxvYWRlciksNjRrKGJvb3Rsb2FkZXIgZW52KSwxNzkyayhjc3ApLDJtKG1zcCkiCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTEwMDAwMDAwCS8qIDEwIE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX0haX0NMT0NLCQkxMzMwMDAwMDAJLyogMTMzIE1IeiAqLworCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL204MzI0WEcuaCBiL2luY2x1ZGUvY29uZmlncy9tODMyNFhHLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5OGE2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9tODMyNFhHLmgKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX004MzI0WEdfSAorI2RlZmluZSBfX004MzI0WEdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfTTgzMjRYRyAgICAgICAxCisKKyNkZWZpbmUgQURKMl9NSU5fVkFMICAgIDEwNQorI2RlZmluZSBBREoyX01BWF9WQUwgICAgMTY1CisKKyNkZWZpbmUgQURKMl9NSU5fQUNDRVBURURfUkFOR0UgICAgIDIwICAgIC8qIGFkajJfdmFsMTogZXJyb3IgKi8KKyNkZWZpbmUgQURKMl9BQ0NFUFRFRF9SQU5HRSAgICAgICAgIDI1ICAgIC8qIGFkajJfdmFsMjogd2FybmluZyAqLworCisjZGVmaW5lIEFESjFfTUlOX1ZBTCAgICAgMQorI2RlZmluZSBBREoxX01BWF9WQUwgICAgODAKKworI2RlZmluZSBBREoxX01JTl9BQ0NFUFRFRF9XSU5ET1cgICAgMjAgICAgIC8qIGFkajFfdmFsMTogaWdub3JlICovCisjZGVmaW5lIEFESjFfQUNDRVBURURfV0lORE9XICAgICAgICAyNSAgICAgLyogYWRqMV92YWwyOiB3YXJuaW5nICovCisKKy8vIEREUiBDb25maWdzCisKKy8vREVOQUxJIENPTkZJR1JBVElPTiBGT1IgQk9BUkQgQ09ORklHICMxCisjZGVmaW5lIERFTkFMSV9DVExfMDBfVkFMX0NGRzEgICAweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkcxICAgMHgwMTAwMDEwMDAxMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMSAgIDB4MDIwMDAwMDAwMDAxMDEwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDNfVkFMX0NGRzEgICAweDAyMDIwMjAyMDIwMjAyMDJMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzA0X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMDVfVkFMX0NGRzEgICAweDAwMDMwMTA1MDAwMjAwMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA2X1ZBTF9DRkcxICAgMHgwQTBBMDQwMzAwMDMwNDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMSAgIDB4MDAwMDAwMDUwMDAwMDIwQUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDhfVkFMX0NGRzEgICAweDY0MDAwMDNGM0YxMzAyMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzA5X1ZBTF9DRkcxICAgMHgwMDAwNjQwMDY0MDA2NDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkcxICAgMHgwMDAwMDAyQjAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMTAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTNfVkFMX0NGRzEgICAweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE0X1ZBTF9DRkcxICAgMHgwMDEwMDAxMDAwMTAwMDEwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNV9WQUxfQ0ZHMSAgIDB4MDlGQTAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzEgICAweDAwMDAwMDAwNTlDNjAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE3X1ZBTF9DRkcxICAgMHgwMDAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOF9WQUxfQ0ZHMSAgIDB4MDYwMDAxMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzEgICAweDAwMDAyRTAwQzgwNTBBMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzIwX1ZBTF9DRkcxICAgMHgwMDAwMDEwMTAxRDcwMEM4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMV9WQUxfQ0ZHMSAgIDB4MDIwMjAyMDEwMDAwMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjJfVkFMX0NGRzEgICAweDAwMDAwMjAwMDcwMDAwMDJMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzIzX1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMjRfVkFMX0NGRzEgICAweDAwMDAwMDAyMDA4NTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMSAgIDB4OTQwMDU5Mzc5NDAwNTkzN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjdfVkFMX0NGRzEgICBERU5BTElfQ1RMXzI2X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMjhfVkFMX0NGRzEgICAweDA3QzAwNDAxMDdDMDA0MDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzI5X1ZBTF9DRkcxICAgREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzMwX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDA1TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzEgICAweDBjMDIwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMzX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzEgICAweDAwODc4Nzg3ODcwNTAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zN19WQUxfQ0ZHMSAgIDB4MEE1MjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM5X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDBjOExMCisjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzEgICAweDAwMjQxOTkzMDAyNDE5OTNMTAorI2RlZmluZSBERU5BTElfQ1RMXzQyX1ZBTF9DRkcxICAgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzQzX1ZBTF9DRkcxICAgMHgwMDAwMTkwMDAwMDAxOTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80NF9WQUxfQ0ZHMSAgIERFTkFMSV9DVExfNDNfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF80NV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDZfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ3X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwNTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUwX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTJfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUzX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTVfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNThfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU5X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjFfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYyX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82M19WQUxfQ0ZHMQorLy8gI2RlZmluZSBERU5BTElfQ1RMXzY0X1ZBTF9DRkcxCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjVfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjdfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY4X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDNlODA1MDAwMExMCisKKworLy9ERU5BTEkgQ09ORklHUkFUSU9OIEZPUiBCT0FSRCBDT05GSUcgIzIKKyNkZWZpbmUgREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMgkweDAxMDAwMDAxMDEwMTAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzAxX1ZBTF9DRkcyCTB4MDEwMDAxMDAwMTAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDJfVkFMX0NGRzIJMHgwMjAwMDAwMDAwMDEwMTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wM19WQUxfQ0ZHMgkweDAyMDIwMjAyMDIwMjAyMDJMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzA0X1ZBTF9DRkcyCTB4MDAwMDAxMDEwMDAwMDAwMUxMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcyCTB4MDAwMzAxMDUwMDAxMDAwMUxMCisvLyBEcm9yJ3Mgc2V0dGluZ3MgcnR0XzA9MQorI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcyCTB4MDAwMzAxMDQwMDAyMDAwMUxMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzA2X1ZBTF9DRkcyCTB4MGEwYTA0MDMwMDAzMDMwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMgkweDA4MGEwMzAyMDAwMjAyMDBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMgkweDAwMDAwMDA1MDAwMDAyMGFMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzIJMHgwMDAwMDAwMzAwMDAwMjA3TEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMDhfVkFMX0NGRzIJMHg2NDAwMDAzZjNmMTYwMjBlTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkcyCTB4NjQwMDAwM2YzZjBiMDIwOUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzIJMHgwMDAwNjQwMDY0MDA2NDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xMF9WQUxfQ0ZHMgkweDAxMjAyMDIwMjAxOTFhMThMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMgkweDAwMDAwMDMzMDAwMDAwMDBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzIJMHgwMDAwMDAxYTAwMDAwMDAwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAxMDAwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDkwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTNfVkFMX0NGRzIJMHgwMDEwMDAxMDAwMTAwMDEwTEwJCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzIJMHgwMDEwMDAxMDAwMTAwMDEwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMTVfVkFMX0NGRzIJMHgwYzJkMDAwMDAwMDAwMDAwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkcyCTB4MDYxMjAwMDAwMDAwMDAwMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzE2X1ZBTF9DRkcyCTB4MDAwMDAwMDA2ZDU2MDAwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMgkweDAwMDAwMDAwMzZhNjAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE3X1ZBTF9DRkcyCTB4MDAwMDAxMDAwMDAwMDAwMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkcyCTB4MDYwMDAxMDAwMDAwMDAwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8xOF9WQUxfQ0ZHMgkweDAzMDAwMTAwMDAwMDAwMDBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMgkweDAwMDAzNzAwYzgwNTBiMDBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMTlfVkFMX0NGRzIJMHgwMDAwMWMwMGM4MDMwNjAwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzIJMHgwMDAwMDEwMTM4ODAwMGM4TEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzIwX1ZBTF9DRkcyCTB4MDAwMDAxMDA5YzQwMDBjOExMCisvKiBPcmlnaW5hbCBzZXR0aW5ncywgQUhCL0REUiBzeW5jaHJvbm91cyAqLworI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkcyCTB4MDMwMzAzMDEwMDAwMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjJfVkFMX0NGRzIJMHgwMDAwMDIwMDA2MDAwMDAzTEwKKy8qIEFIQi9ERFIgYXN5bmNocm9ub3VzICovCisvLyNkZWZpbmUgREVOQUxJX0NUTF8yMV9WQUxfQ0ZHMgkweDAwMDAwMDAxMDAwMDAxMDFMTAorLy8jZGVmaW5lIERFTkFMSV9DVExfMjJfVkFMX0NGRzIJMHgwMDAwMDIwMDA2MDAwMDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8yM19WQUxfQ0ZHMgorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMgkweDAwMDAwMDAyMDBhMDAwMDBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMjRfVkFMX0NGRzIJMHgwMDAwMDAwMjAwNTAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI2X1ZBTF9DRkcyCTB4OTM0MDQ5Mjc5MzQwNDkyN0xMCisjZGVmaW5lIERFTkFMSV9DVExfMjdfVkFMX0NGRzIJMHg5MzQwNDkyNzkzNDA0OTI3TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMgkweDA3YzAwNDAxMDdjMDA0MDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzI5X1ZBTF9DRkcyCTB4MDdjMDA0MDEwN2MwMDQwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMzBfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMyX1ZBTF9DRkcyCTB4MGMwMjAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzNfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDA0TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8zNV9WQUxfQ0ZHMgkweDAwMzQzNDM0MzQwNTAwMDBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMzVfVkFMX0NGRzIJMHgwMDc0NzQ3NDc0MDMwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDRMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8zN19WQUxfQ0ZHMgkweDBhNTIwMDAwMDAwNDAwMDBMTAorLy8gRHJvcidzIHNldHRpbmdzIHJ0dD0xMSBiaXRbMV09MQorI2RlZmluZSBERU5BTElfQ1RMXzM3X1ZBTF9DRkcyCTB4MDQ0MjAwMDAwMDA0MDIwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzhfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF80MF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwYzhMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfNDBfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDY0TEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMgkweDAwY2MwMDUwMDBjYzAwNTBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMgkweDAwMTcwMDUwMDAxNzAwNTBMTAorLy8gRHJvcidzIHNldHRpbmdzIGFkajEgPSAweDI4IAorI2RlZmluZSBERU5BTElfQ1RMXzQxX1ZBTF9DRkcyCTB4MDAyODAwOTAwMDI4MDA5MExMCisjZGVmaW5lIERFTkFMSV9DVExfNDJfVkFMX0NGRzIJREVOQUxJX0NUTF80MV9WQUxfQ0ZHMgorI2RlZmluZSBERU5BTElfQ1RMXzQzX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDRfVkFMX0NGRzIJREVOQUxJX0NUTF80M19WQUxfQ0ZHMgorI2RlZmluZSBERU5BTElfQ1RMXzQ1X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDZfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80N19WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ4X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzQ5X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDA1MExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF80OV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMjhMTAorI2RlZmluZSBERU5BTElfQ1RMXzUwX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTFfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81Ml9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUzX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTRfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU2X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTdfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81OF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU5X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjBfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYyX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjNfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82NF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzY1X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjZfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82N19WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY4X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMjAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjlfVkFMX0NGRzIJMHgwMDAwMDAwM2U4MDUwMDAwTEwKKworI2VuZGlmIC8qIF9fTTgzMjRYR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbTgzMjVYRy5oIGIvaW5jbHVkZS9jb25maWdzL204MzI1WEcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQ5NTg4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL204MzI1WEcuaApAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fTTgzMjVYR19ICisjZGVmaW5lIF9fTTgzMjVYR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19NODMyNVhHICAgICAgIDEKKworI2RlZmluZSBDRkdfQ0xLCUNGR19DTEtfNTM0XzE3OF8zMzAKKworI2RlZmluZSBBREoyX01JTl9WQUwgICAgMTA1CisjZGVmaW5lIEFESjJfTUFYX1ZBTCAgICAxNjUKKworI2RlZmluZSBBREoyX01JTl9BQ0NFUFRFRF9SQU5HRSAgICAgMjAgICAgLyogYWRqMl92YWwxOiBlcnJvciAqLworI2RlZmluZSBBREoyX0FDQ0VQVEVEX1JBTkdFICAgICAgICAgMjUgICAgLyogYWRqMl92YWwyOiB3YXJuaW5nICovCisKKyNkZWZpbmUgQURKMV9NSU5fVkFMICAgICAxCisjZGVmaW5lIEFESjFfTUFYX1ZBTCAgICA4MAorCisjZGVmaW5lIEFESjFfTUlOX0FDQ0VQVEVEX1dJTkRPVyAgICAyMCAgICAgLyogYWRqMV92YWwxOiBpZ25vcmUgKi8KKyNkZWZpbmUgQURKMV9BQ0NFUFRFRF9XSU5ET1cgICAgICAgIDI1ICAgICAvKiBhZGoxX3ZhbDI6IHdhcm5pbmcgKi8KKworLy8gRERSIENvbmZpZ3MKKworLy9ERU5BTEkgQ09ORklHUkFUSU9OIEZPUiBCT0FSRCBDT05GSUcgIzEKKyNkZWZpbmUgREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMSAgIDB4MDEwMDAwMDEwMTAxMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDFfVkFMX0NGRzEgICAweDAxMDAwMTAwMDEwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAyX1ZBTF9DRkcxICAgMHgwMjAwMDAwMDAwMDEwMTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wM19WQUxfQ0ZHMSAgIDB4MDIwMjAyMDIwMjAyMDIwMkxMCisjZGVmaW5lIERFTkFMSV9DVExfMDVfVkFMX0NGRzEgICAweDAwMDMwMTA1MDAwMjAwMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA2X1ZBTF9DRkcxICAgMHgwQTBBMDQwMzAwMDMwNDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMSAgIDB4MDAwMDAwMDUwMDAwMDIwQUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDhfVkFMX0NGRzEgICAweDY0MDAwMDNGM0YxMzAyMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzA5X1ZBTF9DRkcxICAgMHgwMDAwNjQwMDY0MDA2NDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMkIwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDEwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEzX1ZBTF9DRkcxICAgMHgwMDEwMDAxMDAwMTAwMDEwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNF9WQUxfQ0ZHMSAgIDB4MDAxMDAwMTAwMDEwMDAxMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTVfVkFMX0NGRzEgICAweDA5RkEwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDU5QzYwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xN19WQUxfQ0ZHMSAgIDB4MDAwMDAxMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMThfVkFMX0NGRzEgICAweDA2MDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE5X1ZBTF9DRkcxICAgMHgwMDAwMkUwMEM4MDUwQTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMSAgIDB4MDAwMDAxMDEwMUQ3MDBDOExMCisjZGVmaW5lIERFTkFMSV9DVExfMjFfVkFMX0NGRzEgICAweDAwMDAwMDAxMDAwMDAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkcxICAgMHgwMDAwMDIwMDA3MDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDIwMDg1MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjVfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI2X1ZBTF9DRkcxICAgMHg5NDAwNTkzNzk0MDA1OTM3TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yN19WQUxfQ0ZHMSAgIERFTkFMSV9DVExfMjZfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMSAgIDB4MDdDMDA0MDEwN0MwMDQwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjlfVkFMX0NGRzEgICBERU5BTElfQ1RMXzI4X1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfMzBfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDVMTAorI2RlZmluZSBERU5BTElfQ1RMXzMxX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMl9WQUxfQ0ZHMSAgIDB4MGMwMjAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzNfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM0X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNV9WQUxfQ0ZHMSAgIDB4MDA4Nzg3ODc4NzA1MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzZfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM3X1ZBTF9DRkcxICAgMHgwQTUyMDAwMDAwMDQwMjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzlfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQwX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMGM4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMSAgIDB4MDAyNDE5OTMwMDI0MTk5M0xMCisjZGVmaW5lIERFTkFMSV9DVExfNDJfVkFMX0NGRzEgICBERU5BTElfQ1RMXzQxX1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNDNfVkFMX0NGRzEgICAweDAwMDAxOTAwMDAwMDE5MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ0X1ZBTF9DRkcxICAgREVOQUxJX0NUTF80M19WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzQ1X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80Nl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDdfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ4X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDA1MExMCisjZGVmaW5lIERFTkFMSV9DVExfNTBfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUxX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81Ml9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTNfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU0X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTZfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU3X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81OF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTlfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYwX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjJfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82N19WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjhfVkFMX0NGRzEgICAweDAwMDAwMDAwMDIwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY5X1ZBTF9DRkcxICAgMHgwMDAwMDAwM2U4MDUwMDAwTEwKKworCisvL0RFTkFMSSBDT05GSUdSQVRJT04gRk9SIEJPQVJEIENPTkZJRyAjMgorI2RlZmluZSBERU5BTElfQ1RMXzAwX1ZBTF9DRkcyCTB4MDEwMDAwMDEwMTAxMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDFfVkFMX0NGRzIJMHgwMTAwMDEwMDAxMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMl9WQUxfQ0ZHMgkweDAyMDAwMDAwMDAwMTAxMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAzX1ZBTF9DRkcyCTB4MDIwMjAyMDIwMjAyMDIwMkxMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMDRfVkFMX0NGRzIJMHgwMDAwMDEwMTAwMDAwMDAxTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMDVfVkFMX0NGRzIJMHgwMDAzMDEwNTAwMDEwMDAxTEwKKy8vIERyb3IncyBzZXR0aW5ncyBydHRfMD0xCisjZGVmaW5lIERFTkFMSV9DVExfMDVfVkFMX0NGRzIJMHgwMDAzMDEwNDAwMDIwMDAxTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzIJMHgwYTBhMDQwMzAwMDMwMzAwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzA2X1ZBTF9DRkcyCTB4MDgwYTAzMDIwMDAyMDIwMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzA3X1ZBTF9DRkcyCTB4MDAwMDAwMDUwMDAwMDIwYUxMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8wN19WQUxfQ0ZHMgkweDAwMDAwMDAzMDAwMDAyMDdMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8wOF9WQUxfQ0ZHMgkweDY0MDAwMDNmM2YxNjAyMGVMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMDhfVkFMX0NGRzIJMHg2NDAwMDAzZjNmMGIwMjA5TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMgkweDAwMDA2NDAwNjQwMDY0MDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzEwX1ZBTF9DRkcyCTB4MDEyMDIwMjAyMDE5MWExOExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzExX1ZBTF9DRkcyCTB4MDAwMDAwMzMwMDAwMDAwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMgkweDAwMDAwMDFhMDAwMDAwMDBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xMl9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDEwMDBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwOTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMgkweDAwMTAwMDEwMDAxMDAwMTBMTAkKKyNkZWZpbmUgREVOQUxJX0NUTF8xNF9WQUxfQ0ZHMgkweDAwMTAwMDEwMDAxMDAwMTBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8xNV9WQUxfQ0ZHMgkweDBjMmQwMDAwMDAwMDAwMDBMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMTVfVkFMX0NGRzIJMHgwNjEyMDAwMDAwMDAwMDAwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMTZfVkFMX0NGRzIJMHgwMDAwMDAwMDZkNTYwMDAwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzE2X1ZBTF9DRkcyCTB4MDAwMDAwMDAzNmE2MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzIJMHgwMDAwMDEwMDAwMDAwMDAwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMThfVkFMX0NGRzIJMHgwNjAwMDEwMDAwMDAwMDAwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkcyCTB4MDMwMDAxMDAwMDAwMDAwMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzE5X1ZBTF9DRkcyCTB4MDAwMDM3MDBjODA1MGIwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMgkweDAwMDAxYzAwYzgwMzA2MDBMTAorLy8gb3JpZ2luYWwgc2V0dGluZ3MKKy8vICNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMgkweDAwMDAwMTAxMzg4MDAwYzhMTAorLy8gRHJvcidzIHNldHRpbmdzCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzIJMHgwMDAwMDEwMDljNDAwMGM4TEwKKy8qIE9yaWdpbmFsIHNldHRpbmdzLCBBSEIvRERSIHN5bmNocm9ub3VzICovCisjZGVmaW5lIERFTkFMSV9DVExfMjFfVkFMX0NGRzIJMHgwMzAzMDMwMTAwMDAwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMgkweDAwMDAwMjAwMDYwMDAwMDNMTAorLyogQUhCL0REUiBhc3luY2hyb25vdXMgKi8KKy8vI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkcyCTB4MDAwMDAwMDEwMDAwMDEwMUxMCisvLyNkZWZpbmUgREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMgkweDAwMDAwMjAwMDYwMDAwMDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzIzX1ZBTF9DRkcyCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzI0X1ZBTF9DRkcyCTB4MDAwMDAwMDIwMGEwMDAwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMgkweDAwMDAwMDAyMDA1MDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI1X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjZfVkFMX0NGRzIJMHg5MzQwNDkyNzkzNDA0OTI3TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yN19WQUxfQ0ZHMgkweDkzNDA0OTI3OTM0MDQ5MjdMTAorI2RlZmluZSBERU5BTElfQ1RMXzI4X1ZBTF9DRkcyCTB4MDdjMDA0MDEwN2MwMDQwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjlfVkFMX0NGRzIJMHgwN2MwMDQwMTA3YzAwNDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzMxX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzJfVkFMX0NGRzIJMHgwYzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zM19WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM0X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzM1X1ZBTF9DRkcyCTB4MDAzNDM0MzQzNDA1MDAwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF8zNV9WQUxfQ0ZHMgkweDAwNzQ3NDc0NzQwMzAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM2X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwNExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzM3X1ZBTF9DRkcyCTB4MGE1MjAwMDAwMDA0MDAwMExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MgcnR0PTExIGJpdFsxXT0xCisjZGVmaW5lIERFTkFMSV9DVExfMzdfVkFMX0NGRzIJMHgwNDQyMDAwMDAwMDQwMjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM5X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzQwX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDBjOExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MKKyNkZWZpbmUgREVOQUxJX0NUTF80MF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwNjRMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzQxX1ZBTF9DRkcyCTB4MDBjYzAwNTAwMGNjMDA1MExMCisvLyBvcmlnaW5hbCBzZXR0aW5ncworLy8gI2RlZmluZSBERU5BTElfQ1RMXzQxX1ZBTF9DRkcyCTB4MDAxNzAwNTAwMDE3MDA1MExMCisvLyBEcm9yJ3Mgc2V0dGluZ3MgYWRqMSA9IDB4MjggCisjZGVmaW5lIERFTkFMSV9DVExfNDFfVkFMX0NGRzIJMHgwMDI4MDA5MDAwMjgwMDkwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80Ml9WQUxfQ0ZHMglERU5BTElfQ1RMXzQxX1ZBTF9DRkcyCisjZGVmaW5lIERFTkFMSV9DVExfNDNfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80NF9WQUxfQ0ZHMglERU5BTElfQ1RMXzQzX1ZBTF9DRkcyCisjZGVmaW5lIERFTkFMSV9DVExfNDVfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80Nl9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ3X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDhfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vIG9yaWdpbmFsIHNldHRpbmdzCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNDlfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDUwTEwKKy8vIERyb3IncyBzZXR0aW5ncworI2RlZmluZSBERU5BTElfQ1RMXzQ5X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAyOExMCisjZGVmaW5lIERFTkFMSV9DVExfNTBfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MV9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUyX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTNfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU1X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTZfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81N19WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU4X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTlfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MF9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYxX1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjJfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82M19WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzY0X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjVfVkFMX0NGRzIJMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMgkweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY3X1ZBTF9DRkcyCTB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjhfVkFMX0NGRzIJMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHMgkweDAwMDAwMDAzZTgwNTAwMDBMTAorCisjZW5kaWYgLyogX19NODMyNVhHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9tODMyNlhHLmggYi9pbmNsdWRlL2NvbmZpZ3MvbTgzMjZYRy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNjgzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbTgzMjZYRy5oCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19NODMyNlhHX0gKKyNkZWZpbmUgX19NODMyNlhHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX004MzI2WEcgICAgICAgMQorCisjZGVmaW5lIENGR19DTEsJQ0ZHX0NMS182NTBfMTg3XzM3NQorLy8jZGVmaW5lIENGR19DTEsgQ0ZHX0NMS182NTBfMjAwXzIwMAorCisjZGVmaW5lIEFESjJfTUlOX1ZBTCAgICAgOTAKKyNkZWZpbmUgQURKMl9NQVhfVkFMICAgIDE1MAorCisjZGVmaW5lIEFESjJfTUlOX0FDQ0VQVEVEX1JBTkdFICAgICAyMCAgICAvKiBhZGoyX3ZhbDE6IGVycm9yICovCisjZGVmaW5lIEFESjJfQUNDRVBURURfUkFOR0UgICAgICAgICAyNSAgICAvKiBhZGoyX3ZhbDI6IHdhcm5pbmcgKi8KKworI2RlZmluZSBBREoxX01JTl9WQUwgICAgIDEKKyNkZWZpbmUgQURKMV9NQVhfVkFMICAgIDgwCisKKyNkZWZpbmUgQURKMV9NSU5fQUNDRVBURURfV0lORE9XICAgIDE4ICAgICAvKiBhZGoxX3ZhbDE6IGlnbm9yZSAqLworI2RlZmluZSBBREoxX0FDQ0VQVEVEX1dJTkRPVyAgICAgICAgMjMgICAgIC8qIGFkajFfdmFsMjogd2FybmluZyAqLworCisvLyBERFIgQ29uZmlncworCisvL0RFTkFMSSBDT05GSUdSQVRJT04gRk9SIEJPQVJEIENPTkZJRyAjMQorI2RlZmluZSBERU5BTElfQ1RMXzAwX1ZBTF9DRkcxICAgMHgwMTAwMDAwMTAxMDEwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wMV9WQUxfQ0ZHMSAgIDB4MDEwMDAxMDAwMTAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDJfVkFMX0NGRzEgICAweDAyMDAwMDAwMDAwMTAxMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAzX1ZBTF9DRkcxICAgMHgwMjAyMDIwMjAyMDIwMjAyTEwKKworI2RlZmluZSBERU5BTElfQ1RMXzA1X1ZBTF9DRkcxICAgMHgwMDAzMDEwNTAwMDIwMDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wNl9WQUxfQ0ZHMSAgIDB4MEEwQTA0MDMwMDAzMDQwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMDdfVkFMX0NGRzEgICAweDAwMDAwMDA1MDAwMDAyMEFMTAorI2RlZmluZSBERU5BTElfQ1RMXzA4X1ZBTF9DRkcxICAgMHg2NDAwMDAzRjNGMTUwMjEyTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOV9WQUxfQ0ZHMSAgIDB4MDAwMDY0MDA2NDAwNjQwMExMCisKKyNkZWZpbmUgREVOQUxJX0NUTF8xMV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMzEwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTJfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDEyMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEzX1ZBTF9DRkcxICAgMHgwMDEwMDAxMDAwMTAwMDEwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNF9WQUxfQ0ZHMSAgIDB4MDAxMDAwMTAwMDEwMDAxMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTVfVkFMX0NGRzEgICAweDBCNjAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDY2NTMwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xN19WQUxfQ0ZHMSAgIDB4MDAwMDAxMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMThfVkFMX0NGRzEgICAweDA2MDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE5X1ZBTF9DRkcxICAgMHgwMDAwMzQwMEM4MDUwQjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMF9WQUxfQ0ZHMSAgIDB4MDAwMDAxMDEyNUI0MDBDOExMCisjZGVmaW5lIERFTkFMSV9DVExfMjFfVkFMX0NGRzEgICAweDAyMDIwMjAxMDAwMDAxMDFMTAorI2RlZmluZSBERU5BTElfQ1RMXzIyX1ZBTF9DRkcxICAgMHgwMDAwMDIwMDA3MDAwMDAyTEwKKworI2RlZmluZSBERU5BTElfQ1RMXzI0X1ZBTF9DRkcxICAgMHgwMDAwMDAwMjAwOTcwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yNV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjZfVkFMX0NGRzEgICAweDk0MDA1OTM3OTQwMDU5MzdMTAorI2RlZmluZSBERU5BTElfQ1RMXzI3X1ZBTF9DRkcxICAgREVOQUxJX0NUTF8yNl9WQUxfQ0ZHMQorI2RlZmluZSBERU5BTElfQ1RMXzI4X1ZBTF9DRkcxICAgMHgwN0MwMDQwMTA3QzAwNDAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yOV9WQUxfQ0ZHMSAgIERFTkFMSV9DVExfMjhfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF8zMF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwNUxMCisjZGVmaW5lIERFTkFMSV9DVExfMzFfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzMyX1ZBTF9DRkcxICAgMHgwYzAyMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zM19WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwNExMCisjZGVmaW5lIERFTkFMSV9DVExfMzRfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM1X1ZBTF9DRkcxICAgMHgwMDc4Nzg3ODc4MDUwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwNExMCisjZGVmaW5lIERFTkFMSV9DVExfMzdfVkFMX0NGRzEgICAweDBBNTIwMDAwMDAwNDAyMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzM4X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDBfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwYzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzQxX1ZBTF9DRkcxICAgMHgwMDIwMTM4MTAwMjAxMzgxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80Ml9WQUxfQ0ZHMSAgIERFTkFMSV9DVExfNDFfVkFMX0NGRzEKKyNkZWZpbmUgREVOQUxJX0NUTF80M19WQUxfQ0ZHMSAgIDB4MDAwMDEzMDAwMDAwMTMwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDRfVkFMX0NGRzEgICBERU5BTElfQ1RMXzQzX1ZBTF9DRkcxCisjZGVmaW5lIERFTkFMSV9DVExfNDVfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ2X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80N19WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDhfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ5X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDUwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81MF9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTFfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUyX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81M19WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTRfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU1X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81Nl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTdfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU4X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81OV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjBfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYxX1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82Ml9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisKKyNkZWZpbmUgREVOQUxJX0NUTF82Nl9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjdfVkFMX0NGRzEgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY4X1ZBTF9DRkcxICAgMHgwMDAwMDAwMDAyMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82OV9WQUxfQ0ZHMSAgIDB4MDAwMDAwMDNlODA1MDAwMExMCisKKworLy9ERU5BTEkgQ09ORklHUkFUSU9OIEZPUiBCT0FSRCBDT05GSUcgIzIKKyNkZWZpbmUgREVOQUxJX0NUTF8wMF9WQUxfQ0ZHMiAgIDB4MDEwMDAwMDEwMTAxMDEwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDFfVkFMX0NGRzIgICAweDAxMDAwMTAwMDEwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzAyX1ZBTF9DRkcyICAgMHgwMjAwMDAwMDAwMDEwMTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wM19WQUxfQ0ZHMiAgIDB4MDIwMjAyMDIwMjAyMDIwMkxMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMDRfVkFMX0NGRzIKKyNkZWZpbmUgREVOQUxJX0NUTF8wNV9WQUxfQ0ZHMiAgIDB4MDAwMzAxMDQwMDAyMDAwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDZfVkFMX0NGRzIgICAweDA4MEEwMzAyMDAwMjAzMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzA3X1ZBTF9DRkcyICAgMHgwMDAwMDAwMzAwMDAwMjA3TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8wOF9WQUxfQ0ZHMiAgIDB4NjQwMDAwM0YzRjBDMDIwQUxMCisjZGVmaW5lIERFTkFMSV9DVExfMDlfVkFMX0NGRzIgICAweDAwMDA2NDAwNjQwMDY0MDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzEwX1ZBTF9DRkcyCisjZGVmaW5lIERFTkFMSV9DVExfMTFfVkFMX0NGRzIgICAweDAwMDAwMDFBMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzEyX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwQTAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xM19WQUxfQ0ZHMiAgIDB4MDAxMDAwMTAwMDEwMDAxMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTRfVkFMX0NGRzIgICAweDAwMTAwMDEwMDAxMDAwMTBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE1X1ZBTF9DRkcyICAgMHgwNjA0MDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xNl9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAzNjM4MDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMTdfVkFMX0NGRzIgICAweDAwMDAwMTAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzE4X1ZBTF9DRkcyICAgMHgwNDAwMDEwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8xOV9WQUxfQ0ZHMiAgIDB4MDAwMDFDMDBDODAzMDYwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjBfVkFMX0NGRzIgICAweDAwMDAwMTAwOUM0MDAwQzhMTAorI2RlZmluZSBERU5BTElfQ1RMXzIxX1ZBTF9DRkcyICAgMHgwMzAzMDMwMTAwMDAwMTAxTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yMl9WQUxfQ0ZHMiAgIDB4MDAwMDAyMDAwNzAwMDAwM0xMCisvLyAjZGVmaW5lIERFTkFMSV9DVExfMjNfVkFMX0NGRzIKKyNkZWZpbmUgREVOQUxJX0NUTF8yNF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDIwMDUxMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMjVfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzI2X1ZBTF9DRkcyICAgMHg5NDQwNDkyNzk0NDA0OTI3TEwKKyNkZWZpbmUgREVOQUxJX0NUTF8yN19WQUxfQ0ZHMiAgIERFTkFMSV9DVExfMjZfVkFMX0NGRzIKKyNkZWZpbmUgREVOQUxJX0NUTF8yOF9WQUxfQ0ZHMiAgIDB4MDdDMDA0MDEwN0MwMDQwMUxMCisjZGVmaW5lIERFTkFMSV9DVExfMjlfVkFMX0NGRzIgICBERU5BTElfQ1RMXzI4X1ZBTF9DRkcyCisjZGVmaW5lIERFTkFMSV9DVExfMzBfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDVMTAorI2RlZmluZSBERU5BTElfQ1RMXzMxX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zMl9WQUxfQ0ZHMiAgIDB4MGMwMjAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzNfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM0X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zNV9WQUxfQ0ZHMiAgIDB4MDA0NjQ2NDY0NjAzMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzZfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDRMTAorI2RlZmluZSBERU5BTElfQ1RMXzM3X1ZBTF9DRkcyICAgMHgwNjQyMDAwMDAwMDQwMjAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF8zOF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfMzlfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQwX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMGM4TEwKKyNkZWZpbmUgREVOQUxJX0NUTF80MV9WQUxfQ0ZHMiAgIDB4MDAzQjM3RUYwMDNCMzdFRkxMCisjZGVmaW5lIERFTkFMSV9DVExfNDJfVkFMX0NGRzIgICBERU5BTElfQ1RMXzQxX1ZBTF9DRkcyCisjZGVmaW5lIERFTkFMSV9DVExfNDNfVkFMX0NGRzIgICAweDAwMDAzNzAwMDAwMDM3MDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ0X1ZBTF9DRkcyICAgREVOQUxJX0NUTF80M19WQUxfQ0ZHMgorI2RlZmluZSBERU5BTElfQ1RMXzQ1X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80Nl9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNDdfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzQ4X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF80OV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDA1MExMCisjZGVmaW5lIERFTkFMSV9DVExfNTBfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzUxX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81Ml9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTNfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU0X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81NV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTZfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzU3X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF81OF9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNTlfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzYwX1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82MV9WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjJfVkFMX0NGRzIgICAweDAwMDAwMDAwMDAwMDAwMDBMTAorLy8gI2RlZmluZSBERU5BTElfQ1RMXzYzX1ZBTF9DRkcyCisvLyAjZGVmaW5lIERFTkFMSV9DVExfNjRfVkFMX0NGRzIKKy8vICNkZWZpbmUgREVOQUxJX0NUTF82NV9WQUxfQ0ZHMgorI2RlZmluZSBERU5BTElfQ1RMXzY2X1ZBTF9DRkcyICAgMHgwMDAwMDAwMDAwMDAwMDAwTEwKKyNkZWZpbmUgREVOQUxJX0NUTF82N19WQUxfQ0ZHMiAgIDB4MDAwMDAwMDAwMDAwMDAwMExMCisjZGVmaW5lIERFTkFMSV9DVExfNjhfVkFMX0NGRzIgICAweDAwMDAwMDAwMDIwMDAwMDBMTAorI2RlZmluZSBERU5BTElfQ1RMXzY5X1ZBTF9DRkcyICAgMHgwMDAwMDAwM2U4MDUwMDAwTEwKKworI2VuZGlmIC8qIF9fTTgzMjZYR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbWFsaW5kaS5oIGIvaW5jbHVkZS9jb25maWdzL21hbGluZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTNmNjI1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL21hbGluZGkuaApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzgwMAkJCS8qIEl0J3MgYSBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX01BTElOREkJCQkJLyogb24gYSBNYWxpbmRpIEJvYXJkICovCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkJIiBNaW5kc3BlZWQgMC4wNS4wY3ZzIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJMHgwMTAwMDEwMAorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJCUlSQU1fQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCQkweDEwMDAKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworCisvKgorICogU0RSQU0gY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCQkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCQkweDAwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJCTB4MDgwMDAwMDAJLyogMTI4IE1pQiAqLworCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAKKyN1bmRlZiBDT05GSUdfVUFSVDEKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworCisvKgorICogRU1BQyBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fRU1BQworI2RlZmluZSBDT05GSUdfRU1BQzAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX01JSV9NT0RFCQlFTUFDX1JNSUlfU01JSV9NT0RFCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlDVFJMRElTCQkxCisKKyN1bmRlZiBDT05GSUdfRU1BQzEKKyNkZWZpbmUgQ09ORklHX0VNQUMxX01JSV9NT0RFCQlFTUFDX1JNSUlfU01JSV9NT0RFCisjZGVmaW5lIENPTkZJR19FTUFDMV9QSFlDVFJMRElTCQkxCisKKworLyoKKyAqIE1ESU8gZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX01JSQorI2RlZmluZSBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04KKyNkZWZpbmUgQ09ORklHX0VNQUMwX01EQ0xPQ0sJCTI1MDAwMDAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX1BIWV9BRERSCQkweDAKKworI2RlZmluZSBDT05GSUdfRU1BQzFfTURDTE9DSwkJMjUwMDAwMAorI2RlZmluZSBDT05GSUdfRU1BQzFfUEhZX0FERFIJCTB4MAorCisvKgorICogU1BJIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19TUEkJCQkJLyogZGVmaW5lIHRvIGVuYWJsZSBTUEkgdXNpbmcgKi8KKworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1BPTEFSSVRZCQkxCQkvKiBJbmFjdGl2ZSBzdGF0ZSBvZiBzZXJpYWwgY2xvY2sgaXMgaGlnaCAqLworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1BIQVNFCQkxCQkvKiBTZXJpYWwgQ2xvY2sgdG9nZ2xlcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGRhdGEgYml0ICovCisjZGVmaW5lIENGR19TUElfRlJBTUVTSVpFIAkJOAkJLyogZGVmaW5lIHRoZSBTUEkgZnJhbWUgc2l6ZSBpbiBiaXRzLiA4LWJpdCBzdXBwb3J0ZWQgb25seSAqLworCisjZGVmaW5lIENGR19TUElfQ0xPQ0tfU1BFRUQJCTQwMDAwMDAJCS8qIHRoZSBTUEkgc3BlZWQgaW4gSHogKi8KKworCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCBcCisJCQkJCSBDRkdfQ01EX01JSSB8IENGR19DTURfRUxGIHwgQ0ZHX0NNRF9OQU5EKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by04MDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwlcCisJInRmdHBkaXI9LlwwIgkJCVwKKwkibmZzZGlyPS9ob21lL25mcy9mc21pbmltYWwtZGViaWFuX3NhcmdlLTAuMTNcMCIJCQlcCisJIm1zcG5hbWU9ZmlybXdhcmUuYXhmXDAiCVwKKwkiY3NwbmFtZT16SW1hZ2VcMCIJCVwKKwkiZnNuYW1lPWZzaW1hZ2UuamZmczJcMCIJXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIglcCisJInVwZGF0ZWJvb3Q9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vdS1ib290LmJpbjsgZXJhc2UgMTowLTI7IGNwLmIgJHtmaWxlYWRkcn0gMTEwMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVib290Tk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDI6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGVyYXNlIDI6NC0zMTsgY3AuYiAke2ZpbGVhZGRyfSA4MDA0MDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZW1zcE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBlcmFzZSAyOjMyLTYzOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMjAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBuYW5kIGVyYXNlIDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IG5hbmQgZXJhc2UgMjAwMDAwIDIwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSAyMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVmc05BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtmc25hbWV9OyBuYW5kIGVyYXNlIDQwMDAwMCA3YzAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDQwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJImJvb3R0dD1ydW4gc2V0Ym9vdGFyZ3M7IHRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGxvYWRtc3AgJHtmaWxlYWRkcn0gJHtmaWxlc2l6ZX07IHRmdHAgMjAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGJvb3Rjb21jZXJ0byAke2ZpbGVhZGRyfVwwIglcCisJImJvb3Rvbz1ydW4gc2V0Ym9vdGFyZ3M7IGxvYWRtc3AgODAyMDAwMDAgMjAwMDAwOyBjcC5iIDgwMDQwMDAwIDIwMDAwMDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJImJvb3RhYT1ydW4gc2V0Ym9vdGFyZ3M7IG5hbmQgcmVhZC5qZmZzMiAxMDAwMDAwIDIwMDAwMCAyMDAwMDA7IGxvYWRtc3AgMTAwMDAwMCAyMDAwMDA7IG5hbmQgcmVhZC5qZmZzMiAyMDAwMDAwIDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJIm10ZGJvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9tdGRibG9jazIgcncgcm9vdGZzdHlwZT1qZmZzMlwwIglcCisJIm5mc2Jvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0ke3NlcnZlcmlwfToke25mc2Rpcn1cMCIJXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9OjpldGgwXDAiCVwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiCVwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIglcCisJInNldGJvb3RhcmdzPXJ1biBtdGRib290IGFkZHR0eSBhZGRpcCBhZGRtdGRcMCIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0VUSDFBRERSICAgICAgICAgMDA6YWE6YmI6Y2M6ZGQ6ZmYKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMworI2RlZmluZSBDT05GSUdfR0FURVdBWUlQCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJCTMKKworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qIEluY2x1ZGUgYmFzaWMgTU1VIHN1cHBvcnQgaWYgRUxGIHN1cHBvcnQgaXMgaW5jbHVkZWQKKyAqCisgKiBOT1RFOiBrZWVwIHRoaXMgc3R1ZmYgYWZ0ZXIgImNtZF9jb25mZGVmcy5oIiBpbmNsdWRlCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FTEYpCisjZGVmaW5lIFVTRV85MjBUX01NVQorI2VuZGlmCisKKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkJMHgxMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCQkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgxMDAwMDAwCS8qIDE2IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwMTAwMDAwCS8qIDEgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gyCQkJMHg4MDAwMDAwMAkvKiBGbGFzaCBCYW5rICMyICovCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1NCT09UX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDEwMDAwCS8qIDY0IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMgkvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7UEhZU19GTEFTSDEsIFBIWVNfRkxBU0gyfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIAlQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAJKDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgNjQgS2lCIGZvciBNb25pdG9yICovCisKKyNlbmRpZgorCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCQkoUEhZU19GTEFTSDEgKyAzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDMgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECQkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQMV9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwkxCisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMjIKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JMjAKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JMjEKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJuYW5kMD1jb21jZXJ0b19uYW5kMCxub3IwPWNvbWNlcnRvX25vcjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvX25hbmQwOjJtKGNzcCksMm0obXNwKSwxMjRtKGZzKTtjb21jZXJ0b19ub3IwOjE5MmsoYm9vdGxvYWRlciksNjRrKGJvb3Rsb2FkZXIgZW52KSwxNzkyayhjc3ApLDJtKG1zcCkiCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTEyMDAwMDAwCS8qIDEyIE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX0haX0NMT0NLCQkxMzMwMDAwMDAJLyogMTMzIE1IeiAqLworCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL21hdGlzc2UuaCBiL2luY2x1ZGUvY29uZmlncy9tYXRpc3NlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNhZWNiYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9tYXRpc3NlLmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkJMQkvKiBUaGlzIGlzIGFuIGFybTExMzZqLXMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzkwMAkJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX1NVUEVSTU9NQkFTQQkJMQkvKiBvbiBhbiBTdXBlcm1vbWJhc2EgQm9hcmQgICAgICovCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworLy8jaWZkZWYgQ09ORklHX0RSSVZFUl9FVEhFUgorI2RlZmluZSBDT05GSUdfRU1BQzAJCQkxCisvLyNlbmRpZgorCisvKgorICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkJMHgwMDAwMDAwMAorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCQkweDAyMDAwMDAwCS8qIDMyIE1pQiAqLworCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkweDAwODAwMTAwCisKKyNkZWZpbmUgUEhZU19GTEFTSF8xCQkJMHg4MDAwMDAwMAkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0hfU0laRQkJCTB4MDA4MDAwMDAJLyogOCBNaUIgKi8KKyNkZWZpbmUgUEhZU19GTEFTSF9CQU5LX1NJWkUgICAgCTB4MDA4MDAwMDAJLyogOCBNaUIgQmFua3MgKi8KKyNkZWZpbmUgUEhZU19GTEFTSF9TRUNUX1NJWkUgICAgCTB4MDAwMTAwMDAJLyogNjQgS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBQSFlTX0VFUFJPTV8xCQkJMHgxMTAwMDAwMAkvKiBFRVBST00gQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0VFUFJPTV9TSVpFCQkweDAwODAwMDAJLyogNTEyIEtpQiAqLworI2RlZmluZSBQSFlTX0VFUFJPTV9CQU5LX1NJWkUJCTB4MDA4MDAwMAkvKiA1MTIgS2lCIEJhbmtzICovCisjZGVmaW5lIFBIWVNfRUVQUk9NX1NFQ1RfU0laRQkJMHgwMDAxMDAwMAkvKiA2NCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIFBIWVNfTkFORF8xCQkJMHgxMTQwMDAwMAorI2RlZmluZSBQSFlTX05BTkRfU0laRQkJCTB4ODAwMDAwMDAKKworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICAJUEhZU19GTEFTSF8xCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgIAkoUEhZU19GTEFTSF9TRUNUX1NJWkUpCS8qIFJlc2VydmUgNjQgS2lCIGZvciBNb25pdG9yICovCisKKyNpZiBDRkdfTU9OSVRPUl9CQVNFIDwgQ0ZHX0ZMQVNIX0JBU0UKKyNkZWZpbmUgQ0ZHX1JBTVNUQVJUCisjZW5kaWYKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCisjdW5kZWYgQ09ORklHX1VBUlQxCisKKyN1bmRlZiBDT05GSUdfSFdGTE9XCQkvKiBkb24ndCBpbmNsdWRlIFJUUy9DVFMgZmxvdyBjb250cm9sIHN1cHBvcnQgICAqLworCisjdW5kZWYgQ09ORklHX01PREVNX1NVUFBPUlQJLyogZGlzYWJsZSBtb2RlbSBpbml0aWFsaXphdGlvbiBzdHVmZiAqLworCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJCTMKKy8qICNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJCTEgKi8KKworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCShDT05GSUdfQ01EX0RGTCB8Q0ZHX0NNRF9QSU5HKQorCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisjZGVmaW5lIENPTkZJR19CQVVEUkFURSAgICAgICAgIDExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDAgfQorCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by05MDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlQSFlTX1NEUkFNCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgUEhZU19TRFJBTV9TSVpFKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9FVEhFUgorI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQkyMAorI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fVVNFX01JSQkJMAorCisvLyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSSAgICAgIDEKKworLy8jZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50ICAgICAgICAgICAqLworLy8jZGVmaW5lIENPTkZJR19QSFlfQUREUgkwCS8qIFBIWSBhZGRyZXNzICAgICAgICAgICAgICAgICAgKi8KKy8vI2RlZmluZSBDT05GSUdfUEhZMV9BRERSCTEJLyogUEhZIGFkZHJlc3MgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCTEKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVCAgICAgIAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgkJMQorCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEJLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVCAJCXsgUEhZU19FRVBST01fMX0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICQkxCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisKKworI2lmIDAKKyNkZWZpbmUgQ0ZHX0VOVl9JTl9PV05fU0VDVE9SCTEKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19FRVBST01fMSArIDIgKiBQSFlTX0ZMQVNIX1NFQ1RfU0laRSkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQlQSFlTX0VFUFJPTV9TRUNUX1NJWkUKKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19FRVBST01fU0VDVF9TSVpFCisKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSK0NGR19FTlZfU0laRSkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFX1JFRFVORAlQSFlTX0VFUFJPTV9TRUNUX1NJWkUKKyNlbHNlCisjZGVmaW5lIENGR19FTlZfSU5fT1dOX1NFQ1RPUgkxCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRUVQUk9NXzEgKyBQSFlTX0VFUFJPTV9TSVpFIC0gMiAqIFBIWVNfRkxBU0hfU0VDVF9TSVpFKQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCSgyICogUEhZU19GTEFTSF9TRUNUX1NJWkUpCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0hfU0VDVF9TSVpFCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50ICovCisKKyNlbmRpZgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCTB4NjAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlQSFlTX05BTkRfMQorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorI2RlZmluZSBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFCTEKKy8vI2RlZmluZSBDT05GSUdfTVREX0RFQlVHCisvLyNkZWZpbmUgQ09ORklHX01URF9ERUJVR19WRVJCT1NFCTMKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JMQorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTMKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JNAorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwk1CisKKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1jb21jZXJ0b2VlcHJvbS4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b2VlcHJvbS4wOjEyOGsodS1ib290KSw2NGsoZW52KSw2NGsocmVudikiCisKKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvOTAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCisJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZiBcMCIJCQkJCVwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiXAorCSJib290X25mcz1uZnMgNjAwMDAwICR7cm9vdHBhdGh9L2Jvb3QvJHtrZXJuZWxmaWxlfTtydW4gbmZzYXJncyBhZGRldGggYWRkaXAgYWRkdHR5OyIgICAgIFwKKwkgICAgICAgICJib290bSA2MDAwMDBcMCIJCQkJCQlcCisJInJvb3RwYXRoPS9ob21lL3VzZXIvZGV2ZWwvQ1NQX3NvZnR3YXJlL2Rpc3RyaWJ1dGlvbi9taW5kc3BlZWQtYnVpbGRyb290L2J1aWxkX2FybV9ub2ZwdS9yb290XDAiIFwKKwkia2VybmVsZmlsZT11SW1hZ2VcMCIgXAorCSJ1cGRhdGVib290PXByb3RlY3Qgb2ZmIDE6MC0xXDtlcmFzZSAxOjAtMTt0ZnRwIDEwMDAwMDAgdS1ib290LmJpbjtjcC5iIDEwMDAwMDAgMTEwMDAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSJ1cGRhdGVlbnY9cHJvdGVjdCBvZmYgMjoyO3NhdmVlbnZcMCIgXAorCSIiCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBCb2FyZCBzcGVjaWZpYyBleHRlbnNpb24gZm9yIGJkX2luZm8KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBlbWJlZGRlZCBpbiB0aGUgZ2xvYmFsIGJkX2luZm8gKGJkX3QpIHN0cnVjdHVyZQorICogYW5kIGNhbiBiZSB1c2VkIGJ5IHRoZSBib2FyZCBzcGVjaWZpYyBjb2RlIChlZyBib2FyZC8uLi4pCisgKi8KKworc3RydWN0IGJkX2luZm9fZXh0IHsKKwkvKiBoZWxwZXIgdmFyaWFibGUgZm9yIGJvYXJkIGVudmlyb25tZW50IGhhbmRsaW5nCisJICoKKwkgKiBlbnZfY3JjX3ZhbGlkID09IDAgICAgPT4gICB1bmluaXRpYWxpc2VkCisJICogZW52X2NyY192YWxpZCAgPiAwICAgID0+ICAgZW52aXJvbm1lbnQgY3JjIGluIGZsYXNoIGlzIHZhbGlkCisJICogZW52X2NyY192YWxpZCAgPCAwICAgID0+ICAgZW52aXJvbm1lbnQgY3JjIGluIGZsYXNoIGlzIGludmFsaWQKKwkgKi8KKwlpbnQgZW52X2NyY192YWxpZDsKK307CisKKyNlbmRpZgorCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkxMDAwMDAwMAkvKiAxMCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisjZGVmaW5lIENGR19IWl9DTE9DSwkJMTMzMDAwMDAwCS8qIDEzMyBNSHogKi8KKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMioxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL21lZ2Ftb21iYXNhNTE1LmggYi9pbmNsdWRlL2NvbmZpZ3MvbWVnYW1vbWJhc2E1MTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQwZjgxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL21lZ2Ftb21iYXNhNTE1LmgKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPCisjZGVmaW5lIENPTkZJR19DT01DRVJUT181MTUJCQkvKiBJdCdzIGEgU29DICovCisjZGVmaW5lIENPTkZJR19NRUdBTU9NQkFTQTUxNQkJCS8qIG9uIGEgTWVnYW1vbWJhc2EtNTE1IEJvYXJkICovCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkJIiBNaW5kc3BlZWQgMC4wNS4wY3ZzIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJMHgwMTAwMDEwMAorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJCUlSQU1fQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCQkweDEwMDAKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworCisvKgorICogU0RSQU0gY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCQkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCQkweDAwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJCTB4MDgwMDAwMDAJLyogMTI4IE1pQiAqLworCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAKKyN1bmRlZiBDT05GSUdfVUFSVDEKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworCisvKgorICogRU1BQyBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fRU1BQworI2RlZmluZSBDT05GSUdfRU1BQzAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX01JSV9NT0RFCQlFTUFDX1JNSUlfU01JSV9NT0RFCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlDVFJMRElTCQkxCisKKy8qCisgKiBNRElPIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19NSUkKKyNkZWZpbmUgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOCisjZGVmaW5lIENPTkZJR19FTUFDMF9NRENMT0NLCQkyNTAwMDAwCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlfQUREUgkJMHgwCisKKy8qCisgKiBTUEkgZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX1NQSQkJCQkvKiBkZWZpbmUgdG8gZW5hYmxlIFNQSSB1c2luZyAqLworCisjZGVmaW5lIENGR19TUElfQ0xPQ0tfUE9MQVJJVFkJCTEJCS8qIEluYWN0aXZlIHN0YXRlIG9mIHNlcmlhbCBjbG9jayBpcyBoaWdoICovCisjZGVmaW5lIENGR19TUElfQ0xPQ0tfUEhBU0UJCTEJCS8qIFNlcmlhbCBDbG9jayB0b2dnbGVzIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgZGF0YSBiaXQgKi8KKyNkZWZpbmUgQ0ZHX1NQSV9GUkFNRVNJWkUgCQk4CQkvKiBkZWZpbmUgdGhlIFNQSSBmcmFtZSBzaXplIGluIGJpdHMuIDgtYml0IHN1cHBvcnRlZCBvbmx5ICovCisKKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19TUEVFRAkJNDAwMDAwMAkJLyogdGhlIFNQSSBzcGVlZCBpbiBIeiAqLworCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkJKENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0VOViB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9SVU4gfCBDRkdfQ01EX05FVCB8IFwKKwkJCQkJIENGR19DTURfTUlJIHwgQ0ZHX0NNRF9FTEYgfCBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX1NQSSkKKworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tNTE1ID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJXAorCSJ0ZnRwZGlyPS5cMCIJCQlcCisJIm5mc2Rpcj0vaG9tZS9uZnMvZnNtaW5pbWFsLWRlYmlhbl9zYXJnZS0wLjEzXDAiCQkJXAorCSJtc3BuYW1lPWZpcm13YXJlLmF4ZlwwIglcCisJImNzcG5hbWU9ekltYWdlXDAiCQlcCisJImZzbmFtZT1mc2ltYWdlLmpmZnMyXDAiCVwKKwkibXRkcGFydHM9IiBNVERQQVJUU19ERUZBVUxUICJcMCIJXAorCSJ1cGRhdGVib290PXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDE6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDExMDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlYm9vdE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS91LWJvb3QuYmluOyBlcmFzZSAyOjAtMjsgY3AuYiAke2ZpbGVhZGRyfSA4MDAwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWNzcE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBlcmFzZSAyOjQtMzE7IGNwLmIgJHtmaWxlYWRkcn0gODAwNDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOT1I9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgZXJhc2UgMjozMi02MzsgY3AuYiAke2ZpbGVhZGRyfSA4MDIwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWZzTk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7ZnNuYW1lfTsgZXJhc2UgMjo2NC0xMjc7IGNwLmIgJHtmaWxlYWRkcn0gODA0MDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVjc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IG5hbmQgZXJhc2UgMCAyMDAwMDA7IG5hbmQgd3JpdGUuamZmczIgJHtmaWxlYWRkcn0gMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZW1zcE5BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgbmFuZCBlcmFzZSAyMDAwMDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDIwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWZzTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2ZzbmFtZX07IG5hbmQgZXJhc2UgNDAwMDAwIGZjMDAwMDA7IG5hbmQgd3JpdGUuamZmczIgJHtmaWxlYWRkcn0gNDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkiYm9vdHR0PXJ1biBzZXRib290YXJnczsgdGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgbG9hZG1zcCAke2ZpbGVhZGRyfSAke2ZpbGVzaXplfTsgdGZ0cCAyMDAwMDAwICR7dGZ0cGRpcn0vJHtjc3BuYW1lfTsgYm9vdGNvbWNlcnRvICR7ZmlsZWFkZHJ9XDAiCVwKKwkiYm9vdG9vPXJ1biBzZXRib290YXJnczsgbG9hZG1zcCA4MDIwMDAwMCAyMDAwMDA7IGNwLmIgODAwNDAwMDAgMjAwMDAwMCAyMDAwMDA7IGJvb3Rjb21jZXJ0byAyMDAwMDAwXDAiCVwKKwkiYm9vdGFhPXJ1biBzZXRib290YXJnczsgbmFuZCByZWFkLmpmZnMyIDEwMDAwMDAgMjAwMDAwIDIwMDAwMDsgbG9hZG1zcCAxMDAwMDAwIDIwMDAwMDsgbmFuZCByZWFkLmpmZnMyIDIwMDAwMDAgMCAyMDAwMDA7IGJvb3Rjb21jZXJ0byAyMDAwMDAwXDAiCVwKKwkibXRkYm9vdD1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L210ZGJsb2NrMiBydyByb290ZnN0eXBlPWpmZnMyXDAiCVwKKwkibmZzYm9vdD1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PSR7c2VydmVyaXB9OiR7bmZzZGlyfVwwIglcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza306OmV0aDBcMCIJXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIJXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiCVwKKwkic2V0Ym9vdGFyZ3M9cnVuIG10ZGJvb3QgYWRkdHR5IGFkZGlwIGFkZG10ZFwwIgorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4zCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTI1NS4yNTUuMjU1LjAKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkJMworCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworLyogSW5jbHVkZSBiYXNpYyBNTVUgc3VwcG9ydCBpZiBFTEYgc3VwcG9ydCBpcyBpbmNsdWRlZAorICoKKyAqIE5PVEU6IGtlZXAgdGhpcyBzdHVmZiBhZnRlciAiY21kX2NvbmZkZWZzLmgiIGluY2x1ZGUKKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0VMRikKKyNkZWZpbmUgVVNFXzkyMFRfTU1VCisjZW5kaWYKKworCisjZGVmaW5lIENGR19MT0FEX0FERFIJCQkweDEwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDEwMDAwMDAJLyogMTYgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAxMDAwMDAJLyogMSBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisjZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZGlzYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJCTB4ODAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkxMjgJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworLy8jZGVmaW5lIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDIJCQkweDgwMDAwMDAwCS8qIEZsYXNoIEJhbmsgIzIgKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIMQkJCUVYUF9DU0JPT1RfQkFTRUFERFIJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMTAwMDAJLyogNjQgS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkyCS8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXtQSFlTX0ZMQVNIMSwgUEhZU19GTEFTSDJ9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCQkvKiBmbGFzaCBpcyBDRkkgY29uZm9ybWFudCAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgCVBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgIAkoMyAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogUmVzZXJ2ZSA2NCBLaUIgZm9yIE1vbml0b3IgKi8KKworI2VuZGlmCisKKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJCShQSFlTX0ZMQVNIMSArIDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMyBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJCShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENGR19FTlZfU0laRQkJCTB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJCUVYUF9DU1AwX0JBU0VBRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTEKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkzCisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTQKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JNQorCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9fbmFuZDAsbm9yMD1jb21jZXJ0b19ub3IwIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b19uYW5kMDoybShjc3ApLDJtKG1zcCksMjUybShmcyk7Y29tY2VydG9fbm9yMDoxOTJrKGJvb3Rsb2FkZXIpLDY0ayhib290bG9hZGVyIGVudiksMTc5MmsoY3NwKSwybShtc3ApLDRtKGZzKSIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMTAwMDAwMDAJLyogMTAgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTEzMzAwMDAwMAkvKiAxMzMgTUh6ICovCisKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbWVnYW1vbWJhc2E1MTVfMjU2TS5oIGIvaW5jbHVkZS9jb25maWdzL21lZ2Ftb21iYXNhNTE1XzI1Nk0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2MzMTFhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL21lZ2Ftb21iYXNhNTE1XzI1Nk0uaApAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzUxNQkJCS8qIEl0J3MgYSBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX01FR0FNT01CQVNBNTE1CQkJLyogb24gYSBNZWdhbW9tYmFzYS01MTUgQm9hcmQgKi8KKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvKiBNaW5kc3BlZWQgdmVyc2lvbiAqLworI2RlZmluZSBDT05GSUdfSURFTlRfU1RSSU5HCQkiIE1pbmRzcGVlZCAwLjA1LjBjdnMgMjU2TSIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCTB4MDEwMDAxMDAKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCQlJUkFNX0JBU0VBRERSCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAkJMHgxMDAwCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKworLyoKKyAqIFNEUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkJMgorI2RlZmluZSBQSFlTX1NEUkFNCQkJMHgwMDAwMDAwMAorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCQkweDA4MDAwMDAwCS8qIDEyOCBNaUIgKi8KKworI2RlZmluZSBQSFlTX1NEUkFNMQkJCTB4OTAwMDAwMDAKKyNkZWZpbmUgUEhZU19TRFJBTTFfU0laRQkJMHgwODAwMDAwMAkvKiAxMjggTWlCICovCisKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8KKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAorI3VuZGVmIENPTkZJR19VQVJUMQorCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisKKy8qCisgKiBFTUFDIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19FTUFDCisjZGVmaW5lIENPTkZJR19FTUFDMAorI2RlZmluZSBDT05GSUdfRU1BQzBfTUlJX01PREUJCUVNQUNfUk1JSV9TTUlJX01PREUKKyNkZWZpbmUgQ09ORklHX0VNQUMwX1BIWUNUUkxESVMJCTEKKworLyoKKyAqIE1ESU8gZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX01JSQorI2RlZmluZSBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04KKyNkZWZpbmUgQ09ORklHX0VNQUMwX01EQ0xPQ0sJCTI1MDAwMDAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX1BIWV9BRERSCQkweDAKKworLyoKKyAqIFNQSSBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfU1BJCQkJCS8qIGRlZmluZSB0byBlbmFibGUgU1BJIHVzaW5nICovCisKKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19QT0xBUklUWQkJMQkJLyogSW5hY3RpdmUgc3RhdGUgb2Ygc2VyaWFsIGNsb2NrIGlzIGhpZ2ggKi8KKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19QSEFTRQkJMQkJLyogU2VyaWFsIENsb2NrIHRvZ2dsZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBkYXRhIGJpdCAqLworI2RlZmluZSBDRkdfU1BJX0ZSQU1FU0laRSAJCTgJCS8qIGRlZmluZSB0aGUgU1BJIGZyYW1lIHNpemUgaW4gYml0cy4gOC1iaXQgc3VwcG9ydGVkIG9ubHkgKi8KKworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1NQRUVECQk0MDAwMDAwCQkvKiB0aGUgU1BJIHNwZWVkIGluIEh6ICovCisKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIHwgXAorCQkJCQkgQ0ZHX0NNRF9NSUkgfCBDRkdfQ01EX0VMRiB8IENGR19DTURfTkFORCB8IENGR19DTURfU1BJKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by01MTUgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwlcCisJInRmdHBkaXI9LlwwIgkJCVwKKwkibmZzZGlyPS9ob21lL25mcy9mc21pbmltYWwtZGViaWFuX3NhcmdlLTAuMTNcMCIJCQlcCisJIm1zcG5hbWU9ZmlybXdhcmUuYXhmXDAiCVwKKwkiY3NwbmFtZT16SW1hZ2VcMCIJCVwKKwkiZnNuYW1lPWZzaW1hZ2UuamZmczJcMCIJXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIglcCisJInVwZGF0ZWJvb3Q9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vdS1ib290LmJpbjsgZXJhc2UgMTowLTI7IGNwLmIgJHtmaWxlYWRkcn0gMTEwMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVib290Tk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDI6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGVyYXNlIDI6NC0zMTsgY3AuYiAke2ZpbGVhZGRyfSA4MDA0MDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZW1zcE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBlcmFzZSAyOjMyLTYzOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMjAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlZnNOT1I9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtmc25hbWV9OyBlcmFzZSAyOjY0LTEyNzsgY3AuYiAke2ZpbGVhZGRyfSA4MDQwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWNzcE5BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtjc3BuYW1lfTsgbmFuZCBlcmFzZSAwIDIwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlbXNwTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBuYW5kIGVyYXNlIDIwMDAwMCAyMDAwMDA7IG5hbmQgd3JpdGUuamZmczIgJHtmaWxlYWRkcn0gMjAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlZnNOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7ZnNuYW1lfTsgbmFuZCBlcmFzZSA0MDAwMDAgZmMwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSA0MDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJib290dHQ9cnVuIHNldGJvb3RhcmdzOyB0ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBsb2FkbXNwICR7ZmlsZWFkZHJ9ICR7ZmlsZXNpemV9OyB0ZnRwIDIwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBib290Y29tY2VydG8gJHtmaWxlYWRkcn1cMCIJXAorCSJib290b289cnVuIHNldGJvb3RhcmdzOyBsb2FkbXNwIDgwMjAwMDAwIDIwMDAwMDsgY3AuYiA4MDA0MDAwMCAyMDAwMDAwIDIwMDAwMDsgYm9vdGNvbWNlcnRvIDIwMDAwMDBcMCIJXAorCSJib290YWE9cnVuIHNldGJvb3RhcmdzOyBuYW5kIHJlYWQuamZmczIgMTAwMDAwMCAyMDAwMDAgMjAwMDAwOyBsb2FkbXNwIDEwMDAwMDAgMjAwMDAwOyBuYW5kIHJlYWQuamZmczIgMjAwMDAwMCAwIDIwMDAwMDsgYm9vdGNvbWNlcnRvIDIwMDAwMDBcMCIJXAorCSJtdGRib290PXNldGVudiBib290YXJncyByb290PS9kZXYvbXRkYmxvY2syIHJ3IHJvb3Rmc3R5cGU9amZmczJcMCIJXAorCSJuZnNib290PXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtuZnNkaXJ9XDAiCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfTo6ZXRoMFwwIglcCisJImFkZHR0eT1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gY29uc29sZT10dHlTMCwke2JhdWRyYXRlfVwwIglcCisJImFkZG10ZD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gJHttdGRwYXJ0c31cMCIJXAorCSJzZXRib290YXJncz1ydW4gbXRkYm9vdCBhZGR0dHkgYWRkaXAgYWRkbXRkXDAiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjMKKyNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUAkxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4yNTUuMAorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkzCisKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisvKiBJbmNsdWRlIGJhc2ljIE1NVSBzdXBwb3J0IGlmIEVMRiBzdXBwb3J0IGlzIGluY2x1ZGVkCisgKgorICogTk9URToga2VlcCB0aGlzIHN0dWZmIGFmdGVyICJjbWRfY29uZmRlZnMuaCIgaW5jbHVkZQorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRUxGKQorI2RlZmluZSBVU0VfOTIwVF9NTVUKKyNlbmRpZgorCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJCTB4MTAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MTAwMDAwMAkvKiAxNiBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MDEwMDAwMAkvKiAxIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkJMHg4MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEyOAkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMgkJCTB4ODAwMDAwMDAJLyogRmxhc2ggQmFuayAjMiAqLworCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJRVhQX0NTQk9PVF9CQVNFQUREUgkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAxMDAwMAkvKiA2NCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTIJLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJe1BIWVNfRkxBU0gxLCBQSFlTX0ZMQVNIMn0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworLyoKKyAqIENGSSBkcml2ZXIgCisgKi8KKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisKKy8qCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICAJUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgCSgzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDY0IEtpQiBmb3IgTW9uaXRvciAqLworCisjZW5kaWYKKworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkJKFBIWVNfRkxBU0gxICsgMyAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCAzIHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTUDBfQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JMQorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTMKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JNAorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwk1CisKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJuYW5kMD1jb21jZXJ0b19uYW5kMCxub3IwPWNvbWNlcnRvX25vcjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvX25hbmQwOjJtKGNzcCksMm0obXNwKSwyNTJtKGZzKTtjb21jZXJ0b19ub3IwOjE5MmsoYm9vdGxvYWRlciksNjRrKGJvb3Rsb2FkZXIgZW52KSwxNzkyayhjc3ApLDJtKG1zcCksNG0oZnMpIgorCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkxMDAwMDAwMAkvKiAxMCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisjZGVmaW5lIENGR19IWl9DTE9DSwkJMTMzMDAwMDAwCS8qIDEzMyBNSHogKi8KKworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9tZWdhbW9tYmFzYTUxNV9zZGMxLmggYi9pbmNsdWRlL2NvbmZpZ3MvbWVnYW1vbWJhc2E1MTVfc2RjMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NmQ5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvbWVnYW1vbWJhc2E1MTVfc2RjMS5oCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fNTE1CQkJLyogSXQncyBhIFNvQyAqLworI2RlZmluZSBDT05GSUdfTUVHQU1PTUJBU0E1MTUJCQkvKiBvbiBhIE1lZ2Ftb21iYXNhLTUxNSBCb2FyZCAqLworI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJCSIgTWluZHNwZWVkIDAuMDUuMGN2cyBTREMxIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJMHgwMTAwMDEwMAorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJCUlSQU1fQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCQkweDEwMDAKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworCisvKgorICogU0RSQU0gY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCQkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCQkweDAwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJCTB4MDgwMDAwMDAJLyogMTI4IE1pQiAqLworCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAKKyN1bmRlZiBDT05GSUdfVUFSVDEKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworCisvKgorICogRU1BQyBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fRU1BQworI2RlZmluZSBDT05GSUdfRU1BQzAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX01JSV9NT0RFCQlFTUFDX1JNSUlfU01JSV9NT0RFCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlDVFJMRElTCQkxCisKKy8qCisgKiBNRElPIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19NSUkKKyNkZWZpbmUgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOCisjZGVmaW5lIENPTkZJR19FTUFDMF9NRENMT0NLCQkyNTAwMDAwCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlfQUREUgkJMHgwCisKKy8qCisgKiBTUEkgZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX1NQSQkJCQkvKiBkZWZpbmUgdG8gZW5hYmxlIFNQSSB1c2luZyAqLworCisjZGVmaW5lIENGR19TUElfQ0xPQ0tfUE9MQVJJVFkJCTEJCS8qIEluYWN0aXZlIHN0YXRlIG9mIHNlcmlhbCBjbG9jayBpcyBoaWdoICovCisjZGVmaW5lIENGR19TUElfQ0xPQ0tfUEhBU0UJCTEJCS8qIFNlcmlhbCBDbG9jayB0b2dnbGVzIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgZGF0YSBiaXQgKi8KKyNkZWZpbmUgQ0ZHX1NQSV9GUkFNRVNJWkUgCQk4CQkvKiBkZWZpbmUgdGhlIFNQSSBmcmFtZSBzaXplIGluIGJpdHMuIDgtYml0IHN1cHBvcnRlZCBvbmx5ICovCisKKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19TUEVFRAkJNDAwMDAwMAkJLyogdGhlIFNQSSBzcGVlZCBpbiBIeiAqLworCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkJKENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0VOViB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9SVU4gfCBDRkdfQ01EX05FVCB8IFwKKwkJCQkJIENGR19DTURfTUlJIHwgQ0ZHX0NNRF9FTEYgfCBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX1NQSSkKKworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tNTE1ID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJXAorCSJ0ZnRwZGlyPS5cMCIJCQlcCisJIm5mc2Rpcj0vaG9tZS9uZnMvZnNtaW5pbWFsLWRlYmlhbl9zYXJnZS0wLjEzXDAiCQkJXAorCSJtc3BuYW1lPWZpcm13YXJlLmF4ZlwwIglcCisJImNzcG5hbWU9ekltYWdlXDAiCQlcCisJImZzbmFtZT1mc2ltYWdlLmpmZnMyXDAiCVwKKwkibXRkcGFydHM9IiBNVERQQVJUU19ERUZBVUxUICJcMCIJXAorCSJ1cGRhdGVib290PXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDE6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDExMDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlYm9vdE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS91LWJvb3QuYmluOyBlcmFzZSAyOjAtMjsgY3AuYiAke2ZpbGVhZGRyfSA4MDAwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWNzcE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBlcmFzZSAyOjQtMzE7IGNwLmIgJHtmaWxlYWRkcn0gODAwNDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOT1I9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgZXJhc2UgMjozMi02MzsgY3AuYiAke2ZpbGVhZGRyfSA4MDIwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWZzTk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7ZnNuYW1lfTsgZXJhc2UgMjo2NC0xMjc7IGNwLmIgJHtmaWxlYWRkcn0gODA0MDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVjc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IG5hbmQgZXJhc2UgMCAyMDAwMDA7IG5hbmQgd3JpdGUuamZmczIgJHtmaWxlYWRkcn0gMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZW1zcE5BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgbmFuZCBlcmFzZSAyMDAwMDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDIwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWZzTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2ZzbmFtZX07IG5hbmQgZXJhc2UgNDAwMDAwIGZjMDAwMDA7IG5hbmQgd3JpdGUuamZmczIgJHtmaWxlYWRkcn0gNDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkiYm9vdHR0PXJ1biBzZXRib290YXJnczsgdGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgbG9hZG1zcCAke2ZpbGVhZGRyfSAke2ZpbGVzaXplfTsgdGZ0cCAyMDAwMDAwICR7dGZ0cGRpcn0vJHtjc3BuYW1lfTsgYm9vdGNvbWNlcnRvICR7ZmlsZWFkZHJ9XDAiCVwKKwkiYm9vdG9vPXJ1biBzZXRib290YXJnczsgbG9hZG1zcCA4MDIwMDAwMCAyMDAwMDA7IGNwLmIgODAwNDAwMDAgMjAwMDAwMCAyMDAwMDA7IGJvb3Rjb21jZXJ0byAyMDAwMDAwXDAiCVwKKwkiYm9vdGFhPXJ1biBzZXRib290YXJnczsgbmFuZCByZWFkLmpmZnMyIDEwMDAwMDAgMjAwMDAwIDIwMDAwMDsgbG9hZG1zcCAxMDAwMDAwIDIwMDAwMDsgbmFuZCByZWFkLmpmZnMyIDIwMDAwMDAgMCAyMDAwMDA7IGJvb3Rjb21jZXJ0byAyMDAwMDAwXDAiCVwKKwkibXRkYm9vdD1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L210ZGJsb2NrMiBydyByb290ZnN0eXBlPWpmZnMyXDAiCVwKKwkibmZzYm9vdD1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PSR7c2VydmVyaXB9OiR7bmZzZGlyfVwwIglcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza306OmV0aDBcMCIJXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIJXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiCVwKKwkic2V0Ym9vdGFyZ3M9cnVuIG10ZGJvb3QgYWRkdHR5IGFkZGlwIGFkZG10ZFwwIgorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4zCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTI1NS4yNTUuMjU1LjAKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkJMworCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworLyogSW5jbHVkZSBiYXNpYyBNTVUgc3VwcG9ydCBpZiBFTEYgc3VwcG9ydCBpcyBpbmNsdWRlZAorICoKKyAqIE5PVEU6IGtlZXAgdGhpcyBzdHVmZiBhZnRlciAiY21kX2NvbmZkZWZzLmgiIGluY2x1ZGUKKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0VMRikKKyNkZWZpbmUgVVNFXzkyMFRfTU1VCisjZW5kaWYKKworCisjZGVmaW5lIENGR19MT0FEX0FERFIJCQkweDEwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDEwMDAwMDAJLyogMTYgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAxMDAwMDAJLyogMSBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisjZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZGlzYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJCTB4ODAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkxMjgJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworLy8jZGVmaW5lIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDIJCQkweDgwMDAwMDAwCS8qIEZsYXNoIEJhbmsgIzIgKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIMQkJCUVYUF9DU0JPT1RfQkFTRUFERFIJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMTAwMDAJLyogNjQgS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkyCS8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXtQSFlTX0ZMQVNIMSwgUEhZU19GTEFTSDJ9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCQkvKiBmbGFzaCBpcyBDRkkgY29uZm9ybWFudCAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgCVBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgIAkoMyAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogUmVzZXJ2ZSA2NCBLaUIgZm9yIE1vbml0b3IgKi8KKworI2VuZGlmCisKKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJCShQSFlTX0ZMQVNIMSArIDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMyBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJCShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENGR19FTlZfU0laRQkJCTB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJCUVYUF9DU1AwX0JBU0VBRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTEKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkzCisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTQKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JNQorCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9fbmFuZDAsbm9yMD1jb21jZXJ0b19ub3IwIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b19uYW5kMDoybShjc3ApLDJtKG1zcCksMjUybShmcyk7Y29tY2VydG9fbm9yMDoxOTJrKGJvb3Rsb2FkZXIpLDY0ayhib290bG9hZGVyIGVudiksMTc5MmsoY3NwKSwybShtc3ApLDRtKGZzKSIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMTAwMDAwMDAJLyogMTAgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTEzMzAwMDAwMAkvKiAxMzMgTUh6ICovCisKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbW9jYS5oIGIvaW5jbHVkZS9jb25maWdzL21vY2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzMzZDcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL21vY2EuaApAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkxCS8qIFRoaXMgaXMgYW4gYXJtMTEzNmotcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMTAwCTEJLyogSXQncyBhbiAgU29DICovCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkweDgwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJMHgwODAwMDAwMAkvKiAxMjggTUIgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8gIAorLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogRW1hYyBTZXR0aW5ncworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19HRU1BQwkxCisKKy8vIEdFTUFDIG1vZGUgY29uZmlndXJlZCBieSBib290c3RyYXAgcGlucyBvciBTVworI3VuZGVmIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorLy8jZGVmaW5lIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfR01JSQorI2RlZmluZSBHRU1BQzBfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzBfUEhZX0ZMQUdTCUdFTUFDX1BIWV9BVVRPTkVHCisjZGVmaW5lIEdFTUFDMF9QSFlJRFgJCTAKKworI2RlZmluZSBHRU1BQzFfUEhZX0FERFIJCTAKKyNkZWZpbmUgR0VNQUMxX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQorI2RlZmluZSBHRU1BQzFfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzFfUEhZX0ZMQUdTCUdFTUFDX05PX1BIWQorI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCisKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkxCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIC8qIHwgQ0ZHX0NNRF9OQU5EICovIHwgQ0ZHX0NNRF9KRkZTMiB8IENGR19DTURfUElORyB8IENGR19DTURfTkZTIHwgQ0ZHX0NNRF9NSUkgfCBDRkdfQ01EX0kyQyB8IENGR19DTURfRUVQUk9NKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMTAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0vZGV2L25mcyBydyAiCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9JHtyb290ZnN0eXBlfSByd1wwIglcCisJInJvb3Rmc3R5cGU9amZmczJcMCIgXAorCSJpbml0X3Byb2Nlc3M9L2V0Yy9wcmVpbml0XDAiIFwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCisJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZlwwIiBcCisJImFkZGV0aD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIiBcCisJImh3YWRkcmVzcz0ke25ldGRldn0sJHtldGhhZGRyfVwwIiBcCisJImFkZHR0eT1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gY29uc29sZT10dHlTMCwke2JhdWRyYXRlfVwwIiBcCisJImFkZG10ZD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gJHttdGRwYXJ0c31cMCIgXAorCSJmbGFzaF9zZWxmPXJ1biBmbGFzaGFyZ3MgYWRkaXAgYWRkdHR5OyIJCVwKKwkJImJvb3RtICR7a2VybmVsX2FkZHJ9XDAiCQkJCVwKKwkiYm9vdF9uZnM9bmZzIDgwNjAwMDAwICR7cm9vdHBhdGh9L2Jvb3QvJHtrZXJuZWxmaWxlfTtydW4gbmZzYXJncyBhZGRldGggYWRkaXAgYWRkdHR5OyIgICAgIFwKKwkgICAgICAgICJib290bSA4MDYwMDAwMFwwIgkJCQkJCVwKKwkiYm9vdF9mbGFzaD1ydW4gZmxhc2hhcmdzIGFkZGV0aCBhZGR0dHkgYWRkbXRkOyBmc2xvYWQgL2Jvb3QvdUltYWdlOyBib290bVwwIiBcCisJInJvb3RwYXRoPS9kZXZlbC9mcy1tb2NhXDAiIFwKKwkia2VybmVsZmlsZT11SW1hZ2VcMCIgXAorCSJtdGRpZHM9IiBNVERJRFNfREVGQVVMVCAiXDAiIFwKKwkibXRkcGFydHM9IiBNVERQQVJUU19ERUZBVUxUICJcMCIgXAorCSJwYXJ0aXRpb249IiBNVERQQVJUSVRJT05fREVGQVVMVCAiXDAiIFwKKwkibXRkZGV2bnVtPTJcMCIgXAorCSJtdGRkZXZuYW1lPWZzXDAiIFwKKwkiZnNmaWxlPXJvb3QuamZmczItMTI4a1wwIiBcCisJInVwZGF0ZWZzPXRmdHAgODEwMDAwMDAgJHtmc2ZpbGV9O3Byb3RlY3Qgb2ZmIDE6My0xMjdcO2VyYXNlIDE6My0xMjc7Y3AuYiA4MTAwMDAwMCAyMDA2MDAwMCAke2ZpbGVzaXplfVwwIiBcCisJInVwZGF0ZWJvb3Q9dGZ0cCA4MTAwMDAwMCB1LWJvb3QuYmluO3Byb3RlY3Qgb2ZmIDE6MC0xXDtlcmFzZSAxOjAtMTtjcC5iIDgxMDAwMDAwIDIwMDAwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkiIgorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJKFBIWVNfU0RSQU0gKyAweDAxMDAwMDAwKQkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4ODAwMDAwCS8qIDggTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAJCS8qIDAgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbiAtIFVzaW5nIENGSSBkcml2ZXIgCisgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZGlzYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEyOAkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjdW5kZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMQkJCTB4MjAwMDAwMDAJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMjAwMDAJLyogMTI4IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMSAgICAgICAvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7IFBIWVNfRkxBU0gxIH0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworLyoKKyAqIENGSSBkcml2ZXIgCisgKi8KKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJMQkvKiBmbGFzaCBpcyBDRkkgY29uZm9ybWFudCAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NPTVBMRVhfTUFQUElOR1MKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIFBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgICgxICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDEyOCBLaUIgZm9yIE1vbml0b3IgKi8KKyNlbmRpZgorCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgZGVmaW5lZChDRkdfQ01EX0kyQykKKyNkZWZpbmUgQ09ORklHX0hBUkRfSTJDCisjZGVmaW5lIENGR19UQ0xLICAgICAgICAgICAgICAgICAgICAgICBDRkdfSFpfQ0xPQ0sKKyNkZWZpbmUgQ0ZHX0kyQ19TUEVFRCAgICAgICAgICAgICAgICAgIDQwMDAwCisjZGVmaW5lIENGR19JMkNfU0xBVkUgICAgICAgICAgICAgICAgICAwCisjaWYgZGVmaW5lZChDRkdfQ01EX0VFUFJPTSkKKyNpZiAhZGVmaW5lZChMSVRUTEVfRUVQUk9NKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1NgorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMiAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2CisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZWxzZQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMSAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2CisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0gxICsgMiAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCAyIHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKyAgCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworLyogTk8gTkFORCBPTiBNb0NBIEVWTSAqLworCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMjQwMDAwMDAJLyogMjQgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTE2NTAwMDAwMAkvKiAxNjUgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDMzTUh6ICovCisjZGVmaW5lIENGR19BUk1fQ0xPQ0sJCTQ1MDAwMDAwMAkvKiA0NTAgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1TUh6ICovCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDBBMDAwMDAwIC8qIEFSQU1fQkFTRUFERFIgQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwMDAxMDAwMCAvKiA2NEsgKi8KKyNkZWZpbmUgQ0ZHX0FSQU1fQ09ERV9TSVpFCTB4MDAwMDgwMDAgLyogMzJLICovCisKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQgLSBDRkdfQVJBTV9DT0RFX1NJWkUKKworCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisvKgorKiBERFIgVHJhaW5pbmcgYWxnb3JpdGhtCisqLworI2RlZmluZSBERFJfVFJBSU5JTkcKKy8vI3VuZGVmIEREUl9UUkFJTklORworCisjZGVmaW5lIEREUl9UUkFJTklOR19EQkcgCisKKy8qIE5ldyBERFIgdHJhaW5pbmcgZGVmaW5lcyAoQnVnICM0NDEzMSkgKi8KKyNkZWZpbmUgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKy8vI3VuZGVmIE5FV19ERFJfVFJBSU5JTkcgIC8vdW5kZWYgdGhpcyBmb3Igb2xkIHRyYWluaW5nCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbW9jYV9hcmFtLmggYi9pbmNsdWRlL2NvbmZpZ3MvbW9jYV9hcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3ZDkxMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9tb2NhX2FyYW0uaApAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkxCS8qIFRoaXMgaXMgYW4gYXJtMTEzNmotcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMTAwCTEJLyogSXQncyBhbiAgU29DICovCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19VQk9PVF9MT0FERURfSU5fQVJBTQorLy8jZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorCisvKgorICogUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworCisvKgorICogTWVtb3J5IE1hcHBpbmcKKyAqLworCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJMHg4MDAwMDAwMAorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCTB4MDgwMDAwMDAJLyogMTI4IE1CICovCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovICAKKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworLyoKKyAqIEVtYWMgU2V0dGluZ3MKKyAqLworI3VuZGVmIENPTkZJR19DT01DRVJUT19HRU1BQworCisvLyBHRU1BQyBtb2RlIGNvbmZpZ3VyZWQgYnkgYm9vdHN0cmFwIHBpbnMgb3IgU1cKKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKy8vI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKworCisjZGVmaW5lIEdFTUFDMF9QSFlfQUREUgkJMAorI2RlZmluZSBHRU1BQzBfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX0dNSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwlHRU1BQ19QSFlfQVVUT05FRworI2RlZmluZSBHRU1BQzBfUEhZSURYCQkwCisKKyNkZWZpbmUgR0VNQUMxX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwlHRU1BQ19OT19QSFkKKyNkZWZpbmUgR0VNQUMxX1BIWUlEWAkJMAorCisjdW5kZWYgQ09ORklHX05FVF9NVUxUSQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCAvKkNGR19DTURfRU5WIHwqLyBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIC8qfCBDRkdfQ01EX05FVCB8ICBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX0pGRlMyIHwgQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9ORlMgfCBDRkdfQ01EX0kyQyB8IENGR19DTURfRUVQUk9NICovKQorCisjZGVmaW5lIENPTkZJR19OT19HWklQCQkxCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMTAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9JHtyb290ZnN0eXBlfSByd1wwIglcCisJInJvb3Rmc3R5cGU9amZmczJcMCIgXAorCSJpbml0X3Byb2Nlc3M9L2V0Yy9wcmVpbml0XDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJrZXJuZWxmaWxlPXVJbWFnZVwwIiBcCisJIm10ZGlkcz0iIE1URElEU19ERUZBVUxUICJcMCIgXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIiBcCisJInBhcnRpdGlvbj0iIE1URFBBUlRJVElPTl9ERUZBVUxUICJcMCIgXAorCSJtdGRkZXZudW09MlwwIiBcCisJIm10ZGRldm5hbWU9ZnNcMCIgXAorCSJ3cml0ZWJvb3Q9cHJvdGVjdCBvZmYgMTowLTFcO2VyYXNlIDE6MC0xO2NwLmIgODEwMDAwMDAgMjAwMDAwMDAgNDAwMDBcMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlciAKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJMHgyMDAwMDAwMAkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAyMDAwMAkvKiAxMjggS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxICAgICAgIC8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXsgUEhZU19GTEFTSDEgfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDEgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworI2VuZGlmCisKKworLyoKKyAqIEkyQyBzdXBwb3J0CisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JMkMpCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDRkdfVENMSyAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0haX0NMT0NLCisjZGVmaW5lIENGR19JMkNfU1BFRUQgICAgICAgICAgICAgICAgICA0MDAwMAorI2RlZmluZSBDRkdfSTJDX1NMQVZFICAgICAgICAgICAgICAgICAgMAorI2lmIGRlZmluZWQoQ0ZHX0NNRF9FRVBST00pCisjaWYgIWRlZmluZWQoTElUVExFX0VFUFJPTSkKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTYKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDIgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNgorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2Vsc2UKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUiAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQ0ZHX0kyQ19FRVBST01fQUREUl9MRU4gICAgICAgIDEgLyogQnl0ZXMgb2YgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyAgICAgNgorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMgMTAKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjdW5kZWYgQ0ZHX0VOVl9JU19JTl9GTEFTSAorI2RlZmluZSBDRkdfRU5WX0lTX05PV0hFUkUJMQorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDIgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMiBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisgIAorI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisKKworCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKy8qIE5PIE5BTkQgT04gTW9DQSBFVk0gKi8KKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9KRkZTMikKKy8vI2RlZmluZSBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMKKyNlbmRpZiAvKiBDRkdfQ01EX0pGRlMyICovCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibm9yMD1jb21jZXJ0b2ZsYXNoLjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvZmxhc2guMDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDE2MDAwayhmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJub3IwLDIiCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX0haX0NMT0NLCQkxNjUwMDAwMDAJLyogMTY1IE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAzM01IeiAqLworI2RlZmluZSBDRkdfQVJNX0NMT0NLCQk0NTAwMDAwMDAJLyogNDUwIE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAyNU1IeiAqLworCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMTAwMDAgLyogNjRLICovCisjZGVmaW5lIENGR19BUkFNX0NPREVfU0laRQkweDAwMDAwNDAwIC8qIDFLICovCisKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQgLSBDRkdfQVJBTV9DT0RFX1NJWkUKKworCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisvKgorKiBERFIgVHJhaW5pbmcgYWxnb3JpdGhtCisqLworI2RlZmluZSBERFJfVFJBSU5JTkcKKy8vI3VuZGVmIEREUl9UUkFJTklORworCisjZGVmaW5lIEREUl9UUkFJTklOR19EQkcgCisKKy8qIE5ldyBERFIgdHJhaW5pbmcgZGVmaW5lcyAoQnVnICM0NDEzMSkgKi8KKyNkZWZpbmUgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKy8vI3VuZGVmIE5FV19ERFJfVFJBSU5JTkcgIC8vdW5kZWYgdGhpcyBmb3Igb2xkIHRyYWluaW5nCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbmFpcm9iaS5oIGIvaW5jbHVkZS9jb25maWdzL25haXJvYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjYzNTBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL25haXJvYmkuaApAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzgwMAkJCS8qIEl0J3MgYSBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX1NVUEVSTU9NQkFTQQkJCS8qIG9uIGEgU3VwZXJtb21iYXNhIEJvYXJkICovCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkJIiBNaW5kc3BlZWQgMC4wNS4wY3ZzIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJMHgwMTAwMDEwMAorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJCUlSQU1fQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCQkweDEwMDAKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworCisvKgorICogU0RSQU0gY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCQkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCQkweDAwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJCTB4MDgwMDAwMDAJLyogMTI4IE1pQiAqLworCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAKKyN1bmRlZiBDT05GSUdfVUFSVDEKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworCisvKgorICogRU1BQyBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fRU1BQworI2RlZmluZSBDT05GSUdfRU1BQzAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX01JSV9NT0RFCQlFTUFDX1JNSUlfU01JSV9NT0RFCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlDVFJMRElTCQkxCisKKyN1bmRlZiBDT05GSUdfRU1BQzEKKyNkZWZpbmUgQ09ORklHX0VNQUMxX01JSV9NT0RFCQlFTUFDX1JNSUlfU01JSV9NT0RFCisjZGVmaW5lIENPTkZJR19FTUFDMV9QSFlDVFJMRElTCQkxCisKKy8qCisgKiBNRElPIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19NSUkKKyNkZWZpbmUgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOCisjZGVmaW5lIENPTkZJR19FTUFDMF9NRENMT0NLCQkyNTAwMDAwCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlfQUREUgkJMHgwCisKKyNkZWZpbmUgQ09ORklHX0VNQUMxX01EQ0xPQ0sJCTI1MDAwMDAKKyNkZWZpbmUgQ09ORklHX0VNQUMxX1BIWV9BRERSCQkweDAKKworLyoKKyAqIFNQSSBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfU1BJCQkJCS8qIGRlZmluZSB0byBlbmFibGUgU1BJIHVzaW5nICovCisKKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19QT0xBUklUWQkJMQkJLyogSW5hY3RpdmUgc3RhdGUgb2Ygc2VyaWFsIGNsb2NrIGlzIGhpZ2ggKi8KKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19QSEFTRQkJMQkJLyogU2VyaWFsIENsb2NrIHRvZ2dsZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBkYXRhIGJpdCAqLworI2RlZmluZSBDRkdfU1BJX0ZSQU1FU0laRSAJCTgJCS8qIGRlZmluZSB0aGUgU1BJIGZyYW1lIHNpemUgaW4gYml0cy4gOC1iaXQgc3VwcG9ydGVkIG9ubHkgKi8KKworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1NQRUVECQk0MDAwMDAwCQkvKiB0aGUgU1BJIHNwZWVkIGluIEh6ICovCisKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJCShDT05GSUdfQ01EX0RGTCB8IENGR19DTURfTUlJIHxDRkdfQ01EX0pGRlMyIHxDRkdfQ01EX1BJTkcpCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTgwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfRVRIMUFERFIgICAgICAgICAwMDphYTpiYjpjYzpkZDpmZgorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4zCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTI1NS4yNTUuMjU1LjAKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkJMworCisjZGVmaW5lIENGR19MT0FEX0FERFIJCQkweDEwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDEwMDAwMDAJLyogMTYgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gyCQkJMHg4MDAwMDAwMAkvKiBGbGFzaCBCYW5rICMyICovCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1NCT09UX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDEwMDAwCS8qIDY0IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMgkvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7UEhZU19GTEFTSDEsIFBIWVNfRkxBU0gyfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIAlQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAJKDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgNjQgS2lCIGZvciBNb25pdG9yICovCisKKyNlbmRpZgorCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCQkoUEhZU19GTEFTSDEgKyAzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDMgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECQkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQMF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwkxCisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMworI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwk0CisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTUKKworCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9QW1kLWVlcHJvbSxub3IxPVNwYW5zaW9uLWZsYXNoIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1TcGFuc2lvbi1mbGFzaDo1MTJrKHUtYm9vdCksNTEyayhlbnYpLDdtKGZzKSIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMTIwMDAwMDAJLyogMTIgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTEzMjAwMDAwMAkvKiAxMzIgTUh6ICovCisKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvcGFja2V0LWlhZC1uYW5kLmggYi9pbmNsdWRlL2NvbmZpZ3MvcGFja2V0LWlhZC1uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgwYzMxYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9wYWNrZXQtaWFkLW5hbmQuaApAQCAtMCwwICsxLDM0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkxCS8qIFRoaXMgaXMgYW4gYXJtMTEzNmotcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMTAwCTEJLyogSXQncyBhbiAgU29DICovCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkweDgwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJMHgwODAwMDAwMAkvKiAxMjggTUIgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8gIAorLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogRW1hYyBTZXR0aW5ncworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19HRU1BQwkxCisKKy8vIEdFTUFDIG1vZGUgY29uZmlndXJlZCBieSBib290c3RyYXAgcGlucyBvciBTVworI3VuZGVmIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorLy8jZGVmaW5lIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorCisjZGVmaW5lIEdFTUFDMF9QSFlfQUREUgkJMAorI2RlZmluZSBHRU1BQzBfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX0dNSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwlHRU1BQ19QSFlfQVVUT05FRworI2RlZmluZSBHRU1BQzBfUEhZSURYCQkwCisKKyNkZWZpbmUgR0VNQUMxX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwlHRU1BQ19OT19QSFkKKyNkZWZpbmUgR0VNQUMxX1BIWUlEWAkJMAorCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJMQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisvL1RvIGVuYWJsZSBvbmx5IE5PUiB1bmNvbW1lbnQgQ0ZHX0NNRF9GTEFTSCBhbmQgY29tbWVudCBDRkdfQ01EX05BTkQKKy8vVG8gZW5hYmxlIG9ubHkgTkFORCB1bmNvbW1lbnQgQ0ZHX0NNRF9OQU5EICBhbmQgY29tbWVudCBDRkdfQ01EX0ZMQVNICisvLyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX0pGRlMyIHwgQ0ZHX0NNRF9QSU5HKQorI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCSgvKiBDRkdfQ01EX0ZMQVNIIHwgKi8gQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCAgQ0ZHX0NNRF9OQU5EIHwgQ0ZHX0NNRF9KRkZTMiB8IENGR19DTURfUElORyB8IENGR19DTURfTkZTIHwgQ0ZHX0NNRF9JMkMgfCBDRkdfQ01EX0VFUFJPTSB8IENGR19DTURfRUxGIHwgQ0ZHX0NNRF9NSUkpCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTEwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCVwKKwkiaG9zdG5hbWU9Y29tY2VydG8xMDBcMCIJCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbmZzIHJ3ICIJCVwKKwkJIm5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtyb290cGF0aH1cMCIJCQkJXAorCSJmbGFzaGFyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9IlJPT1RfTVREQkxPQ0sgIiByb290ZnN0eXBlPSR7cm9vdGZzdHlwZX0gcndcMCIJXAorCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkiaW5pdF9wcm9jZXNzPS9ldGMvcHJlaW5pdFwwIiBcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKKwkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIJXAorCQkiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmZcMCIgXAorCSJhZGRldGg9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgXAorCSJod2FkZHJlc3M9JHtuZXRkZXZ9LCR7ZXRoYWRkcn1cMCIgXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIgXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiIFwKKwkiZmxhc2hfc2VsZj1ydW4gZmxhc2hhcmdzIGFkZGlwIGFkZHR0eTsiCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCisJImJvb3RfbmZzPW5mcyA4MDYwMDAwMCAke3Jvb3RwYXRofS9ib290LyR7a2VybmVsZmlsZX07cnVuIG5mc2FyZ3MgYWRkZXRoIGFkZGlwIGFkZHR0eTsiICAgICBcCisJICAgICAgICAiYm9vdG0gODA2MDAwMDBcMCIJCQkJCQlcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgdWxvYWQgL2Jvb3QvdUltYWdlOyBib290bVwwIiBcCisJImJvb3RfZmxhc2hvbGQ9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJyb290cGF0aD0vZGV2ZWwvZnMtaWFkXDAiIFwKKwkia2VybmVsZmlsZT11SW1hZ2VcMCIgXAorCSJtdGRpZHM9IiBNVERJRFNfREVGQVVMVCAiXDAiIFwKKwkibXRkcGFydHM9IiBNVERQQVJUU19ERUZBVUxUICJcMCIgXAorCSJwYXJ0aXRpb249IiBNVERQQVJUSVRJT05fREVGQVVMVCAiXDAiIFwKKwkibXRkZGV2bnVtPTJcMCIgXAorCSJtdGRkZXZuYW1lPWZzXDAiIFwKKwkiZnNmaWxlPXJvb3QuamZmczItMTI4a1wwIiBcCisJInVwZGF0ZW5hbmRmcz10ZnRwIDgxMDAwMDAwICR7ZnNmaWxlfTtuYW5kIGVyYXNlIDYwMDAwICR7ZmlsZXNpemV9O25hbmQgd3JpdGUuamZmczIgODEwMDAwMDAgNjAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSJ1cGRhdGVuYW5kYm9vdD10ZnRwIDgxMDAwMDAwIHUtYm9vdC5iaW47bmFuZCBlcmFzZSAwIDQwMDAwO25hbmQgd3JpdGUuamZmczIgODEwMDAwMDAgMCA0MDAwMFwwIiBcCisJImVlcHJvbWZpbGU9ZWVwcm9tLmJpblwwIiBcCisJInVwZGF0ZWVwcm9tPXRmdHAgODEwMDAwMDAgJHtlZXByb21maWxlfTtlZXByb20gd3JpdGUgODEwMDAwMDAgMCAke2ZpbGVzaXplfVwwIiBcCisJIiIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisjZGVmaW5lIENGR19MT0FEX0FERFIJCShQSFlTX1NEUkFNICsgMHgwMTAwMDAwMCkJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDgwMDAwMAkvKiA4IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwCQkvKiAwIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkxCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBkaXNhYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkxCQkvKiBlbmFibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX1NJWkUJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCTEJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKyNlbHNlCisjdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKyNlbmRpZgorCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJMHgyMDAwMDAwMAkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAyMDAwMAkvKiAxMjggS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxICAgICAgIC8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXsgUEhZU19GTEFTSDEgfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDEgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgMHg0MDAwICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisjZW5kaWYKKworLyoKKyAqIEkyQyBzdXBwb3J0CisgKi8KKyNpZiBkZWZpbmVkKENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ0ZHX1RDTEsgICAgICAgICAgICAgICAgICAgICAgIENGR19IWl9DTE9DSworI2RlZmluZSBDRkdfSTJDX1NQRUVEICAgICAgICAgICAgICAgICAgNDAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRSAgICAgICAgICAgICAgICAgIDAKKyNpZiBkZWZpbmVkKENGR19DTURfRUVQUk9NKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMiAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2IC8qIG1heCA2NCBieXRlICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDIgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMiBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisKKworCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBFWFBfQ1NQNF9CQVNFQUREUgkJMHgzMDAwMDAwMAorCisKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJCUVYUF9DU1A0X0JBU0VBRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECQkxCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GTEFTSCkKKy8vVE9ETworI2Vsc2UKKy8qCisgKkVFUE9STSBib290IGxvYWRlciBkb2VzIHRoZSByZWxvY2F0ZSBhbmQgbG93bGV2ZWwgaW5pdCB3b3JrCisgKi8KKyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorLyogRW52aXJvbm1lbnQgaXMgaW4gTkFORCAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX05BTkQJMQorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMHgwMDA0MDAwMAkvKiBPZmZzZXQgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTICAgICAgICAgIDEKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTI4S2lCICovCisjZW5kaWYKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JNgorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTI5CisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTMxCisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTMwCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSkZGUzIpCisvLyNkZWZpbmUgQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTCisjZW5kaWYgLyogQ0ZHX0NNRF9KRkZTMiAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJuYW5kMD1jb21jZXJ0b25hbmQiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvbmFuZDoyNTZrKHUtYm9vdCksMTI4ayhlbnYpLDE2MDAwayhmcykiCisjZGVmaW5lIE1URFBBUlRJVElPTl9ERUZBVUxUCSJuYW5kMCwyIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazMiCisjZWxzZQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9Y29tY2VydG9mbGFzaC4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b2ZsYXNoLjA6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwyIgorI2RlZmluZSBST09UX01UREJMT0NLCQkiL2Rldi9tdGRibG9jazIiCisjZW5kaWYKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMjQwMDAwMDAJLyogMjQgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTE2NTAwMDAwMAkvKiAxNjUgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDMzTUh6ICovCisjaWYgMCAvKiBDRkdfQVJNX0NMT0NLIGNvbmZpZ3VyYXRpb24gaXMgcHVzaGluZyBmcm9tIHUtYm9vdCBNYWtlZmlsZSBpbnRvIGNvbmZpZy5oIGJhc2VkIG9uIHRoZSBTS1UgKi8KKyNkZWZpbmUgQ0ZHX0FSTV9DTE9DSwkJNDUwMDAwMDAwCS8qIDQ1MCBNSHosIG11c3QgYmUgbXVsdGlwbGUgb2YgMjVNSHogKi8KKyNlbmRpZgorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMTAwMDAgLyogNjRLICovCisjZGVmaW5lIENGR19BUkFNX0NPREVfU0laRQkweDAwMDA4MDAwIC8qIDMySyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworLyoKKyogRERSIFRyYWluaW5nIGFsZ29yaXRobQorKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9wYWNrZXQtaWFkLmggYi9pbmNsdWRlL2NvbmZpZ3MvcGFja2V0LWlhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTI3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvcGFja2V0LWlhZC5oCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKy8vI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorLy8jZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCTB4ODAwMDAwMDAKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkweDA4MDAwMDAwCS8qIDEyOCBNQiAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLyAgCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKy8qCisgKiBFbWFjIFNldHRpbmdzCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX0dFTUFDCTEKKworLy8gR0VNQUMgbW9kZSBjb25maWd1cmVkIGJ5IGJvb3RzdHJhcCBwaW5zIG9yIFNXCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisvLyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfR01JSQorI2RlZmluZSBHRU1BQzBfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzBfUEhZX0ZMQUdTCUdFTUFDX1BIWV9BVVRPTkVHCisjZGVmaW5lIEdFTUFDMF9QSFlJRFgJCTAKKworI2RlZmluZSBHRU1BQzFfUEhZX0FERFIJCTAKKyNkZWZpbmUgR0VNQUMxX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQorI2RlZmluZSBHRU1BQzFfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzFfUEhZX0ZMQUdTCUdFTUFDX05PX1BIWQorI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCisKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkxCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIHwgIC8qQ0ZHX0NNRF9OQU5EIHwgKi9DRkdfQ01EX0pGRlMyIHwgQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9ORlMgfCBDRkdfQ01EX0VMRiAgfCBDRkdfQ01EX0kyQyB8IENGR19DTURfRUVQUk9NICB8IENGR19DTURfTUlJKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMTAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0vZGV2L25mcyBydyAiCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9JHtyb290ZnN0eXBlfSByd1wwIglcCisJInJvb3Rmc3R5cGU9amZmczJcMCIgXAorCSJpbml0X3Byb2Nlc3M9L2V0Yy9wcmVpbml0XDAiIFwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCisJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZlwwIiBcCisJImFkZGV0aD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIiBcCisJImh3YWRkcmVzcz0ke25ldGRldn0sJHtldGhhZGRyfVwwIiBcCisJImFkZHR0eT1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gY29uc29sZT10dHlTMCwke2JhdWRyYXRlfVwwIiBcCisJImFkZG10ZD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gJHttdGRwYXJ0c31cMCIgXAorCSJmbGFzaF9zZWxmPXJ1biBmbGFzaGFyZ3MgYWRkaXAgYWRkdHR5OyIJCVwKKwkJImJvb3RtICR7a2VybmVsX2FkZHJ9XDAiCQkJCVwKKwkiYm9vdF9uZnM9bmZzIDgwNjAwMDAwICR7cm9vdHBhdGh9L2Jvb3QvJHtrZXJuZWxmaWxlfTtydW4gbmZzYXJncyBhZGRldGggYWRkaXAgYWRkdHR5OyIgICAgIFwKKwkgICAgICAgICJib290bSA4MDYwMDAwMFwwIgkJCQkJCVwKKwkiYm9vdF9mbGFzaD1ydW4gZmxhc2hhcmdzIGFkZGV0aCBhZGR0dHkgYWRkbXRkOyB1bG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKwkiYm9vdF9mbGFzaG9sZD1ydW4gZmxhc2hhcmdzIGFkZGV0aCBhZGR0dHkgYWRkbXRkOyBmc2xvYWQgL2Jvb3QvdUltYWdlOyBib290bVwwIiBcCisJInJvb3RwYXRoPS9kZXZlbC9mcy1pYWRcMCIgXAorCSJrZXJuZWxmaWxlPXVJbWFnZVwwIiBcCisJIm10ZGlkcz0iIE1URElEU19ERUZBVUxUICJcMCIgXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIiBcCisJInBhcnRpdGlvbj0iIE1URFBBUlRJVElPTl9ERUZBVUxUICJcMCIgXAorCSJtdGRkZXZudW09MlwwIiBcCisJIm10ZGRldm5hbWU9ZnNcMCIgXAorCSJmc2ZpbGU9cm9vdC5qZmZzMi0xMjhrXDAiIFwKKwkidXBkYXRlbmFuZGZzPXRmdHAgODEwMDAwMDAgJHtmc2ZpbGV9O25hbmQgZXJhc2UgNjAwMDAgODgwMDAwO25hbmQgd3JpdGUgODEwMDAwMDAgNjAwMDAgODgwMDAwXDAiIFwKKyAJInVwZGF0ZWZzPXRmdHAgODEwMDAwMDAgJHtmc2ZpbGV9O3Byb3RlY3Qgb2ZmIDE6My0xMjdcO2VyYXNlIDE6My0xMjc7Y3AuYiA4MTAwMDAwMCAyMDA2MDAwMCAke2ZpbGVzaXplfVwwIiBcCisJInVwZGF0ZWJvb3Q9dGZ0cCA4MTAwMDAwMCB1LWJvb3QuYmluO3Byb3RlY3Qgb2ZmIDE6MC0xXDtlcmFzZSAxOjAtMTtjcC5iIDgxMDAwMDAwIDIwMDAwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkiZWVwcm9tZmlsZT1lZXByb20uYmluXDAiIFwKKwkidXBkYXRlZXByb209dGZ0cCA4MTAwMDAwMCAke2VlcHJvbWZpbGV9O2VlcHJvbSB3cml0ZSA4MTAwMDAwMCAwICR7ZmlsZXNpemV9XDAiIFwKKwkiIgorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJKFBIWVNfU0RSQU0gKyAweDAxMDAwMDAwKQkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4ODAwMDAwCS8qIDggTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAJCS8qIDAgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbiAtIFVzaW5nIENGSSBkcml2ZXIgCisgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCTEJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZGlzYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZMQVNIKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiBlbmFibGUgQ0ZJIGRyaXZlciAqLworI2Vsc2UKKyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUCQkxMjgJLyogbWF4ICMgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLworI3VuZGVmIENGR19GTEFTSF9QUk9URUNUSU9OCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQkweDIwMDAwMDAwCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDIwMDAwCS8qIDEyOCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkxCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisjZGVmaW5lIENGR19GTEFTSF9DT01QTEVYX01BUFBJTkdTCisKKy8qCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICBQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAoMSAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogUmVzZXJ2ZSAxMjggS2lCIGZvciBNb25pdG9yICovCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAweDQwMDAgIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKyNlbmRpZgorCisvKgorICogSTJDIHN1cHBvcnQKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0NNRF9JMkMpCisjZGVmaW5lIENPTkZJR19IQVJEX0kyQworI2RlZmluZSBDRkdfVENMSyAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0haX0NMT0NLCisjZGVmaW5lIENGR19JMkNfU1BFRUQgICAgICAgICAgICAgICAgICA0MDAwMAorI2RlZmluZSBDRkdfSTJDX1NMQVZFICAgICAgICAgICAgICAgICAgMAorI2lmIGRlZmluZWQoQ0ZHX0NNRF9FRVBST00pCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFIgICAgICAgICAgICAweDUwCisjZGVmaW5lIENGR19JMkNfRUVQUk9NX0FERFJfTEVOICAgICAgICAyIC8qIEJ5dGVzIG9mIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgICAgIDYgLyogbWF4IDY0IGJ5dGUgKi8KKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0RFTEFZX01TIDEwCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9FTkFCTEUKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0gxICsgMiAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCAyIHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIEVYUF9DU1A0X0JBU0VBRERSCQkweDMwMDAwMDAwCisKKworI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTUDRfQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZMQVNIKQorLy9UT0RPCisjZWxzZQorLyoKKyAqRUVQT1JNIGJvb3QgbG9hZGVyIGRvZXMgdGhlIHJlbG9jYXRlIGFuZCBsb3dsZXZlbCBpbml0IHdvcmsKKyAqLworI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisvKiBFbnZpcm9ubWVudCBpcyBpbiBOQU5EICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fTkFORAkxCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkweDAwMDQwMDAwCS8qIE9mZnNldCBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMgICAgICAgICAgMQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4MjAwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxMjhLaUIgKi8KKyNlbmRpZgorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwk2CisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMjkKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JMzEKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JMzAKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9KRkZTMikKKy8vI2RlZmluZSBDRkdfSkZGUzJfU09SVF9GUkFHTUVOVFMKKyNlbmRpZiAvKiBDRkdfQ01EX0pGRlMyICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvbmFuZCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9uYW5kOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5hbmQwLDIiCisjZWxzZQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9Y29tY2VydG9mbGFzaC4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b2ZsYXNoLjA6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwyIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX0haX0NMT0NLCQkxNjUwMDAwMDAJLyogMTY1IE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAzM01IeiAqLworI2lmIDAgLyogQ0ZHX0FSTV9DTE9DSyBjb25maWd1cmF0aW9uIGlzIHB1c2hpbmcgZnJvbSB1LWJvb3QgTWFrZWZpbGUgaW50byBjb25maWcuaCBiYXNlZCBvbiB0aGUgU0tVICovCisjZGVmaW5lIENGR19BUk1fQ0xPQ0sJCTQ1MDAwMDAwMAkvKiA0NTAgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1TUh6ICovCisjZW5kaWYKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4MEEwMDAwMDAgLyogQVJBTV9CQVNFQUREUiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDAwMDEwMDAwIC8qIDY0SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAwODAwMCAvKiAzMksgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKy8qCisgKiBERFIgVHJhaW5pbmcgYWxnb3JpdGhtCisgKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKworI2RlZmluZSBERFJfVFJBSU5JTkdfREJHIAorCisvKiBOZXcgRERSIHRyYWluaW5nIGRlZmluZXMgKEJ1ZyAjNDQxMzEpICovCisjZGVmaW5lIE5FV19ERFJfVFJBSU5JTkcgIC8vdW5kZWYgdGhpcyBmb3Igb2xkIHRyYWluaW5nCisvLyN1bmRlZiAgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9wYWNrZXQtaWFkX2FyYW0uaCBiL2luY2x1ZGUvY29uZmlncy9wYWNrZXQtaWFkX2FyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y4NjRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL3BhY2tldC1pYWRfYXJhbS5oCkBAIC0wLDAgKzEsMzAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1VCT09UX0xPQURFRF9JTl9BUkFNCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkweDgwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJMHgwODAwMDAwMAkvKiAxMjggTUIgKi8KKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8gIAorLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCQkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisvKgorICogRW1hYyBTZXR0aW5ncworICovCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX0dFTUFDCisKKy8vIEdFTUFDIG1vZGUgY29uZmlndXJlZCBieSBib290c3RyYXAgcGlucyBvciBTVworI3VuZGVmIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorLy8jZGVmaW5lIENPTkZJR19DT01DRVJUT19NSUlfQ0ZHX0JPT1RTVFJBUAorCisjZGVmaW5lIEdFTUFDMF9QSFlfQUREUgkJMAorI2RlZmluZSBHRU1BQzBfQ09ORklHCQlDT05GSUdfQ09NQ0VSVE9fVVNFX0dNSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwlHRU1BQ19QSFlfQVVUT05FRworI2RlZmluZSBHRU1BQzBfUEhZSURYCQkwCisKKyNkZWZpbmUgR0VNQUMxX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwlHRU1BQ19OT19QSFkKKyNkZWZpbmUgR0VNQUMxX1BIWUlEWAkJMAorCisjdW5kZWYgQ09ORklHX05FVF9NVUxUSQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCAvKkNGR19DTURfRU5WIHwqLyBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIC8qfCBDRkdfQ01EX05FVCB8ICBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX0pGRlMyIHwgQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9ORlMgfCBDRkdfQ01EX0kyQyB8IENGR19DTURfRUVQUk9NICovKQorCisjZGVmaW5lIENPTkZJR19OT19HWklQCQkxCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMTAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9JHtyb290ZnN0eXBlfSByd1wwIglcCisJInJvb3Rmc3R5cGU9amZmczJcMCIgXAorCSJpbml0X3Byb2Nlc3M9L2V0Yy9wcmVpbml0XDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJrZXJuZWxmaWxlPXVJbWFnZVwwIiBcCisJIm10ZGlkcz0iIE1URElEU19ERUZBVUxUICJcMCIgXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIiBcCisJInBhcnRpdGlvbj0iIE1URFBBUlRJVElPTl9ERUZBVUxUICJcMCIgXAorCSJtdGRkZXZudW09MlwwIiBcCisJIm10ZGRldm5hbWU9ZnNcMCIgXAorCSJ3cml0ZWJvb3Q9cHJvdGVjdCBvZmYgMTowLTFcO2VyYXNlIDE6MC0xO2NwLmIgODEwMDAwMDAgMjAwMDAwMDAgNDAwMDBcMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlciAKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJMHgyMDAwMDAwMAkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAyMDAwMAkvKiAxMjggS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxICAgICAgIC8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXsgUEhZU19GTEFTSDEgfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDEgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworI2VuZGlmCisKKy8qCisgKiBJMkMgc3VwcG9ydAorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ0ZHX1RDTEsgICAgICAgICAgICAgICAgICAgICAgIENGR19IWl9DTE9DSworI2RlZmluZSBDRkdfSTJDX1NQRUVEICAgICAgICAgICAgICAgICAgNDAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRSAgICAgICAgICAgICAgICAgIDAKKyNpZiBkZWZpbmVkKENGR19DTURfRUVQUk9NKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMiAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2IC8qIG1heCA2NCBieXRlICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjdW5kZWYgQ0ZHX0VOVl9JU19JTl9GTEFTSAorI2RlZmluZSBDRkdfRU5WX0lTX05PV0hFUkUJMQorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDIgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMiBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCTB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisgIAorI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQkxCisKKworCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTUDRfQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JNgorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTI5CisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTMxCisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTMwCisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSkZGUzIpCisvLyNkZWZpbmUgQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTCisjZW5kaWYgLyogQ0ZHX0NNRF9KRkZTMiAqLworI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9Y29tY2VydG9mbGFzaC4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b2ZsYXNoLjA6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwyIgorCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX0haX0NMT0NLCQkxNjUwMDAwMDAJLyogMTY1IE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAzM01IeiAqLworI2lmIDAgLyogQ0ZHX0FSTV9DTE9DSyBjb25maWd1cmF0aW9uIGlzIHB1c2hpbmcgZnJvbSB1LWJvb3QgTWFrZWZpbGUgaW50byBjb25maWcuaCBiYXNlZCBvbiB0aGUgU0tVICovCisjZGVmaW5lIENGR19BUk1fQ0xPQ0sJCTQ1MDAwMDAwMAkvKiA0NTAgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1TUh6ICovCisjZW5kaWYKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4MEEwMDAwMDAgLyogQVJBTV9CQVNFQUREUiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDAwMDEwMDAwIC8qIDY0SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAwMDQwMCAvKiAxSyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworLyoKKyogRERSIFRyYWluaW5nIGFsZ29yaXRobQorKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKworI2RlZmluZSBERFJfVFJBSU5JTkdfREJHIAorCisvKiBOZXcgRERSIHRyYWluaW5nIGRlZmluZXMgKEJ1ZyAjNDQxMzEpICovCisjZGVmaW5lIE5FV19ERFJfVFJBSU5JTkcgIC8vdW5kZWYgdGhpcyBmb3Igb2xkIHRyYWluaW5nCisvLyN1bmRlZiAgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9yb3V0ZXItbmFuZC5oIGIvaW5jbHVkZS9jb25maWdzL3JvdXRlci1uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhMzY2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9yb3V0ZXItbmFuZC5oCkBAIC0wLDAgKzEsMzQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKy8vI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAorLy8jZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKworLyoKKyAqIFJBTSBjb25maWd1cmF0aW9uCisgKi8KKworLyoKKyAqIE1lbW9yeSBNYXBwaW5nCisgKi8KKworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCTB4ODAwMDAwMDAKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkweDA0MDAwMDAwCS8qIDY0IE1CICovCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovICAKKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAkJMQorI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworLyoKKyAqIEVtYWMgU2V0dGluZ3MKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fR0VNQUMJMQorCisvLyBHRU1BQyBtb2RlIGNvbmZpZ3VyZWQgYnkgYm9vdHN0cmFwIHBpbnMgb3IgU1cKKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKy8vI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fTUlJX0NGR19CT09UU1RSQVAKKworI2RlZmluZSBHRU1BQzBfUEhZX0FERFIJCTAKKyNkZWZpbmUgR0VNQUMwX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQorI2RlZmluZSBHRU1BQzBfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzBfUEhZX0ZMQUdTCUdFTUFDX1BIWV9BVVRPTkVHCisjZGVmaW5lIEdFTUFDMF9QSFlJRFgJCTAKKworI2RlZmluZSBHRU1BQzFfUEhZX0FERFIJCTAKKyNkZWZpbmUgR0VNQUMxX0NPTkZJRwkJQ09ORklHX0NPTUNFUlRPX1VTRV9SR01JSQorI2RlZmluZSBHRU1BQzFfTU9ERQkJKEdFTUFDX1NXX0NPTkYgfCBHRU1BQ19TV19GVUxMX0RVUExFWCB8IEdFTUFDX1NXX1NQRUVEXzFHKQorI2RlZmluZSBHRU1BQzFfUEhZX0ZMQUdTCUdFTUFDX05PX1BIWQorI2RlZmluZSBHRU1BQzFfUEhZSURYCQkwCisKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkxCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKy8vVG8gZW5hYmxlIG9ubHkgTk9SIHVuY29tbWVudCBDRkdfQ01EX0ZMQVNIIGFuZCBjb21tZW50IENGR19DTURfTkFORAorLy9UbyBlbmFibGUgb25seSBOQU5EIHVuY29tbWVudCBDRkdfQ01EX05BTkQgIGFuZCBjb21tZW50IENGR19DTURfRkxBU0gKKy8vI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCShDT05GSUdfQ01EX0RGTCB8IENGR19DTURfSkZGUzIgfCBDRkdfQ01EX1BJTkcpCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKC8qQ0ZHX0NNRF9GTEFTSCB8Ki8gQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCAgQ0ZHX0NNRF9OQU5EIHwgQ0ZHX0NNRF9KRkZTMiB8IENGR19DTURfUElORyB8IENGR19DTURfTkZTIHwgQ0ZHX0NNRF9JMkMgfCBDRkdfQ01EX0VFUFJPTSB8IENGR19DTURfTUlJKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMTAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0vZGV2L25mcyBydyAiCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PSJST09UX01UREJMT0NLICIgcm9vdGZzdHlwZT0ke3Jvb3Rmc3R5cGV9IHJ3XDAiCVwKKwkicm9vdGZzdHlwZT1qZmZzMlwwIiBcCisJImluaXRfcHJvY2Vzcz0vZXRjL3ByZWluaXRcMCIgXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmXDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImZsYXNoX3NlbGY9cnVuIGZsYXNoYXJncyBhZGRpcCBhZGR0dHk7IgkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn1cMCIJCQkJXAorCSJib290X25mcz1uZnMgODA2MDAwMDAgJHtyb290cGF0aH0vYm9vdC8ke2tlcm5lbGZpbGV9O3J1biBuZnNhcmdzIGFkZGV0aCBhZGRpcCBhZGR0dHk7IiAgICAgXAorCSAgICAgICAgImJvb3RtIDgwNjAwMDAwXDAiCQkJCQkJXAorCSJib290X2ZsYXNoPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IHVsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJib290X2ZsYXNob2xkPXJ1biBmbGFzaGFyZ3MgYWRkZXRoIGFkZHR0eSBhZGRtdGQ7IGZzbG9hZCAvYm9vdC91SW1hZ2U7IGJvb3RtXDAiIFwKKwkicm9vdHBhdGg9L2RldmVsL2ZzLXJvdXRlclwwIiBcCisJImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKwkibXRkaWRzPSIgTVRESURTX0RFRkFVTFQgIlwwIiBcCisJIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiIFwKKwkicGFydGl0aW9uPSIgTVREUEFSVElUSU9OX0RFRkFVTFQgIlwwIiBcCisJIm10ZGRldm51bT0yXDAiIFwKKwkibXRkZGV2bmFtZT1mc1wwIiBcCisJImZzZmlsZT1yb290LmpmZnMyLTEyOGtcMCIgXAorCSJ1cGRhdGVuYW5kZnM9dGZ0cCA4MTAwMDAwMCAke2ZzZmlsZX07bmFuZCBlcmFzZSA2MDAwMCAke2ZpbGVzaXplfTtuYW5kIHdyaXRlLmpmZnMyIDgxMDAwMDAwIDYwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRlbmFuZGJvb3Q9dGZ0cCA4MTAwMDAwMCB1LWJvb3QuYmluO25hbmQgZXJhc2UgMCA0MDAwMDtuYW5kIHdyaXRlLmpmZnMyIDgxMDAwMDAwIDAgNDAwMDBcMCIgXAorCSJlZXByb21maWxlPWVlcHJvbS5iaW5cMCIgXAorCSJ1cGRhdGVlcHJvbT10ZnRwIDgxMDAwMDAwICR7ZWVwcm9tZmlsZX07ZWVwcm9tIHdyaXRlIDgxMDAwMDAwIDAgJHtmaWxlc2l6ZX1cMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlciAKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisjZWxzZQorI3VuZGVmIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZGlzYWJsZSBDRkkgZHJpdmVyICovCisjZW5kaWYKKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTI1NgkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjdW5kZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMQkJCTB4MjAwMDAwMDAJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUJCTB4MDAwMTAwMDAJLyogNjQgS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkxICAgICAgIC8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXsgUEhZU19GTEFTSDEgfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDIgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJMQorI2RlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgMHg0MDAwICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisjZW5kaWYKKworLyoKKyAqIEkyQyBzdXBwb3J0CisgKi8KKyNpZiBkZWZpbmVkKENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ0ZHX1RDTEsgICAgICAgICAgICAgICAgICAgICAgIENGR19IWl9DTE9DSworI2RlZmluZSBDRkdfSTJDX1NQRUVEICAgICAgICAgICAgICAgICAgNDAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRSAgICAgICAgICAgICAgICAgIDAKKyNpZiBkZWZpbmVkKENGR19DTURfRUVQUk9NKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMiAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2IC8qIG1heCA2NCBieXRlICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCShQSFlTX0ZMQVNIMSArIDQgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgNCBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworICAKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgRVhQX0NTUDRfQkFTRUFERFIJCTB4MzAwMDAwMDAKKworCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCisvL1RPRE8KKyNlbHNlCisvKgorICpFRVBPUk0gYm9vdCBsb2FkZXIgZG9lcyB0aGUgcmVsb2NhdGUgYW5kIGxvd2xldmVsIGluaXQgd29yaworICovCisjZGVmaW5lIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCisjZGVmaW5lIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKKy8qIEVudmlyb25tZW50IGlzIGluIE5BTkQgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9OQU5ECTEKKyNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4MDAwNDAwMDAJLyogT2Zmc2V0IG9mIEVudmlyb25tZW50IFNlY3RvciAqLworI2RlZmluZSBOQU5EX01BWF9DSElQUyAgICAgICAgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDEyOEtpQiAqLworI2VuZGlmCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTYKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwkzMQorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwkzMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQorLy8jZGVmaW5lIENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUworI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9uYW5kIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b25hbmQ6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibmFuZDAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2szIgorI2Vsc2UKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKyNkZWZpbmUgUk9PVF9NVERCTE9DSwkJIi9kZXYvbXRkYmxvY2syIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTI0MDAwMDAwCS8qIDI0IE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX0haX0NMT0NLCQkxNjUwMDAwMDAJLyogMTY1IE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAzM01IeiAqLworI2lmIDAgLyogQ0ZHX0FSTV9DTE9DSyBjb25maWd1cmF0aW9uIGlzIHB1c2hpbmcgZnJvbSB1LWJvb3QgTWFrZWZpbGUgaW50byBjb25maWcuaCBiYXNlZCBvbiB0aGUgU0tVICovCisjZGVmaW5lIENGR19BUk1fQ0xPQ0sJCTQ1MDAwMDAwMAkvKiA0NTAgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDI1TUh6ICovCisjZW5kaWYKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4MEEwMDAwMDAgLyogQVJBTV9CQVNFQUREUiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDAwMDEwMDAwIC8qIDY0SyAqLworI2RlZmluZSBDRkdfQVJBTV9DT0RFX1NJWkUJMHgwMDAwODAwMCAvKiAzMksgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKy8qCisqIEREUiBUcmFpbmluZyBhbGdvcml0aG0KKyovCisjZGVmaW5lIEREUl9UUkFJTklORworLy8jdW5kZWYgRERSX1RSQUlOSU5HCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvcm91dGVyLmggYi9pbmNsdWRlL2NvbmZpZ3Mvcm91dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxYmJkNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9yb3V0ZXIuaApAQCAtMCwwICsxLDMxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8JCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkxCS8qIFRoaXMgaXMgYW4gYXJtMTEzNmotcyBDUFUgY29yZSAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fMTAwCTEJLyogSXQncyBhbiAgU29DICovCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJIiBNaW5kc3BlZWQgJE5hbWU6IHVib290X2Mya18xXzAwXzEgJCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkoUEhZU19TRFJBTSArIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUgKyAweDEwMCkKKworLyoKKyAqCVJlbG9jYXRpb24gb3B0aW9ucworICovCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkweDgwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJMHgwNDAwMDAwMAkvKiA2NCBNQiAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLyAgCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKy8qCisgKiBFbWFjIFNldHRpbmdzCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX0dFTUFDCTEKKworLy8gR0VNQUMgbW9kZSBjb25maWd1cmVkIGJ5IGJvb3RzdHJhcCBwaW5zIG9yIFNXCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisvLyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwlHRU1BQ19QSFlfQVVUT05FRworI2RlZmluZSBHRU1BQzBfUEhZSURYCQkwCisKKyNkZWZpbmUgR0VNQUMxX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwlHRU1BQ19OT19QSFkKKyNkZWZpbmUgR0VNQUMxX1BIWUlEWAkJMAorCisjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJMQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0VOViB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9SVU4gfCBDRkdfQ01EX05FVCB8ICAvKkNGR19DTURfTkFORCB8Ki8gQ0ZHX0NNRF9KRkZTMiB8IENGR19DTURfUElORyB8IENGR19DTURfTkZTIHwgQ0ZHX0NNRF9JMkMgfCBDRkdfQ01EX0VFUFJPTSB8IENGR19DTURfU1BJIHwgQ0ZHX0NNRF9FTEYgfCBDRkdfQ01EX01JSSkKKworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tMTAwID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJXAorCSJob3N0bmFtZT1jb21jZXJ0bzEwMFwwIgkJCQkJCVwKKwkibmV0ZGV2PWV0aDBcMCIJCQkJCQkJCQlcCisJIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIGluaXQ9JHtpbml0X3Byb2Nlc3N9IHJvb3Q9L2Rldi9uZnMgcncgIgkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCQlcCisJImZsYXNoYXJncz1zZXRlbnYgYm9vdGFyZ3MgaW5pdD0ke2luaXRfcHJvY2Vzc30gcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPSR7cm9vdGZzdHlwZX0gcndcMCIJXAorCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkiaW5pdF9wcm9jZXNzPS9ldGMvcHJlaW5pdFwwIiBcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiCQkJCVwKKwkJImlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfSIJXAorCQkiOiR7aG9zdG5hbWV9OiR7bmV0ZGV2fTpvZmZcMCIgXAorCSJhZGRldGg9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgXAorCSJod2FkZHJlc3M9JHtuZXRkZXZ9LCR7ZXRoYWRkcn1cMCIgXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIgXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiIFwKKwkiZmxhc2hfc2VsZj1ydW4gZmxhc2hhcmdzIGFkZGlwIGFkZHR0eTsiCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCisJImJvb3RfbmZzPW5mcyA4MDYwMDAwMCAke3Jvb3RwYXRofS9ib290LyR7a2VybmVsZmlsZX07cnVuIG5mc2FyZ3MgYWRkZXRoIGFkZGlwIGFkZHR0eTsiICAgICBcCisJICAgICAgICAiYm9vdG0gODA2MDAwMDBcMCIJCQkJCQlcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgdWxvYWQgL2Jvb3QvdUltYWdlOyBib290bVwwIiBcCisJImJvb3RfZmxhc2hvbGQ9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJyb290cGF0aD0vZGV2ZWwvZnMtcm91dGVyXDAiIFwKKwkia2VybmVsZmlsZT11SW1hZ2VcMCIgXAorCSJtdGRpZHM9IiBNVERJRFNfREVGQVVMVCAiXDAiIFwKKwkibXRkcGFydHM9IiBNVERQQVJUU19ERUZBVUxUICJcMCIgXAorCSJwYXJ0aXRpb249IiBNVERQQVJUSVRJT05fREVGQVVMVCAiXDAiIFwKKwkibXRkZGV2bnVtPTJcMCIgXAorCSJtdGRkZXZuYW1lPWZzXDAiIFwKKwkiZnNmaWxlPXJvb3QuamZmczItNjRrXDAiIFwKKwkidXBkYXRlZnM9dGZ0cCA4MTAwMDAwMCAke2ZzZmlsZX07cHJvdGVjdCBvZmYgMTo2LTI1NVw7ZXJhc2UgMTo2LTI1NTtjcC5iIDgxMDAwMDAwIDIwMDYwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRlYm9vdD10ZnRwIDgxMDAwMDAwIHUtYm9vdC5iaW47cHJvdGVjdCBvZmYgMTowLTNcO2VyYXNlIDE6MC0zO2NwLmIgODEwMDAwMDAgMjAwMDAwMDAgJHtmaWxlc2l6ZX1cMCIgXAorCSJlZXByb21maWxlPWVlcHJvbS5iaW5cMCIgXAorCSJ1cGRhdGVlcHJvbT10ZnRwIDgxMDAwMDAwICR7ZWVwcm9tZmlsZX07ZWVwcm9tIHdyaXRlIDgxMDAwMDAwIDAgJHtmaWxlc2l6ZX1cMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkzCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlciAKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMjU2CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJMHgyMDAwMDAwMAkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAxMDAwMAkvKiA2NCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKworI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDIgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworI2VuZGlmCisKKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICTEKKworLyoKKyAqIEkyQyBzdXBwb3J0CisgKi8KKyNpZiBkZWZpbmVkKENGR19DTURfSTJDKQorI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ0ZHX1RDTEsgICAgICAgICAgICAgICAgICAgICAgIENGR19IWl9DTE9DSworI2RlZmluZSBDRkdfSTJDX1NQRUVEICAgICAgICAgICAgICAgICAgNDAwMDAKKyNkZWZpbmUgQ0ZHX0kyQ19TTEFWRSAgICAgICAgICAgICAgICAgIDAKKyNpZiBkZWZpbmVkKENGR19DTURfRUVQUk9NKQorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSICAgICAgICAgICAgMHg1MAorI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAgICAgICAgMiAvKiBCeXRlcyBvZiBhZGRyZXNzICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9CSVRTICAgICA2IC8qIG1heCA2NCBieXRlICovCisjZGVmaW5lIENGR19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAorI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisjZW5kaWYKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0gxICsgNCAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCA0IHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKyAgCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCTEKKworCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQNF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAkJMQorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwk2CisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMjkKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JMzEKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JMzAKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJub3IwPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjI1NmsodS1ib290KSwxMjhrKGVudiksMTYwMDBrKGZzKSIKKyNkZWZpbmUgTVREUEFSVElUSU9OX0RFRkFVTFQJIm5vcjAsMiIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMjQwMDAwMDAJLyogMjQgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTE2NTAwMDAwMAkvKiAxNjUgTUh6LCBtdXN0IGJlIG11bHRpcGxlIG9mIDMzTUh6ICovCisjaWYgMCAvKiBDRkdfQVJNX0NMT0NLIGNvbmZpZ3VyYXRpb24gaXMgcHVzaGluZyBmcm9tIHUtYm9vdCBNYWtlZmlsZSBpbnRvIGNvbmZpZy5oIGJhc2VkIG9uIHRoZSBTS1UgKi8KKyNkZWZpbmUgQ0ZHX0FSTV9DTE9DSwkJNDUwMDAwMDAwCS8qIDQ1MCBNSHosIG11c3QgYmUgbXVsdGlwbGUgb2YgMjVNSHogKi8KKyNlbmRpZgorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJMHgwQTAwMDAwMCAvKiBBUkFNX0JBU0VBRERSIEJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fRU5ECTB4MDAwMTAwMDAgLyogNjRLICovCisjZGVmaW5lIENGR19BUkFNX0NPREVfU0laRQkweDAwMDA4MDAwIC8qIDMySyAqLworCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAlDRkdfR0JMX0RBVEFfT0ZGU0VUIC0gQ0ZHX0FSQU1fQ09ERV9TSVpFCisKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoQ0ZHX0lOSVRfUkFNX0VORCAtIENGR19HQkxfREFUQV9TSVpFKQorCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworLyoKKyogRERSIFRyYWluaW5nIGFsZ29yaXRobQorKi8KKyNkZWZpbmUgRERSX1RSQUlOSU5HCisvLyN1bmRlZiBERFJfVFJBSU5JTkcKKyNkZWZpbmUgRERSX1RSQUlOSU5HX0RCRyAKKworLyogTmV3IEREUiB0cmFpbmluZyBkZWZpbmVzIChCdWcgIzQ0MTMxKSAqLworI2RlZmluZSBORVdfRERSX1RSQUlOSU5HICAvL3VuZGVmIHRoaXMgZm9yIG9sZCB0cmFpbmluZworLy8jdW5kZWYgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9yb3V0ZXJfYXJhbS5oIGIvaW5jbHVkZS9jb25maWdzL3JvdXRlcl9hcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRmZGQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9yb3V0ZXJfYXJhbS5oCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJMQorI2RlZmluZSBDT05GSUdfQVJNMTEzNiAJCTEJLyogVGhpcyBpcyBhbiBhcm0xMTM2ai1zIENQVSBjb3JlICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT18xMDAJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyN1bmRlZiAgQ09ORklHX1VTRV9JUlEJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAgKi8KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkiIE1pbmRzcGVlZCAkTmFtZTogdWJvb3RfYzJrXzFfMDBfMSAkIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICAgICAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCShQSFlTX1NEUkFNICsgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRSArIDB4MTAwKQorCisvKgorICoJUmVsb2NhdGlvbiBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1VCT09UX0xPQURFRF9JTl9BUkFNCisvLyNkZWZpbmUgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKy8vI2RlZmluZSBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qCisgKiBSQU0gY29uZmlndXJhdGlvbgorICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkweDgwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJMHgwNDAwMDAwMAkvKiA2NCBNQiAqLworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLyAgCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAJCTEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKy8qCisgKiBFbWFjIFNldHRpbmdzCisgKi8KKyN1bmRlZiBDT05GSUdfQ09NQ0VSVE9fR0VNQUMKKworLy8gR0VNQUMgbW9kZSBjb25maWd1cmVkIGJ5IGJvb3RzdHJhcCBwaW5zIG9yIFNXCisjdW5kZWYgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisvLyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX01JSV9DRkdfQk9PVFNUUkFQCisKKyNkZWZpbmUgR0VNQUMwX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMF9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMwX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMwX1BIWV9GTEFHUwlHRU1BQ19QSFlfQVVUT05FRworI2RlZmluZSBHRU1BQzBfUEhZSURYCQkwCisKKyNkZWZpbmUgR0VNQUMxX1BIWV9BRERSCQkwCisjZGVmaW5lIEdFTUFDMV9DT05GSUcJCUNPTkZJR19DT01DRVJUT19VU0VfUkdNSUkKKyNkZWZpbmUgR0VNQUMxX01PREUJCShHRU1BQ19TV19DT05GIHwgR0VNQUNfU1dfRlVMTF9EVVBMRVggfCBHRU1BQ19TV19TUEVFRF8xRykKKyNkZWZpbmUgR0VNQUMxX1BIWV9GTEFHUwlHRU1BQ19OT19QSFkKKyNkZWZpbmUgR0VNQUMxX1BIWUlEWAkJMAorCisjdW5kZWYgQ09ORklHX05FVF9NVUxUSQorCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENGR19DTURfRkxBU0ggfCAvKkNGR19DTURfRU5WIHwqLyBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIC8qfCBDRkdfQ01EX05FVCB8ICBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX0pGRlMyIHwgQ0ZHX0NNRF9QSU5HIHwgQ0ZHX0NNRF9ORlMgfCBDRkdfQ01EX0kyQyB8IENGR19DTURfRUVQUk9NICovKQorCisjZGVmaW5lIENPTkZJR19OT19HWklQCQkxCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by0xMDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvMTAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyBpbml0PSR7aW5pdF9wcm9jZXNzfSByb290PS9kZXYvbXRkYmxvY2syIHJvb3Rmc3R5cGU9JHtyb290ZnN0eXBlfSByd1wwIglcCisJInJvb3Rmc3R5cGU9amZmczJcMCIgXAorCSJpbml0X3Byb2Nlc3M9L2V0Yy9wcmVpbml0XDAiIFwKKwkiYWRkZXRoPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAiIFwKKwkiaHdhZGRyZXNzPSR7bmV0ZGV2fSwke2V0aGFkZHJ9XDAiIFwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiIFwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIiBcCisJImJvb3RfZmxhc2g9cnVuIGZsYXNoYXJncyBhZGRldGggYWRkdHR5IGFkZG10ZDsgZnNsb2FkIC9ib290L3VJbWFnZTsgYm9vdG1cMCIgXAorCSJrZXJuZWxmaWxlPXVJbWFnZVwwIiBcCisJIm10ZGlkcz0iIE1URElEU19ERUZBVUxUICJcMCIgXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIiBcCisJInBhcnRpdGlvbj0iIE1URFBBUlRJVElPTl9ERUZBVUxUICJcMCIgXAorCSJtdGRkZXZudW09MlwwIiBcCisJIm10ZGRldm5hbWU9ZnNcMCIgXAorCSJ3cml0ZWJvb3Q9cHJvdGVjdCBvZmYgMTowLTNcO2VyYXNlIDE6MC0zO2NwLmIgODEwMDAwMDAgMjAwMDAwMDAgNDAwMDBcMCIgXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkoUEhZU19TRFJBTSArIDB4MDEwMDAwMDApCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MAkJLyogMCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uIC0gVXNpbmcgQ0ZJIGRyaXZlciAKKyAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJMQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJMQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCTB4NDAwMDAwCS8qIChBY2Vzc2libGUpIFNpemUgb2YgdGhlIEFNTFY2NDBVIGZsYXNoIGRldmljZSAqLworCisjZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkxCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMjU2CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKyN1bmRlZiBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJMHgyMDAwMDAwMAkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAxMDAwMAkvKiA2NCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEgICAgICAgLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJeyBQSFlTX0ZMQVNIMSB9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKworI2RlZmluZSBDRkdfRkxBU0hfQ09NUExFWF9NQVBQSU5HUworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkxCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJMQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgKDIgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgMTI4IEtpQiBmb3IgTW9uaXRvciAqLworI2VuZGlmCisKKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI3VuZGVmIENGR19FTlZfSVNfSU5fRkxBU0gKKyNkZWZpbmUgQ0ZHX0VOVl9JU19OT1dIRVJFCTEKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoUEhZU19GTEFTSDEgKyA0ICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDQgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworICAKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJMQorCisKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJCUVYUF9DU1A0X0JBU0VBRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECQkxCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTYKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkyOQorI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwkzMQorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwkzMAorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9Y29tY2VydG9mbGFzaC4wIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b2ZsYXNoLjA6MjU2ayh1LWJvb3QpLDEyOGsoZW52KSwxNjAwMGsoZnMpIgorI2RlZmluZSBNVERQQVJUSVRJT05fREVGQVVMVAkibm9yMCwyIgorCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkyNDAwMDAwMAkvKiAyNCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisjZGVmaW5lIENGR19IWl9DTE9DSwkJMTY1MDAwMDAwCS8qIDE2NSBNSHosIG11c3QgYmUgbXVsdGlwbGUgb2YgMzNNSHogKi8KKyNpZiAwIC8qIENGR19BUk1fQ0xPQ0sgY29uZmlndXJhdGlvbiBpcyBwdXNoaW5nIGZyb20gdS1ib290IE1ha2VmaWxlIGludG8gY29uZmlnLmggYmFzZWQgb24gdGhlIFNLVSAqLworI2RlZmluZSBDRkdfQVJNX0NMT0NLCQk0NTAwMDAwMDAJLyogNDUwIE1IeiwgbXVzdCBiZSBtdWx0aXBsZSBvZiAyNU1IeiAqLworI2VuZGlmCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkweDBBMDAwMDAwIC8qIEFSQU1fQkFTRUFERFIgQmFzZSBhZGRyZXNzICovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQJMHgwMDAxMDAwMCAvKiA2NEsgKi8KKyNkZWZpbmUgQ0ZHX0FSQU1fQ09ERV9TSVpFCTB4MDAwMDA0MDAgLyogMUsgKi8KKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIENGR19BUkFNX0NPREVfU0laRQorCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKy8qCisqIEREUiBUcmFpbmluZyBhbGdvcml0aG0KKyovCisjZGVmaW5lIEREUl9UUkFJTklORworLy8jdW5kZWYgRERSX1RSQUlOSU5HCisKKyNkZWZpbmUgRERSX1RSQUlOSU5HX0RCRyAKKworLyogTmV3IEREUiB0cmFpbmluZyBkZWZpbmVzIChCdWcgIzQ0MTMxKSAqLworI2RlZmluZSBORVdfRERSX1RSQUlOSU5HICAvL3VuZGVmIHRoaXMgZm9yIG9sZCB0cmFpbmluZworLy8jdW5kZWYgTkVXX0REUl9UUkFJTklORyAgLy91bmRlZiB0aGlzIGZvciBvbGQgdHJhaW5pbmcKKworCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3N1cGVybW9tYmFzYTkxMC5oIGIvaW5jbHVkZS9jb25maWdzL3N1cGVybW9tYmFzYTkxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZTk1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc3VwZXJtb21iYXNhOTEwLmgKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4gPHd3dy5taW5kc3BlZWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTwkJCTEKKyNkZWZpbmUgQ09ORklHX0FSTTExMzYgCQkJMQkvKiBUaGlzIGlzIGFuIGFybTExMzZqLXMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzkwMAkJMQkvKiBJdCdzIGFuICBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX1NVUEVSTU9NQkFTQQkJMQkvKiBvbiBhbiBTdXBlcm1vbWJhc2EgQm9hcmQgICAgICovCisjdW5kZWYgIENPTkZJR19VU0VfSVJRCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworLyoKKyAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisKKy8qCisgKiBNZW1vcnkgTWFwcGluZworICovCisKKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkJMHgwODAwMDAwMAkvKiAxMjggTWlCICovCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCTB4MDgwMDEwMAorCisjZGVmaW5lIFBIWVNfRkxBU0hfMQkJCTB4ODAwMDAwMDAJLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUJCQkweDAwODAwMDAwCS8qIDggTWlCICovCisjZGVmaW5lIFBIWVNfRkxBU0hfQkFOS19TSVpFICAgIAkweDAwODAwMDAwCS8qIDggTWlCIEJhbmtzICovCisjZGVmaW5lIFBIWVNfRkxBU0hfU0VDVF9TSVpFICAgIAkweDAwMDEwMDAwCS8qIDY0IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgUEhZU19FRVBST01fMQkJCTB4MTEwMDAwMDAJLyogRUVQUk9NIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19FRVBST01fU0laRQkJMHgwMDgwMDAwCS8qIDUxMiBLaUIgKi8KKyNkZWZpbmUgUEhZU19FRVBST01fQkFOS19TSVpFCQkweDAwODAwMDAJLyogNTEyIEtpQiBCYW5rcyAqLworI2RlZmluZSBQSFlTX0VFUFJPTV9TRUNUX1NJWkUJCTB4MDAwMTAwMDAJLyogNjQgS2lCIHNlY3RvcnMgKi8KKworI2RlZmluZSBQSFlTX05BTkRfMQkJCTB4MTE0MDAwMDAKKyNkZWZpbmUgUEhZU19OQU5EX1NJWkUJCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgCVBIWVNfRkxBU0hfMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAJKFBIWVNfRkxBU0hfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDY0IEtpQiBmb3IgTW9uaXRvciAqLworCisjaWYgQ0ZHX01PTklUT1JfQkFTRSA8IENGR19GTEFTSF9CQVNFCisjZGVmaW5lIENGR19SQU1TVEFSVAorI2VuZGlmCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwICBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAorI3VuZGVmIENPTkZJR19VQVJUMQorCisjdW5kZWYJQ09ORklHX0hXRkxPVwkJLyogZG9uJ3QgaW5jbHVkZSBSVFMvQ1RTIGZsb3cgY29udHJvbCBzdXBwb3J0ICAgKi8KKworI3VuZGVmCUNPTkZJR19NT0RFTV9TVVBQT1JUCS8qIGRpc2FibGUgbW9kZW0gaW5pdGlhbGl6YXRpb24gc3R1ZmYgKi8KKworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkzCisvKiAjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCQkxICovCisKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX0pGRlMyIHwgQ0ZHX0NNRF9QSU5HKQorCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisjZGVmaW5lIENPTkZJR19CQVVEUkFURSAgICAgICAgIDExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDAgfQorCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by05MDAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlQSFlTX1NEUkFNCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgUEhZU19TRFJBTV9TSVpFKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHg4MDAwMDAJLyogOCBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX0VNQUMKKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJMjAKKyNkZWZpbmUgQ09ORklHX0VNQUMwCisjZGVmaW5lIENPTkZJR19FTUFDMF9NSUkJCTAKKworCisvLyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSSAgICAgIDEKKworLy8jZGVmaW5lIENPTkZJR19NSUkgICAgICAgICAgICAxICAgICAgIC8qIE1JSSBQSFkgbWFuYWdlbWVudCAgICAgICAgICAgKi8KKy8vI2RlZmluZSBDT05GSUdfUEhZX0FERFIgICAgICAgMCAgICAgICAvKiBQSFkgYWRkcmVzcyAgICAgICAgICAgICAgICAgICovCisvLyNkZWZpbmUgQ09ORklHX1BIWTFfQUREUiAgICAgIDEgICAgICAgLyogUEhZIGFkZHJlc3MgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCTEKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24gLSBVc2luZyBDRkkgZHJpdmVyIAorICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJCQlQSFlTX0ZMQVNIXzEKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1NJWkUJCQlQSFlTX0ZMQVNIX1NJWkUKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCTEJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJMQkvKiB1c2UgY29tbW9uIGNmaSBkcml2ZXIgICAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCTEJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEyOAkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjdW5kZWYgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCQkyCS8qIG1heCBudW0gb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBTktTX0xJU1QJCXsgUEhZU19FRVBST01fMSwgQ0ZHX0ZMQVNIX0JBU0UgfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gJCTEKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNpZiAxCisjZGVmaW5lIENGR19FTlZfSU5fT1dOX1NFQ1RPUgkxCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRkxBU0hfMSArIDIgKiBQSFlTX0ZMQVNIX1NFQ1RfU0laRSkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQlQSFlTX0ZMQVNIX1NFQ1RfU0laRQorI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQlQSFlTX0ZMQVNIX1NFQ1RfU0laRQorCisjZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUitDRkdfRU5WX1NJWkUpCisjZGVmaW5lIENGR19FTlZfU0laRV9SRURVTkQJUEhZU19GTEFTSF9TRUNUX1NJWkUKKyNlbHNlCisjZGVmaW5lIENGR19FTlZfSU5fT1dOX1NFQ1RPUgkxCisjZGVmaW5lIENGR19FTlZfQUREUgkJKFBIWVNfRUVQUk9NXzEgKyBQSFlTX0VFUFJPTV9TSVpFIC0gMiAqIFBIWVNfRkxBU0hfU0VDVF9TSVpFKQorI2RlZmluZSBDRkdfRU5WX1NJWkUJCSgyICogUEhZU19GTEFTSF9TRUNUX1NJWkUpCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCVBIWVNfRkxBU0hfU0VDVF9TSVpFCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgyMDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50ICovCisjZW5kaWYKKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkweDYwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJUEhZU19OQU5EXzEKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQJCTEKKyNkZWZpbmUgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURQkxCisvLyNkZWZpbmUgQ09ORklHX01URF9ERUJVRworLy8jZGVmaW5lIENPTkZJR19NVERfREVCVUdfVkVSQk9TRQkzCisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTEKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkzCisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTQKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JNQorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5vcjA9Y29tY2VydG9lZXByb20uMCxub3IxPWNvbWNlcnRvZmxhc2guMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9mbGFzaC4wOjEyOGsodS1ib290KSw2NGsoZW52KSw2NGsocmVudiksLShmcykiCisKKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQlcCisJImhvc3RuYW1lPWNvbWNlcnRvOTAwXDAiCQkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJCVwKKwkiZmxhc2hhcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvbXRkYmxvY2szIHJvb3Rmc3R5cGU9XCR7cm9vdGZzdHlwZX0gcndcMCIJXAorCSJyb290ZnN0eXBlPWpmZnMyXDAiIFwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCisJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZiBcMCIgXAorCSJhZGRldGg9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIgXAorCSJod2FkZHJlc3M9JHtuZXRkZXZ9LCR7ZXRoYWRkcn1cMCIgXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIgXAorCSJmbGFzaF9zZWxmPXJ1biBmbGFzaGFyZ3MgYWRkaXAgYWRkdHR5OyIJCVwKKwkJImJvb3RtICR7a2VybmVsX2FkZHJ9XDAiCQkJCVwKKwkiYm9vdF9uZnM9bmZzIDYwMDAwMCAke3Jvb3RwYXRofS9ib290LyR7a2VybmVsZmlsZX07cnVuIG5mc2FyZ3MgYWRkZXRoIGFkZGlwIGFkZHR0eTsiICAgICBcCisJICAgICAgICAiYm9vdG0gNjAwMDAwXDAiCQkJCQkJXAorCSJyb290cGF0aD0vaG9tZS91c2VyL2RldmVsL0NTUF9zb2Z0d2FyZS9kaXN0cmlidXRpb24vbWluZHNwZWVkLWJ1aWxkcm9vdC9idWlsZF9hcm1fbm9mcHUvcm9vdFwwIiBcCisJImtlcm5lbGZpbGU9dUltYWdlXDAiIFwKKwkiZnNmaWxlPXJvb3Rmcy5hcm1fbm9mcHUuamZmczJcMCIgXAorCSJ1cGRhdGVmcz1wcm90ZWN0IG9mZiAyOjQtMTI3XDtlcmFzZSAyOjQtMTI3O3RmdHAgMTAwMDAwMCAke2ZzZmlsZX07Y3AuYiAxMDAwMDAwIDgwMDQwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRlYm9vdD1wcm90ZWN0IG9mZiAxOjAtMVw7ZXJhc2UgMTowLTE7dGZ0cCAxMDAwMDAwIHUtYm9vdC5iaW47Y3AuYiAxMDAwMDAwIDExMDAwMDAwICR7ZmlsZXNpemV9XDAiIFwKKwkidXBkYXRlZW52PXByb3RlY3Qgb2ZmIDI6MjtzYXZlZW52XDAiIFwKKwkiIgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQm9hcmQgc3BlY2lmaWMgZXh0ZW5zaW9uIGZvciBiZF9pbmZvCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgZW1iZWRkZWQgaW4gdGhlIGdsb2JhbCBiZF9pbmZvIChiZF90KSBzdHJ1Y3R1cmUKKyAqIGFuZCBjYW4gYmUgdXNlZCBieSB0aGUgYm9hcmQgc3BlY2lmaWMgY29kZSAoZWcgYm9hcmQvLi4uKQorICovCisKK3N0cnVjdCBiZF9pbmZvX2V4dCB7CisJLyogaGVscGVyIHZhcmlhYmxlIGZvciBib2FyZCBlbnZpcm9ubWVudCBoYW5kbGluZworCSAqCisJICogZW52X2NyY192YWxpZCA9PSAwICAgID0+ICAgdW5pbml0aWFsaXNlZAorCSAqIGVudl9jcmNfdmFsaWQgID4gMCAgICA9PiAgIGVudmlyb25tZW50IGNyYyBpbiBmbGFzaCBpcyB2YWxpZAorCSAqIGVudl9jcmNfdmFsaWQgIDwgMCAgICA9PiAgIGVudmlyb25tZW50IGNyYyBpbiBmbGFzaCBpcyBpbnZhbGlkCisJICovCisJaW50IGVudl9jcmNfdmFsaWQ7Cit9OworCisjZW5kaWYKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMTAwMDAwMDAJLyogMTAgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTEzMzAwMDAwMAkvKiAxMzMgTUh6ICovCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMzIqMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy90c2F2bzUxNS5oIGIvaW5jbHVkZS9jb25maWdzL3RzYXZvNTE1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ4OGY3NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy90c2F2bzUxNS5oCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fNTE1CQkJLyogSXQncyBhIFNvQyAqLworI2RlZmluZSBDT05GSUdfVFNBVk81MTUJCQkJLyogb24gYSBUc2F2by01MTUgQm9hcmQgKi8KKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvKiBNaW5kc3BlZWQgdmVyc2lvbiAqLworI2RlZmluZSBDT05GSUdfSURFTlRfU1RSSU5HCQkiIE1pbmRzcGVlZCAwLjA1LjBjdnMiCisKKy8qCisgKiBMaW51eCBib290IGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkweDAxMDAwMTAwCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkJSVJBTV9CQVNFQUREUgorI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJCTB4MTAwMAorCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisKKy8qCisgKiBTRFJBTSBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkJMHgwODAwMDAwMAkvKiAxMjggTWlCICovCisKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8KKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAorI3VuZGVmIENPTkZJR19VQVJUMQorCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisKKy8qCisgKiBFTUFDIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19FTUFDCisjZGVmaW5lIENPTkZJR19FTUFDMAorI2RlZmluZSBDT05GSUdfRU1BQzBfTUlJX01PREUJCUVNQUNfUk1JSV9TTUlJX01PREUKKyNkZWZpbmUgQ09ORklHX0VNQUMwX1BIWUNUUkxESVMJCTEKKworLyoKKyAqIE1ESU8gZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX01JSQorI2RlZmluZSBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04KKyNkZWZpbmUgQ09ORklHX0VNQUMwX01EQ0xPQ0sJCTI1MDAwMDAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX1BIWV9BRERSCQkweDAKKworLyoKKyAqIFNQSSBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfU1BJCQkJCS8qIGRlZmluZSB0byBlbmFibGUgU1BJIHVzaW5nICovCisKKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19QT0xBUklUWQkJMQkJLyogSW5hY3RpdmUgc3RhdGUgb2Ygc2VyaWFsIGNsb2NrIGlzIGhpZ2ggKi8KKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19QSEFTRQkJMQkJLyogU2VyaWFsIENsb2NrIHRvZ2dsZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBkYXRhIGJpdCAqLworI2RlZmluZSBDRkdfU1BJX0ZSQU1FU0laRSAJCTgJCS8qIGRlZmluZSB0aGUgU1BJIGZyYW1lIHNpemUgaW4gYml0cy4gOC1iaXQgc3VwcG9ydGVkIG9ubHkgKi8KKworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1NQRUVECQk0MDAwMDAwCQkvKiB0aGUgU1BJIHNwZWVkIGluIEh6ICovCisKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIHwgXAorCQkJCQkgQ0ZHX0NNRF9NSUkgfCBDRkdfQ01EX0VMRiB8IENGR19DTURfTkFORCB8IENGR19DTURfU1BJKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by01MTUgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwlcCisJInRmdHBkaXI9LlwwIgkJCVwKKwkibmZzZGlyPS9ob21lL25mcy9mc21pbmltYWwtZGViaWFuX3NhcmdlLTAuMTNcMCIJCQlcCisJIm1zcG5hbWU9ZmlybXdhcmUuYXhmXDAiCVwKKwkiY3NwbmFtZT16SW1hZ2VcMCIJCVwKKwkiZnNuYW1lPWZzaW1hZ2UuamZmczJcMCIJXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIglcCisJInVwZGF0ZWJvb3Q9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vdS1ib290LmJpbjsgZXJhc2UgMTowLTI7IGNwLmIgJHtmaWxlYWRkcn0gMTEwMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVib290Tk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDI6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGVyYXNlIDI6NC0zMTsgY3AuYiAke2ZpbGVhZGRyfSA4MDA0MDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZW1zcE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBlcmFzZSAyOjMyLTYzOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMjAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBuYW5kIGVyYXNlIDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IG5hbmQgZXJhc2UgMjAwMDAwIDIwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSAyMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVmc05BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtmc25hbWV9OyBuYW5kIGVyYXNlIDQwMDAwMCA3YzAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDQwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJImJvb3R0dD1ydW4gc2V0Ym9vdGFyZ3M7IHRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGxvYWRtc3AgJHtmaWxlYWRkcn0gJHtmaWxlc2l6ZX07IHRmdHAgMjAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGJvb3Rjb21jZXJ0byAke2ZpbGVhZGRyfVwwIglcCisJImJvb3Rvbz1ydW4gc2V0Ym9vdGFyZ3M7IGxvYWRtc3AgODAyMDAwMDAgMjAwMDAwOyBjcC5iIDgwMDQwMDAwIDIwMDAwMDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJImJvb3RhYT1ydW4gc2V0Ym9vdGFyZ3M7IG5hbmQgcmVhZC5qZmZzMiAxMDAwMDAwIDIwMDAwMCAyMDAwMDA7IGxvYWRtc3AgMTAwMDAwMCAyMDAwMDA7IG5hbmQgcmVhZC5qZmZzMiAyMDAwMDAwIDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJIm10ZGJvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9tdGRibG9jazIgcncgcm9vdGZzdHlwZT1qZmZzMlwwIglcCisJIm5mc2Jvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0ke3NlcnZlcmlwfToke25mc2Rpcn1cMCIJXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9OjpldGgwXDAiCVwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiCVwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIglcCisJInNldGJvb3RhcmdzPXJ1biBtdGRib290IGFkZHR0eSBhZGRpcCBhZGRtdGRcMCIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMworI2RlZmluZSBDT05GSUdfR0FURVdBWUlQCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJCTMKKworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qIEluY2x1ZGUgYmFzaWMgTU1VIHN1cHBvcnQgaWYgRUxGIHN1cHBvcnQgaXMgaW5jbHVkZWQKKyAqCisgKiBOT1RFOiBrZWVwIHRoaXMgc3R1ZmYgYWZ0ZXIgImNtZF9jb25mZGVmcy5oIiBpbmNsdWRlCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FTEYpCisjZGVmaW5lIFVTRV85MjBUX01NVQorI2VuZGlmCisKKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkJMHgxMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCQkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgxMDAwMDAwCS8qIDE2IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwMTAwMDAwCS8qIDEgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCQkweDgwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gyCQkJMHg4MDAwMDAwMAkvKiBGbGFzaCBCYW5rICMyICovCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1NCT09UX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDEwMDAwCS8qIDY0IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMgkvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7UEhZU19GTEFTSDEsIFBIWVNfRkxBU0gyfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIAlQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAJKDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgNjQgS2lCIGZvciBNb25pdG9yICovCisKKyNlbmRpZgorCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCQkoUEhZU19GTEFTSDEgKyAzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDMgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECQkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQMF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwkxCisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMworI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwk0CisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTUKKworCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvX25hbmQwLG5vcjA9Y29tY2VydG9fbm9yMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9fbmFuZDA6Mm0oY3NwKSwybShtc3ApLDEyNG0oZnMpO2NvbWNlcnRvX25vcjA6MTkyayhib290bG9hZGVyKSw2NGsoYm9vdGxvYWRlciBlbnYpLDE3OTJrKGNzcCksMm0obXNwKSIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMTAwMDAwMDAJLyogMTAgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTEzMzAwMDAwMAkvKiAxMzMgTUh6ICovCisKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvdHNhdm81MTVfbm9yLmggYi9pbmNsdWRlL2NvbmZpZ3MvdHNhdm81MTVfbm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjZmZjZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy90c2F2bzUxNV9ub3IuaApAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzUxNQkJCS8qIEl0J3MgYSBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX1RTQVZPNTE1CQkJCS8qIG9uIGEgVHNhdm8tNTE1IEJvYXJkICovCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkJIiBNaW5kc3BlZWQgMC4wNS4wY3ZzIE5PUmJvb3QiCisKKy8qCisgKiBMaW51eCBib290IGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJCTEJLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKy8vI2RlZmluZSBDT05GSUdfSU5JVFJEX1RBRwkJMQorCisjZGVmaW5lIExJTlVYX0JPT1RQQVJBTV9BRERSCQkweDAxMDAwMTAwCisKKy8qCisgKiBJbml0aWFsIHN0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkJSVJBTV9CQVNFQUREUgorI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJCTB4MTAwMAorCisKKy8qCisgKiBNYWxsb2Mvc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkJKENGR19FTlZfU0laRSArIDEyOCAqIDEwMjQpCisjZGVmaW5lIENGR19HQkxfREFUQV9TSVpFCQkxMjgJLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisKKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkJKDMyICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworCisKKy8qCisgKiBTRFJBTSBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MJCTEKKyNkZWZpbmUgUEhZU19TRFJBTQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUEhZU19TRFJBTV9TSVpFCQkJMHgwODAwMDAwMAkvKiAxMjggTWlCICovCisKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8KKy8qIGRlZmluZSBvbmUgb2YgdGhlc2UgdG8gY2hvb3NlIHRoZSBVQVJUMCBvciBVQVJUMSBhcyBjb25zb2xlICovCisjZGVmaW5lIENPTkZJR19VQVJUMAorI3VuZGVmIENPTkZJR19VQVJUMQorCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkJMTE1MjAwCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRQl7MTE1MjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCA5NjAwfQorCisKKy8qCisgKiBFTUFDIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUT19FTUFDCisjZGVmaW5lIENPTkZJR19FTUFDMAorI2RlZmluZSBDT05GSUdfRU1BQzBfTUlJX01PREUJCUVNQUNfUk1JSV9TTUlJX01PREUKKyNkZWZpbmUgQ09ORklHX0VNQUMwX1BIWUNUUkxESVMJCTEKKworLyoKKyAqIE1ESU8gZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX01JSQorI2RlZmluZSBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04KKyNkZWZpbmUgQ09ORklHX0VNQUMwX01EQ0xPQ0sJCTI1MDAwMDAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX1BIWV9BRERSCQkweDAKKworLyoKKyAqIFNQSSBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfU1BJCQkJCS8qIGRlZmluZSB0byBlbmFibGUgU1BJIHVzaW5nICovCisKKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19QT0xBUklUWQkJMQkJLyogSW5hY3RpdmUgc3RhdGUgb2Ygc2VyaWFsIGNsb2NrIGlzIGhpZ2ggKi8KKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19QSEFTRQkJMQkJLyogU2VyaWFsIENsb2NrIHRvZ2dsZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBkYXRhIGJpdCAqLworI2RlZmluZSBDRkdfU1BJX0ZSQU1FU0laRSAJCTgJCS8qIGRlZmluZSB0aGUgU1BJIGZyYW1lIHNpemUgaW4gYml0cy4gOC1iaXQgc3VwcG9ydGVkIG9ubHkgKi8KKworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1NQRUVECQk0MDAwMDAwCQkvKiB0aGUgU1BJIHNwZWVkIGluIEh6ICovCisKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIHwgXAorCQkJCQkgQ0ZHX0NNRF9NSUkgfCBDRkdfQ01EX0VMRiB8IENGR19DTURfTkFORCB8IENGR19DTURfU1BJKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by01MTUgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwlcCisJInRmdHBkaXI9LlwwIgkJCVwKKwkibmZzZGlyPS9ob21lL25mcy9mc21pbmltYWwtZGViaWFuX3NhcmdlLTAuMTNcMCIJCQlcCisJIm1zcG5hbWU9ZmlybXdhcmUuYXhmXDAiCVwKKwkiY3NwbmFtZT16SW1hZ2VcMCIJCVwKKwkiZnNuYW1lPWZzaW1hZ2UuamZmczJcMCIJXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIglcCisJInVwZGF0ZWJvb3Q9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vdS1ib290LmJpbjsgZXJhc2UgMTowLTI7IGNwLmIgJHtmaWxlYWRkcn0gMTEwMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVjc3A9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtjc3BuYW1lfTsgZXJhc2UgMTo0LTMxOyBjcC5iICR7ZmlsZWFkZHJ9IDExMDQwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlbXNwPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGVyYXNlIDE6MzItNjM7IGNwLmIgJHtmaWxlYWRkcn0gMTEyMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVjc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IG5hbmQgZXJhc2UgMCAyMDAwMDA7IG5hbmQgd3JpdGUuamZmczIgJHtmaWxlYWRkcn0gMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZW1zcE5BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgbmFuZCBlcmFzZSAyMDAwMDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDIwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWZzTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2ZzbmFtZX07IG5hbmQgZXJhc2UgNDAwMDAwIDdjMDAwMDA7IG5hbmQgd3JpdGUuamZmczIgJHtmaWxlYWRkcn0gNDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkiYm9vdHR0PXJ1biBzZXRib290YXJnczsgdGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgbG9hZG1zcCAke2ZpbGVhZGRyfSAke2ZpbGVzaXplfTsgdGZ0cCAyMDAwMDAwICR7dGZ0cGRpcn0vJHtjc3BuYW1lfTsgYm9vdGNvbWNlcnRvICR7ZmlsZWFkZHJ9XDAiCVwKKwkiYm9vdG9vPXJ1biBzZXRib290YXJnczsgbG9hZG1zcCAxMTIwMDAwMCAyMDAwMDA7IGNwLmIgMTEwNDAwMDAgMjAwMDAwMCAyMDAwMDA7IGJvb3Rjb21jZXJ0byAyMDAwMDAwXDAiCVwKKwkiYm9vdGFhPXJ1biBzZXRib290YXJnczsgbmFuZCByZWFkLmpmZnMyIDEwMDAwMDAgMjAwMDAwIDIwMDAwMDsgbG9hZG1zcCAxMDAwMDAwIDIwMDAwMDsgbmFuZCByZWFkLmpmZnMyIDIwMDAwMDAgMCAyMDAwMDA7IGJvb3Rjb21jZXJ0byAyMDAwMDAwXDAiCVwKKwkibXRkYm9vdD1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L210ZGJsb2NrMiBydyByb290ZnN0eXBlPWpmZnMyXDAiCVwKKwkibmZzYm9vdD1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PSR7c2VydmVyaXB9OiR7bmZzZGlyfVwwIglcCisJImFkZGlwPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza306OmV0aDBcMCIJXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzAsJHtiYXVkcmF0ZX1cMCIJXAorCSJhZGRtdGQ9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICR7bXRkcGFydHN9XDAiCVwKKwkic2V0Ym9vdGFyZ3M9cnVuIG10ZGJvb3QgYWRkdHR5IGFkZGlwIGFkZG10ZFwwIgorCisjZGVmaW5lIENPTkZJR19FVEhBRERSCQkwMDphYTpiYjpjYzpkZDplZQorI2RlZmluZSBDT05GSUdfSVBBRERSCQkxOTIuMTY4LjAuMgorI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCTE5Mi4xNjguMC4zCisjZGVmaW5lIENPTkZJR19HQVRFV0FZSVAJMTkyLjE2OC4wLjEKKyNkZWZpbmUgQ09ORklHX05FVE1BU0sJCTI1NS4yNTUuMjU1LjAKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkJMworCisKKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworLyogSW5jbHVkZSBiYXNpYyBNTVUgc3VwcG9ydCBpZiBFTEYgc3VwcG9ydCBpcyBpbmNsdWRlZAorICoKKyAqIE5PVEU6IGtlZXAgdGhpcyBzdHVmZiBhZnRlciAiY21kX2NvbmZkZWZzLmgiIGluY2x1ZGUKKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0VMRikKKyNkZWZpbmUgVVNFXzkyMFRfTU1VCisjZW5kaWYKKworCisjZGVmaW5lIENGR19MT0FEX0FERFIJCQkweDEwMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KKworCisjZGVmaW5lIENGR19NRU1URVNUX1NUQVJUCUNGR19MT0FEX0FERFIJCS8qIG1lbXRlc3Qgd29ya3Mgb24gKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX01FTVRFU1RfU1RBUlQgKyAweDgwMDAwMCkKKworI2RlZmluZSBCT0FSRF9MQVRFX0lOSVQKKyNkZWZpbmUgTVNQX0JPVFRPTV9NRU1PUllfUkVTRVJWRURfU0laRQkweDEwMDAwMDAJLyogMTYgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKyNkZWZpbmUgTVNQX1RPUF9NRU1PUllfUkVTRVJWRURfU0laRQkweDAxMDAwMDAJLyogMSBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworCisvKgorICogTmV0d29yayBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJNQorCisvKgorICogRmxhc2ggQ29uZmlndXJhdGlvbgorICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEyOAkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJRVhQX0NTQk9PVF9CQVNFQUREUgkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAxMDAwMAkvKiA2NCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTEJLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJe1BIWVNfRkxBU0gxfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIAlQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAJKDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgNjQgS2lCIGZvciBNb25pdG9yICovCisKKyNlbmRpZgorCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCQkoUEhZU19GTEFTSDEgKyAzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDMgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECQkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQlFWFBfQ1NQMF9CQVNFQUREUgorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwkxCisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMworI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwk0CisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTUKKworCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvX25hbmQwLG5vcjA9Y29tY2VydG9fbm9yMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9fbmFuZDA6Mm0oY3NwKSwybShtc3ApLDEyNG0oZnMpO2NvbWNlcnRvX25vcjA6MTkyayhib290bG9hZGVyKSw2NGsoYm9vdGxvYWRlciBlbnYpLDE3OTJrKGNzcCksMm0obXNwKSIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMTAwMDAwMDAJLyogMTAgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTEzMzAwMDAwMAkvKiAxMzMgTUh6ICovCisKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvdHNhdm81MzAuaCBiL2luY2x1ZGUvY29uZmlncy90c2F2bzUzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOTA4MDAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdHNhdm81MzAuaApAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzUzMAkJCS8qIEl0J3MgYSBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX1RTQVZPNTMwCQkJCS8qIG9uIGEgVHNhdm8tNTMwIEJvYXJkICovCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkJIiBNaW5kc3BlZWQgMC4wNS4wY3ZzIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJMHgwMTAwMDEwMAorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJCUlSQU1fQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCQkweDEwMDAKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworCisvKgorICogU0RSQU0gY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCQkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCQkweDAwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJCTB4MDQwMDAwMDAJLyogNjQgTWlCICovCisKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworCisvKgorICogVUFSVCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCisKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworCisvKgorICogRU1BQyBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fRU1BQworI2RlZmluZSBDT05GSUdfRU1BQzAKKworLyoKKyAqIE1ESU8gZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX01JSQorI2RlZmluZSBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04KKyNkZWZpbmUgQ09ORklHX0VNQUMwX01EQ0xPQ0sJCTI1MDAwMDAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX1BIWV9BRERSCQkweDAKKworCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCBcCisJCQkJCSBDRkdfQ01EX01JSSB8IENGR19DTURfRUxGIHwgQ0ZHX0NNRF9OQU5EKQorCisjZGVmaW5lCUNGR19MT05HSEVMUAkJCQkJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkJCSovCisjZGVmaW5lIENGR19QUk9NUFQJCSJDb21jZXJ0by01MzAgPiAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgKi8KKyNkZWZpbmUgQ0ZHX0NCU0laRQkJMjU2CQkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX01BWEFSR1MJCTE2CQkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ0ZHX1BCU0laRQkJKENGR19DQlNJWkUgKyBzaXplb2YoQ0ZHX1BST01QVCkgKyAxNikJLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKworLyoKKyAqIFVzZXIgSW50ZXJmYWNlCisgKi8KKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwlcCisJInRmdHBkaXI9LlwwIgkJCVwKKwkibmZzZGlyPS9ob21lL25mcy9mc21pbmltYWwtZGViaWFuX3NhcmdlLTAuMTNcMCIJCQlcCisJIm1zcG5hbWU9ZmlybXdhcmUuYXhmXDAiCVwKKwkiY3NwbmFtZT16SW1hZ2VcMCIJCVwKKwkiZnNuYW1lPWZzaW1hZ2UuamZmczJcMCIJXAorCSJtdGRwYXJ0cz0iIE1URFBBUlRTX0RFRkFVTFQgIlwwIglcCisJInVwZGF0ZWJvb3Q9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vdS1ib290LmJpbjsgZXJhc2UgMTowLTI7IGNwLmIgJHtmaWxlYWRkcn0gMTEwMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVib290Tk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDI6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDUwMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVjc3BOT1I9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtjc3BuYW1lfTsgZXJhc2UgMjo0LTMxOyBjcC5iICR7ZmlsZWFkZHJ9IDUwNDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOT1I9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgZXJhc2UgMjozMi02MzsgY3AuYiAke2ZpbGVhZGRyfSA1MjAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBuYW5kIGVyYXNlIDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IG5hbmQgZXJhc2UgMjAwMDAwIDIwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSAyMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVmc05BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtmc25hbWV9OyBuYW5kIGVyYXNlIDQwMDAwMCA3YzAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDQwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJImJvb3R0dD1ydW4gc2V0Ym9vdGFyZ3M7IHRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGxvYWRtc3AgJHtmaWxlYWRkcn0gJHtmaWxlc2l6ZX07IHRmdHAgMjAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGJvb3Rjb21jZXJ0byAke2ZpbGVhZGRyfVwwIglcCisJImJvb3Rvbz1ydW4gc2V0Ym9vdGFyZ3M7IGxvYWRtc3AgNTIwMDAwMCAyMDAwMDA7IGNwLmIgNTA0MDAwMCAyMDAwMDAwIDIwMDAwMDsgYm9vdGNvbWNlcnRvIDIwMDAwMDBcMCIJXAorCSJib290YWE9cnVuIHNldGJvb3RhcmdzOyBuYW5kIHJlYWQuamZmczIgMTAwMDAwMCAyMDAwMDAgMjAwMDAwOyBsb2FkbXNwIDEwMDAwMDAgMjAwMDAwOyBuYW5kIHJlYWQuamZmczIgMjAwMDAwMCAwIDIwMDAwMDsgYm9vdGNvbWNlcnRvIDIwMDAwMDBcMCIJXAorCSJtdGRib290PXNldGVudiBib290YXJncyByb290PS9kZXYvbXRkYmxvY2syIHJ3IHJvb3Rmc3R5cGU9amZmczJcMCIJXAorCSJuZnNib290PXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtuZnNkaXJ9XDAiCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfTo6ZXRoMFwwIglcCisJImFkZHR0eT1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gY29uc29sZT10dHlTMCwke2JhdWRyYXRlfVwwIglcCisJImFkZG10ZD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gJHttdGRwYXJ0c31cMCIJXAorCSJzZXRib290YXJncz1ydW4gbXRkYm9vdCBhZGR0dHkgYWRkaXAgYWRkbXRkXDAiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjMKKyNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUAkxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4yNTUuMAorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkzCisKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisvKiBJbmNsdWRlIGJhc2ljIE1NVSBzdXBwb3J0IGlmIEVMRiBzdXBwb3J0IGlzIGluY2x1ZGVkCisgKgorICogTk9URToga2VlcCB0aGlzIHN0dWZmIGFmdGVyICJjbWRfY29uZmRlZnMuaCIgaW5jbHVkZQorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRUxGKQorI2RlZmluZSBVU0VfOTIwVF9NTVUKKyNlbmRpZgorCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJCTB4MTAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MTAwMDAwMAkvKiAxNiBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MDEwMDAwMAkvKiAxIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkJMHg0MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEyOAkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMgkJCTB4MDUwMDAwMDAJLyogRmxhc2ggQmFuayAjMiAqLworCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJRVhQX0NTQk9PVF9CQVNFQUREUgkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAxMDAwMAkvKiA2NCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTIJLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJe1BIWVNfRkxBU0gxLCBQSFlTX0ZMQVNIMn0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworLyoKKyAqIENGSSBkcml2ZXIgCisgKi8KKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisKKy8qCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICAJUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgCSgzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDY0IEtpQiBmb3IgTW9uaXRvciAqLworCisjZW5kaWYKKworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkJKFBIWVNfRkxBU0gxICsgMyAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCAzIHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJRVhQX0NTUDBfQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX01BWF9OQU5EX0RFVklDRQkJMQorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJCTEKKyNkZWZpbmUgQ09ORklHX0pGRlMyX05BTkQKKworI2VuZGlmCisKKy8qIE5BTkQgR1BJT3MgY29uZmlnICovCisjZGVmaW5lIENGR19OQU5EX0JSX0dQSU8JMQorI2RlZmluZSBDRkdfTkFORF9DRV9HUElPCTMKKyNkZWZpbmUgQ0ZHX05BTkRfQ0xFX0dQSU8JNAorI2RlZmluZSBDRkdfTkFORF9BTEVfR1BJTwk1CisKKy8qCisgKiBKRkZTMiBDb25maWd1cmF0aW9uCisgKi8KKy8qIG10ZHBhcnRzIGNvbW1hbmQgbGluZSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisjZGVmaW5lIE1URElEU19ERUZBVUxUCQkibmFuZDA9Y29tY2VydG9fbmFuZDAsbm9yMD1jb21jZXJ0b19ub3IwIgorI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSJtdGRwYXJ0cz1jb21jZXJ0b19uYW5kMDoybShjc3ApLDJtKG1zcCksMTI0bShmcyk7Y29tY2VydG9fbm9yMDoxOTJrKGJvb3Rsb2FkZXIpLDY0ayhib290bG9hZGVyIGVudiksMTc5MmsoY3NwKSwybShtc3ApIgorCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkxMDAwMDAwMAkvKiAxMCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisjZGVmaW5lIENGR19IWl9DTE9DSwkJMTI1MDAwMDAwCS8qIDEyNSBNSHogKi8KKworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy90c2F2bzUzMF9ub3IuaCBiL2luY2x1ZGUvY29uZmlncy90c2F2bzUzMF9ub3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDFiNzViCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL3RzYXZvNTMwX25vci5oCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fNTMwCQkJLyogSXQncyBhIFNvQyAqLworI2RlZmluZSBDT05GSUdfVFNBVk81MzAJCQkJLyogb24gYSBUc2F2by01MzAgQm9hcmQgKi8KKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvKiBNaW5kc3BlZWQgdmVyc2lvbiAqLworI2RlZmluZSBDT05GSUdfSURFTlRfU1RSSU5HCQkiIE1pbmRzcGVlZCAwLjA1LjBjdnMgTk9SYm9vdCIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCTB4MDEwMDAxMDAKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCQlJUkFNX0JBU0VBRERSCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAkJMHgxMDAwCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKworLyoKKyAqIFNEUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkJMHgwMDAwMDAwMAorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCQkweDA0MDAwMDAwCS8qIDY0IE1pQiAqLworCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19VQVJUMAorCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKworLyoKKyAqIEVNQUMgZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX0VNQUMKKyNkZWZpbmUgQ09ORklHX0VNQUMwCisKKy8qCisgKiBNRElPIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19NSUkKKyNkZWZpbmUgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOCisjZGVmaW5lIENPTkZJR19FTUFDMF9NRENMT0NLCQkyNTAwMDAwCisjZGVmaW5lIENPTkZJR19FTUFDMF9QSFlfQUREUgkJMHgwCisKKworLyoKKyAqIFNoZWxsIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCQkoQ0ZHX0NNRF9GTEFTSCB8IENGR19DTURfRU5WIHwgQ0ZHX0NNRF9NRU1PUlkgfCBDRkdfQ01EX1JVTiB8IENGR19DTURfTkVUIHwgXAorCQkJCQkgQ0ZHX0NNRF9NSUkgfCBDRkdfQ01EX0VMRiB8IENGR19DTURfTkFORCkKKworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tNTMwID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJXAorCSJ0ZnRwZGlyPS5cMCIJCQlcCisJIm5mc2Rpcj0vaG9tZS9uZnMvZnNtaW5pbWFsLWRlYmlhbl9zYXJnZS0wLjEzXDAiCQkJXAorCSJtc3BuYW1lPWZpcm13YXJlLmF4ZlwwIglcCisJImNzcG5hbWU9ekltYWdlXDAiCQlcCisJImZzbmFtZT1mc2ltYWdlLmpmZnMyXDAiCVwKKwkibXRkcGFydHM9IiBNVERQQVJUU19ERUZBVUxUICJcMCIJXAorCSJ1cGRhdGVib290PXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDE6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDExMDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGVyYXNlIDE6NC0zMTsgY3AuYiAke2ZpbGVhZGRyfSAxMTA0MDAwMCAke2ZpbGVzaXplfVwwIiAgIFwKKwkidXBkYXRlbXNwPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGVyYXNlIDE6MzItNjM7IGNwLmIgJHtmaWxlYWRkcn0gMTEyMDAwMDAgJHtmaWxlc2l6ZX1cMCIgIFwKKwkidXBkYXRlY3NwTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBuYW5kIGVyYXNlIDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IG5hbmQgZXJhc2UgMjAwMDAwIDIwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSAyMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVmc05BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtmc25hbWV9OyBuYW5kIGVyYXNlIDQwMDAwMCA3YzAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDQwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJImJvb3R0dD1ydW4gc2V0Ym9vdGFyZ3M7IHRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGxvYWRtc3AgJHtmaWxlYWRkcn0gJHtmaWxlc2l6ZX07IHRmdHAgMjAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGJvb3Rjb21jZXJ0byAke2ZpbGVhZGRyfVwwIglcCisJImJvb3Rvbz1ydW4gc2V0Ym9vdGFyZ3M7IGxvYWRtc3AgMTEyMDAwMDAgMjAwMDAwOyBjcC5iIDExMDQwMDAwIDIwMDAwMDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIiAgXAorCSJib290YWE9cnVuIHNldGJvb3RhcmdzOyBuYW5kIHJlYWQuamZmczIgMTAwMDAwMCAyMDAwMDAgMjAwMDAwOyBsb2FkbXNwIDEwMDAwMDAgMjAwMDAwOyBuYW5kIHJlYWQuamZmczIgMjAwMDAwMCAwIDIwMDAwMDsgYm9vdGNvbWNlcnRvIDIwMDAwMDBcMCIgXAorCSJtdGRib290PXNldGVudiBib290YXJncyByb290PS9kZXYvbXRkYmxvY2syIHJ3IHJvb3Rmc3R5cGU9amZmczJcMCIJXAorCSJuZnNib290PXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtuZnNkaXJ9XDAiCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfTo6ZXRoMFwwIglcCisJImFkZHR0eT1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gY29uc29sZT10dHlTMCwke2JhdWRyYXRlfVwwIglcCisJImFkZG10ZD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gJHttdGRwYXJ0c31cMCIJXAorCSJzZXRib290YXJncz1ydW4gbXRkYm9vdCBhZGR0dHkgYWRkaXAgYWRkbXRkXDAiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjMKKyNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUAkxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4yNTUuMAorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkzCisKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisvKiBJbmNsdWRlIGJhc2ljIE1NVSBzdXBwb3J0IGlmIEVMRiBzdXBwb3J0IGlzIGluY2x1ZGVkCisgKgorICogTk9URToga2VlcCB0aGlzIHN0dWZmIGFmdGVyICJjbWRfY29uZmRlZnMuaCIgaW5jbHVkZQorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRUxGKQorI2RlZmluZSBVU0VfOTIwVF9NTVUKKyNlbmRpZgorCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJCTB4MTAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MTAwMDAwMAkvKiAxNiBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MDEwMDAwMAkvKiAxIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uCisgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJLyogZW5hYmxlIEFNMDQwIGZsYXNoIGRyaXZlciAqLworI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCQkweDQwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1NCT09UX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDEwMDAwCS8qIDY0IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMQkvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7UEhZU19GTEFTSDF9CisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBFcmFzZSAqLworI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKy8qCisgKiBDRkkgZHJpdmVyIAorICovCisjaWYgZGVmaW5lZChDRkdfRkxBU0hfQ0ZJX0RSSVZFUikKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0NGSQkJCQkvKiBmbGFzaCBpcyBDRkkgY29uZm9ybWFudCAgICAgICovCisjZGVmaW5lIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFCQkvKiB1c2UgYnVmZmVyZWQgd3JpdGVzICgyMHggZmFzdGVyKSAqLworI2RlZmluZSBDRkdfRkxBU0hfUVVJRVRfVEVTVAorCisvKgorICogTW9uaXRvciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgCVBIWVNfRkxBU0gxCisjZGVmaW5lIENGR19NT05JVE9SX0xFTiAgICAgICAgIAkoMyAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogUmVzZXJ2ZSA2NCBLaUIgZm9yIE1vbml0b3IgKi8KKworI2VuZGlmCisKKworLyoKKyAqIEVudmlyb21lbnQgaW4gZmxhc2gKKyAqLworI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNICisKKyNpZiBkZWZpbmVkKENGR19FTlZfSVNfSU5fRkxBU0gpCisjZGVmaW5lIENGR19FTlZfQUREUgkJCShQSFlTX0ZMQVNIMSArIDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIEtlZXAgMyBzZWN0b3JzIGZvciBVLWJvb3QgaW1hZ2UgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9TRUNUX1NJWkUJCVBIWVNfRkxBU0gxX1NFQ1RfU0laRQorLy8jZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJCShDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NFQ1RfU0laRSkKKyNlbmRpZgorCisjZGVmaW5lIENGR19FTlZfU0laRQkJCTB4NDAwMAkvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IDE2S2lCICovCisKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKKworLyoKKyAqIE5BTkQgQ29uZmlndXJhdGlvbgorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKyNkZWZpbmUgQ0ZHX05BTkRfQkFTRQkJCUVYUF9DU1AwX0JBU0VBRERSCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTEKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkzCisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTQKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JNQorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvX25hbmQwLG5vcjA9Y29tY2VydG9fbm9yMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9fbmFuZDA6Mm0oY3NwKSwybShtc3ApLDEyNG0oZnMpO2NvbWNlcnRvX25vcjA6MTkyayhib290bG9hZGVyKSw2NGsoYm9vdGxvYWRlciBlbnYpLDE3OTJrKGNzcCksMm0obXNwKSIKKworI2RlZmluZSBDRkdfUkVGQ0xLRlJFUQkJMTAwMDAwMDAJLyogMTAgTUh6ICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAorI2RlZmluZSBDRkdfSFpfQ0xPQ0sJCTEyNTAwMDAwMAkvKiAxMjUgTUh6ICovCisKKworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZXJyb3IgQ09ORklHX1VTRV9JUlEgbm90IHN1cHBvcnRlZAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvdWRldjUxNS5oIGIvaW5jbHVkZS9jb25maWdzL3VkZXY1MTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTg0MDJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL3VkZXY1MTUuaApAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiA8d3d3Lm1pbmRzcGVlZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPXzUxNQkJCS8qIEl0J3MgYSBTb0MgKi8KKyNkZWZpbmUgQ09ORklHX1VERVY1MTUJCQkJLyogb24gYSBVZGV2LTUxNSBCb2FyZCAqLworI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJCS8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qIE1pbmRzcGVlZCB2ZXJzaW9uICovCisjZGVmaW5lIENPTkZJR19JREVOVF9TVFJJTkcJCSIgTWluZHNwZWVkIDAuMDUuMGN2cyIKKworLyoKKyAqIExpbnV4IGJvb3QgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAqLworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MJMQorLy8jZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCQkxCisKKyNkZWZpbmUgTElOVVhfQk9PVFBBUkFNX0FERFIJCTB4MDEwMDAxMDAKKworLyoKKyAqIEluaXRpYWwgc3RhY2sgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCQlJUkFNX0JBU0VBRERSCisjZGVmaW5lIENGR19JTklUX1NQX09GRlNFVAkJMHgxMDAwCisKKworLyoKKyAqIE1hbGxvYy9zdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCQkoQ0ZHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKyNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJCTEyOAkvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCQkoMzIgKiAxMDI0KQkvKiByZWd1bGFyIHN0YWNrICovCisKKworLyoKKyAqIFNEUkFNIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTlJfRFJBTV9CQU5LUwkJMQorI2RlZmluZSBQSFlTX1NEUkFNCQkJMHgwMDAwMDAwMAorI2RlZmluZSBQSFlTX1NEUkFNX1NJWkUJCQkweDA4MDAwMDAwCS8qIDEyOCBNaUIgKi8KKworCisvKgorICogSGFyZHdhcmUgZHJpdmVycworICovCisKKy8qCisgKiBVQVJUIGNvbmZpZ3VyYXRpb24KKyAqLworLyogZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjaG9vc2UgdGhlIFVBUlQwIG9yIFVBUlQxIGFzIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX1VBUlQwCisjdW5kZWYgQ09ORklHX1VBUlQxCisKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsxMTUyMDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDk2MDB9CisKKworLyoKKyAqIEVNQUMgZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTUNFUlRPX0VNQUMKKyNkZWZpbmUgQ09ORklHX0VNQUMwCisjZGVmaW5lIENPTkZJR19FTUFDMF9NSUlfTU9ERQkJRU1BQ19NSUlfTU9ERQorI2RlZmluZSBDT05GSUdfRU1BQzBfTUlJRkRMCQkwCisjZGVmaW5lIENPTkZJR19FTUFDMF9NSUkxMDBMCQkwCisKKy8qCisgKiBNRElPIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19NSUkKKyNkZWZpbmUgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOCisjZGVmaW5lIENPTkZJR19FTUFDMF9NRENMT0NLCQkyNTAwMDAwCisKKy8qCisgKiBTUEkgZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX1NQSQkJCQkvKiBkZWZpbmUgdG8gZW5hYmxlIFNQSSB1c2luZyAqLworCisjZGVmaW5lIENGR19TUElfQ0xPQ0tfUE9MQVJJVFkJCTEJCS8qIEluYWN0aXZlIHN0YXRlIG9mIHNlcmlhbCBjbG9jayBpcyBoaWdoICovCisjZGVmaW5lIENGR19TUElfQ0xPQ0tfUEhBU0UJCTEJCS8qIFNlcmlhbCBDbG9jayB0b2dnbGVzIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgZGF0YSBiaXQgKi8KKyNkZWZpbmUgQ0ZHX1NQSV9GUkFNRVNJWkUgCQk4CQkvKiBkZWZpbmUgdGhlIFNQSSBmcmFtZSBzaXplIGluIGJpdHMuIDgtYml0IHN1cHBvcnRlZCBvbmx5ICovCisKKyNkZWZpbmUgQ0ZHX1NQSV9DTE9DS19TUEVFRAkJNDAwMDAwMAkJLyogdGhlIFNQSSBzcGVlZCBpbiBIeiAqLworCisKKy8qCisgKiBTaGVsbCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCQkJKENGR19DTURfRkxBU0ggfCBDRkdfQ01EX0VOViB8IENGR19DTURfTUVNT1JZIHwgQ0ZHX0NNRF9SVU4gfCBDRkdfQ01EX05FVCB8IFwKKwkJCQkJIENGR19DTURfTUlJIHwgQ0ZHX0NNRF9FTEYgfCBDRkdfQ01EX05BTkQgfCBDRkdfQ01EX1NQSSkKKworI2RlZmluZQlDRkdfTE9OR0hFTFAJCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCQkiQ29tY2VydG8tNTE1ID4gIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENGR19DQlNJWkUJCTI1NgkJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCQkxNgkJCS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICovCisjZGVmaW5lIENGR19QQlNJWkUJCShDRkdfQ0JTSVpFICsgc2l6ZW9mKENGR19QUk9NUFQpICsgMTYpCS8qIFByaW50IEJ1ZmZlciBTaXplICovCisKKy8qCisgKiBVc2VyIEludGVyZmFjZQorICovCisjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJXAorCSJ0ZnRwZGlyPS5cMCIJCQlcCisJIm5mc2Rpcj0vaG9tZS9uZnMvZnNtaW5pbWFsLWRlYmlhbl9zYXJnZS0wLjEzXDAiCQkJXAorCSJtc3BuYW1lPWZpcm13YXJlLmF4ZlwwIglcCisJImNzcG5hbWU9ekltYWdlXDAiCQlcCisJImZzbmFtZT1mc2ltYWdlLmpmZnMyXDAiCVwKKwkibXRkcGFydHM9IiBNVERQQVJUU19ERUZBVUxUICJcMCIJXAorCSJ1cGRhdGVib290PXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9L3UtYm9vdC5iaW47IGVyYXNlIDE6MC0yOyBjcC5iICR7ZmlsZWFkZHJ9IDExMDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlYm9vdE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS91LWJvb3QuYmluOyBlcmFzZSAyOjAtMjsgY3AuYiAke2ZpbGVhZGRyfSA4MDAwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWNzcE5PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBlcmFzZSAyOjQtMzE7IGNwLmIgJHtmaWxlYWRkcn0gODAwNDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOT1I9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHttc3BuYW1lfTsgZXJhc2UgMjozMi02MzsgY3AuYiAke2ZpbGVhZGRyfSA4MDIwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWZzTk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGVyYXNlIDI6NjQtMTI4OyBjcC5iICR7ZmlsZWFkZHJ9IDgwNDAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlY3NwTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBuYW5kIGVyYXNlIDAgMjAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVtc3BOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IG5hbmQgZXJhc2UgMjAwMDAwIDIwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSAyMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVmc05BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtmc25hbWV9OyBuYW5kIGVyYXNlIDQwMDAwMCBmYzAwMDAwOyBuYW5kIHdyaXRlLmpmZnMyICR7ZmlsZWFkZHJ9IDQwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJImJvb3R0dD1ydW4gc2V0Ym9vdGFyZ3M7IHRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGxvYWRtc3AgJHtmaWxlYWRkcn0gJHtmaWxlc2l6ZX07IHRmdHAgMjAwMDAwMCAke3RmdHBkaXJ9LyR7Y3NwbmFtZX07IGJvb3Rjb21jZXJ0byAke2ZpbGVhZGRyfVwwIglcCisJImJvb3Rvbz1ydW4gc2V0Ym9vdGFyZ3M7IGxvYWRtc3AgODAyMDAwMDAgMjAwMDAwOyBjcC5iIDgwMDQwMDAwIDIwMDAwMDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJImJvb3RhYT1ydW4gc2V0Ym9vdGFyZ3M7IG5hbmQgcmVhZC5qZmZzMiAxMDAwMDAwIDIwMDAwMCAyMDAwMDA7IGxvYWRtc3AgMTAwMDAwMCAyMDAwMDA7IG5hbmQgcmVhZC5qZmZzMiAyMDAwMDAwIDAgMjAwMDAwOyBib290Y29tY2VydG8gMjAwMDAwMFwwIglcCisJIm10ZGJvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9tdGRibG9jazIgcncgcm9vdGZzdHlwZT1qZmZzMlwwIglcCisJIm5mc2Jvb3Q9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgbmZzcm9vdD0ke3NlcnZlcmlwfToke25mc2Rpcn1cMCIJXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9OjpldGgwXDAiCVwKKwkiYWRkdHR5PXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSBjb25zb2xlPXR0eVMwLCR7YmF1ZHJhdGV9XDAiCVwKKwkiYWRkbXRkPXNldGVudiBib290YXJncyAke2Jvb3RhcmdzfSAke210ZHBhcnRzfVwwIglcCisJInNldGJvb3RhcmdzPXJ1biBtdGRib290IGFkZHR0eSBhZGRpcCBhZGRtdGRcMCIKKworI2RlZmluZSBDT05GSUdfRVRIQUREUgkJMDA6YWE6YmI6Y2M6ZGQ6ZWUKKyNkZWZpbmUgQ09ORklHX0lQQUREUgkJMTkyLjE2OC4wLjIKKyNkZWZpbmUgQ09ORklHX1NFUlZFUklQCQkxOTIuMTY4LjAuMworI2RlZmluZSBDT05GSUdfR0FURVdBWUlQCTE5Mi4xNjguMC4xCisjZGVmaW5lIENPTkZJR19ORVRNQVNLCQkyNTUuMjU1LjI1NS4wCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJCTMKKworCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qIEluY2x1ZGUgYmFzaWMgTU1VIHN1cHBvcnQgaWYgRUxGIHN1cHBvcnQgaXMgaW5jbHVkZWQKKyAqCisgKiBOT1RFOiBrZWVwIHRoaXMgc3R1ZmYgYWZ0ZXIgImNtZF9jb25mZGVmcy5oIiBpbmNsdWRlCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FTEYpCisjZGVmaW5lIFVTRV85MjBUX01NVQorI2VuZGlmCisKKworI2RlZmluZSBDRkdfTE9BRF9BRERSCQkJMHgxMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAlDRkdfTE9BRF9BRERSCQkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJKENGR19NRU1URVNUX1NUQVJUICsgMHg4MDAwMDApCisKKyNkZWZpbmUgQk9BUkRfTEFURV9JTklUCisjZGVmaW5lIE1TUF9CT1RUT01fTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgxMDAwMDAwCS8qIDE2IE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisjZGVmaW5lIE1TUF9UT1BfTUVNT1JZX1JFU0VSVkVEX1NJWkUJMHgwMTAwMDAwCS8qIDEgTWlCIHJlc2VydmVkIGZvciBNU1AgKi8KKworLyoKKyAqIE5ldHdvcmsgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJCTUKKworLyoKKyAqIEZsYXNoIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGVuYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTTA0MF9EUklWRVIJCQkJLyogZGlzYWJsZSBBTTA0MCBmbGFzaCBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfRFJJVkVSCQkJLyogZW5hYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworLy8jdW5kZWYgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGRpc2FibGUgQU1MVjY0MFUgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENGR19GTEFTSF9BTUxWNjQwVV9TSVpFCQkweDgwMDAwMAkvKiAoQWNlc3NpYmxlKSBTaXplIG9mIHRoZSBBTUxWNjQwVSBmbGFzaCBkZXZpY2UgKi8KKworLy8jZGVmaW5lIENGR19GTEFTSF9DRklfRFJJVkVSCQkJLyogZW5hYmxlIENGSSBkcml2ZXIgKi8KKyN1bmRlZiBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGRpc2FibGUgQ0ZJIGRyaXZlciAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkJMTI4CS8qIG1heCAjIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKy8vI2RlZmluZSBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisjZGVmaW5lIFBIWVNfRkxBU0gyCQkJMHg4MDAwMDAwMAkvKiBGbGFzaCBCYW5rICMyICovCisKKyNkZWZpbmUgUEhZU19GTEFTSDEJCQlFWFBfQ1NCT09UX0JBU0VBRERSCS8qIEZsYXNoIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19GTEFTSDFfU0VDVF9TSVpFCQkweDAwMDEwMDAwCS8qIDY0IEtpQiBzZWN0b3JzICovCisKKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkJMgkvKiBtYXggbnVtIG9mIGZsYXNoIGJhbmtzICovCisjZGVmaW5lIENGR19GTEFTSF9CQU5LU19MSVNUCQl7UEhZU19GTEFTSDEsIFBIWVNfRkxBU0gyfQorCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJCSgyICogQ0ZHX0haKQkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLworCisvKgorICogQ0ZJIGRyaXZlciAKKyAqLworI2lmIGRlZmluZWQoQ0ZHX0ZMQVNIX0NGSV9EUklWRVIpCisjZGVmaW5lIENGR19GTEFTSF9DRkkJCQkJLyogZmxhc2ggaXMgQ0ZJIGNvbmZvcm1hbnQgICAgICAqLworI2RlZmluZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQkJLyogdXNlIGJ1ZmZlcmVkIHdyaXRlcyAoMjB4IGZhc3RlcikgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1FVSUVUX1RFU1QKKworLyoKKyAqIE1vbml0b3IgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19NT05JVE9SX0JBU0UgICAgICAgIAlQSFlTX0ZMQVNIMQorI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4gICAgICAgICAJKDMgKiBQSFlTX0ZMQVNIMV9TRUNUX1NJWkUpCS8qIFJlc2VydmUgNjQgS2lCIGZvciBNb25pdG9yICovCisKKyNlbmRpZgorCisKKy8qCisgKiBFbnZpcm9tZW50IGluIGZsYXNoCisgKi8KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAorCisjaWYgZGVmaW5lZChDRkdfRU5WX0lTX0lOX0ZMQVNIKQorI2RlZmluZSBDRkdfRU5WX0FERFIJCQkoUEhZU19GTEFTSDEgKyAzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBLZWVwIDMgc2VjdG9ycyBmb3IgVS1ib290IGltYWdlICovCisjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCQlQSFlTX0ZMQVNIMV9TRUNUX1NJWkUKKy8vI2RlZmluZSBDRkdfRU5WX0FERFJfUkVEVU5ECQkoQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TRUNUX1NJWkUpCisjZW5kaWYKKworI2RlZmluZSBDRkdfRU5WX1NJWkUJCQkweDQwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCAxNktpQiAqLworCisjZGVmaW5lIENPTkZJR19FTlZfT1ZFUldSSVRFCisKKy8qCisgKiBOQU5EIENvbmZpZ3VyYXRpb24KKyAqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05BTkQpCisjZGVmaW5lIENGR19OQU5EX0JBU0UJCQkoRVhQX0NTUDBfQkFTRUFERFIgKyAweDkwMDApCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJCTEKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECisKKyNlbmRpZgorCisvKiBOQU5EIEdQSU9zIGNvbmZpZyAqLworI2RlZmluZSBDRkdfTkFORF9CUl9HUElPCTEKKyNkZWZpbmUgQ0ZHX05BTkRfQ0VfR1BJTwkzCisjZGVmaW5lIENGR19OQU5EX0NMRV9HUElPCTQKKyNkZWZpbmUgQ0ZHX05BTkRfQUxFX0dQSU8JNQorCisKKy8qIENQTEQgcmVnaXN0ZXJzICovCisjZGVmaW5lIENQTERfUkVTRVRfQ1RSTAkJCShFWFBfQ1NQMF9CQVNFQUREUiArIDB4MzAwMCkJCQkvKiBSZXNldCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENQTERfSU5UTUFTSwkJCShFWFBfQ1NQMF9CQVNFQUREUiArIDB4NTAwMCkJCQkvKiBJbnRlcnJ1cHQgTWFzayByZWdpc3RlciAqLworCisKKyNkZWZpbmUgRVNXSVRDSF9PVVRfT0ZfUkVTRVQJCTB4ODAJCS8qIEV0aGVybmV0IHN3aXRjaCBvdXQgb2YgcmVzZXQgKi8KKyNkZWZpbmUgRVNXSVRDSF9JUlFNQVNLCQkJMHgwOAkJLyogRXRoZXJuZXQgc3dpdGNoIGludGVycnVwdCBtYXNrICovCisKKyNkZWZpbmUgRVNXSVRDSF9TUElfQ1MgICAgICAgICAgICAgICAgICgxIDw8IDIpCisKKworLyoKKyAqIEpGRlMyIENvbmZpZ3VyYXRpb24KKyAqLworLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0pGRlMyX0NNRExJTkUKKyNkZWZpbmUgTVRESURTX0RFRkFVTFQJCSJuYW5kMD1jb21jZXJ0b19uYW5kMCxub3IwPWNvbWNlcnRvX25vcjAiCisjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQJIm10ZHBhcnRzPWNvbWNlcnRvX25hbmQwOjJtKGNzcCksMm0obXNwKSwyNTJtKGZzKTtjb21jZXJ0b19ub3IwOjE5MmsoYm9vdGxvYWRlciksNjRrKGJvb3Rsb2FkZXIgZW52KSwxNzkyayhjc3ApLDJtKG1zcCksNG0oZnMpIgorCisjZGVmaW5lIENGR19SRUZDTEtGUkVRCQkxMDAwMDAwMAkvKiAxMCBNSHogKi8KKworI2RlZmluZSBDRkdfSFoJCQkxMDAwCisjZGVmaW5lIENGR19IWl9DTE9DSwkJMTMzMDAwMDAwCS8qIDEzMyBNSHogKi8KKworCisjaWZkZWYgQ09ORklHX1VTRV9JUlEKKyNlcnJvciBDT05GSUdfVVNFX0lSUSBub3Qgc3VwcG9ydGVkCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy91ZGV2ODAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvdWRldjgwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjNjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdWRldjgwMC5oCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBNaW5kc3BlZWQgVGVjaG5vbG9naWVzLCBJbmMuIDx3d3cubWluZHNwZWVkLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19DT01DRVJUTworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fODAwCQkJLyogSXQncyBhIFNvQyAqLworI2RlZmluZSBDT05GSUdfVURFVjgwMAkJCQkvKiBvbiBhIFVkZXYtODAwIEJvYXJkICovCisjdW5kZWYgQ09ORklHX1VTRV9JUlEJCQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworLyogTWluZHNwZWVkIHZlcnNpb24gKi8KKyNkZWZpbmUgQ09ORklHX0lERU5UX1NUUklORwkJIiBNaW5kc3BlZWQgMC4wNS4wY3ZzIgorCisvKgorICogTGludXggYm9vdCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCQkxCS8qIGVuYWJsZSBwYXNzaW5nIG9mIEFUQUdzICovCisjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUwkxCisvLyNkZWZpbmUgQ09ORklHX0lOSVRSRF9UQUcJCTEKKworI2RlZmluZSBMSU5VWF9CT09UUEFSQU1fQUREUgkJMHgwMTAwMDEwMAorCisvKgorICogSW5pdGlhbCBzdGFjayBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJCUlSQU1fQkFTRUFERFIKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCQkweDEwMDAKKworCisvKgorICogTWFsbG9jL3N0YWNrIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJCShDRkdfRU5WX1NJWkUgKyAxMjggKiAxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkJMTI4CS8qIHNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLworCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkUJCSgzMiAqIDEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKworCisvKgorICogU0RSQU0gY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCQkxCisjZGVmaW5lIFBIWVNfU0RSQU0JCQkweDAwMDAwMDAwCisjZGVmaW5lIFBIWVNfU0RSQU1fU0laRQkJCTB4MDgwMDAwMDAJLyogMTI4IE1pQiAqLworCisKKy8qCisgKiBIYXJkd2FyZSBkcml2ZXJzCisgKi8KKworLyoKKyAqIFVBUlQgY29uZmlndXJhdGlvbgorICovCisvKiBkZWZpbmUgb25lIG9mIHRoZXNlIHRvIGNob29zZSB0aGUgVUFSVDAgb3IgVUFSVDEgYXMgY29uc29sZSAqLworI2RlZmluZSBDT05GSUdfVUFSVDAKKyN1bmRlZiBDT05GSUdfVUFSVDEKKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJezExNTIwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgOTYwMH0KKworCisvKgorICogRU1BQyBkcml2ZXIKKyAqLworI2RlZmluZSBDT05GSUdfQ09NQ0VSVE9fRU1BQworI2RlZmluZSBDT05GSUdfRU1BQzAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX01JSV9NT0RFCQlFTUFDX01JSV9NT0RFCisjZGVmaW5lIENPTkZJR19FTUFDMF9NSUlGREwJCTAKKyNkZWZpbmUgQ09ORklHX0VNQUMwX01JSTEwMEwJCTAKKworI3VuZGVmIENPTkZJR19FTUFDMQorI2RlZmluZSBDT05GSUdfRU1BQzFfTUlJX01PREUJCUVNQUNfUk1JSV9TTUlJX01PREUKKyNkZWZpbmUgQ09ORklHX0VNQUMxX1BIWUNUUkxESVMJCTEKKworLyoKKyAqIE1ESU8gZHJpdmVyCisgKi8KKyNkZWZpbmUgQ09ORklHX01JSQorI2RlZmluZSBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04KKyNkZWZpbmUgQ09ORklHX0VNQUMwX01EQ0xPQ0sJCTI1MDAwMDAKKworI2RlZmluZSBDT05GSUdfRU1BQzFfTURDTE9DSwkJMjUwMDAwMAorI2RlZmluZSBDT05GSUdfRU1BQzFfUEhZX0FERFIJCTB4MAorCisvKgorICogU1BJIGRyaXZlcgorICovCisjZGVmaW5lIENPTkZJR19TUEkJCQkJLyogZGVmaW5lIHRvIGVuYWJsZSBTUEkgdXNpbmcgKi8KKworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1BPTEFSSVRZCQkxCQkvKiBJbmFjdGl2ZSBzdGF0ZSBvZiBzZXJpYWwgY2xvY2sgaXMgaGlnaCAqLworI2RlZmluZSBDRkdfU1BJX0NMT0NLX1BIQVNFCQkxCQkvKiBTZXJpYWwgQ2xvY2sgdG9nZ2xlcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGRhdGEgYml0ICovCisjZGVmaW5lIENGR19TUElfRlJBTUVTSVpFIAkJOAkJLyogZGVmaW5lIHRoZSBTUEkgZnJhbWUgc2l6ZSBpbiBiaXRzLiA4LWJpdCBzdXBwb3J0ZWQgb25seSAqLworCisjZGVmaW5lIENGR19TUElfQ0xPQ0tfU1BFRUQJCTQwMDAwMDAJCS8qIHRoZSBTUEkgc3BlZWQgaW4gSHogKi8KKworCisvKgorICogU2hlbGwgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJCShDRkdfQ01EX0ZMQVNIIHwgQ0ZHX0NNRF9FTlYgfCBDRkdfQ01EX01FTU9SWSB8IENGR19DTURfUlVOIHwgQ0ZHX0NNRF9ORVQgfCBcCisJCQkJCSBDRkdfQ01EX01JSSB8IENGR19DTURfRUxGIHwgQ0ZHX0NNRF9OQU5EIHwgQ0ZHX0NNRF9TUEkpCisKKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkJKi8KKyNkZWZpbmUgQ0ZHX1BST01QVAkJIkNvbWNlcnRvLTgwMCA+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkyNTYJCQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDRkdfTUFYQVJHUwkJMTYJCQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkoQ0ZHX0NCU0laRSArIHNpemVvZihDRkdfUFJPTVBUKSArIDE2KQkvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworCisvKgorICogVXNlciBJbnRlcmZhY2UKKyAqLworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCVwKKwkidGZ0cGRpcj0uXDAiCQkJXAorCSJuZnNkaXI9L2hvbWUvbmZzL2ZzbWluaW1hbC1kZWJpYW5fc2FyZ2UtMC4xM1wwIgkJCVwKKwkibXNwbmFtZT1maXJtd2FyZS5heGZcMCIJXAorCSJjc3BuYW1lPXpJbWFnZVwwIgkJXAorCSJmc25hbWU9ZnNpbWFnZS5qZmZzMlwwIglcCisJIm10ZHBhcnRzPSIgTVREUEFSVFNfREVGQVVMVCAiXDAiCVwKKwkidXBkYXRlYm9vdD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS91LWJvb3QuYmluOyBlcmFzZSAxOjAtMjsgY3AuYiAke2ZpbGVhZGRyfSAxMTAwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWJvb3ROT1I9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vdS1ib290LmJpbjsgZXJhc2UgMjowLTI7IGNwLmIgJHtmaWxlYWRkcn0gODAwMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVjc3BOT1I9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtjc3BuYW1lfTsgZXJhc2UgMjo0LTMxOyBjcC5iICR7ZmlsZWFkZHJ9IDgwMDQwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlbXNwTk9SPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7bXNwbmFtZX07IGVyYXNlIDI6MzItNjM7IGNwLmIgJHtmaWxlYWRkcn0gODAyMDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJ1cGRhdGVmc05PUj10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBlcmFzZSAyOjY0LTEyODsgY3AuYiAke2ZpbGVhZGRyfSA4MDQwMDAwMCAke2ZpbGVzaXplfVwwIglcCisJInVwZGF0ZWNzcE5BTkQ9dGZ0cCAxMDAwMDAwICR7dGZ0cGRpcn0vJHtjc3BuYW1lfTsgbmFuZCBlcmFzZSAwIDIwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlbXNwTkFORD10ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBuYW5kIGVyYXNlIDIwMDAwMCAyMDAwMDA7IG5hbmQgd3JpdGUuamZmczIgJHtmaWxlYWRkcn0gMjAwMDAwICR7ZmlsZXNpemV9XDAiCVwKKwkidXBkYXRlZnNOQU5EPXRmdHAgMTAwMDAwMCAke3RmdHBkaXJ9LyR7ZnNuYW1lfTsgbmFuZCBlcmFzZSA0MDAwMDAgZmMwMDAwMDsgbmFuZCB3cml0ZS5qZmZzMiAke2ZpbGVhZGRyfSA0MDAwMDAgJHtmaWxlc2l6ZX1cMCIJXAorCSJib290dHQ9cnVuIHNldGJvb3RhcmdzOyB0ZnRwIDEwMDAwMDAgJHt0ZnRwZGlyfS8ke21zcG5hbWV9OyBsb2FkbXNwICR7ZmlsZWFkZHJ9ICR7ZmlsZXNpemV9OyB0ZnRwIDIwMDAwMDAgJHt0ZnRwZGlyfS8ke2NzcG5hbWV9OyBib290Y29tY2VydG8gJHtmaWxlYWRkcn1cMCIJXAorCSJib290b289cnVuIHNldGJvb3RhcmdzOyBsb2FkbXNwIDgwMjAwMDAwIDIwMDAwMDsgY3AuYiA4MDA0MDAwMCAyMDAwMDAwIDIwMDAwMDsgYm9vdGNvbWNlcnRvIDIwMDAwMDBcMCIJXAorCSJib290YWE9cnVuIHNldGJvb3RhcmdzOyBuYW5kIHJlYWQuamZmczIgMTAwMDAwMCAyMDAwMDAgMjAwMDAwOyBsb2FkbXNwIDEwMDAwMDAgMjAwMDAwOyBuYW5kIHJlYWQuamZmczIgMjAwMDAwMCAwIDIwMDAwMDsgYm9vdGNvbWNlcnRvIDIwMDAwMDBcMCIJXAorCSJtdGRib290PXNldGVudiBib290YXJncyByb290PS9kZXYvbXRkYmxvY2syIHJ3IHJvb3Rmc3R5cGU9amZmczJcMCIJXAorCSJuZnNib290PXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9JHtzZXJ2ZXJpcH06JHtuZnNkaXJ9XDAiCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGlwPSR7aXBhZGRyfToke3NlcnZlcmlwfToke2dhdGV3YXlpcH06JHtuZXRtYXNrfTo6ZXRoMFwwIglcCisJImFkZHR0eT1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gY29uc29sZT10dHlTMCwke2JhdWRyYXRlfVwwIglcCisJImFkZG10ZD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gJHttdGRwYXJ0c31cMCIJXAorCSJzZXRib290YXJncz1ydW4gbXRkYm9vdCBhZGR0dHkgYWRkaXAgYWRkbXRkXDAiCisKKyNkZWZpbmUgQ09ORklHX0VUSEFERFIJCTAwOmFhOmJiOmNjOmRkOmVlCisjZGVmaW5lIENPTkZJR19FVEgxQUREUiAgICAgICAgIDAwOmFhOmJiOmNjOmRkOmZmCisjZGVmaW5lIENPTkZJR19JUEFERFIJCTE5Mi4xNjguMC4yCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkJMTkyLjE2OC4wLjMKKyNkZWZpbmUgQ09ORklHX0dBVEVXQVlJUAkxOTIuMTY4LjAuMQorI2RlZmluZSBDT05GSUdfTkVUTUFTSwkJMjU1LjI1NS4yNTUuMAorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCQkzCisKKworI2luY2x1ZGUgPGNtZF9jb25mZGVmcy5oPgorCisvKiBJbmNsdWRlIGJhc2ljIE1NVSBzdXBwb3J0IGlmIEVMRiBzdXBwb3J0IGlzIGluY2x1ZGVkCisgKgorICogTk9URToga2VlcCB0aGlzIHN0dWZmIGFmdGVyICJjbWRfY29uZmRlZnMuaCIgaW5jbHVkZQorICovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRUxGKQorI2RlZmluZSBVU0VfOTIwVF9NTVUKKyNlbmRpZgorCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkJCTB4MTAwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcyAqLworCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJQ0ZHX0xPQURfQUREUgkJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQJCShDRkdfTUVNVEVTVF9TVEFSVCArIDB4ODAwMDAwKQorCisjZGVmaW5lIEJPQVJEX0xBVEVfSU5JVAorI2RlZmluZSBNU1BfQk9UVE9NX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MTAwMDAwMAkvKiAxNiBNaUIgcmVzZXJ2ZWQgZm9yIE1TUCAqLworI2RlZmluZSBNU1BfVE9QX01FTU9SWV9SRVNFUlZFRF9TSVpFCTB4MDEwMDAwMAkvKiAxIE1pQiByZXNlcnZlZCBmb3IgTVNQICovCisKKy8qCisgKiBOZXR3b3JrIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTkVUX1JFVFJZX0NPVU5UCQk1CisKKy8qCisgKiBGbGFzaCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNMDQwX0RSSVZFUgkJCQkvKiBlbmFibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisvLyN1bmRlZiBDRkdfRkxBU0hfQU0wNDBfRFJJVkVSCQkJCS8qIGRpc2FibGUgQU0wNDAgZmxhc2ggZHJpdmVyICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0FNTFY2NDBVX0RSSVZFUgkJCS8qIGVuYWJsZSBBTUxWNjQwVSBmbGFzaCBkcml2ZXIgKi8KKy8vI3VuZGVmIENGR19GTEFTSF9BTUxWNjQwVV9EUklWRVIJCQkvKiBkaXNhYmxlIEFNTFY2NDBVIGZsYXNoIGRyaXZlciAqLworI2RlZmluZSBDRkdfRkxBU0hfQU1MVjY0MFVfU0laRQkJMHg4MDAwMDAJLyogKEFjZXNzaWJsZSkgU2l6ZSBvZiB0aGUgQU1MVjY0MFUgZmxhc2ggZGV2aWNlICovCisKKy8vI2RlZmluZSBDRkdfRkxBU0hfQ0ZJX0RSSVZFUgkJCS8qIGVuYWJsZSBDRkkgZHJpdmVyICovCisjdW5kZWYgQ0ZHX0ZMQVNIX0NGSV9EUklWRVIJCQkvKiBkaXNhYmxlIENGSSBkcml2ZXIgKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJCTEyOAkvKiBtYXggIyBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisvLyNkZWZpbmUgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KKworI2RlZmluZSBQSFlTX0ZMQVNIMgkJCTB4ODAwMDAwMDAJLyogRmxhc2ggQmFuayAjMiAqLworCisjZGVmaW5lIFBIWVNfRkxBU0gxCQkJRVhQX0NTQk9PVF9CQVNFQUREUgkvKiBGbGFzaCBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfRkxBU0gxX1NFQ1RfU0laRQkJMHgwMDAxMDAwMAkvKiA2NCBLaUIgc2VjdG9ycyAqLworCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJCTIJLyogbWF4IG51bSBvZiBmbGFzaCBiYW5rcyAqLworI2RlZmluZSBDRkdfRkxBU0hfQkFOS1NfTElTVAkJe1BIWVNfRkxBU0gxLCBQSFlTX0ZMQVNIMn0KKworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkJKDIgKiBDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCQkoMiAqIENGR19IWikJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKworLyoKKyAqIENGSSBkcml2ZXIgCisgKi8KKyNpZiBkZWZpbmVkKENGR19GTEFTSF9DRklfRFJJVkVSKQorI2RlZmluZSBDRkdfRkxBU0hfQ0ZJCQkJCS8qIGZsYXNoIGlzIENGSSBjb25mb3JtYW50ICAgICAgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUJCS8qIHVzZSBidWZmZXJlZCB3cml0ZXMgKDIweCBmYXN0ZXIpICovCisjZGVmaW5lIENGR19GTEFTSF9RVUlFVF9URVNUCisKKy8qCisgKiBNb25pdG9yIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgICAgICAJUEhZU19GTEFTSDEKKyNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOICAgICAgICAgCSgzICogUEhZU19GTEFTSDFfU0VDVF9TSVpFKQkvKiBSZXNlcnZlIDY0IEtpQiBmb3IgTW9uaXRvciAqLworCisjZW5kaWYKKworCisvKgorICogRW52aXJvbWVudCBpbiBmbGFzaAorICovCisjZGVmaW5lIENGR19FTlZfSVNfSU5fRkxBU0gKKworI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9GTEFTSCkKKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkJKFBIWVNfRkxBU0gxICsgMyAqIFBIWVNfRkxBU0gxX1NFQ1RfU0laRSkJLyogS2VlcCAzIHNlY3RvcnMgZm9yIFUtYm9vdCBpbWFnZSAqLworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkJUEhZU19GTEFTSDFfU0VDVF9TSVpFCisvLyNkZWZpbmUgQ0ZHX0VOVl9BRERSX1JFRFVORAkJKENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFKQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkJMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgMTZLaUIgKi8KKworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorCisvKgorICogTkFORCBDb25maWd1cmF0aW9uCisgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9OQU5EKQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkJKEVYUF9DU1AwX0JBU0VBRERSICsgMHg5MDAwKQorI2RlZmluZSBDRkdfTUFYX05BTkRfREVWSUNFCQkxCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTCQkJMQorI2RlZmluZSBDT05GSUdfSkZGUzJfTkFORAorCisjZW5kaWYKKworLyogTkFORCBHUElPcyBjb25maWcgKi8KKyNkZWZpbmUgQ0ZHX05BTkRfQlJfR1BJTwkxCisjZGVmaW5lIENGR19OQU5EX0NFX0dQSU8JMworI2RlZmluZSBDRkdfTkFORF9DTEVfR1BJTwk0CisjZGVmaW5lIENGR19OQU5EX0FMRV9HUElPCTUKKworCisvKiBDUExEIHJlZ2lzdGVycyAqLworI2RlZmluZSBDUExEX1JFU0VUX0NUUkwJCQkoRVhQX0NTUDBfQkFTRUFERFIgKyAweDMwMDApCQkJLyogUmVzZXQgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDUExEX0lOVE1BU0sJCQkoRVhQX0NTUDBfQkFTRUFERFIgKyAweDUwMDApCQkJLyogSW50ZXJydXB0IE1hc2sgcmVnaXN0ZXIgKi8KKworCisjZGVmaW5lIEVTV0lUQ0hfT1VUX09GX1JFU0VUCQkweDgwCQkvKiBFdGhlcm5ldCBzd2l0Y2ggb3V0IG9mIHJlc2V0ICovCisjZGVmaW5lIEVTV0lUQ0hfSVJRTUFTSwkJCTB4MDgJCS8qIEV0aGVybmV0IHN3aXRjaCBpbnRlcnJ1cHQgbWFzayAqLworCisjZGVmaW5lIEVTV0lUQ0hfU1BJX0NTICAgICAgICAgICAgICAgICAoMSA8PCAyKQorCisvKgorICogSkZGUzIgQ29uZmlndXJhdGlvbgorICovCisvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfSkZGUzJfQ01ETElORQorI2RlZmluZSBNVERJRFNfREVGQVVMVAkJIm5hbmQwPWNvbWNlcnRvX25hbmQwLG5vcjA9Y29tY2VydG9fbm9yMCIKKyNkZWZpbmUgTVREUEFSVFNfREVGQVVMVAkibXRkcGFydHM9Y29tY2VydG9fbmFuZDA6Mm0oY3NwKSwybShtc3ApLDI1Mm0oZnMpO2NvbWNlcnRvX25vcjA6MTkyayhib290bG9hZGVyKSw2NGsoYm9vdGxvYWRlciBlbnYpLDE3OTJrKGNzcCksMm0obXNwKSw0bShmcykiCisKKyNkZWZpbmUgQ0ZHX1JFRkNMS0ZSRVEJCTEwMDAwMDAwCS8qIDEwIE1IeiAqLworCisjZGVmaW5lIENGR19IWgkJCTEwMDAKKyNkZWZpbmUgQ0ZHX0haX0NMT0NLCQkxMzMwMDAwMDAJLyogMTMzIE1IeiAqLworCisKKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2Vycm9yIENPTkZJR19VU0VfSVJRIG5vdCBzdXBwb3J0ZWQKKyNlbmRpZgorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcmFtZnMvY3JhbWZzX2ZzLmggYi9pbmNsdWRlL2NyYW1mcy9jcmFtZnNfZnMuaAppbmRleCA5ZjFiMWQ1Li5mNjllY2U2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NyYW1mcy9jcmFtZnNfZnMuaAorKysgYi9pbmNsdWRlL2NyYW1mcy9jcmFtZnNfZnMuaApAQCAtODQsNyArODQsNyBAQAogCQkJCXwgQ1JBTUZTX0ZMQUdfV1JPTkdfU0lHTkFUVVJFIFwKIAkJCQl8IENSQU1GU19GTEFHX1NISUZURURfUk9PVF9PRkZTRVQgKQogCi0jaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorI2lmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSB8fCAoZGVmaW5lZChDT05GSUdfQ09NQ0VSVE8pICYmIChfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOKSkKICNkZWZpbmUgQ1JBTUZTXzE2KHgpCSh4KQogI2RlZmluZSBDUkFNRlNfMjQoeCkJKHgpCiAjZGVmaW5lIENSQU1GU18zMih4KQkoeCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGl2NjQuaCBiL2luY2x1ZGUvZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODMzMTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kaXY2NC5oCkBAIC0wLDAgKzEsNDkgQEAKKyNpZm5kZWYgX0FTTV9HRU5FUklDX0RJVjY0X0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0RJVjY0X0gKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQmVybmFyZG8gSW5ub2NlbnRpIDxiZXJuaWVAZGV2ZWxlci5jb20+CisgKiBCYXNlZCBvbiBmb3JtZXIgYXNtLXBwYy9kaXY2NC5oIGFuZCBhc20tbTY4a25vbW11L2RpdjY0LmgKKyAqCisgKiBUaGUgc2VtYW50aWNzIG9mIGRvX2RpdigpIGFyZToKKyAqCisgKiB1aW50MzJfdCBkb19kaXYodWludDY0X3QgKm4sIHVpbnQzMl90IGJhc2UpCisgKiB7CisgKgl1aW50MzJfdCByZW1haW5kZXIgPSAqbiAlIGJhc2U7CisgKgkqbiA9ICpuIC8gYmFzZTsKKyAqCXJldHVybiByZW1haW5kZXI7CisgKiB9CisgKgorICogTk9URTogbWFjcm8gcGFyYW1ldGVyIG4gaXMgZXZhbHVhdGVkIG11bHRpcGxlIHRpbWVzLAorICogICAgICAgYmV3YXJlIG9mIHNpZGUgZWZmZWN0cyEKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZXh0ZXJuIHVpbnQzMl90IF9fZGl2NjRfMzIodWludDY0X3QgKmRpdmlkZW5kLCB1aW50MzJfdCBkaXZpc29yKTsKKworLyogVGhlIHVubmVjZXNzYXJ5IHBvaW50ZXIgY29tcGFyZSBpcyB0aGVyZQorICogdG8gY2hlY2sgZm9yIHR5cGUgc2FmZXR5IChuIG11c3QgYmUgNjRiaXQpCisgKi8KKyMgZGVmaW5lIGRvX2RpdihuLGJhc2UpICh7CQkJCVwKKwl1aW50MzJfdCBfX2Jhc2UgPSAoYmFzZSk7CQkJXAorCXVpbnQzMl90IF9fcmVtOwkJCQkJXAorCSh2b2lkKSgoKHR5cGVvZigobikpICopMCkgPT0gKCh1aW50NjRfdCAqKTApKTsJXAorCWlmICgoKG4pID4+IDMyKSA9PSAwKSB7CQkJXAorCQlfX3JlbSA9ICh1aW50MzJfdCkobikgJSBfX2Jhc2U7CQlcCisJCShuKSA9ICh1aW50MzJfdCkobikgLyBfX2Jhc2U7CQlcCisJfSBlbHNlCQkJCQkJXAorCQlfX3JlbSA9IF9fZGl2NjRfMzIoJihuKSwgX19iYXNlKTsJXAorCV9fcmVtOwkJCQkJCVwKKyB9KQorCisvKiBXcmFwcGVyIGZvciBkb19kaXYoKS4gRG9lc24ndCBtb2RpZnkgZGl2aWRlbmQgYW5kIHJldHVybnMKKyAqIHRoZSByZXN1bHQsIG5vdCByZW1pbmRlci4KKyAqLworc3RhdGljIGlubGluZSB1aW50NjRfdCBsbGRpdih1aW50NjRfdCBkaXZpZGVuZCwgdWludDMyX3QgZGl2aXNvcikKK3sKKwl1aW50NjRfdCBfX3JlcyA9IGRpdmlkZW5kOworCWRvX2RpdihfX3JlcywgZGl2aXNvcik7CisJcmV0dXJuKF9fcmVzKTsKK30KKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19ESVY2NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2Vycm5vLmggYi9pbmNsdWRlL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkYzUxNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZXJybm8uaApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIFUtYm9vdCAtIGVycm5vLmggRXJyb3IgbnVtYmVyIGRlZmluZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgX0dFTkVSSUNfRVJSTk9fSAorI2RlZmluZSBfR0VORVJJQ19FUlJOT19ICisKKyNkZWZpbmUJRVBFUk0JCTEJLyogT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQgKi8KKyNkZWZpbmUJRU5PRU5UCQkyCS8qIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgKi8KKyNkZWZpbmUJRVNSQ0gJCTMJLyogTm8gc3VjaCBwcm9jZXNzICovCisjZGVmaW5lCUVJTlRSCQk0CS8qIEludGVycnVwdGVkIHN5c3RlbSBjYWxsICovCisjZGVmaW5lCUVJTwkJNQkvKiBJL08gZXJyb3IgKi8KKyNkZWZpbmUJRU5YSU8JCTYJLyogTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyAqLworI2RlZmluZQlFMkJJRwkJNwkvKiBBcmd1bWVudCBsaXN0IHRvbyBsb25nICovCisjZGVmaW5lCUVOT0VYRUMJCTgJLyogRXhlYyBmb3JtYXQgZXJyb3IgKi8KKyNkZWZpbmUJRUJBREYJCTkJLyogQmFkIGZpbGUgbnVtYmVyICovCisjZGVmaW5lCUVDSElMRAkJMTAJLyogTm8gY2hpbGQgcHJvY2Vzc2VzICovCisjZGVmaW5lCUVBR0FJTgkJMTEJLyogVHJ5IGFnYWluICovCisjZGVmaW5lCUVOT01FTQkJMTIJLyogT3V0IG9mIG1lbW9yeSAqLworI2RlZmluZQlFQUNDRVMJCTEzCS8qIFBlcm1pc3Npb24gZGVuaWVkICovCisjZGVmaW5lCUVGQVVMVAkJMTQJLyogQmFkIGFkZHJlc3MgKi8KKyNkZWZpbmUJRU5PVEJMSwkJMTUJLyogQmxvY2sgZGV2aWNlIHJlcXVpcmVkICovCisjZGVmaW5lCUVCVVNZCQkxNgkvKiBEZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeSAqLworI2RlZmluZQlFRVhJU1QJCTE3CS8qIEZpbGUgZXhpc3RzICovCisjZGVmaW5lCUVYREVWCQkxOAkvKiBDcm9zcy1kZXZpY2UgbGluayAqLworI2RlZmluZQlFTk9ERVYJCTE5CS8qIE5vIHN1Y2ggZGV2aWNlICovCisjZGVmaW5lCUVOT1RESVIJCTIwCS8qIE5vdCBhIGRpcmVjdG9yeSAqLworI2RlZmluZQlFSVNESVIJCTIxCS8qIElzIGEgZGlyZWN0b3J5ICovCisjZGVmaW5lCUVJTlZBTAkJMjIJLyogSW52YWxpZCBhcmd1bWVudCAqLworI2RlZmluZQlFTkZJTEUJCTIzCS8qIEZpbGUgdGFibGUgb3ZlcmZsb3cgKi8KKyNkZWZpbmUJRU1GSUxFCQkyNAkvKiBUb28gbWFueSBvcGVuIGZpbGVzICovCisjZGVmaW5lCUVOT1RUWQkJMjUJLyogTm90IGEgdHlwZXdyaXRlciAqLworI2RlZmluZQlFVFhUQlNZCQkyNgkvKiBUZXh0IGZpbGUgYnVzeSAqLworI2RlZmluZQlFRkJJRwkJMjcJLyogRmlsZSB0b28gbGFyZ2UgKi8KKyNkZWZpbmUJRU5PU1BDCQkyOAkvKiBObyBzcGFjZSBsZWZ0IG9uIGRldmljZSAqLworI2RlZmluZQlFU1BJUEUJCTI5CS8qIElsbGVnYWwgc2VlayAqLworI2RlZmluZQlFUk9GUwkJMzAJLyogUmVhZC1vbmx5IGZpbGUgc3lzdGVtICovCisjZGVmaW5lCUVNTElOSwkJMzEJLyogVG9vIG1hbnkgbGlua3MgKi8KKyNkZWZpbmUJRVBJUEUJCTMyCS8qIEJyb2tlbiBwaXBlICovCisjZGVmaW5lCUVET00JCTMzCS8qIE1hdGggYXJndW1lbnQgb3V0IG9mIGRvbWFpbiBvZiBmdW5jICovCisjZGVmaW5lCUVSQU5HRQkJMzQJLyogTWF0aCByZXN1bHQgbm90IHJlcHJlc2VudGFibGUgKi8KKyNkZWZpbmUJRURFQURMSwkJMzUJLyogUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIgKi8KKyNkZWZpbmUJRU5BTUVUT09MT05HCTM2CS8qIEZpbGUgbmFtZSB0b28gbG9uZyAqLworI2RlZmluZQlFTk9MQ0sJCTM3CS8qIE5vIHJlY29yZCBsb2NrcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRU5PU1lTCQkzOAkvKiBGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUJRU5PVEVNUFRZCTM5CS8qIERpcmVjdG9yeSBub3QgZW1wdHkgKi8KKyNkZWZpbmUJRUxPT1AJCTQwCS8qIFRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkICovCisjZGVmaW5lCUVXT1VMREJMT0NLCUVBR0FJTgkvKiBPcGVyYXRpb24gd291bGQgYmxvY2sgKi8KKyNkZWZpbmUJRU5PTVNHCQk0MgkvKiBObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZSAqLworI2RlZmluZQlFSURSTQkJNDMJLyogSWRlbnRpZmllciByZW1vdmVkICovCisjZGVmaW5lCUVDSFJORwkJNDQJLyogQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlICovCisjZGVmaW5lCUVMMk5TWU5DCTQ1CS8qIExldmVsIDIgbm90IHN5bmNocm9uaXplZCAqLworI2RlZmluZQlFTDNITFQJCTQ2CS8qIExldmVsIDMgaGFsdGVkICovCisjZGVmaW5lCUVMM1JTVAkJNDcJLyogTGV2ZWwgMyByZXNldCAqLworI2RlZmluZQlFTE5STkcJCTQ4CS8qIExpbmsgbnVtYmVyIG91dCBvZiByYW5nZSAqLworI2RlZmluZQlFVU5BVENICQk0OQkvKiBQcm90b2NvbCBkcml2ZXIgbm90IGF0dGFjaGVkICovCisjZGVmaW5lCUVOT0NTSQkJNTAJLyogTm8gQ1NJIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUwySExUCQk1MQkvKiBMZXZlbCAyIGhhbHRlZCAqLworI2RlZmluZQlFQkFERQkJNTIJLyogSW52YWxpZCBleGNoYW5nZSAqLworI2RlZmluZQlFQkFEUgkJNTMJLyogSW52YWxpZCByZXF1ZXN0IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUJRVhGVUxMCQk1NAkvKiBFeGNoYW5nZSBmdWxsICovCisjZGVmaW5lCUVOT0FOTwkJNTUJLyogTm8gYW5vZGUgKi8KKyNkZWZpbmUJRUJBRFJRQwkJNTYJLyogSW52YWxpZCByZXF1ZXN0IGNvZGUgKi8KKyNkZWZpbmUJRUJBRFNMVAkJNTcJLyogSW52YWxpZCBzbG90ICovCisKKyNkZWZpbmUJRURFQURMT0NLCUVERUFETEsKKworI2RlZmluZQlFQkZPTlQJCTU5CS8qIEJhZCBmb250IGZpbGUgZm9ybWF0ICovCisjZGVmaW5lCUVOT1NUUgkJNjAJLyogRGV2aWNlIG5vdCBhIHN0cmVhbSAqLworI2RlZmluZQlFTk9EQVRBCQk2MQkvKiBObyBkYXRhIGF2YWlsYWJsZSAqLworI2RlZmluZQlFVElNRQkJNjIJLyogVGltZXIgZXhwaXJlZCAqLworI2RlZmluZQlFTk9TUgkJNjMJLyogT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzICovCisjZGVmaW5lCUVOT05FVAkJNjQJLyogTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsgKi8KKyNkZWZpbmUJRU5PUEtHCQk2NQkvKiBQYWNrYWdlIG5vdCBpbnN0YWxsZWQgKi8KKyNkZWZpbmUJRVJFTU9URQkJNjYJLyogT2JqZWN0IGlzIHJlbW90ZSAqLworI2RlZmluZQlFTk9MSU5LCQk2NwkvKiBMaW5rIGhhcyBiZWVuIHNldmVyZWQgKi8KKyNkZWZpbmUJRUFEVgkJNjgJLyogQWR2ZXJ0aXNlIGVycm9yICovCisjZGVmaW5lCUVTUk1OVAkJNjkJLyogU3Jtb3VudCBlcnJvciAqLworI2RlZmluZQlFQ09NTQkJNzAJLyogQ29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kICovCisjZGVmaW5lCUVQUk9UTwkJNzEJLyogUHJvdG9jb2wgZXJyb3IgKi8KKyNkZWZpbmUJRU1VTFRJSE9QCTcyCS8qIE11bHRpaG9wIGF0dGVtcHRlZCAqLworI2RlZmluZQlFRE9URE9UCQk3MwkvKiBSRlMgc3BlY2lmaWMgZXJyb3IgKi8KKyNkZWZpbmUJRUJBRE1TRwkJNzQJLyogTm90IGEgZGF0YSBtZXNzYWdlICovCisjZGVmaW5lCUVPVkVSRkxPVwk3NQkvKiBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlICovCisjZGVmaW5lCUVOT1RVTklRCTc2CS8qIE5hbWUgbm90IHVuaXF1ZSBvbiBuZXR3b3JrICovCisjZGVmaW5lCUVCQURGRAkJNzcJLyogRmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZSAqLworI2RlZmluZQlFUkVNQ0hHCQk3OAkvKiBSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkICovCisjZGVmaW5lCUVMSUJBQ0MJCTc5CS8qIENhbiBub3QgYWNjZXNzIGEgbmVlZGVkIHNoYXJlZCBsaWJyYXJ5ICovCisjZGVmaW5lCUVMSUJCQUQJCTgwCS8qIEFjY2Vzc2luZyBhIGNvcnJ1cHRlZCBzaGFyZWQgbGlicmFyeSAqLworI2RlZmluZQlFTElCU0NOCQk4MQkvKiAubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkICovCisjZGVmaW5lCUVMSUJNQVgJCTgyCS8qIEF0dGVtcHRpbmcgdG8gbGluayBpbiB0b28gbWFueSBzaGFyZWQgbGlicmFyaWVzICovCisjZGVmaW5lCUVMSUJFWEVDCTgzCS8qIENhbm5vdCBleGVjIGEgc2hhcmVkIGxpYnJhcnkgZGlyZWN0bHkgKi8KKyNkZWZpbmUJRUlMU0VRCQk4NAkvKiBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgKi8KKyNkZWZpbmUJRVJFU1RBUlQJODUJLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgc2hvdWxkIGJlIHJlc3RhcnRlZCAqLworI2RlZmluZQlFU1RSUElQRQk4NgkvKiBTdHJlYW1zIHBpcGUgZXJyb3IgKi8KKyNkZWZpbmUJRVVTRVJTCQk4NwkvKiBUb28gbWFueSB1c2VycyAqLworI2RlZmluZQlFTk9UU09DSwk4OAkvKiBTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQgKi8KKyNkZWZpbmUJRURFU1RBRERSUkVRCTg5CS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQgKi8KKyNkZWZpbmUJRU1TR1NJWkUJOTAJLyogTWVzc2FnZSB0b28gbG9uZyAqLworI2RlZmluZQlFUFJPVE9UWVBFCTkxCS8qIFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCAqLworI2RlZmluZQlFTk9QUk9UT09QVAk5MgkvKiBQcm90b2NvbCBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lCUVQUk9UT05PU1VQUE9SVAk5MwkvKiBQcm90b2NvbCBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVTT0NLVE5PU1VQUE9SVAk5NAkvKiBTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVPUE5PVFNVUFAJOTUJLyogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gdHJhbnNwb3J0IGVuZHBvaW50ICovCisjZGVmaW5lCUVQRk5PU1VQUE9SVAk5NgkvKiBQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlFQUZOT1NVUFBPUlQJOTcJLyogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbCAqLworI2RlZmluZQlFQUREUklOVVNFCTk4CS8qIEFkZHJlc3MgYWxyZWFkeSBpbiB1c2UgKi8KKyNkZWZpbmUJRUFERFJOT1RBVkFJTAk5OQkvKiBDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzICovCisjZGVmaW5lCUVORVRET1dOCTEwMAkvKiBOZXR3b3JrIGlzIGRvd24gKi8KKyNkZWZpbmUJRU5FVFVOUkVBQ0gJMTAxCS8qIE5ldHdvcmsgaXMgdW5yZWFjaGFibGUgKi8KKyNkZWZpbmUJRU5FVFJFU0VUCTEwMgkvKiBOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBiZWNhdXNlIG9mIHJlc2V0ICovCisjZGVmaW5lCUVDT05OQUJPUlRFRAkxMDMJLyogU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQgKi8KKyNkZWZpbmUJRUNPTk5SRVNFVAkxMDQJLyogQ29ubmVjdGlvbiByZXNldCBieSBwZWVyICovCisjZGVmaW5lCUVOT0JVRlMJCTEwNQkvKiBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlICovCisjZGVmaW5lCUVJU0NPTk4JCTEwNgkvKiBUcmFuc3BvcnQgZW5kcG9pbnQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgKi8KKyNkZWZpbmUJRU5PVENPTk4JMTA3CS8qIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkICovCisjZGVmaW5lCUVTSFVURE9XTgkxMDgJLyogQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duICovCisjZGVmaW5lCUVUT09NQU5ZUkVGUwkxMDkJLyogVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZSAqLworI2RlZmluZQlFVElNRURPVVQJMTEwCS8qIENvbm5lY3Rpb24gdGltZWQgb3V0ICovCisjZGVmaW5lCUVDT05OUkVGVVNFRAkxMTEJLyogQ29ubmVjdGlvbiByZWZ1c2VkICovCisjZGVmaW5lCUVIT1NURE9XTgkxMTIJLyogSG9zdCBpcyBkb3duICovCisjZGVmaW5lCUVIT1NUVU5SRUFDSAkxMTMJLyogTm8gcm91dGUgdG8gaG9zdCAqLworI2RlZmluZQlFQUxSRUFEWQkxMTQJLyogT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUJRUlOUFJPR1JFU1MJMTE1CS8qIE9wZXJhdGlvbiBub3cgaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUJRVNUQUxFCQkxMTYJLyogU3RhbGUgTkZTIGZpbGUgaGFuZGxlICovCisjZGVmaW5lCUVVQ0xFQU4JCTExNwkvKiBTdHJ1Y3R1cmUgbmVlZHMgY2xlYW5pbmcgKi8KKyNkZWZpbmUJRU5PVE5BTQkJMTE4CS8qIE5vdCBhIFhFTklYIG5hbWVkIHR5cGUgZmlsZSAqLworI2RlZmluZQlFTkFWQUlMCQkxMTkJLyogTm8gWEVOSVggc2VtYXBob3JlcyBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRUlTTkFNCQkxMjAJLyogSXMgYSBuYW1lZCB0eXBlIGZpbGUgKi8KKyNkZWZpbmUJRVJFTU9URUlPCTEyMQkvKiBSZW1vdGUgSS9PIGVycm9yICovCisjZGVmaW5lCUVEUVVPVAkJMTIyCS8qIFF1b3RhIGV4Y2VlZGVkICovCisjZGVmaW5lCUVOT01FRElVTQkxMjMJLyogTm8gbWVkaXVtIGZvdW5kICovCisjZGVmaW5lCUVNRURJVU1UWVBFCTEyNAkvKiBXcm9uZyBtZWRpdW0gdHlwZSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW1hZ2UuaCBiL2luY2x1ZGUvaW1hZ2UuaAppbmRleCAyZjU3NWZkLi5hMWQ1Nzc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ltYWdlLmgKKysrIGIvaW5jbHVkZS9pbWFnZS5oCkBAIC0zMSw2ICszMSwxOCBAQAogI2lmbmRlZiBfX0lNQUdFX0hfXwogI2RlZmluZSBfX0lNQUdFX0hfXwogCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8Y29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vdS1ib290Lmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19GSVQpCisjaW5jbHVkZSA8ZmR0Lmg+CisjaW5jbHVkZSA8bGliZmR0Lmg+CisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KKyNkZWZpbmUgQ09ORklHX01ENQkJLyogRklUIGltYWdlcyBuZWVkIE1ENSBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19TSEExCQkvKiBhbmQgU0hBMSAqLworI2VuZGlmCisKIC8qCiAgKiBPcGVyYXRpbmcgU3lzdGVtIENvZGVzCiAgKi8KQEAgLTU1LDYgKzY3LDggQEAKICNkZWZpbmUgSUhfT1NfUlRFTVMJCTE4CS8qIFJURU1TCSovCiAjZGVmaW5lIElIX09TX0FSVE9TCQkxOQkvKiBBUlRPUwkqLwogI2RlZmluZSBJSF9PU19VTklUWQkJMjAJLyogVW5pdHkgT1MJKi8KKyNkZWZpbmUgSUhfT1NfSU5URUdSSVRZCQkyMQkvKiBJTlRFR1JJVFkJKi8KKyNkZWZpbmUgSUhfT1NfT1NFCQkyMgkvKiBPU0UJCSovCiAKIC8qCiAgKiBDUFUgQXJjaGl0ZWN0dXJlIENvZGVzIChzdXBwb3J0ZWQgYnkgTGludXgpCkBAIC03Nyw2ICs5MSwyOCBAQAogI2RlZmluZSBJSF9DUFVfTklPUzIJCTE1CS8qIE5pb3MtSUkJKi8KICNkZWZpbmUgSUhfQ1BVX0JMQUNLRklOCQkxNgkvKiBCbGFja2ZpbgkqLwogI2RlZmluZSBJSF9DUFVfQVZSMzIJCTE3CS8qIEFWUjMyCSovCisjZGVmaW5lIElIX0FSQ0hfSU5WQUxJRAkJMAkvKiBJbnZhbGlkIENQVQkqLworI2RlZmluZSBJSF9BUkNIX0FMUEhBCQkxCS8qIEFscGhhCSovCisjZGVmaW5lIElIX0FSQ0hfQVJNCQkyCS8qIEFSTQkJKi8KKyNkZWZpbmUgSUhfQVJDSF9JMzg2CQkzCS8qIEludGVsIHg4NgkqLworI2RlZmluZSBJSF9BUkNIX0lBNjQJCTQJLyogSUE2NAkJKi8KKyNkZWZpbmUgSUhfQVJDSF9NSVBTCQk1CS8qIE1JUFMJCSovCisjZGVmaW5lIElIX0FSQ0hfTUlQUzY0CQk2CS8qIE1JUFMJIDY0IEJpdCAqLworI2RlZmluZSBJSF9BUkNIX1BQQwkJNwkvKiBQb3dlclBDCSovCisjZGVmaW5lIElIX0FSQ0hfUzM5MAkJOAkvKiBJQk0gUzM5MAkqLworI2RlZmluZSBJSF9BUkNIX1NICQk5CS8qIFN1cGVySAkqLworI2RlZmluZSBJSF9BUkNIX1NQQVJDCQkxMAkvKiBTcGFyYwkqLworI2RlZmluZSBJSF9BUkNIX1NQQVJDNjQJCTExCS8qIFNwYXJjIDY0IEJpdCAqLworI2RlZmluZSBJSF9BUkNIX002OEsJCTEyCS8qIE02OEsJCSovCisjZGVmaW5lIElIX0FSQ0hfTUlDUk9CTEFaRQkxNAkvKiBNaWNyb0JsYXplICAgKi8KKyNkZWZpbmUgSUhfQVJDSF9OSU9TMgkJMTUJLyogTmlvcy1JSQkqLworI2RlZmluZSBJSF9BUkNIX0JMQUNLRklOCTE2CS8qIEJsYWNrZmluCSovCisjZGVmaW5lIElIX0FSQ0hfQVZSMzIJCTE3CS8qIEFWUjMyCSovCisjZGVmaW5lIElIX0FSQ0hfU1QyMDAJICAgICAgICAxOAkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1QyMDAgICovCisjZGVmaW5lIElIX0FSQ0hfU0FOREJPWAkJMTkJLyogU2FuZGJveCBhcmNoaXRlY3R1cmUgKHRlc3Qgb25seSkgKi8KKyNkZWZpbmUgSUhfQVJDSF9ORFMzMgkgICAgICAgIDIwCS8qIEFOREVTIFRlY2hub2xvZ3kgLSBORFMzMiAgKi8KKyNkZWZpbmUgSUhfQVJDSF9PUEVOUklTQyAgICAgICAgMjEJLyogT3BlblJJU0MgMTAwMCAgKi8KKwogCiAvKgogICogSW1hZ2UgVHlwZXMKQEAgLTEyNiw2ICsxNjIsMTIgQEAKICNkZWZpbmUgSUhfVFlQRV9TQ1JJUFQJCTYJLyogU2NyaXB0IGZpbGUJCQkqLwogI2RlZmluZSBJSF9UWVBFX0ZJTEVTWVNURU0JNwkvKiBGaWxlc3lzdGVtIEltYWdlIChhbnkgdHlwZSkJKi8KICNkZWZpbmUgSUhfVFlQRV9GTEFURFQJCTgJLyogQmluYXJ5IEZsYXQgRGV2aWNlIFRyZWUgQmxvYgkqLworI2RlZmluZSBJSF9UWVBFX0tXQklNQUdFCTkJLyogS2lya3dvb2QgQm9vdCBJbWFnZQkJKi8KKyNkZWZpbmUgSUhfVFlQRV9JTVhJTUFHRQkxMAkvKiBGcmVlc2NhbGUgSU1YQm9vdCBJbWFnZQkqLworI2RlZmluZSBJSF9UWVBFX1VCTElNQUdFCTExCS8qIERhdmluY2kgVUJMIEltYWdlCQkqLworI2RlZmluZSBJSF9UWVBFX09NQVBJTUFHRQkxMgkvKiBUSSBPTUFQIENvbmZpZyBIZWFkZXIgSW1hZ2UJKi8KKyNkZWZpbmUgSUhfVFlQRV9BSVNJTUFHRQkxMwkvKiBUSSBEYXZpbmNpIEFJUyBJbWFnZQkJKi8KKyNkZWZpbmUgSUhfVFlQRV9LRVJORUxfTk9MT0FECTE0CS8qIE9TIEtlcm5lbCBJbWFnZSwgY2FuIHJ1biBmcm9tIGFueSBsb2FkIGFkZHJlc3MgKi8KIAogLyoKICAqIENvbXByZXNzaW9uIFR5cGVzCkBAIC0xMzMsNiArMTc1LDggQEAKICNkZWZpbmUgSUhfQ09NUF9OT05FCQkwCS8qICBObwkgQ29tcHJlc3Npb24gVXNlZAkqLwogI2RlZmluZSBJSF9DT01QX0daSVAJCTEJLyogZ3ppcAkgQ29tcHJlc3Npb24gVXNlZAkqLwogI2RlZmluZSBJSF9DT01QX0JaSVAyCQkyCS8qIGJ6aXAyIENvbXByZXNzaW9uIFVzZWQJKi8KKyNkZWZpbmUgSUhfQ09NUF9MWk1BCQkzCS8qIGx6bWEgIENvbXByZXNzaW9uIFVzZWQJKi8KKyNkZWZpbmUgSUhfQ09NUF9MWk8JCTQJLyogbHpvICAgQ29tcHJlc3Npb24gVXNlZAkqLwogCiAjZGVmaW5lIElIX01BR0lDCTB4MjcwNTE5NTYJLyogSW1hZ2UgTWFnaWMgTnVtYmVyCQkqLwogI2RlZmluZSBJSF9OTUxFTgkJMzIJLyogSW1hZ2UgTmFtZSBMZW5ndGgJCSovCkBAIC0xNDAsNyArMTg0LDYgQEAKIC8qCiAgKiBhbGwgZGF0YSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGFrYSBuYXR1cmFsIGFrYSBiaWdlbmRpYW4pCiAgKi8KLQogdHlwZWRlZiBzdHJ1Y3QgaW1hZ2VfaGVhZGVyIHsKIAl1aW50MzJfdAlpaF9tYWdpYzsJLyogSW1hZ2UgSGVhZGVyIE1hZ2ljIE51bWJlcgkqLwogCXVpbnQzMl90CWloX2hjcmM7CS8qIEltYWdlIEhlYWRlciBDUkMgQ2hlY2tzdW0JKi8KQEAgLTE1Niw1ICsxOTksNDQ3IEBACiAJdWludDhfdAkJaWhfbmFtZVtJSF9OTUxFTl07CS8qIEltYWdlIE5hbWUJCSovCiB9IGltYWdlX2hlYWRlcl90OwogCit0eXBlZGVmIHN0cnVjdCBpbWFnZV9pbmZvIHsKKwl1bG9uZwkJc3RhcnQsIGVuZDsJCS8qIHN0YXJ0L2VuZCBvZiBibG9iICovCisJdWxvbmcJCWltYWdlX3N0YXJ0LCBpbWFnZV9sZW47IC8qIHN0YXJ0IG9mIGltYWdlIHdpdGhpbiBibG9iLCBsZW4gb2YgaW1hZ2UgKi8KKwl1bG9uZwkJbG9hZDsJCQkvKiBsb2FkIGFkZHIgZm9yIHRoZSBpbWFnZSAqLworCXVpbnQ4X3QJCWNvbXAsIHR5cGUsIG9zOwkJLyogY29tcHJlc3Npb24sIHR5cGUgb2YgaW1hZ2UsIG9zIHR5cGUgKi8KK30gaW1hZ2VfaW5mb190OworCisvKgorICogTGVnYWN5IGFuZCBGSVQgZm9ybWF0IGhlYWRlcnMgdXNlZCBieSBkb19ib290bSgpIGFuZCBkb19ib290bV88b3M+KCkKKyAqIHJvdXRpbmVzLgorICovCit0eXBlZGVmIHN0cnVjdCBib290bV9oZWFkZXJzIHsKKwkvKgorCSAqIExlZ2FjeSBvcyBpbWFnZSBoZWFkZXIsIGlmIGl0IGlzIGEgbXVsdGkgY29tcG9uZW50IGltYWdlCisJICogdGhlbiBib290X2dldF9yYW1kaXNrKCkgYW5kIGdldF9mZHQoKSB3aWxsIGF0dGVtcHQgdG8gZ2V0CisJICogZGF0YSBmcm9tIHNlY29uZCBhbmQgdGhpcmQgY29tcG9uZW50IGFjY29yZGluZ2x5LgorCSAqLworCWltYWdlX2hlYWRlcl90CSpsZWdhY3lfaGRyX29zOwkJLyogaW1hZ2UgaGVhZGVyIHBvaW50ZXIgKi8KKwlpbWFnZV9oZWFkZXJfdAlsZWdhY3lfaGRyX29zX2NvcHk7CS8qIGhlYWRlciBjb3B5ICovCisJdWxvbmcJCWxlZ2FjeV9oZHJfdmFsaWQ7CisKKyNpZiBkZWZpbmVkKENPTkZJR19GSVQpCisJY29uc3QgY2hhcgkqZml0X3VuYW1lX2NmZzsJLyogY29uZmlndXJhdGlvbiBub2RlIHVuaXQgbmFtZSAqLworCisJdm9pZAkJKmZpdF9oZHJfb3M7CS8qIG9zIEZJVCBpbWFnZSBoZWFkZXIgKi8KKwljb25zdCBjaGFyCSpmaXRfdW5hbWVfb3M7CS8qIG9zIHN1YmltYWdlIG5vZGUgdW5pdCBuYW1lICovCisJaW50CQlmaXRfbm9mZnNldF9vczsJLyogb3Mgc3ViaW1hZ2Ugbm9kZSBvZmZzZXQgKi8KKworCXZvaWQJCSpmaXRfaGRyX3JkOwkvKiBpbml0IHJhbWRpc2sgRklUIGltYWdlIGhlYWRlciAqLworCWNvbnN0IGNoYXIJKmZpdF91bmFtZV9yZDsJLyogaW5pdCByYW1kaXNrIHN1YmltYWdlIG5vZGUgdW5pdCBuYW1lICovCisJaW50CQlmaXRfbm9mZnNldF9yZDsJLyogaW5pdCByYW1kaXNrIHN1YmltYWdlIG5vZGUgb2Zmc2V0ICovCisKKwl2b2lkCQkqZml0X2hkcl9mZHQ7CS8qIEZEVCBibG9iIEZJVCBpbWFnZSBoZWFkZXIgKi8KKwljb25zdCBjaGFyCSpmaXRfdW5hbWVfZmR0OwkvKiBGRFQgYmxvYiBzdWJpbWFnZSBub2RlIHVuaXQgbmFtZSAqLworCWludAkJZml0X25vZmZzZXRfZmR0Oy8qIEZEVCBibG9iIHN1YmltYWdlIG5vZGUgb2Zmc2V0ICovCisjZW5kaWYKKworI2lmbmRlZiBVU0VfSE9TVENDCisJaW1hZ2VfaW5mb190CW9zOwkJLyogb3MgaW1hZ2UgaW5mbyAqLworCXVsb25nCQllcDsJCS8qIGVudHJ5IHBvaW50IG9mIE9TICovCisKKwl1bG9uZwkJcmRfc3RhcnQsIHJkX2VuZDsvKiByYW1kaXNrIHN0YXJ0L2VuZCAqLworCisjaWZkZWYgQ09ORklHX09GX0xJQkZEVAorCWNoYXIJCSpmdF9hZGRyOwkvKiBmbGF0IGRldiB0cmVlIGFkZHJlc3MgKi8KKyNlbmRpZgorCXVsb25nCQlmdF9sZW47CQkvKiBsZW5ndGggb2YgZmxhdCBkZXZpY2UgdHJlZSAqLworCisJdWxvbmcJCWluaXRyZF9zdGFydDsKKwl1bG9uZwkJaW5pdHJkX2VuZDsKKwl1bG9uZwkJY21kbGluZV9zdGFydDsKKwl1bG9uZwkJY21kbGluZV9lbmQ7CisJYmRfdAkJKmtiZDsKKyNlbmRpZgorCisJaW50CQl2ZXJpZnk7CQkvKiBnZXRlbnYoInZlcmlmeSIpWzBdICE9ICduJyAqLworCisjZGVmaW5lCUJPT1RNX1NUQVRFX1NUQVJUCSgweDAwMDAwMDAxKQorI2RlZmluZQlCT09UTV9TVEFURV9MT0FET1MJKDB4MDAwMDAwMDIpCisjZGVmaW5lCUJPT1RNX1NUQVRFX1JBTURJU0sJKDB4MDAwMDAwMDQpCisjZGVmaW5lCUJPT1RNX1NUQVRFX0ZEVAkJKDB4MDAwMDAwMDgpCisjZGVmaW5lCUJPT1RNX1NUQVRFX09TX0NNRExJTkUJKDB4MDAwMDAwMTApCisjZGVmaW5lCUJPT1RNX1NUQVRFX09TX0JEX1QJKDB4MDAwMDAwMjApCisjZGVmaW5lCUJPT1RNX1NUQVRFX09TX1BSRVAJKDB4MDAwMDAwNDApCisjZGVmaW5lCUJPT1RNX1NUQVRFX09TX0dPCSgweDAwMDAwMDgwKQorCWludAkJc3RhdGU7CisKKyNpZmRlZiBDT05GSUdfTE1CCisJc3RydWN0IGxtYglsbWI7CQkvKiBmb3IgbWVtb3J5IG1nbXQgKi8KKyNlbmRpZgorfSBib290bV9oZWFkZXJzX3Q7CisKK2V4dGVybiBib290bV9oZWFkZXJzX3QgaW1hZ2VzOworCisvKgorICogU29tZSBzeXN0ZW1zIChmb3IgZXhhbXBsZSBMV01PTikgaGF2ZSB2ZXJ5IHNob3J0IHdhdGNoZG9nIHBlcmlvZHM7CisgKiB3ZSBtdXN0IG1ha2Ugc3VyZSB0byBzcGxpdCBsb25nIG9wZXJhdGlvbnMgbGlrZSBtZW1tb3ZlKCkgb3IKKyAqIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyBpbnRvIHJlYXNvbmFibGUgY2h1bmtzLgorICovCisjaWZuZGVmIENIVU5LU1oKKyNkZWZpbmUgQ0hVTktTWiAoNjQgKiAxMDI0KQorI2VuZGlmCisKKyNpZm5kZWYgQ0hVTktTWl9DUkMzMgorI2RlZmluZSBDSFVOS1NaX0NSQzMyICg2NCAqIDEwMjQpCisjZW5kaWYKKworI2lmbmRlZiBDSFVOS1NaX01ENQorI2RlZmluZSBDSFVOS1NaX01ENSAoNjQgKiAxMDI0KQorI2VuZGlmCisKKyNpZm5kZWYgQ0hVTktTWl9TSEExCisjZGVmaW5lIENIVU5LU1pfU0hBMSAoNjQgKiAxMDI0KQorI2VuZGlmCisKKyNkZWZpbmUgdWltYWdlX3RvX2NwdSh4KQkJYmUzMl90b19jcHUoeCkKKyNkZWZpbmUgY3B1X3RvX3VpbWFnZSh4KQkJY3B1X3RvX2JlMzIoeCkKKworLyoKKyAqIFRyYW5zbGF0aW9uIHRhYmxlIGZvciBlbnRyaWVzIG9mIGEgc3BlY2lmaWMgdHlwZTsgdXNlZCBieQorICogZ2V0X3RhYmxlX2VudHJ5X2lkKCkgYW5kIGdldF90YWJsZV9lbnRyeV9uYW1lKCkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHRhYmxlX2VudHJ5IHsKKwlpbnQJaWQ7CisJY2hhcgkqc25hbWU7CQkvKiBzaG9ydCAoaW5wdXQpIG5hbWUgdG8gZmluZCB0YWJsZSBlbnRyeSAqLworCWNoYXIJKmxuYW1lOwkJLyogbG9uZyAob3V0cHV0KSBuYW1lIHRvIHByaW50IGZvciBtZXNzYWdlcyAqLworCWludAl2YWw7Cit9IHRhYmxlX2VudHJ5X3Q7CisKKy8qCisgKiBnZXRfdGFibGVfZW50cnlfaWQoKSBzY2FucyB0aGUgdHJhbnNsYXRpb24gdGFibGUgdHJ5aW5nIHRvIGZpbmQgYW4KKyAqIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2hvcnQgbmFtZS4gSWYgYSBtYXRjaGluZyBlbnRyeSBpcworICogZm91bmQsIGl0J3MgaWQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KKyAqLworaW50IGdldF90YWJsZV9lbnRyeV9pZChjb25zdCB0YWJsZV9lbnRyeV90ICp0YWJsZSwKKwkJY29uc3QgY2hhciAqdGFibGVfbmFtZSwgY29uc3QgY2hhciAqbmFtZSk7CisvKgorICogZ2V0X3RhYmxlX2VudHJ5X25hbWUoKSBzY2FucyB0aGUgdHJhbnNsYXRpb24gdGFibGUgdHJ5aW5nIHRvIGZpbmQKKyAqIGFuIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaWQuIElmIGEgbWF0Y2hpbmcgZW50cnkgaXMgZm91bmQsCisgKiBpdHMgbG9uZyBuYW1lIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCisgKi8KK2NoYXIgKmdldF90YWJsZV9lbnRyeV9uYW1lKGNvbnN0IHRhYmxlX2VudHJ5X3QgKnRhYmxlLCBjaGFyICptc2csIGludCBpZCk7CisKK2NvbnN0IGNoYXIgKmdlbmltZ19nZXRfb3NfbmFtZSh1aW50OF90IG9zKTsKK2NvbnN0IGNoYXIgKmdlbmltZ19nZXRfYXJjaF9uYW1lKHVpbnQ4X3QgYXJjaCk7Citjb25zdCBjaGFyICpnZW5pbWdfZ2V0X3R5cGVfbmFtZSh1aW50OF90IHR5cGUpOworY29uc3QgY2hhciAqZ2VuaW1nX2dldF9jb21wX25hbWUodWludDhfdCBjb21wKTsKK2ludCBnZW5pbWdfZ2V0X29zX2lkKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGdlbmltZ19nZXRfYXJjaF9pZChjb25zdCBjaGFyICpuYW1lKTsKK2ludCBnZW5pbWdfZ2V0X3R5cGVfaWQoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgZ2VuaW1nX2dldF9jb21wX2lkKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBnZW5pbWdfcHJpbnRfc2l6ZSh1aW50MzJfdCBzaXplKTsKKworI2lmbmRlZiBVU0VfSE9TVENDCisvKiBJbWFnZSBmb3JtYXQgdHlwZXMsIHJldHVybmVkIGJ5IF9nZXRfZm9ybWF0KCkgcm91dGluZSAqLworI2RlZmluZSBJTUFHRV9GT1JNQVRfSU5WQUxJRAkweDAwCisjZGVmaW5lIElNQUdFX0ZPUk1BVF9MRUdBQ1kJMHgwMQkvKiBsZWdhY3kgaW1hZ2VfaGVhZGVyIGJhc2VkIGZvcm1hdCAqLworI2RlZmluZSBJTUFHRV9GT1JNQVRfRklUCTB4MDIJLyogbmV3LCBsaWJmZHQgYmFzZWQgZm9ybWF0ICovCisKK2ludCBnZW5pbWdfZ2V0X2Zvcm1hdCh2b2lkICppbWdfYWRkcik7CitpbnQgZ2VuaW1nX2hhc19jb25maWcoYm9vdG1faGVhZGVyc190ICppbWFnZXMpOwordWxvbmcgZ2VuaW1nX2dldF9pbWFnZSh1bG9uZyBpbWdfYWRkcik7CisKK2ludCBib290X2dldF9yYW1kaXNrKGludCBhcmdjLCBjaGFyICogY29uc3QgYXJndltdLCBib290bV9oZWFkZXJzX3QgKmltYWdlcywKKwkJdWludDhfdCBhcmNoLCB1bG9uZyAqcmRfc3RhcnQsIHVsb25nICpyZF9lbmQpOworCisKKyNpZmRlZiBDT05GSUdfT0ZfTElCRkRUCitpbnQgYm9vdF9nZXRfZmR0KGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqIGNvbnN0IGFyZ3ZbXSwKKwkJYm9vdG1faGVhZGVyc190ICppbWFnZXMsIGNoYXIgKipvZl9mbGF0X3RyZWUsIHVsb25nICpvZl9zaXplKTsKK3ZvaWQgYm9vdF9mZHRfYWRkX21lbV9yc3ZfcmVnaW9ucyhzdHJ1Y3QgbG1iICpsbWIsIHZvaWQgKmZkdF9ibG9iKTsKK2ludCBib290X3JlbG9jYXRlX2ZkdChzdHJ1Y3QgbG1iICpsbWIsIGNoYXIgKipvZl9mbGF0X3RyZWUsIHVsb25nICpvZl9zaXplKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NZU19CT09UX1JBTURJU0tfSElHSAoraW50IGJvb3RfcmFtZGlza19oaWdoKHN0cnVjdCBsbWIgKmxtYiwgdWxvbmcgcmRfZGF0YSwgdWxvbmcgcmRfbGVuLAorCQkgIHVsb25nICppbml0cmRfc3RhcnQsIHVsb25nICppbml0cmRfZW5kKTsKKyNlbmRpZiAvKiBDT05GSUdfU1lTX0JPT1RfUkFNRElTS19ISUdIICovCisjaWZkZWYgQ09ORklHX1NZU19CT09UX0dFVF9DTURMSU5FCitpbnQgYm9vdF9nZXRfY21kbGluZShzdHJ1Y3QgbG1iICpsbWIsIHVsb25nICpjbWRfc3RhcnQsIHVsb25nICpjbWRfZW5kKTsKKyNlbmRpZiAvKiBDT05GSUdfU1lTX0JPT1RfR0VUX0NNRExJTkUgKi8KKyNpZmRlZiBDT05GSUdfU1lTX0JPT1RfR0VUX0tCRAoraW50IGJvb3RfZ2V0X2tiZChzdHJ1Y3QgbG1iICpsbWIsIGJkX3QgKiprYmQpOworI2VuZGlmIC8qIENPTkZJR19TWVNfQk9PVF9HRVRfS0JEICovCisjZW5kaWYgLyogIVVTRV9IT1NUQ0MgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBMZWdhY3kgZm9ybWF0IHNwZWNpZmljIGNvZGUgKHByZWZpeGVkIHdpdGggaW1hZ2VfKSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGltYWdlX2dldF9oZWFkZXJfc2l6ZSh2b2lkKQoreworCXJldHVybiAoc2l6ZW9mKGltYWdlX2hlYWRlcl90KSk7Cit9CisKKyNkZWZpbmUgaW1hZ2VfZ2V0X2hkcl9sKGYpIFwKKwlzdGF0aWMgaW5saW5lIHVpbnQzMl90IGltYWdlX2dldF8jI2YoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkcikgXAorCXsgXAorCQlyZXR1cm4gdWltYWdlX3RvX2NwdShoZHItPmloXyMjZik7IFwKKwl9CitpbWFnZV9nZXRfaGRyX2wobWFnaWMpCQkvKiBpbWFnZV9nZXRfbWFnaWMgKi8KK2ltYWdlX2dldF9oZHJfbChoY3JjKQkJLyogaW1hZ2VfZ2V0X2hjcmMgKi8KK2ltYWdlX2dldF9oZHJfbCh0aW1lKQkJLyogaW1hZ2VfZ2V0X3RpbWUgKi8KK2ltYWdlX2dldF9oZHJfbChzaXplKQkJLyogaW1hZ2VfZ2V0X3NpemUgKi8KK2ltYWdlX2dldF9oZHJfbChsb2FkKQkJLyogaW1hZ2VfZ2V0X2xvYWQgKi8KK2ltYWdlX2dldF9oZHJfbChlcCkJCS8qIGltYWdlX2dldF9lcCAqLworaW1hZ2VfZ2V0X2hkcl9sKGRjcmMpCQkvKiBpbWFnZV9nZXRfZGNyYyAqLworCisjZGVmaW5lIGltYWdlX2dldF9oZHJfYihmKSBcCisJc3RhdGljIGlubGluZSB1aW50OF90IGltYWdlX2dldF8jI2YoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkcikgXAorCXsgXAorCQlyZXR1cm4gaGRyLT5paF8jI2Y7IFwKKwl9CitpbWFnZV9nZXRfaGRyX2Iob3MpCQkvKiBpbWFnZV9nZXRfb3MgKi8KK2ltYWdlX2dldF9oZHJfYihhcmNoKQkJLyogaW1hZ2VfZ2V0X2FyY2ggKi8KK2ltYWdlX2dldF9oZHJfYih0eXBlKQkJLyogaW1hZ2VfZ2V0X3R5cGUgKi8KK2ltYWdlX2dldF9oZHJfYihjb21wKQkJLyogaW1hZ2VfZ2V0X2NvbXAgKi8KKworc3RhdGljIGlubGluZSBjaGFyICppbWFnZV9nZXRfbmFtZShjb25zdCBpbWFnZV9oZWFkZXJfdCAqaGRyKQoreworCXJldHVybiAoY2hhciAqKWhkci0+aWhfbmFtZTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBpbWFnZV9nZXRfZGF0YV9zaXplKGNvbnN0IGltYWdlX2hlYWRlcl90ICpoZHIpCit7CisJcmV0dXJuIGltYWdlX2dldF9zaXplKGhkcik7Cit9CisKKy8qKgorICogaW1hZ2VfZ2V0X2RhdGEgLSBnZXQgaW1hZ2UgcGF5bG9hZCBzdGFydCBhZGRyZXNzCisgKiBAaGRyOiBpbWFnZSBoZWFkZXIKKyAqCisgKiBpbWFnZV9nZXRfZGF0YSgpIHJldHVybnMgYWRkcmVzcyBvZiB0aGUgaW1hZ2UgcGF5bG9hZC4gRm9yIHNpbmdsZQorICogY29tcG9uZW50IGltYWdlcyBpdCBpcyBpbWFnZSBkYXRhIHN0YXJ0LiBGb3IgbXVsdGkgY29tcG9uZW50CisgKiBpbWFnZXMgaXQgcG9pbnRzIHRvIHRoZSBudWxsIHRlcm1pbmF0ZWQgdGFibGUgb2Ygc3ViLWltYWdlcyBzaXplcy4KKyAqCisgKiByZXR1cm5zOgorICogICAgIGltYWdlIHBheWxvYWQgZGF0YSBzdGFydCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbmxpbmUgdWxvbmcgaW1hZ2VfZ2V0X2RhdGEoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkcikKK3sKKwlyZXR1cm4gKCh1bG9uZyloZHIgKyBpbWFnZV9nZXRfaGVhZGVyX3NpemUoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaW1hZ2VfZ2V0X2ltYWdlX3NpemUoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkcikKK3sKKwlyZXR1cm4gKGltYWdlX2dldF9zaXplKGhkcikgKyBpbWFnZV9nZXRfaGVhZGVyX3NpemUoKSk7Cit9CitzdGF0aWMgaW5saW5lIHVsb25nIGltYWdlX2dldF9pbWFnZV9lbmQoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkcikKK3sKKwlyZXR1cm4gKCh1bG9uZyloZHIgKyBpbWFnZV9nZXRfaW1hZ2Vfc2l6ZShoZHIpKTsKK30KKworI2RlZmluZSBpbWFnZV9zZXRfaGRyX2woZikgXAorCXN0YXRpYyBpbmxpbmUgdm9pZCBpbWFnZV9zZXRfIyNmKGltYWdlX2hlYWRlcl90ICpoZHIsIHVpbnQzMl90IHZhbCkgXAorCXsgXAorCQloZHItPmloXyMjZiA9IGNwdV90b191aW1hZ2UodmFsKTsgXAorCX0KK2ltYWdlX3NldF9oZHJfbChtYWdpYykJCS8qIGltYWdlX3NldF9tYWdpYyAqLworaW1hZ2Vfc2V0X2hkcl9sKGhjcmMpCQkvKiBpbWFnZV9zZXRfaGNyYyAqLworaW1hZ2Vfc2V0X2hkcl9sKHRpbWUpCQkvKiBpbWFnZV9zZXRfdGltZSAqLworaW1hZ2Vfc2V0X2hkcl9sKHNpemUpCQkvKiBpbWFnZV9zZXRfc2l6ZSAqLworaW1hZ2Vfc2V0X2hkcl9sKGxvYWQpCQkvKiBpbWFnZV9zZXRfbG9hZCAqLworaW1hZ2Vfc2V0X2hkcl9sKGVwKQkJLyogaW1hZ2Vfc2V0X2VwICovCitpbWFnZV9zZXRfaGRyX2woZGNyYykJCS8qIGltYWdlX3NldF9kY3JjICovCisKKyNkZWZpbmUgaW1hZ2Vfc2V0X2hkcl9iKGYpIFwKKwlzdGF0aWMgaW5saW5lIHZvaWQgaW1hZ2Vfc2V0XyMjZihpbWFnZV9oZWFkZXJfdCAqaGRyLCB1aW50OF90IHZhbCkgXAorCXsgXAorCQloZHItPmloXyMjZiA9IHZhbDsgXAorCX0KK2ltYWdlX3NldF9oZHJfYihvcykJCS8qIGltYWdlX3NldF9vcyAqLworaW1hZ2Vfc2V0X2hkcl9iKGFyY2gpCQkvKiBpbWFnZV9zZXRfYXJjaCAqLworaW1hZ2Vfc2V0X2hkcl9iKHR5cGUpCQkvKiBpbWFnZV9zZXRfdHlwZSAqLworaW1hZ2Vfc2V0X2hkcl9iKGNvbXApCQkvKiBpbWFnZV9zZXRfY29tcCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgaW1hZ2Vfc2V0X25hbWUoaW1hZ2VfaGVhZGVyX3QgKmhkciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJuY3B5KGltYWdlX2dldF9uYW1lKGhkciksIG5hbWUsIElIX05NTEVOKTsKK30KKworaW50IGltYWdlX2NoZWNrX2hjcmMoY29uc3QgaW1hZ2VfaGVhZGVyX3QgKmhkcik7CitpbnQgaW1hZ2VfY2hlY2tfZGNyYyhjb25zdCBpbWFnZV9oZWFkZXJfdCAqaGRyKTsKKyNpZm5kZWYgVVNFX0hPU1RDQworaW50IGdldGVudl95ZXNubyhjaGFyICp2YXIpOwordWxvbmcgZ2V0ZW52X2Jvb3RtX2xvdyh2b2lkKTsKK3BoeXNfc2l6ZV90IGdldGVudl9ib290bV9zaXplKHZvaWQpOworcGh5c19zaXplX3QgZ2V0ZW52X2Jvb3RtX21hcHNpemUodm9pZCk7Cit2b2lkIG1lbW1vdmVfd2Qodm9pZCAqdG8sIHZvaWQgKmZyb20sIHNpemVfdCBsZW4sIHVsb25nIGNodW5rc3opOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IGltYWdlX2NoZWNrX21hZ2ljKGNvbnN0IGltYWdlX2hlYWRlcl90ICpoZHIpCit7CisJcmV0dXJuIChpbWFnZV9nZXRfbWFnaWMoaGRyKSA9PSBJSF9NQUdJQyk7Cit9CitzdGF0aWMgaW5saW5lIGludCBpbWFnZV9jaGVja190eXBlKGNvbnN0IGltYWdlX2hlYWRlcl90ICpoZHIsIHVpbnQ4X3QgdHlwZSkKK3sKKwlyZXR1cm4gKGltYWdlX2dldF90eXBlKGhkcikgPT0gdHlwZSk7Cit9CitzdGF0aWMgaW5saW5lIGludCBpbWFnZV9jaGVja19hcmNoKGNvbnN0IGltYWdlX2hlYWRlcl90ICpoZHIsIHVpbnQ4X3QgYXJjaCkKK3sKKwlyZXR1cm4gKGltYWdlX2dldF9hcmNoKGhkcikgPT0gYXJjaCk7Cit9CitzdGF0aWMgaW5saW5lIGludCBpbWFnZV9jaGVja19vcyhjb25zdCBpbWFnZV9oZWFkZXJfdCAqaGRyLCB1aW50OF90IG9zKQoreworCXJldHVybiAoaW1hZ2VfZ2V0X29zKGhkcikgPT0gb3MpOworfQorCit1bG9uZyBpbWFnZV9tdWx0aV9jb3VudChjb25zdCBpbWFnZV9oZWFkZXJfdCAqaGRyKTsKK3ZvaWQgaW1hZ2VfbXVsdGlfZ2V0aW1nKGNvbnN0IGltYWdlX2hlYWRlcl90ICpoZHIsIHVsb25nIGlkeCwKKwkJCXVsb25nICpkYXRhLCB1bG9uZyAqbGVuKTsKKwordm9pZCBpbWFnZV9wcmludF9jb250ZW50cyhjb25zdCB2b2lkICpoZHIpOworCisjaWZuZGVmIFVTRV9IT1NUQ0MKK3N0YXRpYyBpbmxpbmUgaW50IGltYWdlX2NoZWNrX3RhcmdldF9hcmNoKGNvbnN0IGltYWdlX2hlYWRlcl90ICpoZHIpCit7CisjaWZuZGVmIElIX0FSQ0hfREVGQVVMVAorIyBlcnJvciAicGxlYXNlIGRlZmluZSBJSF9BUkNIX0RFRkFVTFQgaW4geW91ciBhcmNoIGFzbS91LWJvb3QuaCIKKyNlbmRpZgorCXJldHVybiBpbWFnZV9jaGVja19hcmNoKGhkciwgSUhfQVJDSF9ERUZBVUxUKTsKK30KKyNlbmRpZiAvKiBVU0VfSE9TVENDICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTmV3IHVJbWFnZSBmb3JtYXQgc3BlY2lmaWMgY29kZSAocHJlZml4ZWQgd2l0aCBmaXRfKSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfRklUKQorCisjZGVmaW5lIEZJVF9JTUFHRVNfUEFUSAkJIi9pbWFnZXMiCisjZGVmaW5lIEZJVF9DT05GU19QQVRICQkiL2NvbmZpZ3VyYXRpb25zIgorCisvKiBoYXNoIG5vZGUgKi8KKyNkZWZpbmUgRklUX0hBU0hfTk9ERU5BTUUJImhhc2giCisjZGVmaW5lIEZJVF9BTEdPX1BST1AJCSJhbGdvIgorI2RlZmluZSBGSVRfVkFMVUVfUFJPUAkJInZhbHVlIgorCisvKiBpbWFnZSBub2RlICovCisjZGVmaW5lIEZJVF9EQVRBX1BST1AJCSJkYXRhIgorI2RlZmluZSBGSVRfVElNRVNUQU1QX1BST1AJInRpbWVzdGFtcCIKKyNkZWZpbmUgRklUX0RFU0NfUFJPUAkJImRlc2NyaXB0aW9uIgorI2RlZmluZSBGSVRfQVJDSF9QUk9QCQkiYXJjaCIKKyNkZWZpbmUgRklUX1RZUEVfUFJPUAkJInR5cGUiCisjZGVmaW5lIEZJVF9PU19QUk9QCQkib3MiCisjZGVmaW5lIEZJVF9DT01QX1BST1AJCSJjb21wcmVzc2lvbiIKKyNkZWZpbmUgRklUX0VOVFJZX1BST1AJCSJlbnRyeSIKKyNkZWZpbmUgRklUX0xPQURfUFJPUAkJImxvYWQiCisKKy8qIGNvbmZpZ3VyYXRpb24gbm9kZSAqLworI2RlZmluZSBGSVRfS0VSTkVMX1BST1AJCSJrZXJuZWwiCisjZGVmaW5lIEZJVF9SQU1ESVNLX1BST1AJInJhbWRpc2siCisjZGVmaW5lIEZJVF9GRFRfUFJPUAkJImZkdCIKKyNkZWZpbmUgRklUX0RFRkFVTFRfUFJPUAkiZGVmYXVsdCIKKworI2RlZmluZSBGSVRfTUFYX0hBU0hfTEVOCTIwCS8qIG1heChjcmMzMl9sZW4oNCksIHNoYTFfbGVuKDIwKSkgKi8KKworLyogY21kbGluZSBhcmd1bWVudCBmb3JtYXQgcGFyc2luZyAqLworaW50IGZpdF9wYXJzZV9jb25mKGNvbnN0IGNoYXIgKnNwZWMsIHVsb25nIGFkZHJfY3VyciwKKwkJdWxvbmcgKmFkZHIsIGNvbnN0IGNoYXIgKipjb25mX25hbWUpOworaW50IGZpdF9wYXJzZV9zdWJpbWFnZShjb25zdCBjaGFyICpzcGVjLCB1bG9uZyBhZGRyX2N1cnIsCisJCXVsb25nICphZGRyLCBjb25zdCBjaGFyICoqaW1hZ2VfbmFtZSk7CisKK3ZvaWQgZml0X3ByaW50X2NvbnRlbnRzKGNvbnN0IHZvaWQgKmZpdCk7Cit2b2lkIGZpdF9pbWFnZV9wcmludChjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCBjb25zdCBjaGFyICpwKTsKK3ZvaWQgZml0X2ltYWdlX3ByaW50X2hhc2goY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgY29uc3QgY2hhciAqcCk7CisKKy8qKgorICogZml0X2dldF9lbmQgLSBnZXQgRklUIGltYWdlIHNpemUKKyAqIEBmaXQ6IHBvaW50ZXIgdG8gdGhlIEZJVCBmb3JtYXQgaW1hZ2UgaGVhZGVyCisgKgorICogcmV0dXJuczoKKyAqICAgICBzaXplIG9mIHRoZSBGSVQgaW1hZ2UgKGJsb2IpIGluIG1lbW9yeQorICovCitzdGF0aWMgaW5saW5lIHVsb25nIGZpdF9nZXRfc2l6ZShjb25zdCB2b2lkICpmaXQpCit7CisJcmV0dXJuIGZkdF90b3RhbHNpemUoZml0KTsKK30KKworLyoqCisgKiBmaXRfZ2V0X2VuZCAtIGdldCBGSVQgaW1hZ2UgZW5kCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICoKKyAqIHJldHVybnM6CisgKiAgICAgZW5kIGFkZHJlc3Mgb2YgdGhlIEZJVCBpbWFnZSAoYmxvYikgaW4gbWVtb3J5CisgKi8KK3N0YXRpYyBpbmxpbmUgdWxvbmcgZml0X2dldF9lbmQoY29uc3Qgdm9pZCAqZml0KQoreworCXJldHVybiAodWxvbmcpZml0ICsgZmR0X3RvdGFsc2l6ZShmaXQpOworfQorCisvKioKKyAqIGZpdF9nZXRfbmFtZSAtIGdldCBGSVQgbm9kZSBuYW1lCisgKiBAZml0OiBwb2ludGVyIHRvIHRoZSBGSVQgZm9ybWF0IGltYWdlIGhlYWRlcgorICoKKyAqIHJldHVybnM6CisgKiAgICAgTlVMTCwgb24gZXJyb3IKKyAqICAgICBwb2ludGVyIHRvIG5vZGUgbmFtZSwgb24gc3VjY2VzcworICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmZpdF9nZXRfbmFtZShjb25zdCB2b2lkICpmaXRfaGRyLAorCQlpbnQgbm9mZnNldCwgaW50ICpsZW4pCit7CisJcmV0dXJuIGZkdF9nZXRfbmFtZShmaXRfaGRyLCBub2Zmc2V0LCBsZW4pOworfQorCitpbnQgZml0X2dldF9kZXNjKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIGNoYXIgKipkZXNjKTsKK2ludCBmaXRfZ2V0X3RpbWVzdGFtcChjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCB0aW1lX3QgKnRpbWVzdGFtcCk7CisKK2ludCBmaXRfaW1hZ2VfZ2V0X25vZGUoY29uc3Qgdm9pZCAqZml0LCBjb25zdCBjaGFyICppbWFnZV91bmFtZSk7CitpbnQgZml0X2ltYWdlX2dldF9vcyhjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCB1aW50OF90ICpvcyk7CitpbnQgZml0X2ltYWdlX2dldF9hcmNoKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIHVpbnQ4X3QgKmFyY2gpOworaW50IGZpdF9pbWFnZV9nZXRfdHlwZShjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCB1aW50OF90ICp0eXBlKTsKK2ludCBmaXRfaW1hZ2VfZ2V0X2NvbXAoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgdWludDhfdCAqY29tcCk7CitpbnQgZml0X2ltYWdlX2dldF9sb2FkKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIHVsb25nICpsb2FkKTsKK2ludCBmaXRfaW1hZ2VfZ2V0X2VudHJ5KGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIHVsb25nICplbnRyeSk7CitpbnQgZml0X2ltYWdlX2dldF9kYXRhKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsCisJCQkJY29uc3Qgdm9pZCAqKmRhdGEsIHNpemVfdCAqc2l6ZSk7CisKK2ludCBmaXRfaW1hZ2VfaGFzaF9nZXRfYWxnbyhjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCBjaGFyICoqYWxnbyk7CitpbnQgZml0X2ltYWdlX2hhc2hfZ2V0X3ZhbHVlKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIHVpbnQ4X3QgKip2YWx1ZSwKKwkJCQlpbnQgKnZhbHVlX2xlbik7CisKK2ludCBmaXRfc2V0X3RpbWVzdGFtcCh2b2lkICpmaXQsIGludCBub2Zmc2V0LCB0aW1lX3QgdGltZXN0YW1wKTsKK2ludCBmaXRfc2V0X2hhc2hlcyh2b2lkICpmaXQpOworaW50IGZpdF9pbWFnZV9zZXRfaGFzaGVzKHZvaWQgKmZpdCwgaW50IGltYWdlX25vZmZzZXQpOworaW50IGZpdF9pbWFnZV9oYXNoX3NldF92YWx1ZSh2b2lkICpmaXQsIGludCBub2Zmc2V0LCB1aW50OF90ICp2YWx1ZSwKKwkJCQlpbnQgdmFsdWVfbGVuKTsKKworaW50IGZpdF9pbWFnZV9jaGVja19oYXNoZXMoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCk7CitpbnQgZml0X2FsbF9pbWFnZV9jaGVja19oYXNoZXMoY29uc3Qgdm9pZCAqZml0KTsKK2ludCBmaXRfaW1hZ2VfY2hlY2tfb3MoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgdWludDhfdCBvcyk7CitpbnQgZml0X2ltYWdlX2NoZWNrX2FyY2goY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgdWludDhfdCBhcmNoKTsKK2ludCBmaXRfaW1hZ2VfY2hlY2tfdHlwZShjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0LCB1aW50OF90IHR5cGUpOworaW50IGZpdF9pbWFnZV9jaGVja19jb21wKGNvbnN0IHZvaWQgKmZpdCwgaW50IG5vZmZzZXQsIHVpbnQ4X3QgY29tcCk7CitpbnQgZml0X2NoZWNrX2Zvcm1hdChjb25zdCB2b2lkICpmaXQpOworCitpbnQgZml0X2NvbmZfZ2V0X25vZGUoY29uc3Qgdm9pZCAqZml0LCBjb25zdCBjaGFyICpjb25mX3VuYW1lKTsKK2ludCBmaXRfY29uZl9nZXRfa2VybmVsX25vZGUoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCk7CitpbnQgZml0X2NvbmZfZ2V0X3JhbWRpc2tfbm9kZShjb25zdCB2b2lkICpmaXQsIGludCBub2Zmc2V0KTsKK2ludCBmaXRfY29uZl9nZXRfZmR0X25vZGUoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCk7CisKK3ZvaWQgZml0X2NvbmZfcHJpbnQoY29uc3Qgdm9pZCAqZml0LCBpbnQgbm9mZnNldCwgY29uc3QgY2hhciAqcCk7CisKKyNpZm5kZWYgVVNFX0hPU1RDQworc3RhdGljIGlubGluZSBpbnQgZml0X2ltYWdlX2NoZWNrX3RhcmdldF9hcmNoKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGUpCit7CisJcmV0dXJuIGZpdF9pbWFnZV9jaGVja19hcmNoKGZkdCwgbm9kZSwgSUhfQVJDSF9ERUZBVUxUKTsKK30KKyNlbmRpZiAvKiBVU0VfSE9TVENDICovCisKKyNpZmRlZiBDT05GSUdfRklUX1ZFUkJPU0UKKyNkZWZpbmUgZml0X3Vuc3VwcG9ydGVkKG1zZykJcHJpbnRmKCIhICVzOiVkICIgXAorCQkJCSJGSVQgaW1hZ2VzIG5vdCBzdXBwb3J0ZWQgZm9yICclcydcbiIsIFwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIChtc2cpKQorCisjZGVmaW5lIGZpdF91bnN1cHBvcnRlZF9yZXNldChtc2cpCXByaW50ZigiISAlczolZCAiIFwKKwkJCQkiRklUIGltYWdlcyBub3Qgc3VwcG9ydGVkIGZvciAnJXMnICIgXAorCQkJCSItIG11c3QgcmVzZXQgYm9hcmQgdG8gcmVjb3ZlciFcbiIsIFwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIChtc2cpKQorI2Vsc2UKKyNkZWZpbmUgZml0X3Vuc3VwcG9ydGVkKG1zZykKKyNkZWZpbmUgZml0X3Vuc3VwcG9ydGVkX3Jlc2V0KG1zZykKKyNlbmRpZiAvKiBDT05GSUdfRklUX1ZFUkJPU0UgKi8KKyNlbmRpZiAvKiBDT05GSUdfRklUICovCiAKICNlbmRpZgkvKiBfX0lNQUdFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzYjA3ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKQEAgLTAsMCArMSw1NSBAQAorI2lmbmRlZiBfTElOVVhfQ09NUEFUX0hfCisjZGVmaW5lIF9MSU5VWF9DT01QQVRfSF8KKworI2RlZmluZSBfX3VzZXIKKyNkZWZpbmUgX19pb21lbQorCisjZGVmaW5lIG5kZWxheSh4KQl1ZGVsYXkoMSkKKworI2RlZmluZSBwcmludGsJcHJpbnRmCisKKyNkZWZpbmUgS0VSTl9FTUVSRworI2RlZmluZSBLRVJOX0FMRVJUCisjZGVmaW5lIEtFUk5fQ1JJVAorI2RlZmluZSBLRVJOX0VSUgorI2RlZmluZSBLRVJOX1dBUk5JTkcKKyNkZWZpbmUgS0VSTl9OT1RJQ0UKKyNkZWZpbmUgS0VSTl9JTkZPCisjZGVmaW5lIEtFUk5fREVCVUcKKworI2RlZmluZSBrbWFsbG9jKHNpemUsIGZsYWdzKQltYWxsb2Moc2l6ZSkKKyNkZWZpbmUga3phbGxvYyhzaXplLCBmbGFncykJY2FsbG9jKHNpemUsIDEpCisjZGVmaW5lIHZtYWxsb2Moc2l6ZSkJCW1hbGxvYyhzaXplKQorI2RlZmluZSBrZnJlZShwdHIpCQlmcmVlKHB0cikKKyNkZWZpbmUgdmZyZWUocHRyKQkJZnJlZShwdHIpCisKKyNkZWZpbmUgREVDTEFSRV9XQUlUUVVFVUUoLi4uKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGFkZF93YWl0X3F1ZXVlKC4uLikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByZW1vdmVfd2FpdF9xdWV1ZSguLi4pCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykJKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKKworLyoKKyAqIC4uYW5kIGlmIHlvdSBjYW4ndCB0YWtlIHRoZSBzdHJpY3QKKyAqIHR5cGVzLCB5b3UgY2FuIHNwZWNpZnkgb25lIHlvdXJzZWxmLgorICoKKyAqIE9yIG5vdCB1c2UgbWluL21heCBhdCBhbGwsIG9mIGNvdXJzZS4KKyAqLworI2RlZmluZSBtaW5fdCh0eXBlLHgseSkgXAorCSh7IHR5cGUgX194ID0gKHgpOyB0eXBlIF9feSA9ICh5KTsgX194IDwgX195ID8gX194OiBfX3k7IH0pCisjZGVmaW5lIG1heF90KHR5cGUseCx5KSBcCisJKHsgdHlwZSBfX3ggPSAoeCk7IHR5cGUgX195ID0gKHkpOyBfX3ggPiBfX3kgPyBfX3g6IF9feTsgfSkKKworI2lmbmRlZiBCVUcKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJcHJpbnRmKCJVLUJvb3QgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBCVUdfT04oY29uZGl0aW9uKSBkbyB7IGlmIChjb25kaXRpb24pIEJVRygpOyB9IHdoaWxlKDApCisjZW5kaWYgLyogQlVHICovCisKKyNkZWZpbmUgV0FSTl9PTih4KSBpZiAoeCkge3ByaW50ZigiV0FSTklORyBpbiAlcyBsaW5lICVkXG4iIFwKKwkJCQkgICwgX19GSUxFX18sIF9fTElORV9fKTsgfQorCisjZGVmaW5lIFBBR0VfU0laRQk0MDk2CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZGNmODAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYy5oCkBAIC0wLDAgKzEsODcgQEAKKyNpZm5kZWYgX19MSU5VWF9DT01QSUxFUl9ICisjZXJyb3IgIlBsZWFzZSBkb24ndCBpbmNsdWRlIDxsaW51eC9jb21waWxlci1nY2MuaD4gZGlyZWN0bHksIGluY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+IGluc3RlYWQuIgorI2VuZGlmCisKKy8qCisgKiBDb21tb24gZGVmaW5pdGlvbnMgZm9yIGFsbCBnY2MgdmVyc2lvbnMgZ28gaGVyZS4KKyAqLworCisKKy8qIE9wdGltaXphdGlvbiBiYXJyaWVyICovCisvKiBUaGUgInZvbGF0aWxlIiBpcyBkdWUgdG8gZ2NjIGJ1Z3MgKi8KKyNkZWZpbmUgYmFycmllcigpIF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5IikKKworLyoKKyAqIFRoaXMgbWFjcm8gb2JmdXNjYXRlcyBhcml0aG1ldGljIG9uIGEgdmFyaWFibGUgYWRkcmVzcyBzbyB0aGF0IGdjYworICogc2hvdWxkbid0IHJlY29nbml6ZSB0aGUgb3JpZ2luYWwgdmFyLCBhbmQgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCBpdC4KKyAqCisgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBDIHN0YW5kYXJkIG1ha2VzIGl0IHVuZGVmaW5lZCB0byBkbworICogcG9pbnRlciBhcml0aG1ldGljIG9uICJvYmplY3RzIiBvdXRzaWRlIHRoZWlyIGJvdW5kYXJpZXMgYW5kIHRoZQorICogZ2NjIG9wdGltaXplcnMgYXNzdW1lIHRoaXMgaXMgdGhlIGNhc2UuIEluIHBhcnRpY3VsYXIgdGhleQorICogYXNzdW1lIHN1Y2ggYXJpdGhtZXRpYyBkb2VzIG5vdCB3cmFwLgorICoKKyAqIEEgbWlzY29tcGlsYXRpb24gaGFzIGJlZW4gb2JzZXJ2ZWQgYmVjYXVzZSBvZiB0aGlzIG9uIFBQQy4KKyAqIFRvIHdvcmsgYXJvdW5kIGl0IHdlIGhpZGUgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcG9pbnRlciBhbmQgdGhlIG9iamVjdAorICogdXNpbmcgdGhpcyBtYWNyby4KKyAqCisgKiBWZXJzaW9ucyBvZiB0aGUgcHBjNjQgY29tcGlsZXIgYmVmb3JlIDQuMSBoYWQgYSBidWcgd2hlcmUgdXNlIG9mCisgKiBSRUxPQ19ISURFIGNvdWxkIHRyYXNoIHIzMC4gVGhlIGJ1ZyBjYW4gYmUgd29ya2VkIGFyb3VuZCBieSBjaGFuZ2luZworICogdGhlIGlubGluZSBhc3NlbWJseSBjb25zdHJhaW50IGZyb20gPWcgdG8gPXIsIGluIHRoaXMgcGFydGljdWxhcgorICogY2FzZSBlaXRoZXIgaXMgdmFsaWQuCisgKi8KKyNkZWZpbmUgUkVMT0NfSElERShwdHIsIG9mZikJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX3B0cjsJCQkJCVwKKyAgICBfX2FzbV9fICgiIiA6ICI9ciIoX19wdHIpIDogIjAiKHB0cikpOwkJXAorICAgICh0eXBlb2YocHRyKSkgKF9fcHRyICsgKG9mZikpOyB9KQorCisvKiAmYVswXSBkZWdyYWRlcyB0byBhIHBvaW50ZXI6IGEgZGlmZmVyZW50IHR5cGUgZnJvbSBhbiBhcnJheSAqLworI2RlZmluZSBfX211c3RfYmVfYXJyYXkoYSkgXAorICBCVUlMRF9CVUdfT05fWkVSTyhfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihhKSwgdHlwZW9mKCZhWzBdKSkpCisKKy8qCisgKiBGb3JjZSBhbHdheXMtaW5saW5lIGlmIHRoZSB1c2VyIHJlcXVlc3RzIGl0IHNvIHZpYSB0aGUgLmNvbmZpZywKKyAqIG9yIGlmIGdjYyBpcyB0b28gb2xkOgorICovCisjaWYgIWRlZmluZWQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BUSU1JWkVEX0lOTElOSU5HKSB8fCBcCisgICAgIWRlZmluZWQoQ09ORklHX09QVElNSVpFX0lOTElOSU5HKSB8fCAoX19HTlVDX18gPCA0KQorIyBkZWZpbmUgaW5saW5lCQlpbmxpbmUJCV9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorIyBkZWZpbmUgX19pbmxpbmVfXwlfX2lubGluZV9fCV9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorIyBkZWZpbmUgX19pbmxpbmUJX19pbmxpbmUJX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjZW5kaWYKKworI2RlZmluZSBfX2RlcHJlY2F0ZWQJCQlfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKKyNkZWZpbmUgX19wYWNrZWQJCQlfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2RlZmluZSBfX3dlYWsJCQkJX19hdHRyaWJ1dGVfXygod2VhaykpCisKKy8qCisgKiBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugb24gQVJNIChjdXJyZW50bHkgdGhlIG9ubHkgdXNlciBvZiBfX25ha2VkKSB0byB0cmFjZQorICogbmFrZWQgZnVuY3Rpb25zIGJlY2F1c2UgdGhlbiBtY291bnQgaXMgY2FsbGVkIHdpdGhvdXQgc3RhY2sgYW5kIGZyYW1lIHBvaW50ZXIKKyAqIGJlaW5nIHNldCB1cCBhbmQgdGhlcmUgaXMgbm8gY2hhbmNlIHRvIHJlc3RvcmUgdGhlIGxyIHJlZ2lzdGVyIHRvIHRoZSB2YWx1ZQorICogYmVmb3JlIG1jb3VudCB3YXMgY2FsbGVkLgorICovCisjZGVmaW5lIF9fbmFrZWQJCQkJX19hdHRyaWJ1dGVfXygobmFrZWQpKSBub3RyYWNlCisKKyNkZWZpbmUgX19ub3JldHVybgkJCV9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKKworLyoKKyAqIEZyb20gdGhlIEdDQyBtYW51YWw6CisgKgorICogTWFueSBmdW5jdGlvbnMgaGF2ZSBubyBlZmZlY3RzIGV4Y2VwdCB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0aGVpcgorICogcmV0dXJuIHZhbHVlIGRlcGVuZHMgb25seSBvbiB0aGUgcGFyYW1ldGVycyBhbmQvb3IgZ2xvYmFsCisgKiB2YXJpYWJsZXMuICBTdWNoIGEgZnVuY3Rpb24gY2FuIGJlIHN1YmplY3QgdG8gY29tbW9uIHN1YmV4cHJlc3Npb24KKyAqIGVsaW1pbmF0aW9uIGFuZCBsb29wIG9wdGltaXphdGlvbiBqdXN0IGFzIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IKKyAqIHdvdWxkIGJlLgorICogWy4uLl0KKyAqLworI2RlZmluZSBfX3B1cmUJCQkJX19hdHRyaWJ1dGVfXygocHVyZSkpCisjZGVmaW5lIF9fYWxpZ25lZCh4KQkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoeCkpKQorI2RlZmluZSBfX3ByaW50ZihhLGIpCQkJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZixhLGIpKSkKKyNkZWZpbmUgIG5vaW5saW5lCQkJX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorI2RlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCQlfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKQorI2RlZmluZSBfX21heWJlX3VudXNlZAkJCV9fYXR0cmlidXRlX18oKHVudXNlZCkpCisjZGVmaW5lIF9fYWx3YXlzX3VudXNlZAkJCV9fYXR0cmlidXRlX18oKHVudXNlZCkpCisKKyNkZWZpbmUgX19nY2NfaGVhZGVyKHgpICN4CisjZGVmaW5lIF9nY2NfaGVhZGVyKHgpIF9fZ2NjX2hlYWRlcihsaW51eC9jb21waWxlci1nY2MjI3guaCkKKyNkZWZpbmUgZ2NjX2hlYWRlcih4KSBfZ2NjX2hlYWRlcih4KQorI2luY2x1ZGUgZ2NjX2hlYWRlcihfX0dOVUNfXykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2M0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkZWEzZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCkBAIC0wLDAgKzEsNjEgQEAKKyNpZm5kZWYgX19MSU5VWF9DT01QSUxFUl9ICisjZXJyb3IgIlBsZWFzZSBkb24ndCBpbmNsdWRlIDxsaW51eC9jb21waWxlci1nY2M0Lmg+IGRpcmVjdGx5LCBpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiBpbnN0ZWFkLiIKKyNlbmRpZgorCisvKiBHQ0MgNC4xLlswMV0gbWlzY29tcGlsZXMgX193ZWFrICovCisjaWZkZWYgX19LRVJORUxfXworIyBpZiBfX0dOVUNfTUlOT1JfXyA9PSAxICYmIF9fR05VQ19QQVRDSExFVkVMX18gPD0gMQorIyAgZXJyb3IgWW91ciB2ZXJzaW9uIG9mIGdjYyBtaXNjb21waWxlcyB0aGUgX193ZWFrIGRpcmVjdGl2ZQorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgX191c2VkCQkJX19hdHRyaWJ1dGVfXygoX191c2VkX18pKQorI2RlZmluZSBfX211c3RfY2hlY2sgCQlfX2F0dHJpYnV0ZV9fKCh3YXJuX3VudXNlZF9yZXN1bHQpKQorI2RlZmluZSBfX2NvbXBpbGVyX29mZnNldG9mKGEsYikgX19idWlsdGluX29mZnNldG9mKGEsYikKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lCQlpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisKKy8qCisgKiBBIHRyaWNrIHRvIHN1cHByZXNzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZyB3aXRob3V0IGdlbmVyYXRpbmcgYW55CisgKiBjb2RlCisgKi8KKyNkZWZpbmUgdW5pbml0aWFsaXplZF92YXIoeCkgeCA9IHgKKworI2lmIF9fR05VQ19NSU5PUl9fID49IDMKKy8qIE1hcmsgZnVuY3Rpb25zIGFzIGNvbGQuIGdjYyB3aWxsIGFzc3VtZSBhbnkgcGF0aCBsZWFkaW5nIHRvIGEgY2FsbAorICAgdG8gdGhlbSB3aWxsIGJlIHVubGlrZWx5LiAgVGhpcyBtZWFucyBhIGxvdCBvZiBtYW51YWwgdW5saWtlbHkoKXMKKyAgIGFyZSB1bm5lY2Vzc2FyeSBub3cgZm9yIGFueSBwYXRocyBsZWFkaW5nIHRvIHRoZSB1c3VhbCBzdXNwZWN0cworICAgbGlrZSBCVUcoKSwgcHJpbnRrKCksIHBhbmljKCkgZXRjLiBbYnV0IGxldCdzIGtlZXAgdGhlbSBmb3Igbm93IGZvcgorICAgb2xkZXIgY29tcGlsZXJzXQorCisgICBFYXJseSBzbmFwc2hvdHMgb2YgZ2NjIDQuMyBkb24ndCBzdXBwb3J0IHRoaXMgYW5kIHdlIGNhbid0IGRldGVjdCB0aGlzCisgICBpbiB0aGUgcHJlcHJvY2Vzc29yLCBidXQgd2UgY2FuIGxpdmUgd2l0aCB0aGlzIGJlY2F1c2UgdGhleSdyZSB1bnJlbGVhc2VkLgorICAgTWFrZXRpbWUgcHJvYmluZyB3b3VsZCBiZSBvdmVya2lsbCBoZXJlLgorCisgICBnY2MgYWxzbyBoYXMgYSBfX2F0dHJpYnV0ZV9fKChfX2hvdF9fKSkgdG8gbW92ZSBob3QgZnVuY3Rpb25zIGludG8KKyAgIGEgc3BlY2lhbCBzZWN0aW9uLCBidXQgSSBkb24ndCBzZWUgYW55IHNlbnNlIGluIHRoaXMgcmlnaHQgbm93IGluCisgICB0aGUga2VybmVsIGNvbnRleHQgKi8KKyNkZWZpbmUgX19jb2xkCQkJX19hdHRyaWJ1dGVfXygoX19jb2xkX18pKQorCisKKyNpZiBfX0dOVUNfTUlOT1JfXyA+PSA1CisvKgorICogTWFyayBhIHBvc2l0aW9uIGluIGNvZGUgYXMgdW5yZWFjaGFibGUuICBUaGlzIGNhbiBiZSB1c2VkIHRvCisgKiBzdXBwcmVzcyBjb250cm9sIGZsb3cgd2FybmluZ3MgYWZ0ZXIgYXNtIGJsb2NrcyB0aGF0IHRyYW5zZmVyCisgKiBjb250cm9sIGVsc2V3aGVyZS4KKyAqCisgKiBFYXJseSBzbmFwc2hvdHMgb2YgZ2NjIDQuNSBkb24ndCBzdXBwb3J0IHRoaXMgYW5kIHdlIGNhbid0IGRldGVjdAorICogdGhpcyBpbiB0aGUgcHJlcHJvY2Vzc29yLCBidXQgd2UgY2FuIGxpdmUgd2l0aCB0aGlzIGJlY2F1c2UgdGhleSdyZQorICogdW5yZWxlYXNlZC4gIFJlYWxseSwgd2UgbmVlZCB0byBoYXZlIGF1dG9jb25mIGZvciB0aGUga2VybmVsLgorICovCisjZGVmaW5lIHVucmVhY2hhYmxlKCkgX19idWlsdGluX3VucmVhY2hhYmxlKCkKKyNlbmRpZgorCisjZW5kaWYKKworI2lmIF9fR05VQ19NSU5PUl9fID4gMAorI2RlZmluZSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKG9iaikgX19idWlsdGluX29iamVjdF9zaXplKG9iaiwgMCkKKyNlbmRpZgorI2lmIF9fR05VQ19NSU5PUl9fID49IDQKKyNkZWZpbmUgX19jb21waWxldGltZV93YXJuaW5nKG1lc3NhZ2UpIF9fYXR0cmlidXRlX18oKHdhcm5pbmcobWVzc2FnZSkpKQorI2RlZmluZSBfX2NvbXBpbGV0aW1lX2Vycm9yKG1lc3NhZ2UpIF9fYXR0cmlidXRlX18oKGVycm9yKG1lc3NhZ2UpKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZTNkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTAsMCArMSwzMDMgQEAKKyNpZm5kZWYgX19MSU5VWF9DT01QSUxFUl9ICisjZGVmaW5lIF9fTElOVVhfQ09NUElMRVJfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaWZkZWYgX19DSEVDS0VSX18KKyMgZGVmaW5lIF9fdXNlcgkJX19hdHRyaWJ1dGVfXygobm9kZXJlZiwgYWRkcmVzc19zcGFjZSgxKSkpCisjIGRlZmluZSBfX2tlcm5lbAkvKiBkZWZhdWx0IGFkZHJlc3Mgc3BhY2UgKi8KKyMgZGVmaW5lIF9fc2FmZQkJX19hdHRyaWJ1dGVfXygoc2FmZSkpCisjIGRlZmluZSBfX2ZvcmNlCV9fYXR0cmlidXRlX18oKGZvcmNlKSkKKyMgZGVmaW5lIF9fbm9jYXN0CV9fYXR0cmlidXRlX18oKG5vY2FzdCkpCisjIGRlZmluZSBfX2lvbWVtCV9fYXR0cmlidXRlX18oKG5vZGVyZWYsIGFkZHJlc3Nfc3BhY2UoMikpKQorIyBkZWZpbmUgX19hY3F1aXJlcyh4KQlfX2F0dHJpYnV0ZV9fKChjb250ZXh0KHgsMCwxKSkpCisjIGRlZmluZSBfX3JlbGVhc2VzKHgpCV9fYXR0cmlidXRlX18oKGNvbnRleHQoeCwxLDApKSkKKyMgZGVmaW5lIF9fYWNxdWlyZSh4KQlfX2NvbnRleHRfXyh4LDEpCisjIGRlZmluZSBfX3JlbGVhc2UoeCkJX19jb250ZXh0X18oeCwtMSkKKyMgZGVmaW5lIF9fY29uZF9sb2NrKHgsYykJKChjKSA/ICh7IF9fYWNxdWlyZSh4KTsgMTsgfSkgOiAwKQorZXh0ZXJuIHZvaWQgX19jaGtfdXNlcl9wdHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX3VzZXIgKik7CitleHRlcm4gdm9pZCBfX2Noa19pb19wdHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICopOworI2Vsc2UKKyMgZGVmaW5lIF9fdXNlcgorIyBkZWZpbmUgX19rZXJuZWwKKyMgZGVmaW5lIF9fc2FmZQorIyBkZWZpbmUgX19mb3JjZQorIyBkZWZpbmUgX19ub2Nhc3QKKyMgZGVmaW5lIF9faW9tZW0KKyMgZGVmaW5lIF9fY2hrX3VzZXJfcHRyKHgpICh2b2lkKTAKKyMgZGVmaW5lIF9fY2hrX2lvX3B0cih4KSAodm9pZCkwCisjIGRlZmluZSBfX2J1aWx0aW5fd2FybmluZyh4LCB5Li4uKSAoMSkKKyMgZGVmaW5lIF9fYWNxdWlyZXMoeCkKKyMgZGVmaW5lIF9fcmVsZWFzZXMoeCkKKyMgZGVmaW5lIF9fYWNxdWlyZSh4KSAodm9pZCkwCisjIGRlZmluZSBfX3JlbGVhc2UoeCkgKHZvaWQpMAorIyBkZWZpbmUgX19jb25kX2xvY2soeCxjKSAoYykKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZkZWYgX19HTlVDX18KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci1nY2MuaD4KKyNlbmRpZgorCisjZGVmaW5lIG5vdHJhY2UgX19hdHRyaWJ1dGVfXygobm9faW5zdHJ1bWVudF9mdW5jdGlvbikpCisKKy8qIEludGVsIGNvbXBpbGVyIGRlZmluZXMgX19HTlVDX18uIFNvIHdlIHdpbGwgb3ZlcndyaXRlIGltcGxlbWVudGF0aW9ucworICogY29taW5nIGZyb20gYWJvdmUgaGVhZGVyIGZpbGVzIGhlcmUKKyAqLworI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyMgaW5jbHVkZSA8bGludXgvY29tcGlsZXItaW50ZWwuaD4KKyNlbmRpZgorCisvKgorICogR2VuZXJpYyBjb21waWxlci1kZXBlbmRlbnQgbWFjcm9zIHJlcXVpcmVkIGZvciBrZXJuZWwKKyAqIGJ1aWxkIGdvIGJlbG93IHRoaXMgY29tbWVudC4gQWN0dWFsIGNvbXBpbGVyL2NvbXBpbGVyIHZlcnNpb24KKyAqIHNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBjb21lIGZyb20gdGhlIGFib3ZlIGhlYWRlciBmaWxlcworICovCisKK3N0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgeworCWNvbnN0IGNoYXIgKmZ1bmM7CisJY29uc3QgY2hhciAqZmlsZTsKKwl1bnNpZ25lZCBsaW5lOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGxvbmcgY29ycmVjdDsKKwkJCXVuc2lnbmVkIGxvbmcgaW5jb3JyZWN0OworCQl9OworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZyBtaXNzOworCQkJdW5zaWduZWQgbG9uZyBoaXQ7CisJCX07CisJCXVuc2lnbmVkIGxvbmcgbWlzc19oaXRbMl07CisJfTsKK307CisKKy8qCisgKiBOb3RlOiBESVNBQkxFX0JSQU5DSF9QUk9GSUxJTkcgY2FuIGJlIHVzZWQgYnkgc3BlY2lhbCBsb3dsZXZlbCBjb2RlCisgKiB0byBkaXNhYmxlIGJyYW5jaCB0cmFjaW5nIG9uIGEgcGVyIGZpbGUgYmFzaXMuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSBcCisgICAgJiYgIWRlZmluZWQoRElTQUJMRV9CUkFOQ0hfUFJPRklMSU5HKSAmJiAhZGVmaW5lZChfX0NIRUNLRVJfXykKK3ZvaWQgZnRyYWNlX2xpa2VseV91cGRhdGUoc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqZiwgaW50IHZhbCwgaW50IGV4cGVjdCk7CisKKyNkZWZpbmUgbGlrZWx5X25vdHJhY2UoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMSkKKyNkZWZpbmUgdW5saWtlbHlfbm90cmFjZSh4KQlfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLCAwKQorCisjZGVmaW5lIF9fYnJhbmNoX2NoZWNrX18oeCwgZXhwZWN0KSAoewkJCQkJXAorCQkJaW50IF9fX19fX3I7CQkJCQlcCisJCQlzdGF0aWMgc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YQkJXAorCQkJCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCVwKKwkJCQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2Fubm90YXRlZF9icmFuY2giKSkpIFwKKwkJCQlfX19fX19mID0gewkJCQlcCisJCQkJLmZ1bmMgPSBfX2Z1bmNfXywJCQlcCisJCQkJLmZpbGUgPSBfX0ZJTEVfXywJCQlcCisJCQkJLmxpbmUgPSBfX0xJTkVfXywJCQlcCisJCQl9OwkJCQkJCVwKKwkJCV9fX19fX3IgPSBsaWtlbHlfbm90cmFjZSh4KTsJCQlcCisJCQlmdHJhY2VfbGlrZWx5X3VwZGF0ZSgmX19fX19fZiwgX19fX19fciwgZXhwZWN0KTsgXAorCQkJX19fX19fcjsJCQkJCVwKKwkJfSkKKworLyoKKyAqIFVzaW5nIF9fYnVpbHRpbl9jb25zdGFudF9wKHgpIHRvIGlnbm9yZSBjYXNlcyB3aGVyZSB0aGUgcmV0dXJuCisgKiB2YWx1ZSBpcyBhbHdheXMgdGhlIHNhbWUuICBUaGlzIGlkZWEgaXMgdGFrZW4gZnJvbSBhIHNpbWlsYXIgcGF0Y2gKKyAqIHdyaXR0ZW4gYnkgRGFuaWVsIFdhbGtlci4KKyAqLworIyBpZm5kZWYgbGlrZWx5CisjICBkZWZpbmUgbGlrZWx5KHgpCShfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSA/ICEhKHgpIDogX19icmFuY2hfY2hlY2tfXyh4LCAxKSkKKyMgZW5kaWYKKyMgaWZuZGVmIHVubGlrZWx5CisjICBkZWZpbmUgdW5saWtlbHkoeCkJKF9fYnVpbHRpbl9jb25zdGFudF9wKHgpID8gISEoeCkgOiBfX2JyYW5jaF9jaGVja19fKHgsIDApKQorIyBlbmRpZgorCisjaWZkZWYgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTCisvKgorICogIkRlZmluZSAnaXMnIiwgQmlsbCBDbGludG9uCisgKiAiRGVmaW5lICdpZiciLCBTdGV2ZW4gUm9zdGVkdAorICovCisjZGVmaW5lIGlmKGNvbmQsIC4uLikgX190cmFjZV9pZiggKGNvbmQgLCAjIyBfX1ZBX0FSR1NfXykgKQorI2RlZmluZSBfX3RyYWNlX2lmKGNvbmQpIFwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoKGNvbmQpKSA/ICEhKGNvbmQpIDoJCQlcCisJKHsJCQkJCQkJCVwKKwkJaW50IF9fX19fX3I7CQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YQkJCVwKKwkJCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQlcCisJCQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2JyYW5jaCIpKSkJXAorCQkJX19fX19fZiA9IHsJCQkJCVwKKwkJCQkuZnVuYyA9IF9fZnVuY19fLAkJCVwKKwkJCQkuZmlsZSA9IF9fRklMRV9fLAkJCVwKKwkJCQkubGluZSA9IF9fTElORV9fLAkJCVwKKwkJCX07CQkJCQkJXAorCQlfX19fX19yID0gISEoY29uZCk7CQkJCQlcCisJCV9fX19fX2YubWlzc19oaXRbX19fX19fcl0rKzsJCQkJCVwKKwkJX19fX19fcjsJCQkJCQlcCisJfSkpCisjZW5kaWYgLyogQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTICovCisKKyNlbHNlCisjIGRlZmluZSBsaWtlbHkoeCkJX19idWlsdGluX2V4cGVjdCghISh4KSwgMSkKKyMgZGVmaW5lIHVubGlrZWx5KHgpCV9fYnVpbHRpbl9leHBlY3QoISEoeCksIDApCisjZW5kaWYKKworLyogT3B0aW1pemF0aW9uIGJhcnJpZXIgKi8KKyNpZm5kZWYgYmFycmllcgorIyBkZWZpbmUgYmFycmllcigpIF9fbWVtb3J5X2JhcnJpZXIoKQorI2VuZGlmCisKKy8qIFVucmVhY2hhYmxlIGNvZGUgKi8KKyNpZm5kZWYgdW5yZWFjaGFibGUKKyMgZGVmaW5lIHVucmVhY2hhYmxlKCkgZG8geyB9IHdoaWxlICgxKQorI2VuZGlmCisKKyNpZm5kZWYgUkVMT0NfSElERQorIyBkZWZpbmUgUkVMT0NfSElERShwdHIsIG9mZikJCQkJCVwKKyAgKHsgdW5zaWduZWQgbG9uZyBfX3B0cjsJCQkJCVwKKyAgICAgX19wdHIgPSAodW5zaWduZWQgbG9uZykgKHB0cik7CQkJCVwKKyAgICAodHlwZW9mKHB0cikpIChfX3B0ciArIChvZmYpKTsgfSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKgorICogQWxsb3cgdXMgdG8gbWFyayBmdW5jdGlvbnMgYXMgJ2RlcHJlY2F0ZWQnIGFuZCBoYXZlIGdjYyBlbWl0IGEgbmljZQorICogd2FybmluZyBmb3IgZWFjaCB1c2UsIGluIGhvcGVzIG9mIHNwZWVkaW5nIHRoZSBmdW5jdGlvbnMgcmVtb3ZhbC4KKyAqIFVzYWdlIGlzOgorICogCQlpbnQgX19kZXByZWNhdGVkIGZvbyh2b2lkKQorICovCisjaWZuZGVmIF9fZGVwcmVjYXRlZAorIyBkZWZpbmUgX19kZXByZWNhdGVkCQkvKiB1bmltcGxlbWVudGVkICovCisjZW5kaWYKKworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXMgX19kZXByZWNhdGVkCisjZWxzZQorI2RlZmluZSBfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXMKKyNlbmRpZgorCisjaWZuZGVmIF9fbXVzdF9jaGVjaworI2RlZmluZSBfX211c3RfY2hlY2sKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSworI3VuZGVmIF9fbXVzdF9jaGVjaworI2RlZmluZSBfX211c3RfY2hlY2sKKyNlbmRpZgorI2lmbmRlZiBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRAorI3VuZGVmIF9fZGVwcmVjYXRlZAorI3VuZGVmIF9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlcworI2RlZmluZSBfX2RlcHJlY2F0ZWQKKyNkZWZpbmUgX19kZXByZWNhdGVkX2Zvcl9tb2R1bGVzCisjZW5kaWYKKworLyoKKyAqIEFsbG93IHVzIHRvIGF2b2lkICdkZWZpbmVkIGJ1dCBub3QgdXNlZCcgd2FybmluZ3Mgb24gZnVuY3Rpb25zIGFuZCBkYXRhLAorICogYXMgd2VsbCBhcyBmb3JjZSB0aGVtIHRvIGJlIGVtaXR0ZWQgdG8gdGhlIGFzc2VtYmx5IGZpbGUuCisgKgorICogQXMgb2YgZ2NjIDMuNCwgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgbWFya2VkIHdpdGggYXR0cmlidXRlKCh1c2VkKSkKKyAqIG1heSBiZSBlbGlkZWQgZnJvbSB0aGUgYXNzZW1ibHkgZmlsZS4gIEFzIG9mIGdjYyAzLjQsIHN0YXRpYyBkYXRhIG5vdCBzbworICogbWFya2VkIHdpbGwgbm90IGJlIGVsaWRlZCwgYnV0IHRoaXMgbWF5IGNoYW5nZSBpbiBhIGZ1dHVyZSBnY2MgdmVyc2lvbi4KKyAqCisgKiBOT1RFOiBCZWNhdXNlIGRpc3RyaWJ1dGlvbnMgc2hpcHBlZCB3aXRoIGEgYmFja3BvcnRlZCB1bml0LWF0LWEtdGltZQorICogY29tcGlsZXIgaW4gZ2NjIDMuMywgd2UgbXVzdCBkZWZpbmUgX191c2VkIHRvIGJlIF9fYXR0cmlidXRlX18oKHVzZWQpKQorICogZm9yIGdjYyA+PTMuMyBpbnN0ZWFkIG9mIDMuNC4KKyAqCisgKiBJbiBwcmlvciB2ZXJzaW9ucyBvZiBnY2MsIHN1Y2ggZnVuY3Rpb25zIGFuZCBkYXRhIHdvdWxkIGJlIGVtaXR0ZWQsIGJ1dAorICogd291bGQgYmUgd2FybmVkIGFib3V0IGV4Y2VwdCB3aXRoIGF0dHJpYnV0ZSgodW51c2VkKSkuCisgKgorICogTWFyayBmdW5jdGlvbnMgdGhhdCBhcmUgcmVmZXJlbmNlZCBvbmx5IGluIGlubGluZSBhc3NlbWJseSBhcyBfX3VzZWQgc28KKyAqIHRoZSBjb2RlIGlzIGVtaXR0ZWQgZXZlbiB0aG91Z2ggaXQgYXBwZWFycyB0byBiZSB1bnJlZmVyZW5jZWQuCisgKi8KKyNpZm5kZWYgX191c2VkCisjIGRlZmluZSBfX3VzZWQJCQkvKiB1bmltcGxlbWVudGVkICovCisjZW5kaWYKKworI2lmbmRlZiBfX21heWJlX3VudXNlZAorIyBkZWZpbmUgX19tYXliZV91bnVzZWQJCS8qIHVuaW1wbGVtZW50ZWQgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9fYWx3YXlzX3VudXNlZAorIyBkZWZpbmUgX19hbHdheXNfdW51c2VkCS8qIHVuaW1wbGVtZW50ZWQgKi8KKyNlbmRpZgorCisjaWZuZGVmIG5vaW5saW5lCisjZGVmaW5lIG5vaW5saW5lCisjZW5kaWYKKworLyoKKyAqIFJhdGhlciB0aGVuIHVzaW5nIG5vaW5saW5lIHRvIHByZXZlbnQgc3RhY2sgY29uc3VtcHRpb24sIHVzZQorICogbm9pbmxpbmVfZm9yX3N0YWNrIGluc3RlYWQuICBGb3IgZG9jdW1lbnRhaXRvbiByZWFzb25zLgorICovCisjZGVmaW5lIG5vaW5saW5lX2Zvcl9zdGFjayBub2lubGluZQorCisjaWZuZGVmIF9fYWx3YXlzX2lubGluZQorI2RlZmluZSBfX2Fsd2F5c19pbmxpbmUgaW5saW5lCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworLyoKKyAqIEZyb20gdGhlIEdDQyBtYW51YWw6CisgKgorICogTWFueSBmdW5jdGlvbnMgZG8gbm90IGV4YW1pbmUgYW55IHZhbHVlcyBleGNlcHQgdGhlaXIgYXJndW1lbnRzLAorICogYW5kIGhhdmUgbm8gZWZmZWN0cyBleGNlcHQgdGhlIHJldHVybiB2YWx1ZS4gIEJhc2ljYWxseSB0aGlzIGlzCisgKiBqdXN0IHNsaWdodGx5IG1vcmUgc3RyaWN0IGNsYXNzIHRoYW4gdGhlIGBwdXJlJyBhdHRyaWJ1dGUgYWJvdmUsCisgKiBzaW5jZSBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byByZWFkIGdsb2JhbCBtZW1vcnkuCisgKgorICogTm90ZSB0aGF0IGEgZnVuY3Rpb24gdGhhdCBoYXMgcG9pbnRlciBhcmd1bWVudHMgYW5kIGV4YW1pbmVzIHRoZQorICogZGF0YSBwb2ludGVkIHRvIG11c3QgX25vdF8gYmUgZGVjbGFyZWQgYGNvbnN0Jy4gIExpa2V3aXNlLCBhCisgKiBmdW5jdGlvbiB0aGF0IGNhbGxzIGEgbm9uLWBjb25zdCcgZnVuY3Rpb24gdXN1YWxseSBtdXN0IG5vdCBiZQorICogYGNvbnN0Jy4gIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgZm9yIGEgYGNvbnN0JyBmdW5jdGlvbiB0byByZXR1cm4KKyAqIGB2b2lkJy4KKyAqLworI2lmbmRlZiBfX2F0dHJpYnV0ZV9jb25zdF9fCisjIGRlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCS8qIHVuaW1wbGVtZW50ZWQgKi8KKyNlbmRpZgorCisvKgorICogVGVsbCBnY2MgaWYgYSBmdW5jdGlvbiBpcyBjb2xkLiBUaGUgY29tcGlsZXIgd2lsbCBhc3N1bWUgYW55IHBhdGgKKyAqIGRpcmVjdGx5IGxlYWRpbmcgdG8gdGhlIGNhbGwgaXMgdW5saWtlbHkuCisgKi8KKworI2lmbmRlZiBfX2NvbGQKKyNkZWZpbmUgX19jb2xkCisjZW5kaWYKKworLyogU2ltcGxlIHNob3J0aGFuZCBmb3IgYSBzZWN0aW9uIGRlZmluaXRpb24gKi8KKyNpZm5kZWYgX19zZWN0aW9uCisjIGRlZmluZSBfX3NlY3Rpb24oUykgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fKCNTKSkpCisjZW5kaWYKKworLyogQXJlIHR3byB0eXBlcy92YXJzIHRoZSBzYW1lIHR5cGUgKGlnbm9yaW5nIHF1YWxpZmllcnMpPyAqLworI2lmbmRlZiBfX3NhbWVfdHlwZQorIyBkZWZpbmUgX19zYW1lX3R5cGUoYSwgYikgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoYSksIHR5cGVvZihiKSkKKyNlbmRpZgorCisvKiBDb21waWxlIHRpbWUgb2JqZWN0IHNpemUsIC0xIGZvciB1bmtub3duICovCisjaWZuZGVmIF9fY29tcGlsZXRpbWVfb2JqZWN0X3NpemUKKyMgZGVmaW5lIF9fY29tcGlsZXRpbWVfb2JqZWN0X3NpemUob2JqKSAtMQorI2VuZGlmCisjaWZuZGVmIF9fY29tcGlsZXRpbWVfd2FybmluZworIyBkZWZpbmUgX19jb21waWxldGltZV93YXJuaW5nKG1lc3NhZ2UpCisjZW5kaWYKKyNpZm5kZWYgX19jb21waWxldGltZV9lcnJvcgorIyBkZWZpbmUgX19jb21waWxldGltZV9lcnJvcihtZXNzYWdlKQorI2VuZGlmCisKKy8qCisgKiBQcmV2ZW50IHRoZSBjb21waWxlciBmcm9tIG1lcmdpbmcgb3IgcmVmZXRjaGluZyBhY2Nlc3Nlcy4gIFRoZSBjb21waWxlcgorICogaXMgYWxzbyBmb3JiaWRkZW4gZnJvbSByZW9yZGVyaW5nIHN1Y2Nlc3NpdmUgaW5zdGFuY2VzIG9mIEFDQ0VTU19PTkNFKCksCisgKiBidXQgb25seSB3aGVuIHRoZSBjb21waWxlciBpcyBhd2FyZSBvZiBzb21lIHBhcnRpY3VsYXIgb3JkZXJpbmcuICBPbmUgd2F5CisgKiB0byBtYWtlIHRoZSBjb21waWxlciBhd2FyZSBvZiBvcmRlcmluZyBpcyB0byBwdXQgdGhlIHR3byBpbnZvY2F0aW9ucyBvZgorICogQUNDRVNTX09OQ0UoKSBpbiBkaWZmZXJlbnQgQyBzdGF0ZW1lbnRzLgorICoKKyAqIFRoaXMgbWFjcm8gZG9lcyBhYnNvbHV0ZWx5IC1ub3RoaW5nLSB0byBwcmV2ZW50IHRoZSBDUFUgZnJvbSByZW9yZGVyaW5nLAorICogbWVyZ2luZywgb3IgcmVmZXRjaGluZyBhYnNvbHV0ZWx5IGFueXRoaW5nIGF0IGFueSB0aW1lLiAgSXRzIG1haW4gaW50ZW5kZWQKKyAqIHVzZSBpcyB0byBtZWRpYXRlIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzLWxldmVsIGNvZGUgYW5kIGlycS9OTUkKKyAqIGhhbmRsZXJzLCBhbGwgcnVubmluZyBvbiB0aGUgc2FtZSBDUFUuCisgKi8KKyNkZWZpbmUgQUNDRVNTX09OQ0UoeCkgKCoodm9sYXRpbGUgdHlwZW9mKHgpICopJih4KSkKKworI2VuZGlmIC8qIF9fTElOVVhfQ09NUElMRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lcnIuaCBiL2luY2x1ZGUvbGludXgvZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjMGM3MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZXJyLmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBfTElOVVhfRVJSX0gKKyNkZWZpbmUgX0xJTlVYX0VSUl9ICisKKy8qIFhYWCBVLUJPT1QgWFhYICovCisjaWYgMAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworCisvKgorICogS2VybmVsIHBvaW50ZXJzIGhhdmUgcmVkdW5kYW50IGluZm9ybWF0aW9uLCBzbyB3ZSBjYW4gdXNlIGEKKyAqIHNjaGVtZSB3aGVyZSB3ZSBjYW4gcmV0dXJuIGVpdGhlciBhbiBlcnJvciBjb2RlIG9yIGEgZGVudHJ5CisgKiBwb2ludGVyIHdpdGggdGhlIHNhbWUgcmV0dXJuIHZhbHVlLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGEgcGVyLWFyY2hpdGVjdHVyZSB0aGluZywgdG8gYWxsb3cgZGlmZmVyZW50CisgKiBlcnJvciBhbmQgcG9pbnRlciBkZWNpc2lvbnMuCisgKi8KKyNkZWZpbmUgTUFYX0VSUk5PCTQwOTUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBJU19FUlJfVkFMVUUoeCkgdW5saWtlbHkoKHgpID49ICh1bnNpZ25lZCBsb25nKS1NQVhfRVJSTk8pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqRVJSX1BUUihsb25nIGVycm9yKQoreworCXJldHVybiAodm9pZCAqKSBlcnJvcjsKK30KKworc3RhdGljIGlubGluZSBsb25nIFBUUl9FUlIoY29uc3Qgdm9pZCAqcHRyKQoreworCXJldHVybiAobG9uZykgcHRyOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgSVNfRVJSKGNvbnN0IHZvaWQgKnB0cikKK3sKKwlyZXR1cm4gSVNfRVJSX1ZBTFVFKCh1bnNpZ25lZCBsb25nKXB0cik7Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLyogX0xJTlVYX0VSUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCBiL2luY2x1ZGUvbGludXgvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMWIyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaApAQCAtMCwwICsxLDk1IEBACisjaWZuZGVmIF9MSU5VWF9MSU5LQUdFX0gKKyNkZWZpbmUgX0xJTlVYX0xJTktBR0VfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvbGlua2FnZV9jMjAwMC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgQ1BQX0FTTUxJTktBR0UgZXh0ZXJuICJDIgorI2Vsc2UKKyNkZWZpbmUgQ1BQX0FTTUxJTktBR0UKKyNlbmRpZgorCisjaWZuZGVmIGFzbWxpbmthZ2UKKyNkZWZpbmUgYXNtbGlua2FnZSBDUFBfQVNNTElOS0FHRQorI2VuZGlmCisKKyNpZm5kZWYgYXNtcmVncGFybQorIyBkZWZpbmUgYXNtcmVncGFybQorI2VuZGlmCisKKyNkZWZpbmUgX19wYWdlX2FsaWduZWRfZGF0YQlfX3NlY3Rpb24oLmRhdGEucGFnZV9hbGlnbmVkKSBfX2FsaWduZWQoUEFHRV9TSVpFKQorI2RlZmluZSBfX3BhZ2VfYWxpZ25lZF9ic3MJX19zZWN0aW9uKC5ic3MucGFnZV9hbGlnbmVkKSBfX2FsaWduZWQoUEFHRV9TSVpFKQorCisvKgorICogVGhpcyBpcyB1c2VkIGJ5IGFyY2hpdGVjdHVyZXMgdG8ga2VlcCBhcmd1bWVudHMgb24gdGhlIHN0YWNrCisgKiB1bnRvdWNoZWQgYnkgdGhlIGNvbXBpbGVyIGJ5IGtlZXBpbmcgdGhlbSBsaXZlIHVudGlsIHRoZSBlbmQuCisgKiBUaGUgYXJndW1lbnQgc3RhY2sgbWF5IGJlIG93bmVkIGJ5IHRoZSBhc3NlbWJseS1sYW5ndWFnZQorICogY2FsbGVyLCBub3QgdGhlIGNhbGxlZSwgYW5kIGdjYyBkb2Vzbid0IGFsd2F5cyB1bmRlcnN0YW5kCisgKiB0aGF0LgorICoKKyAqIFdlIGhhdmUgdGhlIHJldHVybiB2YWx1ZSwgYW5kIGEgbWF4aW11bSBvZiBzaXggYXJndW1lbnRzLgorICoKKyAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBmb2xsb3dlZCBieSBhICJyZXR1cm4gcmV0IiBmb3IgdGhlCisgKiBwcm90ZWN0aW9uIHRvIHdvcmsgKGllIG5vIG1vcmUgd29yayB0aGF0IHRoZSBjb21waWxlciBtaWdodAorICogZW5kIHVwIG5lZWRpbmcgc3RhY2sgdGVtcG9yYXJpZXMgZm9yKS4KKyAqLworLyogQXNzZW1ibHkgZmlsZXMgbWF5IGJlIGNvbXBpbGVkIHdpdGggLXRyYWRpdGlvbmFsIC4uICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2lmbmRlZiBhc21saW5rYWdlX3Byb3RlY3QKKyMgZGVmaW5lIGFzbWxpbmthZ2VfcHJvdGVjdChuLCByZXQsIGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgX19BTElHTgorI2RlZmluZSBfX0FMSUdOCQkuYWxpZ24gNCwweDkwCisjZGVmaW5lIF9fQUxJR05fU1RSCSIuYWxpZ24gNCwweDkwIgorI2VuZGlmCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBBTElHTiBfX0FMSUdOCisjZGVmaW5lIEFMSUdOX1NUUiBfX0FMSUdOX1NUUgorCisjaWZuZGVmIEVOVFJZCisjZGVmaW5lIEVOVFJZKG5hbWUpIFwKKyAgLmdsb2JsIG5hbWU7IFwKKyAgQUxJR047IFwKKyAgbmFtZToKKyNlbmRpZgorCisjaWZuZGVmIFdFQUsKKyNkZWZpbmUgV0VBSyhuYW1lKQkgICBcCisJLndlYWsgbmFtZTsJICAgXAorCW5hbWU6CisjZW5kaWYKKworI2RlZmluZSBLUFJPQkVfRU5UUlkobmFtZSkgXAorICAucHVzaHNlY3Rpb24gLmtwcm9iZXMudGV4dCwgImF4IjsgXAorICBFTlRSWShuYW1lKQorCisjZGVmaW5lIEtQUk9CRV9FTkQobmFtZSkgXAorICBFTkQobmFtZSk7CQkgXAorICAucG9wc2VjdGlvbgorCisjaWZuZGVmIEVORAorI2RlZmluZSBFTkQobmFtZSkgXAorICAuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisvKiBJZiBzeW1ib2wgJ25hbWUnIGlzIHRyZWF0ZWQgYXMgYSBzdWJyb3V0aW5lIChnZXRzIGNhbGxlZCwgYW5kIHJldHVybnMpCisgKiB0aGVuIHBsZWFzZSB1c2UgRU5EUFJPQyB0byBtYXJrICduYW1lJyBhcyBTVFRfRlVOQyBmb3IgdGhlIGJlbmVmaXQgb2YKKyAqIHN0YXRpYyBhbmFseXNpcyB0b29scyBzdWNoIGFzIHN0YWNrIGRlcHRoIGFuYWx5emVyLgorICovCisjaWZuZGVmIEVORFBST0MKKyNkZWZpbmUgRU5EUFJPQyhuYW1lKSBcCisgIC50eXBlIG5hbWUsIEBmdW5jdGlvbjsgXAorICBFTkQobmFtZSkKKyNlbmRpZgorCisjZW5kaWYKKworI2RlZmluZSBOT1JFVF9UWVBFICAgIC8qKi8KKyNkZWZpbmUgQVRUUklCX05PUkVUICBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCisjZGVmaW5lIE5PUkVUX0FORCAgICAgbm9yZXR1cm4sCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvYmJtLmggYi9pbmNsdWRlL2xpbnV4L210ZC9iYm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2JjZGFlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvYmJtLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9tdGQvYmJtLmgKKyAqCisgKiAgTkFORCBmYW1pbHkgQmFkIEJsb2NrIE1hbmFnZW1lbnQgKEJCTSkgaGVhZGVyIGZpbGUKKyAqICAgIC0gQmFkIEJsb2NrIFRhYmxlIChCQlQpIGltcGxlbWVudGF0aW9uCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqICBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNQorICogIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51eHRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworI2lmbmRlZiBfX0xJTlVYX01URF9CQk1fSAorI2RlZmluZSBfX0xJTlVYX01URF9CQk1fSAorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgTkFORCBjaGlwcyBpbiBhbiBhcnJheSAqLworI2lmbmRlZiBDT05GSUdfU1lTX05BTkRfTUFYX0NISVBTCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9NQVhfQ0hJUFMJMQorI2VuZGlmCisKKy8qKgorICogc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIC0gYmFkIGJsb2NrIHRhYmxlIGRlc2NyaXB0b3IKKyAqIEBwYXJhbSBvcHRpb25zCW9wdGlvbnMgZm9yIHRoaXMgZGVzY3JpcHRvcgorICogQHBhcmFtIHBhZ2VzCQl0aGUgcGFnZShzKSB3aGVyZSB3ZSBmaW5kIHRoZSBiYnQsIHVzZWQgd2l0aAorICoJCQlvcHRpb24gQkJUX0FCU1BBR0Ugd2hlbiBiYnQgaXMgc2VhcmNoZWQsCisgKgkJCXRoZW4gd2Ugc3RvcmUgdGhlIGZvdW5kIGJidHMgcGFnZXMgaGVyZS4KKyAqCQkJSXRzIGFuIGFycmF5IGFuZCBzdXBwb3J0cyB1cCB0byA4IGNoaXBzIG5vdworICogQHBhcmFtIG9mZnMJCW9mZnNldCBvZiB0aGUgcGF0dGVybiBpbiB0aGUgb29iIGFyZWEgb2YgdGhlIHBhZ2UKKyAqIEBwYXJhbSB2ZXJvZmZzCW9mZnNldCBvZiB0aGUgYmJ0IHZlcnNpb24gY291bnRlciBpbiB0aGUgb29iIGFyZSBvZiB0aGUgcGFnZQorICogQHBhcmFtIHZlcnNpb24JdmVyc2lvbiByZWFkIGZyb20gdGhlIGJidCBwYWdlIGR1cmluZyBzY2FuCisgKiBAcGFyYW0gbGVuCQlsZW5ndGggb2YgdGhlIHBhdHRlcm4sIGlmIDAgbm8gcGF0dGVybiBjaGVjayBpcyBwZXJmb3JtZWQKKyAqIEBwYXJhbSBtYXhibG9ja3MJbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHRvIHNlYXJjaCBmb3IgYSBiYnQuIFRoaXMgbnVtYmVyIG9mCisgKgkJCWJsb2NrcyBpcyByZXNlcnZlZCBhdCB0aGUgZW5kIG9mIHRoZSBkZXZpY2UKKyAqCQkJd2hlcmUgdGhlIHRhYmxlcyBhcmUgd3JpdHRlbi4KKyAqIEBwYXJhbSByZXNlcnZlZF9ibG9ja19jb2RlCWlmIG5vbi0wLCB0aGlzIHBhdHRlcm4gZGVub3RlcyBhIHJlc2VydmVkCisgKgkJCShyYXRoZXIgdGhhbiBiYWQpIGJsb2NrIGluIHRoZSBzdG9yZWQgYmJ0CisgKiBAcGFyYW0gcGF0dGVybglwYXR0ZXJuIHRvIGlkZW50aWZ5IGJhZCBibG9jayB0YWJsZSBvciBmYWN0b3J5IG1hcmtlZAorICoJCQlnb29kIC8gYmFkIGJsb2NrcywgY2FuIGJlIE5VTEwsIGlmIGxlbiA9IDAKKyAqCisgKiBEZXNjcmlwdG9yIGZvciB0aGUgYmFkIGJsb2NrIHRhYmxlIG1hcmtlciBhbmQgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZQorICogcGF0dGVybiB3aGljaCBpZGVudGlmaWVzIGdvb2QgYW5kIGJhZCBibG9ja3MuIFRoZSBhc3N1bXB0aW9uIGlzIG1hZGUKKyAqIHRoYXQgdGhlIHBhdHRlcm4gYW5kIHRoZSB2ZXJzaW9uIGNvdW50IGFyZSBhbHdheXMgbG9jYXRlZCBpbiB0aGUgb29iIGFyZWEKKyAqIG9mIHRoZSBmaXJzdCBibG9jay4KKyAqLworc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHsKKwlpbnQgb3B0aW9uczsKKwlpbnQgcGFnZXNbQ09ORklHX1NZU19OQU5EX01BWF9DSElQU107CisJaW50IG9mZnM7CisJaW50IHZlcm9mZnM7CisJdWludDhfdCB2ZXJzaW9uW0NPTkZJR19TWVNfTkFORF9NQVhfQ0hJUFNdOworCWludCBsZW47CisJaW50IG1heGJsb2NrczsKKwlpbnQgcmVzZXJ2ZWRfYmxvY2tfY29kZTsKKwl1aW50OF90ICpwYXR0ZXJuOworfTsKKworLyogT3B0aW9ucyBmb3IgdGhlIGJhZCBibG9jayB0YWJsZSBkZXNjcmlwdG9ycyAqLworCisvKiBUaGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBwZXIgYmxvY2sgaW4gdGhlIGJidCBvbiB0aGUgZGV2aWNlICovCisjZGVmaW5lIE5BTkRfQkJUX05SQklUU19NU0sJMHgwMDAwMDAwRgorI2RlZmluZSBOQU5EX0JCVF8xQklUCQkweDAwMDAwMDAxCisjZGVmaW5lIE5BTkRfQkJUXzJCSVQJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTkFORF9CQlRfNEJJVAkJMHgwMDAwMDAwNAorI2RlZmluZSBOQU5EX0JCVF84QklUCQkweDAwMDAwMDA4CisvKiBUaGUgYmFkIGJsb2NrIHRhYmxlIGlzIGluIHRoZSBsYXN0IGdvb2QgYmxvY2sgb2YgdGhlIGRldmljZSAqLworI2RlZmluZSBOQU5EX0JCVF9MQVNUQkxPQ0sJMHgwMDAwMDAxMAorLyogVGhlIGJidCBpcyBhdCB0aGUgZ2l2ZW4gcGFnZSwgZWxzZSB3ZSBtdXN0IHNjYW4gZm9yIHRoZSBiYnQgKi8KKyNkZWZpbmUgTkFORF9CQlRfQUJTUEFHRQkweDAwMDAwMDIwCisvKiBUaGUgYmJ0IGlzIGF0IHRoZSBnaXZlbiBwYWdlLCBlbHNlIHdlIG11c3Qgc2NhbiBmb3IgdGhlIGJidCAqLworI2RlZmluZSBOQU5EX0JCVF9TRUFSQ0gJCTB4MDAwMDAwNDAKKy8qIGJidCBpcyBzdG9yZWQgcGVyIGNoaXAgb24gbXVsdGljaGlwIGRldmljZXMgKi8KKyNkZWZpbmUgTkFORF9CQlRfUEVSQ0hJUAkweDAwMDAwMDgwCisvKiBiYnQgaGFzIGEgdmVyc2lvbiBjb3VudGVyIGF0IG9mZnNldCB2ZXJvZmZzICovCisjZGVmaW5lIE5BTkRfQkJUX1ZFUlNJT04JMHgwMDAwMDEwMAorLyogQ3JlYXRlIGEgYmJ0IGlmIG5vbmUgZXhpc3RzICovCisjZGVmaW5lIE5BTkRfQkJUX0NSRUFURQkJMHgwMDAwMDIwMAorLyogU2VhcmNoIGdvb2QgLyBiYWQgcGF0dGVybiB0aHJvdWdoIGFsbCBwYWdlcyBvZiBhIGJsb2NrICovCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5BTExQQUdFUwkweDAwMDAwNDAwCisvKiBTY2FuIGJsb2NrIGVtcHR5IGR1cmluZyBnb29kIC8gYmFkIGJsb2NrIHNjYW4gKi8KKyNkZWZpbmUgTkFORF9CQlRfU0NBTkVNUFRZCTB4MDAwMDA4MDAKKy8qIFdyaXRlIGJidCBpZiBuZWNjZWNhcnkgKi8KKyNkZWZpbmUgTkFORF9CQlRfV1JJVEUJCTB4MDAwMDEwMDAKKy8qIFJlYWQgYW5kIHdyaXRlIGJhY2sgYmxvY2sgY29udGVudHMgd2hlbiB3cml0aW5nIGJidCAqLworI2RlZmluZSBOQU5EX0JCVF9TQVZFQ09OVEVOVAkweDAwMDAyMDAwCisvKiBTZWFyY2ggZ29vZCAvIGJhZCBwYXR0ZXJuIG9uIHRoZSBmaXJzdCBhbmQgdGhlIHNlY29uZCBwYWdlICovCisjZGVmaW5lIE5BTkRfQkJUX1NDQU4yTkRQQUdFCTB4MDAwMDQwMDAKKy8qIFNlYXJjaCBnb29kIC8gYmFkIHBhdHRlcm4gb24gdGhlIGxhc3QgcGFnZSBvZiB0aGUgZXJhc2VibG9jayAqLworI2RlZmluZSBOQU5EX0JCVF9TQ0FOTEFTVFBBR0UJMHgwMDAwODAwMAorLyogQ2hpcCBzdG9yZXMgYmFkIGJsb2NrIG1hcmtlciBvbiBCT1RIIDFzdCBhbmQgNnRoIGJ5dGVzIG9mIE9PQiAqLworI2RlZmluZSBOQU5EX0JCVF9TQ0FOQllURTFBTkQ2IDB4MDAxMDAwMDAKKy8qIFRoZSBuYW5kX2JidF9kZXNjciB3YXMgY3JlYXRlZCBkeW5hbWljYWx5IGFuZCBtdXN0IGJlIGZyZWVkICovCisjZGVmaW5lIE5BTkRfQkJUX0RZTkFNSUNTVFJVQ1QgMHgwMDIwMDAwMAorLyogVGhlIGJhZCBibG9jayB0YWJsZSBkb2VzIG5vdCBPT0IgZm9yIG1hcmtlciAqLworI2RlZmluZSBOQU5EX0JCVF9OT19PT0IJCTB4MDA0MDAwMDAKKworLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB0byBzY2FuIGZvciBhIGJidCAqLworI2RlZmluZSBOQU5EX0JCVF9TQ0FOX01BWEJMT0NLUwk0CisKKy8qCisgKiBDb25zdGFudHMgZm9yIG9vYiBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgT05FTkFORF9CQURCTE9DS19QT1MJMAorCisvKgorICogQmFkIGJsb2NrIHNjYW5uaW5nIGVycm9ycworICovCisjZGVmaW5lIE9ORU5BTkRfQkJUX1JFQURfRVJST1IgICAgICAgICAgMQorI2RlZmluZSBPTkVOQU5EX0JCVF9SRUFEX0VDQ19FUlJPUiAgICAgIDIKKyNkZWZpbmUgT05FTkFORF9CQlRfUkVBRF9GQVRBTF9FUlJPUiAgICA0CisKKy8qKgorICogc3RydWN0IGJidF9pbmZvIC0gW0dFTkVSSUNdIEJhZCBCbG9jayBUYWJsZSBkYXRhIHN0cnVjdHVyZQorICogQHBhcmFtIGJidF9lcmFzZV9zaGlmdAlbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgYmJ0IGVudHJ5CisgKiBAcGFyYW0gYmFkYmxvY2twb3MJCVtJTlRFUk5dIHBvc2l0aW9uIG9mIHRoZSBiYWQgYmxvY2sgbWFya2VyIGluIHRoZSBvb2IgYXJlYQorICogQHBhcmFtIGJidAkJCVtJTlRFUk5dIGJhZCBibG9jayB0YWJsZSBwb2ludGVyCisgKiBAcGFyYW0gYmFkYmxvY2tfcGF0dGVybglbUkVQTEFDRUFCTEVdIGJhZCBibG9jayBzY2FuIHBhdHRlcm4gdXNlZCBmb3IgaW5pdGlhbCBiYWQgYmxvY2sgc2NhbgorICogQHBhcmFtIHByaXYJCQlbT1BUSU9OQUxdIHBvaW50ZXIgdG8gcHJpdmF0ZSBiYm0gZGF0ZQorICovCitzdHJ1Y3QgYmJtX2luZm8geworCWludCBiYnRfZXJhc2Vfc2hpZnQ7CisJaW50IGJhZGJsb2NrcG9zOworCWludCBvcHRpb25zOworCisJdWludDhfdCAqYmJ0OworCisJaW50ICgqaXNiYWRfYmJ0KSAoc3RydWN0IG10ZF9pbmZvICogbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgYWxsb3diYnQpOworCisJLyogVE9ETyBBZGQgbW9yZSBOQU5EIHNwZWNpZmljIGZpbGVkcyAqLworCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmFkYmxvY2tfcGF0dGVybjsKKworCXZvaWQgKnByaXY7Cit9OworCisvKiBPbmVOQU5EIEJCVCBpbnRlcmZhY2UgKi8KK2V4dGVybiBpbnQgb25lbmFuZF9zY2FuX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpOworZXh0ZXJuIGludCBvbmVuYW5kX2RlZmF1bHRfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisKKyNlbmRpZgkJCQkvKiBfX0xJTlVYX01URF9CQk1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLWFiaS5oIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLWFiaS5oCmluZGV4IDNkMWQ0MTYuLjBlMDkwNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL210ZC1hYmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQtYWJpLmgKQEAgLTcsNiArNywxMCBAQAogI2lmbmRlZiBfX01URF9BQklfSF9fCiAjZGVmaW5lIF9fTVREX0FCSV9IX18KIAorI2lmIDEKKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNlbmRpZgorCiBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyIHsKIAl1aW50MzJfdCBzdGFydDsKIAl1aW50MzJfdCBsZW5ndGg7CkBAIC0xNSw3ICsxOSw3IEBACiBzdHJ1Y3QgbXRkX29vYl9idWYgewogCXVpbnQzMl90IHN0YXJ0OwogCXVpbnQzMl90IGxlbmd0aDsKLQl1bnNpZ25lZCBjaGFyICpwdHI7CisJdW5zaWduZWQgY2hhciBfX3VzZXIgKnB0cjsKIH07CiAKICNkZWZpbmUgTVREX0FCU0VOVAkJMApAQCAtMjMsNDcgKzI3LDQxIEBACiAjZGVmaW5lIE1URF9ST00JCQkyCiAjZGVmaW5lIE1URF9OT1JGTEFTSAkJMwogI2RlZmluZSBNVERfTkFOREZMQVNICQk0Ci0jZGVmaW5lIE1URF9QRVJPTQkJNQotI2RlZmluZSBNVERfT1RIRVIJCTE0Ci0jZGVmaW5lIE1URF9VTktOT1dOCQkxNQorI2RlZmluZSBNVERfREFUQUZMQVNICQk2CisjZGVmaW5lIE1URF9VQklWT0xVTUUJCTcKIAotI2RlZmluZSBNVERfQ0xFQVJfQklUUwkJMSAgICAgICAvKiBCaXRzIGNhbiBiZSBjbGVhcmVkIChmbGFzaCkgKi8KLSNkZWZpbmUgTVREX1NFVF9CSVRTCQkyICAgICAgIC8qIEJpdHMgY2FuIGJlIHNldCAqLwotI2RlZmluZSBNVERfRVJBU0VBQkxFCQk0ICAgICAgIC8qIEhhcyBhbiBlcmFzZSBmdW5jdGlvbiAqLwotI2RlZmluZSBNVERfV1JJVEVCX1dSSVRFQUJMRQk4ICAgICAgIC8qIERpcmVjdCBJTyBpcyBwb3NzaWJsZSAqLwotI2RlZmluZSBNVERfVk9MQVRJTEUJCTE2ICAgICAgLyogU2V0IGZvciBSQU1zICovCi0jZGVmaW5lIE1URF9YSVAJCQkzMgkvKiBlWGVjdXRlLUluLVBsYWNlIHBvc3NpYmxlICovCi0jZGVmaW5lIE1URF9PT0IJCQk2NAkvKiBPdXQtb2YtYmFuZCBkYXRhIChOQU5EIGZsYXNoKSAqLwotI2RlZmluZSBNVERfRUNDCQkJMTI4CS8qIERldmljZSBjYXBhYmxlIG9mIGF1dG9tYXRpYyBFQ0MgKi8KLSNkZWZpbmUgTVREX05PX1ZJUlRCTE9DS1MJMjU2CS8qIFZpcnR1YWwgYmxvY2tzIG5vdCBhbGxvd2VkICovCisjZGVmaW5lIE1URF9XUklURUFCTEUJCTB4NDAwCS8qIERldmljZSBpcyB3cml0ZWFibGUgKi8KKyNkZWZpbmUgTVREX0JJVF9XUklURUFCTEUJMHg4MDAJLyogU2luZ2xlIGJpdHMgY2FuIGJlIGZsaXBwZWQgKi8KKyNkZWZpbmUgTVREX05PX0VSQVNFCQkweDEwMDAJLyogTm8gZXJhc2UgbmVjZXNzYXJ5ICovCisjZGVmaW5lIE1URF9TVFVQSURfTE9DSwkJMHgyMDAwCS8qIEFsd2F5cyBsb2NrZWQgYWZ0ZXIgcmVzZXQgKi8KIAogLyogU29tZSBjb21tb24gZGV2aWNlcyAvIGNvbWJpbmF0aW9ucyBvZiBjYXBhYmlsaXRpZXMgKi8KICNkZWZpbmUgTVREX0NBUF9ST00JCTAKLSNkZWZpbmUgTVREX0NBUF9SQU0JCShNVERfQ0xFQVJfQklUU3xNVERfU0VUX0JJVFN8TVREX1dSSVRFQl9XUklURUFCTEUpCi0jZGVmaW5lIE1URF9DQVBfTk9SRkxBU0ggICAgICAgIChNVERfQ0xFQVJfQklUU3xNVERfRVJBU0VBQkxFKQotI2RlZmluZSBNVERfQ0FQX05BTkRGTEFTSCAgICAgICAoTVREX0NMRUFSX0JJVFN8TVREX0VSQVNFQUJMRXxNVERfT09CKQotI2RlZmluZSBNVERfV1JJVEVBQkxFCQkoTVREX0NMRUFSX0JJVFN8TVREX1NFVF9CSVRTKQotCi0KLS8qIFR5cGVzIG9mIGF1dG9tYXRpYyBFQ0MvQ2hlY2tzdW0gYXZhaWxhYmxlICovCi0jZGVmaW5lIE1URF9FQ0NfTk9ORQkJMCAJLyogTm8gYXV0b21hdGljIEVDQyBhdmFpbGFibGUgKi8KLSNkZWZpbmUgTVREX0VDQ19SU19EaXNrT25DaGlwCTEJLyogQXV0b21hdGljIEVDQyBvbiBEaXNrT25DaGlwICovCi0jZGVmaW5lIE1URF9FQ0NfU1cJCTIJLyogU1cgRUNDIGZvciBUb3NoaWJhICYgU2Ftc3VuZyBkZXZpY2VzICovCisjZGVmaW5lIE1URF9DQVBfUkFNCQkoTVREX1dSSVRFQUJMRSB8IE1URF9CSVRfV1JJVEVBQkxFIHwgTVREX05PX0VSQVNFKQorI2RlZmluZSBNVERfQ0FQX05PUkZMQVNICShNVERfV1JJVEVBQkxFIHwgTVREX0JJVF9XUklURUFCTEUpCisjZGVmaW5lIE1URF9DQVBfTkFOREZMQVNICShNVERfV1JJVEVBQkxFKQogCiAvKiBFQ0MgYnl0ZSBwbGFjZW1lbnQgKi8KICNkZWZpbmUgTVREX05BTkRFQ0NfT0ZGCQkwCS8qIFN3aXRjaCBvZmYgRUNDIChOb3QgcmVjb21tZW5kZWQpICovCiAjZGVmaW5lIE1URF9OQU5ERUNDX1BMQUNFCTEJLyogVXNlIHRoZSBnaXZlbiBwbGFjZW1lbnQgaW4gdGhlIHN0cnVjdHVyZSAoWUFGRlMxIGxlZ2FjeSBtb2RlKSAqLwogI2RlZmluZSBNVERfTkFOREVDQ19BVVRPUExBQ0UJMgkvKiBVc2UgdGhlIGRlZmF1bHQgcGxhY2VtZW50IHNjaGVtZSAqLwogI2RlZmluZSBNVERfTkFOREVDQ19QTEFDRU9OTFkJMwkvKiBVc2UgdGhlIGdpdmVuIHBsYWNlbWVudCBpbiB0aGUgc3RydWN0dXJlIChEbyBub3Qgc3RvcmUgZWNjIHJlc3VsdCBvbiByZWFkKSAqLwotI2RlZmluZSBNVERfTkFOREVDQ19BVVRPUExfVVNSIAk0CS8qIFVzZSB0aGUgZ2l2ZW4gYXV0b3BsYWNlbWVudCBzY2hlbWUgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGRlZmF1bHQgKi8KKyNkZWZpbmUgTVREX05BTkRFQ0NfQVVUT1BMX1VTUgk0CS8qIFVzZSB0aGUgZ2l2ZW4gYXV0b3BsYWNlbWVudCBzY2hlbWUgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGRlZmF1bHQgKi8KKworLyogT1RQIG1vZGUgc2VsZWN0aW9uICovCisjZGVmaW5lIE1URF9PVFBfT0ZGCQkwCisjZGVmaW5lIE1URF9PVFBfRkFDVE9SWQkJMQorI2RlZmluZSBNVERfT1RQX1VTRVIJCTIKIAogc3RydWN0IG10ZF9pbmZvX3VzZXIgewogCXVpbnQ4X3QgdHlwZTsKIAl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCBzaXplOwkgLyogVG90YWwgc2l6ZSBvZiB0aGUgTVREICovCisJdWludDMyX3Qgc2l6ZTsJCQkvKiBUb3RhbCBzaXplIG9mIHRoZSBNVEQgKi8KIAl1aW50MzJfdCBlcmFzZXNpemU7Ci0JdWludDMyX3Qgb29iYmxvY2s7ICAvKiBTaXplIG9mIE9PQiBibG9ja3MgKGUuZy4gNTEyKSAqLwotCXVpbnQzMl90IG9vYnNpemU7ICAgLyogQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikgKi8KKwl1aW50MzJfdCB3cml0ZXNpemU7CisJdWludDMyX3Qgb29ic2l6ZTsJCS8qIEFtb3VudCBvZiBPT0IgZGF0YSBwZXIgYmxvY2sgKGUuZy4gMTYpICovCisJLyogVGhlIGJlbG93IHR3byBmaWVsZHMgYXJlIG9ic29sZXRlIGFuZCBicm9rZW4sIGRvIG5vdCB1c2UgdGhlbQorCSAqIChUT0RPOiByZW1vdmUgYXQgc29tZSBwb2ludCkgKi8KIAl1aW50MzJfdCBlY2N0eXBlOwogCXVpbnQzMl90IGVjY3NpemU7CiB9OwpAQCAtNzYsMjQgKzc0LDgzIEBACiAJdWludDMyX3QgcmVnaW9uaW5kZXg7CiB9OwogCi0jZGVmaW5lIE1FTUdFVElORk8gICAgICAgICAgICAgIF9JT1IoJ00nLCAxLCBzdHJ1Y3QgbXRkX2luZm9fdXNlcikKLSNkZWZpbmUgTUVNRVJBU0UgICAgICAgICAgICAgICAgX0lPVygnTScsIDIsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCi0jZGVmaW5lIE1FTVdSSVRFT09CICAgICAgICAgICAgIF9JT1dSKCdNJywgMywgc3RydWN0IG10ZF9vb2JfYnVmKQotI2RlZmluZSBNRU1SRUFET09CICAgICAgICAgICAgICBfSU9XUignTScsIDQsIHN0cnVjdCBtdGRfb29iX2J1ZikKLSNkZWZpbmUgTUVNTE9DSyAgICAgICAgICAgICAgICAgX0lPVygnTScsIDUsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCi0jZGVmaW5lIE1FTVVOTE9DSyAgICAgICAgICAgICAgIF9JT1coJ00nLCA2LCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQorc3RydWN0IG90cF9pbmZvIHsKKwl1aW50MzJfdCBzdGFydDsKKwl1aW50MzJfdCBsZW5ndGg7CisJdWludDMyX3QgbG9ja2VkOworfTsKKworI2RlZmluZSBNRU1HRVRJTkZPCQlfSU9SKCdNJywgMSwgc3RydWN0IG10ZF9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTUVSQVNFCQlfSU9XKCdNJywgMiwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNV1JJVEVPT0IJCV9JT1dSKCdNJywgMywgc3RydWN0IG10ZF9vb2JfYnVmKQorI2RlZmluZSBNRU1SRUFET09CCQlfSU9XUignTScsIDQsIHN0cnVjdCBtdGRfb29iX2J1ZikKKyNkZWZpbmUgTUVNTE9DSwkJCV9JT1coJ00nLCA1LCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQorI2RlZmluZSBNRU1VTkxPQ0sJCV9JT1coJ00nLCA2LCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQogI2RlZmluZSBNRU1HRVRSRUdJT05DT1VOVAlfSU9SKCdNJywgNywgaW50KQogI2RlZmluZSBNRU1HRVRSRUdJT05JTkZPCV9JT1dSKCdNJywgOCwgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTVNFVE9PQlNFTAkJX0lPVygnTScsIDksIHN0cnVjdCBuYW5kX29vYmluZm8pCiAjZGVmaW5lIE1FTUdFVE9PQlNFTAkJX0lPUignTScsIDEwLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvKQogI2RlZmluZSBNRU1HRVRCQURCTE9DSwkJX0lPVygnTScsIDExLCBsb2ZmX3QpCiAjZGVmaW5lIE1FTVNFVEJBREJMT0NLCQlfSU9XKCdNJywgMTIsIGxvZmZfdCkKKyNkZWZpbmUgT1RQU0VMRUNUCQlfSU9SKCdNJywgMTMsIGludCkKKyNkZWZpbmUgT1RQR0VUUkVHSU9OQ09VTlQJX0lPVygnTScsIDE0LCBpbnQpCisjZGVmaW5lIE9UUEdFVFJFR0lPTklORk8JX0lPVygnTScsIDE1LCBzdHJ1Y3Qgb3RwX2luZm8pCisjZGVmaW5lIE9UUExPQ0sJCQlfSU9SKCdNJywgMTYsIHN0cnVjdCBvdHBfaW5mbykKKyNkZWZpbmUgRUNDR0VUTEFZT1VUCQlfSU9SKCdNJywgMTcsIHN0cnVjdCBuYW5kX2VjY2xheW91dCkKKyNkZWZpbmUgRUNDR0VUU1RBVFMJCV9JT1IoJ00nLCAxOCwgc3RydWN0IG10ZF9lY2Nfc3RhdHMpCisjZGVmaW5lIE1UREZJTEVNT0RFCQlfSU8oJ00nLCAxOSkKIAorLyoKKyAqIE9ic29sZXRlIGxlZ2FjeSBpbnRlcmZhY2UuIEtlZXAgaXQgaW4gb3JkZXIgbm90IHRvIGJyZWFrIHVzZXJzcGFjZQorICogaW50ZXJmYWNlcworICovCiBzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKIAl1aW50MzJfdCB1c2VlY2M7CiAJdWludDMyX3QgZWNjYnl0ZXM7CiAJdWludDMyX3Qgb29iZnJlZVs4XVsyXTsKLQl1aW50MzJfdCBlY2Nwb3NbMzJdOworCXVpbnQzMl90IGVjY3Bvc1s0OF07Cit9OworCitzdHJ1Y3QgbmFuZF9vb2JmcmVlIHsKKwl1aW50MzJfdCBvZmZzZXQ7CisJdWludDMyX3QgbGVuZ3RoOworfTsKKworI2RlZmluZSBNVERfTUFYX09PQkZSRUVfRU5UUklFUwk4CisvKgorICogRUNDIGxheW91dCBjb250cm9sIHN0cnVjdHVyZS4gRXhwb3J0ZWQgdG8gdXNlcnNwYWNlIGZvcgorICogZGlhZ25vc2lzIGFuZCB0byBhbGxvdyBjcmVhdGlvbiBvZiByYXcgaW1hZ2VzCisgKi8KK3N0cnVjdCBuYW5kX2VjY2xheW91dCB7CisJdWludDMyX3QgZWNjYnl0ZXM7CisJdWludDMyX3QgZWNjcG9zWzEyOF07CisJdWludDMyX3Qgb29iYXZhaWw7CisJc3RydWN0IG5hbmRfb29iZnJlZSBvb2JmcmVlW01URF9NQVhfT09CRlJFRV9FTlRSSUVTXTsKK307CisKKy8qKgorICogc3RydWN0IG10ZF9lY2Nfc3RhdHMgLSBlcnJvciBjb3JyZWN0aW9uIHN0YXRzCisgKgorICogQGNvcnJlY3RlZDoJbnVtYmVyIG9mIGNvcnJlY3RlZCBiaXRzCisgKiBAZmFpbGVkOgludW1iZXIgb2YgdW5jb3JyZWN0YWJsZSBlcnJvcnMKKyAqIEBiYWRibG9ja3M6CW51bWJlciBvZiBiYWQgYmxvY2tzIGluIHRoaXMgcGFydGl0aW9uCisgKiBAYmJ0YmxvY2tzOgludW1iZXIgb2YgYmxvY2tzIHJlc2VydmVkIGZvciBiYWQgYmxvY2sgdGFibGVzCisgKi8KK3N0cnVjdCBtdGRfZWNjX3N0YXRzIHsKKwl1aW50MzJfdCBjb3JyZWN0ZWQ7CisJdWludDMyX3QgZmFpbGVkOworCXVpbnQzMl90IGJhZGJsb2NrczsKKwl1aW50MzJfdCBiYnRibG9ja3M7Cit9OworCisvKgorICogUmVhZC93cml0ZSBmaWxlIG1vZGVzIGZvciBhY2Nlc3MgdG8gTVRECisgKi8KK2VudW0gbXRkX2ZpbGVfbW9kZXMgeworCU1URF9NT0RFX05PUk1BTCA9IE1URF9PVFBfT0ZGLAorCU1URF9NT0RFX09UUF9GQUNUT1JZID0gTVREX09UUF9GQUNUT1JZLAorCU1URF9NT0RFX09UUF9VU0VSID0gTVREX09UUF9VU0VSLAorCU1URF9NT0RFX1JBVywKIH07CiAKICNlbmRpZiAvKiBfX01URF9BQklfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaCBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCmluZGV4IDEzZTkwODAuLmIwNmU4MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogbXRkLmgsdiAxLjU2IDIwMDQvMDgvMDkgMTg6NDY6MDQgZG1hcmxpbiBFeHAgJAotICoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZXQgYWwuCiAgKgogICogUmVsZWFzZWQgdW5kZXIgR1BMCkBAIC04LDI1ICs2LDQ5IEBACiAKICNpZm5kZWYgX19NVERfTVREX0hfXwogI2RlZmluZSBfX01URF9NVERfSF9fCisKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgIi4uLy4uL3R5cGVzLmgiCisjaW5jbHVkZSA8ZGl2NjQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLWFiaS5oPgogCi0jZGVmaW5lIE1BWF9NVERfREVWSUNFUyAxNgogCi0jZGVmaW5lIE1URF9FUkFTRV9QRU5ESU5HICAgICAgCTB4MDEKKyNkZWZpbmUgTVREX0NIQVJfTUFKT1IgOTAKKyNkZWZpbmUgTVREX0JMT0NLX01BSk9SIDMxCisjZGVmaW5lIE1BWF9NVERfREVWSUNFUyAzMgorCisjZGVmaW5lIE1URF9FUkFTRV9QRU5ESU5HCTB4MDEKICNkZWZpbmUgTVREX0VSQVNJTkcJCTB4MDIKICNkZWZpbmUgTVREX0VSQVNFX1NVU1BFTkQJMHgwNAogI2RlZmluZSBNVERfRVJBU0VfRE9ORSAgICAgICAgICAweDA4CiAjZGVmaW5lIE1URF9FUkFTRV9GQUlMRUQgICAgICAgIDB4MTAKIAorI2RlZmluZSBNVERfRkFJTF9BRERSX1VOS05PV04JLTFMTAorCisvKgorICogRW51bWVyYXRpb24gZm9yIE5BTkQvT25lTkFORCBmbGFzaCBjaGlwIHN0YXRlCisgKi8KK2VudW0geworCUZMX1JFQURZLAorCUZMX1JFQURJTkcsCisJRkxfV1JJVElORywKKwlGTF9FUkFTSU5HLAorCUZMX1NZTkNJTkcsCisJRkxfQ0FDSEVEUFJHLAorCUZMX1JFU0VUSU5HLAorCUZMX1VOTE9DS0lORywKKwlGTF9MT0NLSU5HLAorCUZMX1BNX1NVU1BFTkRFRCwKK307CisKIC8qIElmIHRoZSBlcmFzZSBmYWlscywgZmFpbF9hZGRyIG1pZ2h0IGluZGljYXRlIGV4YWN0bHkgd2hpY2ggYmxvY2sgZmFpbGVkLiAgSWYKLSAgIGZhaWxfYWRkciA9IDB4ZmZmZmZmZmYsIHRoZSBmYWlsdXJlIHdhcyBub3QgYXQgdGhlIGRldmljZSBsZXZlbCBvciB3YXMgbm90CisgICBmYWlsX2FkZHIgPSBNVERfRkFJTF9BRERSX1VOS05PV04sIHRoZSBmYWlsdXJlIHdhcyBub3QgYXQgdGhlIGRldmljZSBsZXZlbCBvciB3YXMgbm90CiAgICBzcGVjaWZpYyB0byBhbnkgcGFydGljdWxhciBibG9jay4gKi8KIHN0cnVjdCBlcmFzZV9pbmZvIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKLQl1X2ludDMyX3QgYWRkcjsKLQl1X2ludDMyX3QgbGVuOwotCXVfaW50MzJfdCBmYWlsX2FkZHI7CisJdWludDY0X3QgYWRkcjsKKwl1aW50NjRfdCBsZW47CisJdWludDY0X3QgZmFpbF9hZGRyOwogCXVfbG9uZyB0aW1lOwogCXVfbG9uZyByZXRyaWVzOwogCXVfaW50IGRldjsKQEAgLTM1LDM4ICs1Nyw5MSBAQAogCXVfbG9uZyBwcml2OwogCXVfY2hhciBzdGF0ZTsKIAlzdHJ1Y3QgZXJhc2VfaW5mbyAqbmV4dDsKKwlpbnQgc2NydWI7CiB9OwogCiBzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvIHsKLQl1X2ludDMyX3Qgb2Zmc2V0OwkJCS8qIEF0IHdoaWNoIHRoaXMgcmVnaW9uIHN0YXJ0cywgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBNVEQgKi8KKwl1aW50NjRfdCBvZmZzZXQ7CQkJLyogQXQgd2hpY2ggdGhpcyByZWdpb24gc3RhcnRzLCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIE1URCAqLwogCXVfaW50MzJfdCBlcmFzZXNpemU7CQkvKiBGb3IgdGhpcyByZWdpb24gKi8KIAl1X2ludDMyX3QgbnVtYmxvY2tzOwkJLyogTnVtYmVyIG9mIGJsb2NrcyBvZiBlcmFzZXNpemUgaW4gdGhpcyByZWdpb24gKi8KKwl1bnNpZ25lZCBsb25nICpsb2NrbWFwOwkJLyogSWYga2VlcGluZyBiaXRtYXAgb2YgbG9ja3MgKi8KK307CisKKy8qCisgKiBvb2Igb3BlcmF0aW9uIG1vZGVzCisgKgorICogTVREX09PQl9QTEFDRToJb29iIGRhdGEgYXJlIHBsYWNlZCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0CisgKiBNVERfT09CX0FVVE86CW9vYiBkYXRhIGFyZSBhdXRvbWF0aWNhbGx5IHBsYWNlZCBhdCB0aGUgZnJlZSBhcmVhcworICoJCQl3aGljaCBhcmUgZGVmaW5lZCBieSB0aGUgZWNjbGF5b3V0CisgKiBNVERfT09CX1JBVzoJCW1vZGUgdG8gcmVhZCByYXcgZGF0YStvb2IgaW4gb25lIGNodW5rLiBUaGUgb29iIGRhdGEKKyAqCQkJaXMgaW5zZXJ0ZWQgaW50byB0aGUgZGF0YS4gVGhhdHMgYSByYXcgaW1hZ2Ugb2YgdGhlCisgKgkJCWZsYXNoIGNvbnRlbnRzLgorICovCit0eXBlZGVmIGVudW0geworCU1URF9PT0JfUExBQ0UsCisJTVREX09PQl9BVVRPLAorCU1URF9PT0JfUkFXLAorfSBtdGRfb29iX21vZGVfdDsKKworLyoqCisgKiBzdHJ1Y3QgbXRkX29vYl9vcHMgLSBvb2Igb3BlcmF0aW9uIG9wZXJhbmRzCisgKiBAbW9kZToJb3BlcmF0aW9uIG1vZGUKKyAqCisgKiBAbGVuOgludW1iZXIgb2YgZGF0YSBieXRlcyB0byB3cml0ZS9yZWFkCisgKgorICogQHJldGxlbjoJbnVtYmVyIG9mIGRhdGEgYnl0ZXMgd3JpdHRlbi9yZWFkCisgKgorICogQG9vYmxlbjoJbnVtYmVyIG9mIG9vYiBieXRlcyB0byB3cml0ZS9yZWFkCisgKiBAb29icmV0bGVuOgludW1iZXIgb2Ygb29iIGJ5dGVzIHdyaXR0ZW4vcmVhZAorICogQG9vYm9mZnM6CW9mZnNldCBvZiBvb2IgZGF0YSBpbiB0aGUgb29iIGFyZWEgKG9ubHkgcmVsZXZhbnQgd2hlbgorICoJCW1vZGUgPSBNVERfT09CX1BMQUNFKQorICogQGRhdGJ1ZjoJZGF0YSBidWZmZXIgLSBpZiBOVUxMIG9ubHkgb29iIGRhdGEgYXJlIHJlYWQvd3JpdHRlbgorICogQG9vYmJ1ZjoJb29iIGRhdGEgYnVmZmVyCisgKgorICogTm90ZSwgaXQgaXMgYWxsb3dlZCB0byByZWFkIG1vcmUgdGhlbiBvbmUgT09CIGFyZWEgYXQgb25lIGdvLCBidXQgbm90IHdyaXRlLgorICogVGhlIGludGVyZmFjZSBhc3N1bWVzIHRoYXQgdGhlIE9PQiB3cml0ZSByZXF1ZXN0cyBwcm9ncmFtIG9ubHkgb25lIHBhZ2UncworICogT09CIGFyZWEuCisgKi8KK3N0cnVjdCBtdGRfb29iX29wcyB7CisJbXRkX29vYl9tb2RlX3QJbW9kZTsKKwlzaXplX3QJCWxlbjsKKwlzaXplX3QJCXJldGxlbjsKKwlzaXplX3QJCW9vYmxlbjsKKwlzaXplX3QJCW9vYnJldGxlbjsKKwl1aW50MzJfdAlvb2JvZmZzOworCXVpbnQ4X3QJCSpkYXRidWY7CisJdWludDhfdAkJKm9vYmJ1ZjsKIH07CiAKIHN0cnVjdCBtdGRfaW5mbyB7CiAJdV9jaGFyIHR5cGU7CiAJdV9pbnQzMl90IGZsYWdzOwotCXVfaW50MzJfdCBzaXplOwkgLyogVG90YWwgc2l6ZSBvZiB0aGUgTVREICovCisJdWludDY0X3Qgc2l6ZTsJIC8qIFRvdGFsIHNpemUgb2YgdGhlIE1URCAqLwogCi0JLyogIk1ham9yIiBlcmFzZSBzaXplIGZvciB0aGUgZGV2aWNlLiBOYe92ZSB1c2VycyBtYXkgdGFrZSB0aGlzCisJLyogIk1ham9yIiBlcmFzZSBzaXplIGZvciB0aGUgZGV2aWNlLiBOYcOvdmUgdXNlcnMgbWF5IHRha2UgdGhpcwogCSAqIHRvIGJlIHRoZSBvbmx5IGVyYXNlIHNpemUgYXZhaWxhYmxlLCBvciBtYXkgdXNlIHRoZSBtb3JlIGRldGFpbGVkCiAJICogaW5mb3JtYXRpb24gYmVsb3cgaWYgdGhleSBkZXNpcmUKIAkgKi8KIAl1X2ludDMyX3QgZXJhc2VzaXplOworCS8qIE1pbmltYWwgd3JpdGFibGUgZmxhc2ggdW5pdCBzaXplLiBJbiBjYXNlIG9mIE5PUiBmbGFzaCBpdCBpcyAxIChldmVuCisJICogdGhvdWdoIGluZGl2aWR1YWwgYml0cyBjYW4gYmUgY2xlYXJlZCksIGluIGNhc2Ugb2YgTkFORCBmbGFzaCBpdCBpcworCSAqIG9uZSBOQU5EIHBhZ2UgKG9yIGhhbGYsIG9yIG9uZS1mb3VydGhzIG9mIGl0KSwgaW4gY2FzZSBvZiBFQ0MtZWQgTk9SCisJICogaXQgaXMgb2YgRUNDIGJsb2NrIHNpemUsIGV0Yy4gSXQgaXMgaWxsZWdhbCB0byBoYXZlIHdyaXRlc2l6ZSA9IDAuCisJICogQW55IGRyaXZlciByZWdpc3RlcmluZyBhIHN0cnVjdCBtdGRfaW5mbyBtdXN0IGVuc3VyZSBhIHdyaXRlc2l6ZSBvZgorCSAqIDEgb3IgbGFyZ2VyLgorCSAqLworCXVfaW50MzJfdCB3cml0ZXNpemU7CiAKIAl1X2ludDMyX3Qgb29iYmxvY2s7ICAvKiBTaXplIG9mIE9PQiBibG9ja3MgKGUuZy4gNTEyKSAqLwogCXVfaW50MzJfdCBvb2JzaXplOyAgIC8qIEFtb3VudCBvZiBPT0IgZGF0YSBwZXIgYmxvY2sgKGUuZy4gMTYpICovCi0JdV9pbnQzMl90IG9vYmF2YWlsOyAgLyogTnVtYmVyIG9mIGJ5dGVzIGluIE9PQiBhcmVhIGF2YWlsYWJsZSBmb3IgZnMgICovCi0JdV9pbnQzMl90IGVjY3R5cGU7Ci0JdV9pbnQzMl90IGVjY3NpemU7Ci0KKwl1X2ludDMyX3Qgb29iYXZhaWw7ICAvKiBBdmFpbGFibGUgT09CIGJ5dGVzIHBlciBibG9jayAqLwogCiAJLyogS2VybmVsLW9ubHkgc3R1ZmYgc3RhcnRzIGhlcmUuICovCi0JY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpuYW1lOwogCWludCBpbmRleDsKIAotCS8qIG9vYmluZm8gaXMgYSBuYW5kX29vYmluZm8gc3RydWN0dXJlLCB3aGljaCBjYW4gYmUgc2V0IGJ5IGlvdGNsIChNRU1TRVRPT0JJTkZPKSAqLwotCXN0cnVjdCBuYW5kX29vYmluZm8gb29iaW5mbzsKKwkvKiBlY2MgbGF5b3V0IHN0cnVjdHVyZSBwb2ludGVyIC0gcmVhZCBvbmx5ICEgKi8KKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmVjY2xheW91dDsKIAogCS8qIERhdGEgZm9yIHZhcmlhYmxlIGVyYXNlIHJlZ2lvbnMuIElmIG51bWVyYXNlcmVnaW9ucyBpcyB6ZXJvLAogCSAqIGl0IG1lYW5zIHRoYXQgdGhlIHdob2xlIGRldmljZSBoYXMgZXJhc2VzaXplIGFzIGdpdmVuIGFib3ZlLgpAQCAtNzQsNzIgKzE0OSwxMDUgQEAKIAlpbnQgbnVtZXJhc2VyZWdpb25zOwogCXN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKmVyYXNlcmVnaW9uczsKIAotCS8qIFRoaXMgcmVhbGx5IHNob3VsZG4ndCBiZSBoZXJlLiBJdCBjYW4gZ28gYXdheSBpbiAyLjUgKi8KLQl1X2ludDMyX3QgYmFua19zaXplOwotCisJLyoKKwkgKiBFcmFzZSBpcyBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiAgRGV2aWNlIGRyaXZlcnMgYXJlIHN1cHBvc2VkCisJICogdG8gY2FsbCBpbnN0ci0+Y2FsbGJhY2soKSB3aGVuZXZlciB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcywgZXZlbgorCSAqIGlmIGl0IGNvbXBsZXRlcyB3aXRoIGEgZmFpbHVyZS4KKwkgKiBDYWxsZXJzIGFyZSBzdXBwb3NlZCB0byBwYXNzIGEgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHdhaXQgZm9yIGl0CisJICogdG8gYmUgY2FsbGVkIGJlZm9yZSB3cml0aW5nIHRvIHRoZSBibG9jay4KKwkgKi8KIAlpbnQgKCplcmFzZSkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwogCiAJLyogVGhpcyBzdHVmZiBmb3IgZVhlY3V0ZS1Jbi1QbGFjZSAqLwotCWludCAoKnBvaW50KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICoqbXRkYnVmKTsKKwkvKiBwaHlzIGlzIG9wdGlvbmFsIGFuZCBtYXkgYmUgc2V0IHRvIE5VTEwgKi8KKwlpbnQgKCpwb2ludCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHZvaWQgKip2aXJ0LCBwaHlzX2FkZHJfdCAqcGh5cyk7CiAKIAkvKiBXZSBwcm9iYWJseSBzaG91bGRuJ3QgYWxsb3cgWElQIGlmIHRoZSB1bnBvaW50IGlzbid0IGEgTlVMTCAqLwotCXZvaWQgKCp1bnBvaW50KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqIGFkZHIsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuKTsKKwl2b2lkICgqdW5wb2ludCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbik7CiAKIAogCWludCAoKnJlYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CiAJaW50ICgqd3JpdGUpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOwogCi0JaW50ICgqcmVhZF9lY2MpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7Ci0JaW50ICgqd3JpdGVfZWNjKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKKwkvKiBJbiBibGFja2JveCBmbGlnaHQgcmVjb3JkZXIgbGlrZSBzY2VuYXJpb3Mgd2Ugd2FudCB0byBtYWtlIHN1Y2Nlc3NmdWwKKwkgICB3cml0ZXMgaW4gaW50ZXJydXB0IGNvbnRleHQuIHBhbmljX3dyaXRlKCkgaXMgb25seSBpbnRlbmRlZCB0byBiZQorCSAgIGNhbGxlZCB3aGVuIGl0cyBrbm93biB0aGUga2VybmVsIGlzIGFib3V0IHRvIHBhbmljIGFuZCB3ZSBuZWVkIHRoZQorCSAgIHdyaXRlIHRvIHN1Y2NlZWQuIFNpbmNlIHRoZSBrZXJuZWwgaXMgbm90IGdvaW5nIHRvIGJlIHJ1bm5pbmcgZm9yIG11Y2gKKwkgICBsb25nZXIsIHRoaXMgZnVuY3Rpb24gY2FuIGJyZWFrIGxvY2tzIGFuZCBkZWxheSB0byBlbnN1cmUgdGhlIHdyaXRlCisJICAgc3VjY2VlZHMgKGJ1dCBub3Qgc2xlZXApLiAqLwogCi0JaW50ICgqcmVhZF9vb2IpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7Ci0JaW50ICgqd3JpdGVfb29iKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKTsKKwlpbnQgKCpwYW5pY193cml0ZSkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CisKKwlpbnQgKCpyZWFkX29vYikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CisJaW50ICgqd3JpdGVfb29iKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CiAKIAkvKgogCSAqIE1ldGhvZHMgdG8gYWNjZXNzIHRoZSBwcm90ZWN0aW9uIHJlZ2lzdGVyIGFyZWEsIHByZXNlbnQgaW4gc29tZQogCSAqIGZsYXNoIGRldmljZXMuIFRoZSB1c2VyIGRhdGEgaXMgb25lIHRpbWUgcHJvZ3JhbW1hYmxlIGJ1dCB0aGUKIAkgKiBmYWN0b3J5IGRhdGEgaXMgcmVhZCBvbmx5LgogCSAqLwotCWludCAoKnJlYWRfdXNlcl9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKLQorCWludCAoKmdldF9mYWN0X3Byb3RfaW5mbykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qgb3RwX2luZm8gKmJ1Ziwgc2l6ZV90IGxlbik7CiAJaW50ICgqcmVhZF9mYWN0X3Byb3RfcmVnKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotCi0JLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkICovCisJaW50ICgqZ2V0X3VzZXJfcHJvdF9pbmZvKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBvdHBfaW5mbyAqYnVmLCBzaXplX3QgbGVuKTsKKwlpbnQgKCpyZWFkX3VzZXJfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CiAJaW50ICgqd3JpdGVfdXNlcl9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKKwlpbnQgKCpsb2NrX3VzZXJfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4pOworCisvKiBYWFggVS1CT09UIFhYWCAqLwogI2lmIDAKLQkvKiBrdmVjLWJhc2VkIHJlYWQvd3JpdGUgbWV0aG9kcy4gV2UgbmVlZCB0aGVzZSBlc3BlY2lhbGx5IGZvciBOQU5EIGZsYXNoLAotCSAgIHdpdGggaXRzIGxpbWl0ZWQgbnVtYmVyIG9mIHdyaXRlIGN5Y2xlcyBwZXIgZXJhc2UuCisJLyoga3ZlYy1iYXNlZCByZWFkL3dyaXRlIG1ldGhvZHMuCiAJICAgTkI6IFRoZSAnY291bnQnIHBhcmFtZXRlciBpcyB0aGUgbnVtYmVyIG9mIF92ZWN0b3JzXywgZWFjaCBvZgogCSAgIHdoaWNoIGNvbnRhaW5zIGFuIChvZnMsIGxlbikgdHVwbGUuCiAJKi8KLQlpbnQgKCpyZWFkdikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qga3ZlYyAqdmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IGZyb20sIHNpemVfdCAqcmV0bGVuKTsKLQlpbnQgKCpyZWFkdl9lY2MpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLAotCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7CiAJaW50ICgqd3JpdGV2KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuKTsKLQlpbnQgKCp3cml0ZXZfZWNjKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sCi0JCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKICNlbmRpZgorCiAJLyogU3luYyAqLwogCXZvaWQgKCpzeW5jKSAoc3RydWN0IG10ZF9pbmZvICptdGQpOwotI2lmIDAKLQkvKiBDaGlwLXN1cHBvcnRlZCBkZXZpY2UgbG9ja2luZyAqLwotCWludCAoKmxvY2spIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbik7Ci0JaW50ICgqdW5sb2NrKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4pOwogCi0JLyogUG93ZXIgTWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KLQlpbnQgKCpzdXNwZW5kKSAoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCXZvaWQgKCpyZXN1bWUpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0jZW5kaWYKKwkvKiBDaGlwLXN1cHBvcnRlZCBkZXZpY2UgbG9ja2luZyAqLworCWludCAoKmxvY2spIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgdWludDY0X3QgbGVuKTsKKwlpbnQgKCp1bmxvY2spIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgdWludDY0X3QgbGVuKTsKKwogCS8qIEJhZCBibG9jayBtYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwogCWludCAoKmJsb2NrX2lzYmFkKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpOwogCWludCAoKmJsb2NrX21hcmtiYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcyk7CiAKKy8qIFhYWCBVLUJPT1QgWFhYICovCisjaWYgMAorCXN0cnVjdCBub3RpZmllcl9ibG9jayByZWJvb3Rfbm90aWZpZXI7ICAvKiBkZWZhdWx0IG1vZGUgYmVmb3JlIHJlYm9vdCAqLworI2VuZGlmCisKKwkvKiBFQ0Mgc3RhdHVzIGluZm9ybWF0aW9uICovCisJc3RydWN0IG10ZF9lY2Nfc3RhdHMgZWNjX3N0YXRzOworCS8qIFN1YnBhZ2Ugc2hpZnQgKE5BTkQpICovCisJaW50IHN1YnBhZ2Vfc2Z0OworCiAJdm9pZCAqcHJpdjsKIAogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCWludCB1c2Vjb3VudDsKKworCS8qIElmIHRoZSBkcml2ZXIgaXMgc29tZXRoaW5nIHNtYXJ0LCBsaWtlIFVCSSwgaXQgbWF5IG5lZWQgdG8gbWFpbnRhaW4KKwkgKiBpdHMgb3duIHJlZmVyZW5jZSBjb3VudGluZy4gVGhlIGJlbG93IGZ1bmN0aW9ucyBhcmUgb25seSBmb3IgZHJpdmVyLgorCSAqIFRoZSBkcml2ZXIgbWF5IHJlZ2lzdGVyIGl0cyBjYWxsYmFja3MuIFRoZXNlIGNhbGxiYWNrcyBhcmUgbm90CisJICogc3VwcG9zZWQgdG8gYmUgY2FsbGVkIGJ5IE1URCB1c2VycyAqLworCWludCAoKmdldF9kZXZpY2UpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisJdm9pZCAoKnB1dF9kZXZpY2UpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiB9OwogCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG10ZF9kaXZfYnlfZWIodWludDY0X3Qgc3osIHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCWRvX2RpdihzeiwgbXRkLT5lcmFzZXNpemUpOworCXJldHVybiBzejsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBtdGRfbW9kX2J5X2ViKHVpbnQ2NF90IHN6LCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gZG9fZGl2KHN6LCBtdGQtPmVyYXNlc2l6ZSk7Cit9CiAKIAkvKiBLZXJuZWwtc2lkZSBpb2N0bCBkZWZpbml0aW9ucyAqLwogCkBAIC0xNDcsOSArMjU1LDEzIEBACiBleHRlcm4gaW50IGRlbF9tdGRfZGV2aWNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAKIGV4dGVybiBzdHJ1Y3QgbXRkX2luZm8gKmdldF9tdGRfZGV2aWNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbnVtKTsKK2V4dGVybiBzdHJ1Y3QgbXRkX2luZm8gKmdldF9tdGRfZGV2aWNlX25tKGNvbnN0IGNoYXIgKm5hbWUpOwogCiBleHRlcm4gdm9pZCBwdXRfbXRkX2RldmljZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0KK2V4dGVybiB2b2lkIG10ZF9nZXRfbGVuX2luY2xfYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50NjRfdCBvZmZzZXQsCisJCQkJIGNvbnN0IHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgKmxlbl9pbmNsX2JhZCwKKwkJCQkgaW50ICp0cnVuY2F0ZWQpOworLyogWFhYIFUtQk9PVCBYWFggKi8KICNpZiAwCiBzdHJ1Y3QgbXRkX25vdGlmaWVyIHsKIAl2b2lkICgqYWRkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CkBAIC0xNTcsNyArMjY5LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCi0KIGV4dGVybiB2b2lkIHJlZ2lzdGVyX210ZF91c2VyIChzdHJ1Y3QgbXRkX25vdGlmaWVyICpuZXcpOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX210ZF91c2VyIChzdHJ1Y3QgbXRkX25vdGlmaWVyICpvbGQpOwogCkBAIC0xNjgsMjAgKzI3OSw2IEBACiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLCBzaXplX3QgKnJldGxlbik7CiAjZW5kaWYKIAotI2RlZmluZSBNVERfRVJBU0UobXRkLCBhcmdzLi4uKSAoKihtdGQtPmVyYXNlKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfUE9JTlQobXRkLCBhLGIsYyxkKSAoKihtdGQtPnBvaW50KSkobXRkLCBhLGIsYywgKHVfY2hhciAqKikoZCkpCi0jZGVmaW5lIE1URF9VTlBPSU5UKG10ZCwgYXJnKSAoKihtdGQtPnVucG9pbnQpKShtdGQsICh1X2NoYXIgKilhcmcpCi0jZGVmaW5lIE1URF9SRUFEKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfV1JJVEUobXRkLCBhcmdzLi4uKSAoKihtdGQtPndyaXRlKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfUkVBRFYobXRkLCBhcmdzLi4uKSAoKihtdGQtPnJlYWR2KSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfV1JJVEVWKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZXYpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9SRUFERUNDKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkX2VjYykpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1dSSVRFRUNDKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZV9lY2MpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9SRUFET09CKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkX29vYikpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1dSSVRFT09CKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZV9vb2IpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9TWU5DKG10ZCkgZG8geyBpZiAobXRkLT5zeW5jKSAoKihtdGQtPnN5bmMpKShtdGQpOyAgfSB3aGlsZSAoMCkKLQotCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiB2b2lkIG10ZF9lcmFzZV9jYWxsYmFjayhzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwogI2Vsc2UKQEAgLTIwMSwxNCArMjk4LDE3IEBACiAjZGVmaW5lIE1URF9ERUJVR19MRVZFTDMJKDMpCS8qIE5vaXN5ICAgKi8KIAogI2lmZGVmIENPTkZJR19NVERfREVCVUcKLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikJCQkJXAotIAlkbyB7CQkJCQkJXAorI2RlZmluZSBNVERERUJVRyhuLCBhcmdzLi4uKQkJCQlcCisJZG8gewkJCQkJCVwKIAkJaWYgKG4gPD0gQ09ORklHX01URF9ERUJVR19WRVJCT1NFKQlcCiAJCQlwcmludGsoS0VSTl9JTkZPIGFyZ3MpOwkJXAogCX0gd2hpbGUoMCkKICNlbHNlIC8qIENPTkZJR19NVERfREVCVUcgKi8KLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgZG8geyB9IHdoaWxlKDApCi0KKyNkZWZpbmUgTVREREVCVUcobiwgYXJncy4uLikJCQkJXAorCWRvIHsJCQkJCQlcCisJCWlmICgwKQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fSU5GTyBhcmdzKTsJCVwKKwl9IHdoaWxlKDApCiAjZW5kaWYgLyogQ09ORklHX01URF9ERUJVRyAqLwogCiAjZW5kaWYgLyogX19NVERfTVREX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCmluZGV4IDRiNDg1NjQuLjgyNzA0ZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKQEAgLTEsMTE1ICsxLDExOSBAQAogLyoKICAqICBsaW51eC9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAbXZoaS5jb20+Ci0gKgkJICAgICAgIFN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPgotICoJCSAgICAgICBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLSAqCi0gKiAkSWQ6IG5hbmQuaCx2IDEuNjggMjAwNC8xMS8xMiAxMDo0MDozNyBnbGVpeG5lciBFeHAgJAorICogIENvcHlyaWdodCDCqSAyMDAwLTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICogICAgICAgICAgICAgICAgICAgICAgICBTdGV2ZW4gSi4gSGlsbCA8c2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbT4KKyAqCQkgICAgICAgICAgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiAgSW5mbzoKLSAqICAgQ29udGFpbnMgc3RhbmRhcmQgZGVmaW5lcyBhbmQgSURzIGZvciBOQU5EIGZsYXNoIGRldmljZXMKKyAqIEluZm86CisgKglDb250YWlucyBzdGFuZGFyZCBkZWZpbmVzIGFuZCBJRHMgZm9yIE5BTkQgZmxhc2ggZGV2aWNlcwogICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKiAgIDAxLTMxLTIwMDAgRE1XCUNyZWF0ZWQKLSAqICAgMDktMTgtMjAwMCBTSkgJTW92ZWQgc3RydWN0dXJlIG91dCBvZiB0aGUgRGlzay1Pbi1DaGlwIGRyaXZlcnMKLSAqCQkJc28gaXQgY2FuIGJlIHVzZWQgYnkgb3RoZXIgTkFORCBmbGFzaCBkZXZpY2UKLSAqCQkJZHJpdmVycy4gSSBhbHNvIGNoYW5nZWQgdGhlIGNvcHlyaWdodCBzaW5jZSBub25lCi0gKgkJCW9mIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHNwZWNpZmljCi0gKgkJCXRvIERvQyBkZXZpY2VzLiBEYXZpZCBjYW4gd2hhY2sgbWUgd2l0aCBhIGJhc2ViYWxsCi0gKgkJCWJhdCBsYXRlciBpZiBJIGRpZCBzb21ldGhpbmcgbmF1Z2h0eS4KLSAqICAgMTAtMTEtMjAwMCBTSkgJQWRkZWQgcHJpdmF0ZSBOQU5EIGZsYXNoIHN0cnVjdHVyZSBmb3IgZHJpdmVyCi0gKiAgIDEwLTI0LTIwMDAgU0pICUFkZGVkIHByb3RvdHlwZSBmb3IgJ25hbmRfc2NhbicgZnVuY3Rpb24KLSAqICAgMTAtMjktMjAwMSBURwljaGFuZ2VkIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgdG8gc3VwcG9ydAotICoJCQloYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciBhY2Nlc3NpbmcgY29udHJvbCBsaW5lcwotICogICAwMi0yMS0yMDAyIFRHCWFkZGVkIHN1cHBvcnQgZm9yIGRpZmZlcmVudCByZWFkL3dyaXRlIGFkcmVzcyBhbmQKLSAqCQkJcmVhZHkvYnVzeSBsaW5lIGFjY2VzcyBmdW5jdGlvbgotICogICAwMi0yNi0yMDAyIFRHCWFkZGVkIGNoaXBfZGVsYXkgdG8gbmFuZF9jaGlwIHN0cnVjdHVyZSB0byBvcHRpbWl6ZQotICoJCQljb21tYW5kIGRlbGF5IHRpbWVzIGZvciBkaWZmZXJlbnQgY2hpcHMKLSAqICAgMDQtMjgtMjAwMiBURwlPT0IgY29uZmlnIGRlZmluZXMgbW92ZWQgZnJvbSBuYW5kLmMgdG8gYXZvaWQgZHVwbGljYXRlCi0gKgkJCWRlZmluZXMgaW4gamZmczIvd2J1Zi5jCi0gKiAgIDA4LTA3LTIwMDIgVEcJZm9yY2VkIGJhZCBibG9jayBsb2NhdGlvbiB0byBieXRlIDUgb2YgT09CLCBldmVuIGlmCi0gKgkJCUNPTkZJR19NVERfTkFORF9FQ0NfSkZGUzIgaXMgbm90IHNldAotICogICAwOC0xMC0yMDAyIFRHCWV4dGVuc2lvbnMgdG8gbmFuZF9jaGlwIHN0cnVjdHVyZSB0byBzdXBwb3J0IEhXLUVDQwotICoKLSAqICAgMDgtMjktMjAwMiB0Z2x4CW5hbmRfY2hpcCBzdHJ1Y3R1cmU6IGRhdGFfcG9pIGZvciBzZWxlY3RpbmcKLSAqCQkJaW50ZXJuYWwgLyBmcy1kcml2ZXIgYnVmZmVyCi0gKgkJCXN1cHBvcnQgZm9yIDZieXRlLzUxMmJ5dGUgaGFyZHdhcmUgRUNDCi0gKgkJCXJlYWRfZWNjLCB3cml0ZV9lY2MgZXh0ZW5kZWQgZm9yIGRpZmZlcmVudCBvb2ItbGF5b3V0Ci0gKgkJCW9vYiBsYXlvdXQgc2VsZWN0aW9uczogTkFORF9OT05FX09PQiwgTkFORF9KRkZTMl9PT0IsCi0gKgkJCU5BTkRfWUFGRlNfT09CCi0gKiAgMTEtMjUtMjAwMiB0Z2x4CUFkZGVkIE1hbnVmYWN0dXJlciBjb2RlIEZVSklUU1UsIE5BVElPTkFMCi0gKgkJCVNwbGl0IG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEIHN0cnVjdHVyZXMKLSAqCi0gKiAgMDItMDgtMjAwNCB0Z2x4CWFkZGVkIG9wdGlvbiBmaWVsZCB0byBuYW5kIHN0cnVjdHVyZSBmb3IgY2hpcCBhbm9tYWxpdGllcwotICogIDA1LTI1LTIwMDQgdGdseAlhZGRlZCBiYWQgYmxvY2sgdGFibGUgc3VwcG9ydCwgU1QtTUlDUk8gbWFudWZhY3R1cmVyIGlkCi0gKgkJCXVwZGF0ZSBvZiBuYW5kX2NoaXAgc3RydWN0dXJlIGRlc2NyaXB0aW9uCisgKiBDaGFuZ2Vsb2c6CisgKglTZWUgZ2l0IGNoYW5nZWxvZy4KICAqLwogI2lmbmRlZiBfX0xJTlVYX01URF9OQU5EX0gKICNkZWZpbmUgX19MSU5VWF9NVERfTkFORF9ICiAKLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAibGludXgvY29tcGF0LmgiCisjaW5jbHVkZSAibGludXgvbXRkL210ZC5oIgorI2luY2x1ZGUgImxpbnV4L210ZC9iYm0uaCIKKwogCiBzdHJ1Y3QgbXRkX2luZm87CitzdHJ1Y3QgbmFuZF9mbGFzaF9kZXY7CiAvKiBTY2FuIGFuZCBpZGVudGlmeSBhIE5BTkQgZGV2aWNlICovCiBleHRlcm4gaW50IG5hbmRfc2NhbiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtYXhfY2hpcHMpOworLyogU2VwYXJhdGUgcGhhc2VzIG9mIG5hbmRfc2NhbigpLCBhbGxvd2luZyBib2FyZCBkcml2ZXIgdG8gaW50ZXJ2ZW5lCisgKiBhbmQgb3ZlcnJpZGUgY29tbWFuZCBvciBFQ0Mgc2V0dXAgYWNjb3JkaW5nIHRvIGZsYXNoIHR5cGUgKi8KK2V4dGVybiBpbnQgbmFuZF9zY2FuX2lkZW50KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbWF4X2NoaXBzLAorCQkJICAgY29uc3Qgc3RydWN0IG5hbmRfZmxhc2hfZGV2ICp0YWJsZSk7CitleHRlcm4gaW50IG5hbmRfc2Nhbl90YWlsKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKwogLyogRnJlZSByZXNvdXJjZXMgaGVsZCBieSB0aGUgTkFORCBkZXZpY2UgKi8KLWV4dGVybiB2b2lkIG5hbmRfcmVsZWFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQpOworZXh0ZXJuIHZvaWQgbmFuZF9yZWxlYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKIAotLyogUmVhZCByYXcgZGF0YSBmcm9tIHRoZSBkZXZpY2Ugd2l0aG91dCBFQ0MgKi8KLWV4dGVybiBpbnQgbmFuZF9yZWFkX3JhdyAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCBvb2JsZW4pOworLyogSW50ZXJuYWwgaGVscGVyIGZvciBib2FyZCBkcml2ZXJzIHdoaWNoIG5lZWQgdG8gb3ZlcnJpZGUgY29tbWFuZCBmdW5jdGlvbiAqLworZXh0ZXJuIHZvaWQgbmFuZF93YWl0X3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKIAotCi0vKiBUaGlzIGNvbnN0YW50IGRlY2xhcmVzIHRoZSBtYXguIG9vYnNpemUgLyBwYWdlLCB3aGljaAorLyoKKyAqIFRoaXMgY29uc3RhbnQgZGVjbGFyZXMgdGhlIG1heC4gb29ic2l6ZSAvIHBhZ2UsIHdoaWNoCiAgKiBpcyBzdXBwb3J0ZWQgbm93LiBJZiB5b3UgYWRkIGEgY2hpcCB3aXRoIGJpZ2dlciBvb2JzaXplL3BhZ2UKICAqIGFkanVzdCB0aGlzIGFjY29yZGluZ2x5LgogICovCi0jZGVmaW5lIE5BTkRfTUFYX09PQlNJWkUJNjQKKyNkZWZpbmUgTkFORF9NQVhfT09CU0laRQk1NzYKKyNkZWZpbmUgTkFORF9NQVhfUEFHRVNJWkUJODE5MgogCiAvKgogICogQ29uc3RhbnRzIGZvciBoYXJkd2FyZSBzcGVjaWZpYyBDTEUvQUxFL05DRSBmdW5jdGlvbgotKi8KKyAqCisgKiBUaGVzZSBhcmUgYml0cyB3aGljaCBjYW4gYmUgb3InZWQgdG8gc2V0L2NsZWFyIG11bHRpcGxlCisgKiBiaXRzIGluIG9uZSBnby4KKyAqLwogLyogU2VsZWN0IHRoZSBjaGlwIGJ5IHNldHRpbmcgbkNFIHRvIGxvdyAqLwotI2RlZmluZSBOQU5EX0NUTF9TRVROQ0UJCTEKLS8qIERlc2VsZWN0IHRoZSBjaGlwIGJ5IHNldHRpbmcgbkNFIHRvIGhpZ2ggKi8KLSNkZWZpbmUgTkFORF9DVExfQ0xSTkNFCQkyCisjZGVmaW5lIE5BTkRfTkNFCQkweDAxCiAvKiBTZWxlY3QgdGhlIGNvbW1hbmQgbGF0Y2ggYnkgc2V0dGluZyBDTEUgdG8gaGlnaCAqLwotI2RlZmluZSBOQU5EX0NUTF9TRVRDTEUJCTMKLS8qIERlc2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGxvdyAqLwotI2RlZmluZSBOQU5EX0NUTF9DTFJDTEUJCTQKKyNkZWZpbmUgTkFORF9DTEUJCTB4MDIKIC8qIFNlbGVjdCB0aGUgYWRkcmVzcyBsYXRjaCBieSBzZXR0aW5nIEFMRSB0byBoaWdoICovCi0jZGVmaW5lIE5BTkRfQ1RMX1NFVEFMRQkJNQotLyogRGVzZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggYnkgc2V0dGluZyBBTEUgdG8gbG93ICovCi0jZGVmaW5lIE5BTkRfQ1RMX0NMUkFMRQkJNgotLyogU2V0IHdyaXRlIHByb3RlY3Rpb24gYnkgc2V0dGluZyBXUCB0byBoaWdoLiBOb3QgdXNlZCEgKi8KLSNkZWZpbmUgTkFORF9DVExfU0VUV1AJCTcKLS8qIENsZWFyIHdyaXRlIHByb3RlY3Rpb24gYnkgc2V0dGluZyBXUCB0byBsb3cuIE5vdCB1c2VkISAqLwotI2RlZmluZSBOQU5EX0NUTF9DTFJXUAkJOAorI2RlZmluZSBOQU5EX0FMRQkJMHgwNAorCisjZGVmaW5lIE5BTkRfQ1RSTF9DTEUJCShOQU5EX05DRSB8IE5BTkRfQ0xFKQorI2RlZmluZSBOQU5EX0NUUkxfQUxFCQkoTkFORF9OQ0UgfCBOQU5EX0FMRSkKKyNkZWZpbmUgTkFORF9DVFJMX0NIQU5HRQkweDgwCiAKIC8qCiAgKiBTdGFuZGFyZCBOQU5EIGZsYXNoIGNvbW1hbmRzCiAgKi8KICNkZWZpbmUgTkFORF9DTURfUkVBRDAJCTAKICNkZWZpbmUgTkFORF9DTURfUkVBRDEJCTEKKyNkZWZpbmUgTkFORF9DTURfUk5ET1VUCQk1CiAjZGVmaW5lIE5BTkRfQ01EX1BBR0VQUk9HCTB4MTAKICNkZWZpbmUgTkFORF9DTURfUkVBRE9PQgkweDUwCiAjZGVmaW5lIE5BTkRfQ01EX0VSQVNFMQkJMHg2MAogI2RlZmluZSBOQU5EX0NNRF9TVEFUVVMJCTB4NzAKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX01VTFRJCTB4NzEKICNkZWZpbmUgTkFORF9DTURfU0VRSU4JCTB4ODAKKyNkZWZpbmUgTkFORF9DTURfUk5ESU4JCTB4ODUKICNkZWZpbmUgTkFORF9DTURfUkVBRElECQkweDkwCiAjZGVmaW5lIE5BTkRfQ01EX0VSQVNFMgkJMHhkMAorI2RlZmluZSBOQU5EX0NNRF9QQVJBTQkJMHhlYwogI2RlZmluZSBOQU5EX0NNRF9SRVNFVAkJMHhmZgogCisjZGVmaW5lIE5BTkRfQ01EX0xPQ0sJCTB4MmEKKyNkZWZpbmUgTkFORF9DTURfVU5MT0NLMQkweDIzCisjZGVmaW5lIE5BTkRfQ01EX1VOTE9DSzIJMHgyNAorCiAvKiBFeHRlbmRlZCBjb21tYW5kcyBmb3IgbGFyZ2UgcGFnZSBkZXZpY2VzICovCiAjZGVmaW5lIE5BTkRfQ01EX1JFQURTVEFSVAkweDMwCisjZGVmaW5lIE5BTkRfQ01EX1JORE9VVFNUQVJUCTB4RTAKICNkZWZpbmUgTkFORF9DTURfQ0FDSEVEUFJPRwkweDE1CiAKKy8qIEV4dGVuZGVkIGNvbW1hbmRzIGZvciBBRy1BTkQgZGV2aWNlICovCisvKgorICogTm90ZTogdGhlIGNvbW1hbmQgZm9yIE5BTkRfQ01EX0RFUExFVEUxIGlzIHJlYWxseSAweDAwIGJ1dAorICogICAgICAgdGhlcmUgaXMgbm8gd2F5IHRvIGRpc3Rpbmd1aXNoIHRoYXQgZnJvbSBOQU5EX0NNRF9SRUFEMAorICogICAgICAgdW50aWwgdGhlIHJlbWFpbmluZyBzZXF1ZW5jZSBvZiBjb21tYW5kcyBoYXMgYmVlbiBjb21wbGV0ZWQKKyAqICAgICAgIHNvIGFkZCBhIGhpZ2ggb3JkZXIgYml0IGFuZCBtYXNrIGl0IG9mZiBpbiB0aGUgY29tbWFuZC4KKyAqLworI2RlZmluZSBOQU5EX0NNRF9ERVBMRVRFMQkweDEwMAorI2RlZmluZSBOQU5EX0NNRF9ERVBMRVRFMgkweDM4CisjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19NVUxUSQkweDcxCisjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19FUlJPUgkweDcyCisvKiBtdWx0aS1iYW5rIGVycm9yIHN0YXR1cyAoYmFua3MgMC0zKSAqLworI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IwCTB4NzMKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0VSUk9SMQkweDc0CisjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19FUlJPUjIJMHg3NQorI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IzCTB4NzYKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX1JFU0VUCTB4N2YKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0NMRUFSCTB4ZmYKKworI2RlZmluZSBOQU5EX0NNRF9OT05FCQktMQorCiAvKiBTdGF0dXMgYml0cyAqLwogI2RlZmluZSBOQU5EX1NUQVRVU19GQUlMCTB4MDEKICNkZWZpbmUgTkFORF9TVEFUVVNfRkFJTF9OMQkweDAyCkBAIC0xMjAsMjUgKzEyNCwxOCBAQAogLyoKICAqIENvbnN0YW50cyBmb3IgRUNDX01PREVTCiAgKi8KLQotLyogTm8gRUNDLiBVc2FnZSBpcyBub3QgcmVjb21tZW5kZWQgISAqLwotI2RlZmluZSBOQU5EX0VDQ19OT05FCQkwCi0vKiBTb2Z0d2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19TT0ZUCQkxCi0vKiBIYXJkd2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19IVzNfMjU2CTIKLS8qIEhhcmR3YXJlIEVDQyAzIGJ5dGUgRUNDIHBlciA1MTIgQnl0ZSBkYXRhICovCi0jZGVmaW5lIE5BTkRfRUNDX0hXM181MTIJMwotLyogSGFyZHdhcmUgRUNDIDMgYnl0ZSBFQ0MgcGVyIDUxMiBCeXRlIGRhdGEgKi8KLSNkZWZpbmUgTkFORF9FQ0NfSFc2XzUxMgk0Ci0vKiBIYXJkd2FyZSBFQ0MgOCBieXRlIEVDQyBwZXIgNTEyIEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19IVzhfNTEyCTYKLS8qIEhhcmR3YXJlIEVDQyAxMiBieXRlIEVDQyBwZXIgMjA0OCBCeXRlIGRhdGEgKi8KLSNkZWZpbmUgTkFORF9FQ0NfSFcxMl8yMDQ4CTcKK3R5cGVkZWYgZW51bSB7CisJTkFORF9FQ0NfTk9ORSwKKwlOQU5EX0VDQ19TT0ZULAorCU5BTkRfRUNDX0hXLAorCU5BTkRfRUNDX0hXX1NZTkRST01FLAorCU5BTkRfRUNDX0hXX09PQl9GSVJTVCwKKwlOQU5EX0VDQ19TT0ZUX0JDSCwKK30gbmFuZF9lY2NfbW9kZXNfdDsKIAogLyoKICAqIENvbnN0YW50cyBmb3IgSGFyZHdhcmUgRUNDCi0qLworICovCiAvKiBSZXNldCBIYXJkd2FyZSBFQ0MgZm9yIHJlYWQgKi8KICNkZWZpbmUgTkFORF9FQ0NfUkVBRAkJMAogLyogUmVzZXQgSGFyZHdhcmUgRUNDIGZvciB3cml0ZSAqLwpAQCAtMTQ2LDkgKzE0MywxNCBAQAogLyogRW5hYmxlIEhhcmR3YXJlIEVDQyBiZWZvcmUgc3luZHJvbSBpcyByZWFkIGJhY2sgZnJvbSBmbGFzaCAqLwogI2RlZmluZSBOQU5EX0VDQ19SRUFEU1lOCTIKIAotLyogT3B0aW9uIGNvbnN0YW50cyBmb3IgYml6YXJyZSBkaXNmdW5jdGlvbmFsaXR5IGFuZCByZWFsCi0qICBmZWF0dXJlcwotKi8KKy8qIEJpdCBtYXNrIGZvciBmbGFncyBwYXNzZWQgdG8gZG9fbmFuZF9yZWFkX2VjYyAqLworI2RlZmluZSBOQU5EX0dFVF9ERVZJQ0UJCTB4ODAKKworCisvKgorICogT3B0aW9uIGNvbnN0YW50cyBmb3IgYml6YXJyZSBkaXNmdW5jdGlvbmFsaXR5IGFuZCByZWFsCisgKiBmZWF0dXJlcy4KKyAqLwogLyogQ2hpcCBjYW4gbm90IGF1dG8gaW5jcmVtZW50IHBhZ2VzICovCiAjZGVmaW5lIE5BTkRfTk9fQVVUT0lOQ1IJMHgwMDAwMDAwMQogLyogQnVzd2l0ZGggaXMgMTYgYml0ICovCkBAIC0xNTksMTIgKzE2MSwzNiBAQAogI2RlZmluZSBOQU5EX0NBQ0hFUFJHCQkweDAwMDAwMDA4CiAvKiBDaGlwIGhhcyBjb3B5IGJhY2sgZnVuY3Rpb24gKi8KICNkZWZpbmUgTkFORF9DT1BZQkFDSwkJMHgwMDAwMDAxMAotLyogQU5EIENoaXAgd2hpY2ggaGFzIDQgYmFua3MgYW5kIGEgY29uZnVzaW5nIHBhZ2UgLyBibG9jawotICogYXNzaWdubWVudC4gU2VlIFJlbmVzYXMgZGF0YXNoZWV0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uICovCisvKgorICogQU5EIENoaXAgd2hpY2ggaGFzIDQgYmFua3MgYW5kIGEgY29uZnVzaW5nIHBhZ2UgLyBibG9jaworICogYXNzaWdubWVudC4gU2VlIFJlbmVzYXMgZGF0YXNoZWV0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorICovCiAjZGVmaW5lIE5BTkRfSVNfQU5ECQkweDAwMDAwMDIwCi0vKiBDaGlwIGhhcyBhIGFycmF5IG9mIDQgcGFnZXMgd2hpY2ggY2FuIGJlIHJlYWQgd2l0aG91dAotICogYWRkaXRpb25hbCByZWFkeSAvYnVzeSB3YWl0cyAqLworLyoKKyAqIENoaXAgaGFzIGEgYXJyYXkgb2YgNCBwYWdlcyB3aGljaCBjYW4gYmUgcmVhZCB3aXRob3V0CisgKiBhZGRpdGlvbmFsIHJlYWR5IC9idXN5IHdhaXRzLgorICovCiAjZGVmaW5lIE5BTkRfNFBBR0VfQVJSQVkJMHgwMDAwMDA0MAorLyoKKyAqIENoaXAgcmVxdWlyZXMgdGhhdCBCQlQgaXMgcGVyaW9kaWNhbGx5IHJld3JpdHRlbiB0byBwcmV2ZW50CisgKiBiaXRzIGZyb20gYWRqYWNlbnQgYmxvY2tzIGZyb20gJ2xlYWtpbmcnIGluIGFsdGVyaW5nIGRhdGEuCisgKiBUaGlzIGhhcHBlbnMgd2l0aCB0aGUgUmVuZXNhcyBBRy1BTkQgY2hpcHMsIHBvc3NpYmx5IG90aGVycy4KKyAqLworI2RlZmluZSBCQlRfQVVUT19SRUZSRVNICTB4MDAwMDAwODAKKy8qCisgKiBDaGlwIGRvZXMgbm90IHJlcXVpcmUgcmVhZHkgY2hlY2sgb24gcmVhZC4gVHJ1ZQorICogZm9yIGFsbCBsYXJnZSBwYWdlIGRldmljZXMsIGFzIHRoZXkgZG8gbm90IHN1cHBvcnQKKyAqIGF1dG9pbmNyZW1lbnQuCisgKi8KKyNkZWZpbmUgTkFORF9OT19SRUFEUkRZCQkweDAwMDAwMTAwCisvKiBDaGlwIGRvZXMgbm90IGFsbG93IHN1YnBhZ2Ugd3JpdGVzICovCisjZGVmaW5lIE5BTkRfTk9fU1VCUEFHRV9XUklURQkweDAwMDAwMjAwCisKKy8qIERldmljZSBpcyBvbmUgb2YgJ25ldycgeEQgY2FyZHMgdGhhdCBleHBvc2UgZmFrZSBuYW5kIGNvbW1hbmQgc2V0ICovCisjZGVmaW5lIE5BTkRfQlJPS0VOX1hECQkweDAwMDAwNDAwCisKKy8qIERldmljZSBiZWhhdmVzIGp1c3QgbGlrZSBuYW5kLCBidXQgaXMgcmVhZG9ubHkgKi8KKyNkZWZpbmUgTkFORF9ST00JCTB4MDAwMDA4MDAKIAogLyogT3B0aW9ucyB2YWxpZCBmb3IgU2Ftc3VuZyBsYXJnZSBwYWdlIGRldmljZXMgKi8KICNkZWZpbmUgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgXApAQCAtMTc1LDE2OCArMjAxLDM0NyBAQAogI2RlZmluZSBOQU5EX01VU1RfUEFEKGNoaXApICghKGNoaXAtPm9wdGlvbnMgJiBOQU5EX05PX1BBRERJTkcpKQogI2RlZmluZSBOQU5EX0hBU19DQUNIRVBST0coY2hpcCkgKChjaGlwLT5vcHRpb25zICYgTkFORF9DQUNIRVBSRykpCiAjZGVmaW5lIE5BTkRfSEFTX0NPUFlCQUNLKGNoaXApICgoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQ09QWUJBQ0spKQorLyogTGFyZ2UgcGFnZSBOQU5EIHdpdGggU09GVF9FQ0Mgc2hvdWxkIHN1cHBvcnQgc3VicGFnZSByZWFkcyAqLworI2RlZmluZSBOQU5EX1NVQlBBR0VfUkVBRChjaGlwKSAoKGNoaXAtPmVjYy5tb2RlID09IE5BTkRfRUNDX1NPRlQpIFwKKwkJCQkJJiYgKGNoaXAtPnBhZ2Vfc2hpZnQgPiA5KSkKIAogLyogTWFzayB0byB6ZXJvIG91dCB0aGUgY2hpcCBvcHRpb25zLCB3aGljaCBjb21lIGZyb20gdGhlIGlkIHRhYmxlICovCiAjZGVmaW5lIE5BTkRfQ0hJUE9QVElPTlNfTVNLCSgweDAwMDBmZmZmICYgfk5BTkRfTk9fQVVUT0lOQ1IpCiAKIC8qIE5vbiBjaGlwIHJlbGF0ZWQgb3B0aW9ucyAqLwotLyogVXNlIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlLiBUaGlzIG9wdGlvbiBpcyBwYXNzZWQgdG8gdGhlCi0gKiBkZWZhdWx0IGJhZCBibG9jayB0YWJsZSBmdW5jdGlvbi4gKi8KKy8qCisgKiBVc2UgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUuIE9PQiBpZGVudGlmaWVyIGlzIHNhdmVkIGluIE9PQiBhcmVhLgorICogVGhpcyBvcHRpb24gaXMgcGFzc2VkIHRvIHRoZSBkZWZhdWx0IGJhZCBibG9jayB0YWJsZSBmdW5jdGlvbi4KKyAqLwogI2RlZmluZSBOQU5EX1VTRV9GTEFTSF9CQlQJMHgwMDAxMDAwMAotLyogVGhlIGh3IGVjYyBnZW5lcmF0b3IgcHJvdmlkZXMgYSBzeW5kcm9tZSBpbnN0ZWFkIGEgZWNjIHZhbHVlIG9uIHJlYWQKLSAqIFRoaXMgY2FuIG9ubHkgd29yayBpZiB3ZSBoYXZlIHRoZSBlY2MgYnl0ZXMgZGlyZWN0bHkgYmVoaW5kIHRoZQotICogZGF0YSBieXRlcy4gQXBwbGllcyBmb3IgRE9DIGFuZCBBRy1BTkQgUmVuZXNhcyBIVyBSZWVkIFNvbG9tb24gZ2VuZXJhdG9ycyAqLwotI2RlZmluZSBOQU5EX0hXRUNDX1NZTkRST01FCTB4MDAwMjAwMDAKLQorLyogVGhpcyBvcHRpb24gc2tpcHMgdGhlIGJidCBzY2FuIGR1cmluZyBpbml0aWFsaXphdGlvbi4gKi8KKyNkZWZpbmUgTkFORF9TS0lQX0JCVFNDQU4JMHgwMDAyMDAwMAorLyoKKyAqIFRoaXMgb3B0aW9uIGlzIGRlZmluZWQgaWYgdGhlIGJvYXJkIGRyaXZlciBhbGxvY2F0ZXMgaXRzIG93biBidWZmZXJzCisgKiAoZS5nLiBiZWNhdXNlIGl0IG5lZWRzIHRoZW0gRE1BLWNvaGVyZW50KS4KKyAqLworI2RlZmluZSBOQU5EX09XTl9CVUZGRVJTCTB4MDAwNDAwMDAKKy8qIENoaXAgbWF5IG5vdCBleGlzdCwgc28gc2lsZW5jZSBhbnkgZXJyb3JzIGluIHNjYW4gKi8KKyNkZWZpbmUgTkFORF9TQ0FOX1NJTEVOVF9OT0RFVgkweDAwMDgwMDAwCisvKgorICogSWYgcGFzc2VkIGFkZGl0aW9uYWxseSB0byBOQU5EX1VTRV9GTEFTSF9CQlQgdGhlbiBCQlQgY29kZSB3aWxsIG5vdCB0b3VjaAorICogdGhlIE9PQiBhcmVhLgorICovCisjZGVmaW5lIE5BTkRfVVNFX0ZMQVNIX0JCVF9OT19PT0IJMHgwMDgwMDAwMAorLyogQ3JlYXRlIGFuIGVtcHR5IEJCVCB3aXRoIG5vIHZlbmRvciBpbmZvcm1hdGlvbiBpZiB0aGUgQkJUIGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBOQU5EX0NSRUFURV9FTVBUWV9CQlQJCTB4MDEwMDAwMDAKIAogLyogT3B0aW9ucyBzZXQgYnkgbmFuZCBzY2FuICovCi0vKiBOYW5kIHNjYW4gaGFzIGFsbG9jYXRlZCBvb2JfYnVmICovCi0jZGVmaW5lIE5BTkRfT09CQlVGX0FMTE9DCTB4NDAwMDAwMDAKLS8qIE5hbmQgc2NhbiBoYXMgYWxsb2NhdGVkIGRhdGFfYnVmICovCi0jZGVmaW5lIE5BTkRfREFUQUJVRl9BTExPQwkweDgwMDAwMDAwCisvKiBiYnQgaGFzIGFscmVhZHkgYmVlbiByZWFkICovCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5ORUQJMHg0MDAwMDAwMAorLyogTmFuZCBzY2FuIGhhcyBhbGxvY2F0ZWQgY29udHJvbGxlciBzdHJ1Y3QgKi8KKyNkZWZpbmUgTkFORF9DT05UUk9MTEVSX0FMTE9DCTB4ODAwMDAwMDAKIAotCi0vKgotICogbmFuZF9zdGF0ZV90IC0gY2hpcCBzdGF0ZXMKLSAqIEVudW1lcmF0aW9uIGZvciBOQU5EIGZsYXNoIGNoaXAgc3RhdGUKLSAqLwotdHlwZWRlZiBlbnVtIHsKLQlGTF9SRUFEWSwKLQlGTF9SRUFESU5HLAotCUZMX1dSSVRJTkcsCi0JRkxfRVJBU0lORywKLQlGTF9TWU5DSU5HLAotCUZMX0NBQ0hFRFBSRywKLX0gbmFuZF9zdGF0ZV90OworLyogQ2VsbCBpbmZvIGNvbnN0YW50cyAqLworI2RlZmluZSBOQU5EX0NJX0NISVBOUl9NU0sJMHgwMworI2RlZmluZSBOQU5EX0NJX0NFTExUWVBFX01TSwkweDBDCiAKIC8qIEtlZXAgZ2NjIGhhcHB5ICovCiBzdHJ1Y3QgbmFuZF9jaGlwOwogCi0jaWYgMAorc3RydWN0IG5hbmRfb25maV9wYXJhbXMgeworCS8qIHJldiBpbmZvIGFuZCBmZWF0dXJlcyBibG9jayAqLworCS8qICdPJyAnTicgJ0YnICdJJyAgKi8KKwl1OCBzaWdbNF07CisJX19sZTE2IHJldmlzaW9uOworCV9fbGUxNiBmZWF0dXJlczsKKwlfX2xlMTYgb3B0X2NtZDsKKwl1OCByZXNlcnZlZFsyMl07CisKKwkvKiBtYW51ZmFjdHVyZXIgaW5mb3JtYXRpb24gYmxvY2sgKi8KKwljaGFyIG1hbnVmYWN0dXJlclsxMl07CisJY2hhciBtb2RlbFsyMF07CisJdTggamVkZWNfaWQ7CisJX19sZTE2IGRhdGVfY29kZTsKKwl1OCByZXNlcnZlZDJbMTNdOworCisJLyogbWVtb3J5IG9yZ2FuaXphdGlvbiBibG9jayAqLworCV9fbGUzMiBieXRlX3Blcl9wYWdlOworCV9fbGUxNiBzcGFyZV9ieXRlc19wZXJfcGFnZTsKKwlfX2xlMzIgZGF0YV9ieXRlc19wZXJfcHBhZ2U7CisJX19sZTE2IHNwYXJlX2J5dGVzX3Blcl9wcGFnZTsKKwlfX2xlMzIgcGFnZXNfcGVyX2Jsb2NrOworCV9fbGUzMiBibG9ja3NfcGVyX2x1bjsKKwl1OCBsdW5fY291bnQ7CisJdTggYWRkcl9jeWNsZXM7CisJdTggYml0c19wZXJfY2VsbDsKKwlfX2xlMTYgYmJfcGVyX2x1bjsKKwlfX2xlMTYgYmxvY2tfZW5kdXJhbmNlOworCXU4IGd1YXJhbnRlZWRfZ29vZF9ibG9ja3M7CisJX19sZTE2IGd1YXJhbnRlZWRfYmxvY2tfZW5kdXJhbmNlOworCXU4IHByb2dyYW1zX3Blcl9wYWdlOworCXU4IHBwYWdlX2F0dHI7CisJdTggZWNjX2JpdHM7CisJdTggaW50ZXJsZWF2ZWRfYml0czsKKwl1OCBpbnRlcmxlYXZlZF9vcHM7CisJdTggcmVzZXJ2ZWQzWzEzXTsKKworCS8qIGVsZWN0cmljYWwgcGFyYW1ldGVyIGJsb2NrICovCisJdTggaW9fcGluX2NhcGFjaXRhbmNlX21heDsKKwlfX2xlMTYgYXN5bmNfdGltaW5nX21vZGU7CisJX19sZTE2IHByb2dyYW1fY2FjaGVfdGltaW5nX21vZGU7CisJX19sZTE2IHRfcHJvZzsKKwlfX2xlMTYgdF9iZXJzOworCV9fbGUxNiB0X3I7CisJX19sZTE2IHRfY2NzOworCV9fbGUxNiBzcmNfc3luY190aW1pbmdfbW9kZTsKKwlfX2xlMTYgc3JjX3NzeW5jX2ZlYXR1cmVzOworCV9fbGUxNiBjbGtfcGluX2NhcGFjaXRhbmNlX3R5cDsKKwlfX2xlMTYgaW9fcGluX2NhcGFjaXRhbmNlX3R5cDsKKwlfX2xlMTYgaW5wdXRfcGluX2NhcGFjaXRhbmNlX3R5cDsKKwl1OCBpbnB1dF9waW5fY2FwYWNpdGFuY2VfbWF4OworCXU4IGRyaXZlcl9zdHJlbmdodF9zdXBwb3J0OworCV9fbGUxNiB0X2ludF9yOworCV9fbGUxNiB0X2FsZDsKKwl1OCByZXNlcnZlZDRbN107CisKKwkvKiB2ZW5kb3IgKi8KKwl1OCByZXNlcnZlZDVbOTBdOworCisJX19sZTE2IGNyYzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgT05GSV9DUkNfQkFTRQkweDRGNEUKKwogLyoqCi0gKiBzdHJ1Y3QgbmFuZF9od19jb250cm9sIC0gQ29udHJvbCBzdHJ1Y3R1cmUgZm9yIGhhcmR3YXJlIGNvbnRyb2xsZXIgKGUuZyBFQ0MgZ2VuZXJhdG9yKSBzaGFyZWQgYW1vbmcgaW5kZXBlbmRlbmQgZGV2aWNlcwotICogQGxvY2s6CQlwcm90ZWN0aW9uIGxvY2sKKyAqIHN0cnVjdCBuYW5kX2h3X2NvbnRyb2wgLSBDb250cm9sIHN0cnVjdHVyZSBmb3IgaGFyZHdhcmUgY29udHJvbGxlciAoZS5nIEVDQyBnZW5lcmF0b3IpIHNoYXJlZCBhbW9uZyBpbmRlcGVuZGVudCBkZXZpY2VzCisgKiBAbG9jazogICAgICAgICAgICAgICBwcm90ZWN0aW9uIGxvY2sKICAqIEBhY3RpdmU6CQl0aGUgbXRkIGRldmljZSB3aGljaCBob2xkcyB0aGUgY29udHJvbGxlciBjdXJyZW50bHkKKyAqIEB3cToJCQl3YWl0IHF1ZXVlIHRvIHNsZWVwIG9uIGlmIGEgTkFORCBvcGVyYXRpb24gaXMgaW4KKyAqCQkJcHJvZ3Jlc3MgdXNlZCBpbnN0ZWFkIG9mIHRoZSBwZXIgY2hpcCB3YWl0IHF1ZXVlCisgKgkJCXdoZW4gYSBodyBjb250cm9sbGVyIGlzIGF2YWlsYWJsZS4KICAqLwogc3RydWN0IG5hbmRfaHdfY29udHJvbCB7CisvKiBYWFggVS1CT09UIFhYWCAqLworI2lmIDAKIAlzcGlubG9ja190CSBsb2NrOworCXdhaXRfcXVldWVfaGVhZF90IHdxOworI2VuZGlmCiAJc3RydWN0IG5hbmRfY2hpcCAqYWN0aXZlOwogfTsKLSNlbmRpZgorCisvKioKKyAqIHN0cnVjdCBuYW5kX2VjY19jdHJsIC0gQ29udHJvbCBzdHJ1Y3R1cmUgZm9yIGVjYworICogQG1vZGU6CWVjYyBtb2RlCisgKiBAc3RlcHM6CW51bWJlciBvZiBlY2Mgc3RlcHMgcGVyIHBhZ2UKKyAqIEBzaXplOglkYXRhIGJ5dGVzIHBlciBlY2Mgc3RlcAorICogQGJ5dGVzOgllY2MgYnl0ZXMgcGVyIHN0ZXAKKyAqIEB0b3RhbDoJdG90YWwgbnVtYmVyIG9mIGVjYyBieXRlcyBwZXIgcGFnZQorICogQHByZXBhZDoJcGFkZGluZyBpbmZvcm1hdGlvbiBmb3Igc3luZHJvbWUgYmFzZWQgZWNjIGdlbmVyYXRvcnMKKyAqIEBwb3N0cGFkOglwYWRkaW5nIGluZm9ybWF0aW9uIGZvciBzeW5kcm9tZSBiYXNlZCBlY2MgZ2VuZXJhdG9ycworICogQGxheW91dDoJRUNDIGxheW91dCBjb250cm9sIHN0cnVjdCBwb2ludGVyCisgKiBAcHJpdjoJcG9pbnRlciB0byBwcml2YXRlIGVjYyBjb250cm9sIGRhdGEKKyAqIEBod2N0bDoJZnVuY3Rpb24gdG8gY29udHJvbCBoYXJkd2FyZSBlY2MgZ2VuZXJhdG9yLiBNdXN0IG9ubHkKKyAqCQliZSBwcm92aWRlZCBpZiBhbiBoYXJkd2FyZSBFQ0MgaXMgYXZhaWxhYmxlCisgKiBAY2FsY3VsYXRlOglmdW5jdGlvbiBmb3IgZWNjIGNhbGN1bGF0aW9uIG9yIHJlYWRiYWNrIGZyb20gZWNjIGhhcmR3YXJlCisgKiBAY29ycmVjdDoJZnVuY3Rpb24gZm9yIGVjYyBjb3JyZWN0aW9uLCBtYXRjaGluZyB0byBlY2MgZ2VuZXJhdG9yIChzdy9odykKKyAqIEByZWFkX3BhZ2VfcmF3OglmdW5jdGlvbiB0byByZWFkIGEgcmF3IHBhZ2Ugd2l0aG91dCBFQ0MKKyAqIEB3cml0ZV9wYWdlX3JhdzoJZnVuY3Rpb24gdG8gd3JpdGUgYSByYXcgcGFnZSB3aXRob3V0IEVDQworICogQHJlYWRfcGFnZToJZnVuY3Rpb24gdG8gcmVhZCBhIHBhZ2UgYWNjb3JkaW5nIHRvIHRoZSBlY2MgZ2VuZXJhdG9yCisgKgkJcmVxdWlyZW1lbnRzLgorICogQHJlYWRfc3VicGFnZToJZnVuY3Rpb24gdG8gcmVhZCBwYXJ0cyBvZiB0aGUgcGFnZSBjb3ZlcmVkIGJ5IEVDQy4KKyAqIEB3cml0ZV9wYWdlOglmdW5jdGlvbiB0byB3cml0ZSBhIHBhZ2UgYWNjb3JkaW5nIHRvIHRoZSBlY2MgZ2VuZXJhdG9yCisgKgkJcmVxdWlyZW1lbnRzLgorICogQHJlYWRfb29iOglmdW5jdGlvbiB0byByZWFkIGNoaXAgT09CIGRhdGEKKyAqIEB3cml0ZV9vb2I6CWZ1bmN0aW9uIHRvIHdyaXRlIGNoaXAgT09CIGRhdGEKKyAqLworc3RydWN0IG5hbmRfZWNjX2N0cmwgeworCW5hbmRfZWNjX21vZGVzX3QgbW9kZTsKKwlpbnQgc3RlcHM7CisJaW50IHNpemU7CisJaW50IGJ5dGVzOworCWludCB0b3RhbDsKKwlpbnQgcHJlcGFkOworCWludCBwb3N0cGFkOworCXN0cnVjdCBuYW5kX2VjY2xheW91dAkqbGF5b3V0OworCXZvaWQgKnByaXY7CisJdm9pZCAoKmh3Y3RsKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpOworCWludCAoKmNhbGN1bGF0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmRhdCwKKwkJCXVpbnQ4X3QgKmVjY19jb2RlKTsKKwlpbnQgKCpjb3JyZWN0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqZGF0LCB1aW50OF90ICpyZWFkX2VjYywKKwkJCXVpbnQ4X3QgKmNhbGNfZWNjKTsKKwlpbnQgKCpyZWFkX3BhZ2VfcmF3KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCXVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpOworCXZvaWQgKCp3cml0ZV9wYWdlX3Jhdykoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQljb25zdCB1aW50OF90ICpidWYpOworCWludCAoKnJlYWRfcGFnZSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQl1aW50OF90ICpidWYsIGludCBwYWdlKTsKKwlpbnQgKCpyZWFkX3N1YnBhZ2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJdWludDMyX3Qgb2ZmcywgdWludDMyX3QgbGVuLCB1aW50OF90ICpidWYpOworCXZvaWQgKCp3cml0ZV9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCWNvbnN0IHVpbnQ4X3QgKmJ1Zik7CisJaW50ICgqcmVhZF9vb2IpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgcGFnZSwKKwkJCWludCBzbmRjbWQpOworCWludCAoKndyaXRlX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQlpbnQgcGFnZSk7Cit9OworCisvKioKKyAqIHN0cnVjdCBuYW5kX2J1ZmZlcnMgLSBidWZmZXIgc3RydWN0dXJlIGZvciByZWFkL3dyaXRlCisgKiBAZWNjY2FsYzoJYnVmZmVyIGZvciBjYWxjdWxhdGVkIGVjYworICogQGVjY2NvZGU6CWJ1ZmZlciBmb3IgZWNjIHJlYWQgZnJvbSBmbGFzaAorICogQGRhdGFidWY6CWJ1ZmZlciBmb3IgZGF0YSAtIGR5bmFtaWNhbGx5IHNpemVkCisgKgorICogRG8gbm90IGNoYW5nZSB0aGUgb3JkZXIgb2YgYnVmZmVycy4gZGF0YWJ1ZiBhbmQgb29icmJ1ZiBtdXN0IGJlIGluCisgKiBjb25zZWN1dGl2ZSBvcmRlci4KKyAqLworc3RydWN0IG5hbmRfYnVmZmVycyB7CisJdWludDhfdAllY2NjYWxjW05BTkRfTUFYX09PQlNJWkVdOworCXVpbnQ4X3QJZWNjY29kZVtOQU5EX01BWF9PT0JTSVpFXTsKKwl1aW50OF90IGRhdGFidWZbTkFORF9NQVhfUEFHRVNJWkUgKyBOQU5EX01BWF9PT0JTSVpFXTsKK307CiAKIC8qKgogICogc3RydWN0IG5hbmRfY2hpcCAtIE5BTkQgUHJpdmF0ZSBGbGFzaCBDaGlwIERhdGEKLSAqIEBJT19BRERSX1I6CQlbQk9BUkRTUEVDSUZJQ10gYWRkcmVzcyB0byByZWFkIHRoZSA4IEkvTyBsaW5lcyBvZiB0aGUgZmxhc2ggZGV2aWNlCi0gKiBASU9fQUREUl9XOgkJW0JPQVJEU1BFQ0lGSUNdIGFkZHJlc3MgdG8gd3JpdGUgdGhlIDggSS9PIGxpbmVzIG9mIHRoZSBmbGFzaCBkZXZpY2UKKyAqIEBJT19BRERSX1I6CQlbQk9BUkRTUEVDSUZJQ10gYWRkcmVzcyB0byByZWFkIHRoZSA4IEkvTyBsaW5lcyBvZiB0aGUKKyAqCQkJZmxhc2ggZGV2aWNlCisgKiBASU9fQUREUl9XOgkJW0JPQVJEU1BFQ0lGSUNdIGFkZHJlc3MgdG8gd3JpdGUgdGhlIDggSS9PIGxpbmVzIG9mIHRoZQorICoJCQlmbGFzaCBkZXZpY2UuCiAgKiBAcmVhZF9ieXRlOgkJW1JFUExBQ0VBQkxFXSByZWFkIG9uZSBieXRlIGZyb20gdGhlIGNoaXAKLSAqIEB3cml0ZV9ieXRlOgkJW1JFUExBQ0VBQkxFXSB3cml0ZSBvbmUgYnl0ZSB0byB0aGUgY2hpcAogICogQHJlYWRfd29yZDoJCVtSRVBMQUNFQUJMRV0gcmVhZCBvbmUgd29yZCBmcm9tIHRoZSBjaGlwCi0gKiBAd3JpdGVfd29yZDoJCVtSRVBMQUNFQUJMRV0gd3JpdGUgb25lIHdvcmQgdG8gdGhlIGNoaXAKICAqIEB3cml0ZV9idWY6CQlbUkVQTEFDRUFCTEVdIHdyaXRlIGRhdGEgZnJvbSB0aGUgYnVmZmVyIHRvIHRoZSBjaGlwCiAgKiBAcmVhZF9idWY6CQlbUkVQTEFDRUFCTEVdIHJlYWQgZGF0YSBmcm9tIHRoZSBjaGlwIGludG8gdGhlIGJ1ZmZlcgotICogQHZlcmlmeV9idWY6CQlbUkVQTEFDRUFCTEVdIHZlcmlmeSBidWZmZXIgY29udGVudHMgYWdhaW5zdCB0aGUgY2hpcCBkYXRhCisgKiBAdmVyaWZ5X2J1ZjoJCVtSRVBMQUNFQUJMRV0gdmVyaWZ5IGJ1ZmZlciBjb250ZW50cyBhZ2FpbnN0IHRoZSBjaGlwCisgKgkJCWRhdGEuCiAgKiBAc2VsZWN0X2NoaXA6CVtSRVBMQUNFQUJMRV0gc2VsZWN0IGNoaXAgbnIKICAqIEBibG9ja19iYWQ6CQlbUkVQTEFDRUFCTEVdIGNoZWNrLCBpZiB0aGUgYmxvY2sgaXMgYmFkCiAgKiBAYmxvY2tfbWFya2JhZDoJW1JFUExBQ0VBQkxFXSBtYXJrIHRoZSBibG9jayBiYWQKLSAqIEBod2NvbnRyb2w6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYWNjZXNpbmcgY29udHJvbC1saW5lcwotICogQGRldl9yZWFkeToJCVtCT0FSRFNQRUNJRklDXSBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciBhY2Nlc2luZyBkZXZpY2UgcmVhZHkvYnVzeSBsaW5lCi0gKgkJCUlmIHNldCB0byBOVUxMIG5vIGFjY2VzcyB0byByZWFkeS9idXN5IGlzIGF2YWlsYWJsZSBhbmQgdGhlIHJlYWR5L2J1c3kgaW5mb3JtYXRpb24KLSAqCQkJaXMgcmVhZCBmcm9tIHRoZSBjaGlwIHN0YXR1cyByZWdpc3RlcgotICogQGNtZGZ1bmM6CQlbUkVQTEFDRUFCTEVdIGhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHdyaXRpbmcgY29tbWFuZHMgdG8gdGhlIGNoaXAKLSAqIEB3YWl0ZnVuYzoJCVtSRVBMQUNFQUJMRV0gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3Igd2FpdCBvbiByZWFkeQotICogQGNhbGN1bGF0ZV9lY2M6CVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gZm9yIGVjYyBjYWxjdWxhdGlvbiBvciByZWFkYmFjayBmcm9tIGVjYyBoYXJkd2FyZQotICogQGNvcnJlY3RfZGF0YToJW1JFUExBQ0VBQkxFXSBmdW5jdGlvbiBmb3IgZWNjIGNvcnJlY3Rpb24sIG1hdGNoaW5nIHRvIGVjYyBnZW5lcmF0b3IgKHN3L2h3KQotICogQGVuYWJsZV9od2VjYzoJW0JPQVJEU1BFQ0lGSUNdIGZ1bmN0aW9uIHRvIGVuYWJsZSAocmVzZXQpIGhhcmR3YXJlIGVjYyBnZW5lcmF0b3IuIE11c3Qgb25seQotICoJCQliZSBwcm92aWRlZCBpZiBhIGhhcmR3YXJlIEVDQyBpcyBhdmFpbGFibGUKLSAqIEBlcmFzZV9jbWQ6CQlbSU5URVJOXSBlcmFzZSBjb21tYW5kIHdyaXRlIGZ1bmN0aW9uLCBzZWxlY3RhYmxlIGR1ZSB0byBBTkQgc3VwcG9ydAorICogQGNtZF9jdHJsOgkJW0JPQVJEU1BFQ0lGSUNdIGhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGNvbnRyb2xsaW5nCisgKgkJCUFMRS9DTEUvbkNFLiBBbHNvIHVzZWQgdG8gd3JpdGUgY29tbWFuZCBhbmQgYWRkcmVzcworICogQGluaXRfc2l6ZToJCVtCT0FSRFNQRUNJRklDXSBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciBzZXR0aW5nCisgKgkJCW10ZC0+b29ic2l6ZSwgbXRkLT53cml0ZXNpemUgYW5kIHNvIG9uLgorICoJCQlAaWRfZGF0YSBjb250YWlucyB0aGUgOCBieXRlcyB2YWx1ZXMgb2YgTkFORF9DTURfUkVBRElELgorICoJCQlSZXR1cm4gd2l0aCB0aGUgYnVzIHdpZHRoLgorICogQGRldl9yZWFkeToJCVtCT0FSRFNQRUNJRklDXSBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciBhY2Nlc2luZworICoJCQlkZXZpY2UgcmVhZHkvYnVzeSBsaW5lLiBJZiBzZXQgdG8gTlVMTCBubyBhY2Nlc3MgdG8KKyAqCQkJcmVhZHkvYnVzeSBpcyBhdmFpbGFibGUgYW5kIHRoZSByZWFkeS9idXN5IGluZm9ybWF0aW9uCisgKgkJCWlzIHJlYWQgZnJvbSB0aGUgY2hpcCBzdGF0dXMgcmVnaXN0ZXIuCisgKiBAY21kZnVuYzoJCVtSRVBMQUNFQUJMRV0gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3Igd3JpdGluZworICoJCQljb21tYW5kcyB0byB0aGUgY2hpcC4KKyAqIEB3YWl0ZnVuYzoJCVtSRVBMQUNFQUJMRV0gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3Igd2FpdCBvbgorICoJCQlyZWFkeS4KKyAqIEBlY2M6CQlbQk9BUkRTUEVDSUZJQ10gZWNjIGNvbnRyb2wgY3RydWN0dXJlCisgKiBAYnVmZmVyczoJCWJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHJlYWQvd3JpdGUKKyAqIEBod2NvbnRyb2w6CQlwbGF0Zm9ybS1zcGVjaWZpYyBoYXJkd2FyZSBjb250cm9sIHN0cnVjdHVyZQorICogQG9wczoJCW9vYiBvcGVyYXRpb24gb3BlcmFuZHMKKyAqIEBlcmFzZV9jbWQ6CQlbSU5URVJOXSBlcmFzZSBjb21tYW5kIHdyaXRlIGZ1bmN0aW9uLCBzZWxlY3RhYmxlIGR1ZQorICoJCQl0byBBTkQgc3VwcG9ydC4KICAqIEBzY2FuX2JidDoJCVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gdG8gc2NhbiBiYWQgYmxvY2sgdGFibGUKLSAqIEBlY2Ntb2RlOgkJW0JPQVJEU1BFQ0lGSUNdIG1vZGUgb2YgZWNjLCBzZWUgZGVmaW5lcwotICogQGVjY3NpemU6CQlbSU5URVJOXSBkYXRhYnl0ZXMgdXNlZCBwZXIgZWNjLWNhbGN1bGF0aW9uCi0gKiBAZWNjYnl0ZXM6CQlbSU5URVJOXSBudW1iZXIgb2YgZWNjIGJ5dGVzIHBlciBlY2MtY2FsY3VsYXRpb24gc3RlcAotICogQGVjY3N0ZXBzOgkJW0lOVEVSTl0gbnVtYmVyIG9mIGVjYyBjYWxjdWxhdGlvbiBzdGVwcyBwZXIgcGFnZQotICogQGNoaXBfZGVsYXk6CQlbQk9BUkRTUEVDSUZJQ10gY2hpcCBkZXBlbmRlbnQgZGVsYXkgZm9yIHRyYW5zZmVyaW5nIGRhdGEgZnJvbSBhcnJheSB0byByZWFkIHJlZ3MgKHRSKQotICogQGNoaXBfbG9jazoJCVtJTlRFUk5dIHNwaW5sb2NrIHVzZWQgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gdGhpcyBzdHJ1Y3R1cmUgYW5kIHRoZSBjaGlwCi0gKiBAd3E6CQkJW0lOVEVSTl0gd2FpdCBxdWV1ZSB0byBzbGVlcCBvbiBpZiBhIE5BTkQgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzCisgKiBAY2hpcF9kZWxheToJCVtCT0FSRFNQRUNJRklDXSBjaGlwIGRlcGVuZGVudCBkZWxheSBmb3IgdHJhbnNmZXJyaW5nCisgKgkJCWRhdGEgZnJvbSBhcnJheSB0byByZWFkIHJlZ3MgKHRSKS4KICAqIEBzdGF0ZToJCVtJTlRFUk5dIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOQU5EIGRldmljZQotICogQHBhZ2Vfc2hpZnQ6CQlbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgcGFnZSAoY29sdW1uIGFkZHJlc3MgYml0cykKKyAqIEBvb2JfcG9pOgkJcG9pc29uIHZhbHVlIGJ1ZmZlcgorICogQHBhZ2Vfc2hpZnQ6CQlbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgcGFnZSAoY29sdW1uCisgKgkJCWFkZHJlc3MgYml0cykuCiAgKiBAcGh5c19lcmFzZV9zaGlmdDoJW0lOVEVSTl0gbnVtYmVyIG9mIGFkZHJlc3MgYml0cyBpbiBhIHBoeXNpY2FsIGVyYXNlYmxvY2sKICAqIEBiYnRfZXJhc2Vfc2hpZnQ6CVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gYSBiYnQgZW50cnkKICAqIEBjaGlwX3NoaWZ0OgkJW0lOVEVSTl0gbnVtYmVyIG9mIGFkZHJlc3MgYml0cyBpbiBvbmUgY2hpcAotICogQGRhdGFfYnVmOgkJW0lOVEVSTl0gaW50ZXJuYWwgYnVmZmVyIGZvciBvbmUgcGFnZSArIG9vYgotICogQG9vYl9idWY6CQlbSU5URVJOXSBvb2IgYnVmZmVyIGZvciBvbmUgZXJhc2VibG9jawotICogQG9vYmRpcnR5OgkJW0lOVEVSTl0gaW5kaWNhdGVzIHRoYXQgb29iX2J1ZiBtdXN0IGJlIHJlaW5pdGlhbGl6ZWQKLSAqIEBkYXRhX3BvaToJCVtJTlRFUk5dIHBvaW50ZXIgdG8gYSBkYXRhIGJ1ZmZlcgotICogQG9wdGlvbnM6CQlbQk9BUkRTUEVDSUZJQ10gdmFyaW91cyBjaGlwIG9wdGlvbnMuIFRoZXkgY2FuIHBhcnRseSBiZSBzZXQgdG8gaW5mb3JtIG5hbmRfc2NhbiBhYm91dAotICoJCQlzcGVjaWFsIGZ1bmN0aW9uYWxpdHkuIFNlZSB0aGUgZGVmaW5lcyBmb3IgZnVydGhlciBleHBsYW5hdGlvbgotICogQGJhZGJsb2NrcG9zOglbSU5URVJOXSBwb3NpdGlvbiBvZiB0aGUgYmFkIGJsb2NrIG1hcmtlciBpbiB0aGUgb29iIGFyZWEKKyAqIEBvcHRpb25zOgkJW0JPQVJEU1BFQ0lGSUNdIHZhcmlvdXMgY2hpcCBvcHRpb25zLiBUaGV5IGNhbiBwYXJ0bHkKKyAqCQkJYmUgc2V0IHRvIGluZm9ybSBuYW5kX3NjYW4gYWJvdXQgc3BlY2lhbCBmdW5jdGlvbmFsaXR5LgorICoJCQlTZWUgdGhlIGRlZmluZXMgZm9yIGZ1cnRoZXIgZXhwbGFuYXRpb24uCisgKiBAYmFkYmxvY2twb3M6CVtJTlRFUk5dIHBvc2l0aW9uIG9mIHRoZSBiYWQgYmxvY2sgbWFya2VyIGluIHRoZSBvb2IKKyAqCQkJYXJlYS4KKyAqIEBiYWRibG9ja2JpdHM6CVtJTlRFUk5dIG51bWJlciBvZiBiaXRzIHRvIGxlZnQtc2hpZnQgdGhlIGJhZCBibG9jaworICoJCQludW1iZXIKKyAqIEBjZWxsaW5mbzoJCVtJTlRFUk5dIE1MQy9tdWx0aWNoaXAgZGF0YSBmcm9tIGNoaXAgaWRlbnQKICAqIEBudW1jaGlwczoJCVtJTlRFUk5dIG51bWJlciBvZiBwaHlzaWNhbCBjaGlwcwogICogQGNoaXBzaXplOgkJW0lOVEVSTl0gdGhlIHNpemUgb2Ygb25lIGNoaXAgZm9yIG11bHRpY2hpcCBhcnJheXMKICAqIEBwYWdlbWFzazoJCVtJTlRFUk5dIHBhZ2UgbnVtYmVyIG1hc2sgPSBudW1iZXIgb2YgKHBhZ2VzIC8gY2hpcCkgLSAxCi0gKiBAcGFnZWJ1ZjoJCVtJTlRFUk5dIGhvbGRzIHRoZSBwYWdlbnVtYmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiBkYXRhX2J1ZgotICogQGF1dG9vb2I6CQlbUkVQTEFDRUFCTEVdIHRoZSBkZWZhdWx0IChhdXRvKXBsYWNlbWVudCBzY2hlbWUKKyAqIEBwYWdlYnVmOgkJW0lOVEVSTl0gaG9sZHMgdGhlIHBhZ2VudW1iZXIgd2hpY2ggaXMgY3VycmVudGx5IGluCisgKgkJCWRhdGFfYnVmLgorICogQHN1YnBhZ2VzaXplOglbSU5URVJOXSBob2xkcyB0aGUgc3VicGFnZXNpemUKKyAqIEBvbmZpX3ZlcnNpb246CVtJTlRFUk5dIGhvbGRzIHRoZSBjaGlwIE9ORkkgdmVyc2lvbiAoQkNEIGVuY29kZWQpLAorICoJCQlub24gMCBpZiBPTkZJIHN1cHBvcnRlZC4KKyAqIEBvbmZpX3BhcmFtczoJW0lOVEVSTl0gaG9sZHMgdGhlIE9ORkkgcGFnZSBwYXJhbWV0ZXIgd2hlbiBPTkZJIGlzCisgKgkJCXN1cHBvcnRlZCwgMCBvdGhlcndpc2UuCisgKiBAZWNjbGF5b3V0OgkJW1JFUExBQ0VBQkxFXSB0aGUgZGVmYXVsdCBlY2MgcGxhY2VtZW50IHNjaGVtZQogICogQGJidDoJCVtJTlRFUk5dIGJhZCBibG9jayB0YWJsZSBwb2ludGVyCi0gKiBAYmJ0X3RkOgkJW1JFUExBQ0VBQkxFXSBiYWQgYmxvY2sgdGFibGUgZGVzY3JpcHRvciBmb3IgZmxhc2ggbG9va3VwCisgKiBAYmJ0X3RkOgkJW1JFUExBQ0VBQkxFXSBiYWQgYmxvY2sgdGFibGUgZGVzY3JpcHRvciBmb3IgZmxhc2gKKyAqCQkJbG9va3VwLgogICogQGJidF9tZDoJCVtSRVBMQUNFQUJMRV0gYmFkIGJsb2NrIHRhYmxlIG1pcnJvciBkZXNjcmlwdG9yCi0gKiBAYmFkYmxvY2tfcGF0dGVybjoJW1JFUExBQ0VBQkxFXSBiYWQgYmxvY2sgc2NhbiBwYXR0ZXJuIHVzZWQgZm9yIGluaXRpYWwgYmFkIGJsb2NrIHNjYW4KLSAqIEBjb250cm9sbGVyOgkJW09QVElPTkFMXSBhIHBvaW50ZXIgdG8gYSBoYXJkd2FyZSBjb250cm9sbGVyIHN0cnVjdHVyZSB3aGljaCBpcyBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5kZXBlbmRlbmQgZGV2aWNlcworICogQGJhZGJsb2NrX3BhdHRlcm46CVtSRVBMQUNFQUJMRV0gYmFkIGJsb2NrIHNjYW4gcGF0dGVybiB1c2VkIGZvciBpbml0aWFsCisgKgkJCWJhZCBibG9jayBzY2FuLgorICogQGNvbnRyb2xsZXI6CQlbUkVQTEFDRUFCTEVdIGEgcG9pbnRlciB0byBhIGhhcmR3YXJlIGNvbnRyb2xsZXIKKyAqCQkJc3RydWN0dXJlIHdoaWNoIGlzIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbmRlcGVuZGVuZAorICoJCQlkZXZpY2VzLgogICogQHByaXY6CQlbT1BUSU9OQUxdIHBvaW50ZXIgdG8gcHJpdmF0ZSBjaGlwIGRhdGUKKyAqIEBlcnJzdGF0OgkJW09QVElPTkFMXSBoYXJkd2FyZSBzcGVjaWZpYyBmdW5jdGlvbiB0byBwZXJmb3JtCisgKgkJCWFkZGl0aW9uYWwgZXJyb3Igc3RhdHVzIGNoZWNrcyAoZGV0ZXJtaW5lIGlmIGVycm9ycyBhcmUKKyAqCQkJY29ycmVjdGFibGUpLgorICogQHdyaXRlX3BhZ2U6CQlbUkVQTEFDRUFCTEVdIEhpZ2gtbGV2ZWwgcGFnZSB3cml0ZSBmdW5jdGlvbgogICovCiAKIHN0cnVjdCBuYW5kX2NoaXAgewotCXZvaWQgIF9faW9tZW0JKklPX0FERFJfUjsKLQl2b2lkICBfX2lvbWVtCSpJT19BRERSX1c7CisJdm9pZCBfX2lvbWVtICpJT19BRERSX1I7CisJdm9pZCBfX2lvbWVtICpJT19BRERSX1c7CiAKLQl1X2NoYXIJCSgqcmVhZF9ieXRlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0Jdm9pZAkJKCp3cml0ZV9ieXRlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyIGJ5dGUpOwotCXUxNgkJKCpyZWFkX3dvcmQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQl2b2lkCQkoKndyaXRlX3dvcmQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1MTYgd29yZCk7CisJdWludDhfdCAoKnJlYWRfYnl0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQpOworCXUxNiAoKnJlYWRfd29yZCkoc3RydWN0IG10ZF9pbmZvICptdGQpOworCXZvaWQgKCp3cml0ZV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pOworCXZvaWQgKCpyZWFkX2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7CisJaW50ICgqdmVyaWZ5X2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7CisJdm9pZCAoKnNlbGVjdF9jaGlwKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApOworCWludCAoKmJsb2NrX2JhZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwKTsKKwlpbnQgKCpibG9ja19tYXJrYmFkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcyk7CisJdm9pZCAoKmNtZF9jdHJsKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGRhdCwgdW5zaWduZWQgaW50IGN0cmwpOworCWludCAoKmluaXRfc2l6ZSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsCisJCQl1OCAqaWRfZGF0YSk7CisJaW50ICgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisJdm9pZCAoKmNtZGZ1bmMpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLAorCQkJaW50IHBhZ2VfYWRkcik7CisJaW50KCp3YWl0ZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMpOworCXZvaWQgKCplcmFzZV9jbWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZSk7CisJaW50ICgqc2Nhbl9iYnQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKwlpbnQgKCplcnJzdGF0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHN0YXRlLAorCQkJaW50IHN0YXR1cywgaW50IHBhZ2UpOworCWludCAoKndyaXRlX3BhZ2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJY29uc3QgdWludDhfdCAqYnVmLCBpbnQgcGFnZSwgaW50IGNhY2hlZCwgaW50IHJhdyk7CiAKLQl2b2lkCQkoKndyaXRlX2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKTsKLQl2b2lkCQkoKnJlYWRfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pOwotCWludAkJKCp2ZXJpZnlfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pOwotCXZvaWQJCSgqc2VsZWN0X2NoaXApKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCk7Ci0JaW50CQkoKmJsb2NrX2JhZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwKTsKLQlpbnQJCSgqYmxvY2tfbWFya2JhZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpOwotCXZvaWQJCSgqaHdjb250cm9sKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCk7Ci0JaW50CQkoKmRldl9yZWFkeSkoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCXZvaWQJCSgqY21kZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGNvbW1hbmQsIGludCBjb2x1bW4sIGludCBwYWdlX2FkZHIpOwotCWludAkJKCp3YWl0ZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSk7Ci0JaW50CQkoKmNhbGN1bGF0ZV9lY2MpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSk7Ci0JaW50CQkoKmNvcnJlY3RfZGF0YSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LCB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKTsKLQl2b2lkCQkoKmVuYWJsZV9od2VjYykoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKTsKLQl2b2lkCQkoKmVyYXNlX2NtZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYWdlKTsKLQlpbnQJCSgqc2Nhbl9iYnQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQlpbnQJCWVjY21vZGU7Ci0JaW50CQllY2NzaXplOwotCWludAkJZWNjYnl0ZXM7Ci0JaW50CQllY2NzdGVwczsKLQlpbnQJCWNoaXBfZGVsYXk7Ci0jaWYgMAotCXNwaW5sb2NrX3QJY2hpcF9sb2NrOwotCXdhaXRfcXVldWVfaGVhZF90IHdxOwotCW5hbmRfc3RhdGVfdAlzdGF0ZTsKKwlpbnQgY2hpcF9kZWxheTsKKwl1bnNpZ25lZCBpbnQgb3B0aW9uczsKKworCWludCBwYWdlX3NoaWZ0OworCWludCBwaHlzX2VyYXNlX3NoaWZ0OworCWludCBiYnRfZXJhc2Vfc2hpZnQ7CisJaW50IGNoaXBfc2hpZnQ7CisJaW50IG51bWNoaXBzOworCXVpbnQ2NF90IGNoaXBzaXplOworCWludCBwYWdlbWFzazsKKwlpbnQgcGFnZWJ1ZjsKKwlpbnQgc3VicGFnZXNpemU7CisJdWludDhfdCBjZWxsaW5mbzsKKwlpbnQgYmFkYmxvY2twb3M7CisJaW50IGJhZGJsb2NrYml0czsKKworCWludCBvbmZpX3ZlcnNpb247CisjaWZkZWYgQ09ORklHX1NZU19OQU5EX09ORklfREVURUNUSU9OCisJc3RydWN0IG5hbmRfb25maV9wYXJhbXMgb25maV9wYXJhbXM7CiAjZW5kaWYKLQlpbnQJCXBhZ2Vfc2hpZnQ7Ci0JaW50CQlwaHlzX2VyYXNlX3NoaWZ0OwotCWludAkJYmJ0X2VyYXNlX3NoaWZ0OwotCWludAkJY2hpcF9zaGlmdDsKLQl1X2NoYXIJCSpkYXRhX2J1ZjsKLQl1X2NoYXIJCSpvb2JfYnVmOwotCWludAkJb29iZGlydHk7Ci0JdV9jaGFyCQkqZGF0YV9wb2k7Ci0JdW5zaWduZWQgaW50CW9wdGlvbnM7Ci0JaW50CQliYWRibG9ja3BvczsKLQlpbnQJCW51bWNoaXBzOwotCXVuc2lnbmVkIGxvbmcJY2hpcHNpemU7Ci0JaW50CQlwYWdlbWFzazsKLQlpbnQJCXBhZ2VidWY7Ci0Jc3RydWN0IG5hbmRfb29iaW5mbwkqYXV0b29vYjsKLQl1aW50OF90CQkqYmJ0OwotCXN0cnVjdCBuYW5kX2JidF9kZXNjcgkqYmJ0X3RkOwotCXN0cnVjdCBuYW5kX2JidF9kZXNjcgkqYmJ0X21kOwotCXN0cnVjdCBuYW5kX2JidF9kZXNjcgkqYmFkYmxvY2tfcGF0dGVybjsKLQlzdHJ1Y3QgbmFuZF9od19jb250cm9sCSpjb250cm9sbGVyOwotCXZvaWQJCSpwcml2OworCisJaW50IHN0YXRlOworCisJdWludDhfdCAqb29iX3BvaTsKKwlzdHJ1Y3QgbmFuZF9od19jb250cm9sICpjb250cm9sbGVyOworCXN0cnVjdCBuYW5kX2VjY2xheW91dCAqZWNjbGF5b3V0OworCisJc3RydWN0IG5hbmRfZWNjX2N0cmwgZWNjOworCXN0cnVjdCBuYW5kX2J1ZmZlcnMgKmJ1ZmZlcnM7CisJc3RydWN0IG5hbmRfaHdfY29udHJvbCBod2NvbnRyb2w7CisKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCisJdWludDhfdCAqYmJ0OworCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmJ0X3RkOworCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmJ0X21kOworCisJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiYWRibG9ja19wYXR0ZXJuOworCisJdm9pZCAqcHJpdjsKIH07CiAKIC8qCkBAIC0zNDgsMTAgKzU1MywxMiBAQAogI2RlZmluZSBOQU5EX01GUl9OQVRJT05BTAkweDhmCiAjZGVmaW5lIE5BTkRfTUZSX1JFTkVTQVMJMHgwNwogI2RlZmluZSBOQU5EX01GUl9TVE1JQ1JPCTB4MjAKKyNkZWZpbmUgTkFORF9NRlJfSFlOSVgJCTB4YWQKKyNkZWZpbmUgTkFORF9NRlJfTUlDUk9OCQkweDJjCisjZGVmaW5lIE5BTkRfTUZSX0FNRAkJMHgwMQogCiAvKioKICAqIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiAtIE5BTkQgRmxhc2ggRGV2aWNlIElEIFN0cnVjdHVyZQotICoKICAqIEBuYW1lOglJZGVudGlmeSB0aGUgZGV2aWNlIHR5cGUKICAqIEBpZDoJCWRldmljZSBJRCBjb2RlCiAgKiBAcGFnZXNpemU6CVBhZ2VzaXplIGluIGJ5dGVzLiBFaXRoZXIgMjU2IG9yIDUxMiBvciAwCkBAIC0zNzgsODYgKzU4NSwyMCBAQAogKi8KIHN0cnVjdCBuYW5kX21hbnVmYWN0dXJlcnMgewogCWludCBpZDsKLQljaGFyICogbmFtZTsKKwljaGFyICpuYW1lOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiBuYW5kX2ZsYXNoX2lkc1tdOwotZXh0ZXJuIHN0cnVjdCBuYW5kX21hbnVmYWN0dXJlcnMgbmFuZF9tYW51Zl9pZHNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmFuZF9mbGFzaF9kZXYgbmFuZF9mbGFzaF9pZHNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmFuZF9tYW51ZmFjdHVyZXJzIG5hbmRfbWFudWZfaWRzW107CiAKLS8qKgotICogc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIC0gYmFkIGJsb2NrIHRhYmxlIGRlc2NyaXB0b3IKLSAqIEBvcHRpb25zOglvcHRpb25zIGZvciB0aGlzIGRlc2NyaXB0b3IKLSAqIEBwYWdlczoJdGhlIHBhZ2Uocykgd2hlcmUgd2UgZmluZCB0aGUgYmJ0LCB1c2VkIHdpdGggb3B0aW9uIEJCVF9BQlNQQUdFCi0gKgkJd2hlbiBiYnQgaXMgc2VhcmNoZWQsIHRoZW4gd2Ugc3RvcmUgdGhlIGZvdW5kIGJidHMgcGFnZXMgaGVyZS4KLSAqCQlJdHMgYW4gYXJyYXkgYW5kIHN1cHBvcnRzIHVwIHRvIDggY2hpcHMgbm93Ci0gKiBAb2ZmczoJb2Zmc2V0IG9mIHRoZSBwYXR0ZXJuIGluIHRoZSBvb2IgYXJlYSBvZiB0aGUgcGFnZQotICogQHZlcm9mZnM6CW9mZnNldCBvZiB0aGUgYmJ0IHZlcnNpb24gY291bnRlciBpbiB0aGUgb29iIGFyZSBvZiB0aGUgcGFnZQotICogQHZlcnNpb246CXZlcnNpb24gcmVhZCBmcm9tIHRoZSBiYnQgcGFnZSBkdXJpbmcgc2NhbgotICogQGxlbjoJbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLCBpZiAwIG5vIHBhdHRlcm4gY2hlY2sgaXMgcGVyZm9ybWVkCi0gKiBAbWF4YmxvY2tzOgltYXhpbXVtIG51bWJlciBvZiBibG9ja3MgdG8gc2VhcmNoIGZvciBhIGJidC4gVGhpcyBudW1iZXIgb2YKLSAqCQlibG9ja3MgaXMgcmVzZXJ2ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZGV2aWNlIHdoZXJlIHRoZSB0YWJsZXMgYXJlCi0gKgkJd3JpdHRlbi4KLSAqIEByZXNlcnZlZF9ibG9ja19jb2RlOiBpZiBub24tMCwgdGhpcyBwYXR0ZXJuIGRlbm90ZXMgYSByZXNlcnZlZCAocmF0aGVyIHRoYW4KLSAqCQliYWQpIGJsb2NrIGluIHRoZSBzdG9yZWQgYmJ0Ci0gKiBAcGF0dGVybjoJcGF0dGVybiB0byBpZGVudGlmeSBiYWQgYmxvY2sgdGFibGUgb3IgZmFjdG9yeSBtYXJrZWQgZ29vZCAvCi0gKgkJYmFkIGJsb2NrcywgY2FuIGJlIE5VTEwsIGlmIGxlbiA9IDAKLSAqCi0gKiBEZXNjcmlwdG9yIGZvciB0aGUgYmFkIGJsb2NrIHRhYmxlIG1hcmtlciBhbmQgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZQotICogcGF0dGVybiB3aGljaCBpZGVudGlmaWVzIGdvb2QgYW5kIGJhZCBibG9ja3MuIFRoZSBhc3N1bXB0aW9uIGlzIG1hZGUKLSAqIHRoYXQgdGhlIHBhdHRlcm4gYW5kIHRoZSB2ZXJzaW9uIGNvdW50IGFyZSBhbHdheXMgbG9jYXRlZCBpbiB0aGUgb29iIGFyZWEKLSAqIG9mIHRoZSBmaXJzdCBibG9jay4KLSAqLwotc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHsKLQlpbnQJb3B0aW9uczsKLQlpbnQJcGFnZXNbTkFORF9NQVhfQ0hJUFNdOwotCWludAlvZmZzOwotCWludAl2ZXJvZmZzOwotCXVpbnQ4X3QgdmVyc2lvbltOQU5EX01BWF9DSElQU107Ci0JaW50CWxlbjsKLQlpbnQJbWF4YmxvY2tzOwotCWludAlyZXNlcnZlZF9ibG9ja19jb2RlOwotCXVpbnQ4X3QgKnBhdHRlcm47Ci19OwotCi0vKiBPcHRpb25zIGZvciB0aGUgYmFkIGJsb2NrIHRhYmxlIGRlc2NyaXB0b3JzICovCi0KLS8qIFRoZSBudW1iZXIgb2YgYml0cyB1c2VkIHBlciBibG9jayBpbiB0aGUgYmJ0IG9uIHRoZSBkZXZpY2UgKi8KLSNkZWZpbmUgTkFORF9CQlRfTlJCSVRTX01TSwkweDAwMDAwMDBGCi0jZGVmaW5lIE5BTkRfQkJUXzFCSVQJCTB4MDAwMDAwMDEKLSNkZWZpbmUgTkFORF9CQlRfMkJJVAkJMHgwMDAwMDAwMgotI2RlZmluZSBOQU5EX0JCVF80QklUCQkweDAwMDAwMDA0Ci0jZGVmaW5lIE5BTkRfQkJUXzhCSVQJCTB4MDAwMDAwMDgKLS8qIFRoZSBiYWQgYmxvY2sgdGFibGUgaXMgaW4gdGhlIGxhc3QgZ29vZCBibG9jayBvZiB0aGUgZGV2aWNlICovCi0jZGVmaW5lIE5BTkRfQkJUX0xBU1RCTE9DSwkweDAwMDAwMDEwCi0vKiBUaGUgYmJ0IGlzIGF0IHRoZSBnaXZlbiBwYWdlLCBlbHNlIHdlIG11c3Qgc2NhbiBmb3IgdGhlIGJidCAqLwotI2RlZmluZSBOQU5EX0JCVF9BQlNQQUdFCTB4MDAwMDAwMjAKLS8qIFRoZSBiYnQgaXMgYXQgdGhlIGdpdmVuIHBhZ2UsIGVsc2Ugd2UgbXVzdCBzY2FuIGZvciB0aGUgYmJ0ICovCi0jZGVmaW5lIE5BTkRfQkJUX1NFQVJDSAkJMHgwMDAwMDA0MAotLyogYmJ0IGlzIHN0b3JlZCBwZXIgY2hpcCBvbiBtdWx0aWNoaXAgZGV2aWNlcyAqLwotI2RlZmluZSBOQU5EX0JCVF9QRVJDSElQCTB4MDAwMDAwODAKLS8qIGJidCBoYXMgYSB2ZXJzaW9uIGNvdW50ZXIgYXQgb2Zmc2V0IHZlcm9mZnMgKi8KLSNkZWZpbmUgTkFORF9CQlRfVkVSU0lPTgkweDAwMDAwMTAwCi0vKiBDcmVhdGUgYSBiYnQgaWYgbm9uZSBheGlzdHMgKi8KLSNkZWZpbmUgTkFORF9CQlRfQ1JFQVRFCQkweDAwMDAwMjAwCi0vKiBTZWFyY2ggZ29vZCAvIGJhZCBwYXR0ZXJuIHRocm91Z2ggYWxsIHBhZ2VzIG9mIGEgYmxvY2sgKi8KLSNkZWZpbmUgTkFORF9CQlRfU0NBTkFMTFBBR0VTCTB4MDAwMDA0MDAKLS8qIFNjYW4gYmxvY2sgZW1wdHkgZHVyaW5nIGdvb2QgLyBiYWQgYmxvY2sgc2NhbiAqLwotI2RlZmluZSBOQU5EX0JCVF9TQ0FORU1QVFkJMHgwMDAwMDgwMAotLyogV3JpdGUgYmJ0IGlmIG5lY2NlY2FyeSAqLwotI2RlZmluZSBOQU5EX0JCVF9XUklURQkJMHgwMDAwMTAwMAotLyogUmVhZCBhbmQgd3JpdGUgYmFjayBibG9jayBjb250ZW50cyB3aGVuIHdyaXRpbmcgYmJ0ICovCi0jZGVmaW5lIE5BTkRfQkJUX1NBVkVDT05URU5UCTB4MDAwMDIwMDAKLS8qIFNlYXJjaCBnb29kIC8gYmFkIHBhdHRlcm4gb24gdGhlIGZpcnN0IGFuZCB0aGUgc2Vjb25kIHBhZ2UgKi8KLSNkZWZpbmUgTkFORF9CQlRfU0NBTjJORFBBR0UJMHgwMDAwNDAwMAotCi0vKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIHRvIHNjYW4gZm9yIGEgYmJ0ICovCi0jZGVmaW5lIE5BTkRfQkJUX1NDQU5fTUFYQkxPQ0tTIDQKLQotZXh0ZXJuIGludCBuYW5kX3NjYW5fYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCk7Ci1leHRlcm4gaW50IG5hbmRfdXBkYXRlX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKTsKLWV4dGVybiBpbnQgbmFuZF9kZWZhdWx0X2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQpOwotZXh0ZXJuIGludCBuYW5kX2lzYmFkX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBpbnQgYWxsb3diYnQpOwotZXh0ZXJuIGludCBuYW5kX2VyYXNlX25hbmQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsIGludCBhbGxvd2JidCk7CitleHRlcm4gaW50IG5hbmRfc2Nhbl9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpOworZXh0ZXJuIGludCBuYW5kX3VwZGF0ZV9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKTsKK2V4dGVybiBpbnQgbmFuZF9kZWZhdWx0X2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CitleHRlcm4gaW50IG5hbmRfaXNiYWRfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywgaW50IGFsbG93YmJ0KTsKK2V4dGVybiBpbnQgbmFuZF9lcmFzZV9uYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsCisJCQkgICBpbnQgYWxsb3diYnQpOworZXh0ZXJuIGludCBuYW5kX2RvX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQkJc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1Zik7CiAKIC8qCiAqIENvbnN0YW50cyBmb3Igb29iIGNvbmZpZ3VyYXRpb24KQEAgLTQ2NSw0ICs2MDYsNzYgQEAKICNkZWZpbmUgTkFORF9TTUFMTF9CQURCTE9DS19QT1MJCTUKICNkZWZpbmUgTkFORF9MQVJHRV9CQURCTE9DS19QT1MJCTAKIAorLyoqCisgKiBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwIC0gY2hpcCBsZXZlbCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAbnJfY2hpcHM6CQltYXguIG51bWJlciBvZiBjaGlwcyB0byBzY2FuIGZvcgorICogQGNoaXBfb2Zmc2V0OgljaGlwIG51bWJlciBvZmZzZXQKKyAqIEBucl9wYXJ0aXRpb25zOgludW1iZXIgb2YgcGFydGl0aW9ucyBwb2ludGVkIHRvIGJ5IHBhcnRpdGlvbnMgKG9yIHplcm8pCisgKiBAcGFydGl0aW9uczoJCW10ZCBwYXJ0aXRpb24gbGlzdAorICogQGNoaXBfZGVsYXk6CQlSL0IgZGVsYXkgdmFsdWUgaW4gdXMKKyAqIEBvcHRpb25zOgkJT3B0aW9uIGZsYWdzLCBlLmcuIDE2Yml0IGJ1c3dpZHRoCisgKiBAZWNjbGF5b3V0OgkJZWNjIGxheW91dCBpbmZvIHN0cnVjdHVyZQorICogQHBhcnRfcHJvYmVfdHlwZXM6CU5VTEwtdGVybWluYXRlZCBhcnJheSBvZiBwcm9iZSB0eXBlcworICogQHByaXY6CQloYXJkd2FyZSBjb250cm9sbGVyIHNwZWNpZmljIHNldHRpbmdzCisgKi8KK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2NoaXAgeworCWludCBucl9jaGlwczsKKwlpbnQgY2hpcF9vZmZzZXQ7CisJaW50IG5yX3BhcnRpdGlvbnM7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRpdGlvbnM7CisJc3RydWN0IG5hbmRfZWNjbGF5b3V0ICplY2NsYXlvdXQ7CisJaW50IGNoaXBfZGVsYXk7CisJdW5zaWduZWQgaW50IG9wdGlvbnM7CisJY29uc3QgY2hhciAqKnBhcnRfcHJvYmVfdHlwZXM7CisJdm9pZCAqcHJpdjsKK307CisKKy8qIEtlZXAgZ2NjIGhhcHB5ICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworCisvKioKKyAqIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2N0cmwgLSBjb250cm9sbGVyIGxldmVsIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBod2NvbnRyb2w6CQlwbGF0Zm9ybSBzcGVjaWZpYyBoYXJkd2FyZSBjb250cm9sIHN0cnVjdHVyZQorICogQGRldl9yZWFkeToJCXBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9uIHRvIHJlYWQgcmVhZHkvYnVzeSBwaW4KKyAqIEBzZWxlY3RfY2hpcDoJcGxhdGZvcm0gc3BlY2lmaWMgY2hpcCBzZWxlY3QgZnVuY3Rpb24KKyAqIEBjbWRfY3RybDoJCXBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBjb250cm9sbGluZworICoJCQlBTEUvQ0xFL25DRS4gQWxzbyB1c2VkIHRvIHdyaXRlIGNvbW1hbmQgYW5kIGFkZHJlc3MKKyAqIEBwcml2OgkJcHJpdmF0ZSBkYXRhIHRvIHRyYW5zcG9ydCBkcml2ZXIgc3BlY2lmaWMgc2V0dGluZ3MKKyAqCisgKiBBbGwgZmllbGRzIGFyZSBvcHRpb25hbCBhbmQgZGVwZW5kIG9uIHRoZSBoYXJkd2FyZSBkcml2ZXIgcmVxdWlyZW1lbnRzCisgKi8KK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2N0cmwgeworCXZvaWQgKCpod2NvbnRyb2wpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKTsKKwlpbnQgKCpkZXZfcmVhZHkpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKwl2b2lkICgqc2VsZWN0X2NoaXApKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCk7CisJdm9pZCAoKmNtZF9jdHJsKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGRhdCwgdW5zaWduZWQgaW50IGN0cmwpOworCXZvaWQgKnByaXY7Cit9OworCisvKioKKyAqIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgLSBjb250YWluZXIgc3RydWN0dXJlIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhCisgKiBAY2hpcDoJCWNoaXAgbGV2ZWwgY2hpcCBzdHJ1Y3R1cmUKKyAqIEBjdHJsOgkJY29udHJvbGxlciBsZXZlbCBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgeworCXN0cnVjdCBwbGF0Zm9ybV9uYW5kX2NoaXAgY2hpcDsKKwlzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jdHJsIGN0cmw7Cit9OworCisvKiBTb21lIGhlbHBlcnMgdG8gYWNjZXNzIHRoZSBkYXRhIHN0cnVjdHVyZXMgKi8KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2NoaXAgKmdldF9wbGF0Zm9ybV9uYW5kY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJcmV0dXJuIGNoaXAtPnByaXY7Cit9CisKKy8qIFN0YW5kYXJkIE5BTkQgZnVuY3Rpb25zIGZyb20gbmFuZF9iYXNlLmMgKi8KK3ZvaWQgbmFuZF93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7Cit2b2lkIG5hbmRfd3JpdGVfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7Cit2b2lkIG5hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7Cit2b2lkIG5hbmRfcmVhZF9idWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBpbnQgbGVuKTsKK3VpbnQ4X3QgbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpOworCiAjZW5kaWYgLyogX19MSU5VWF9NVERfTkFORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kX2JjaC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZF9iY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGYyMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZF9iY2guaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTEgSXZhbiBEamVsaWMgPGl2YW4uZGplbGljQHBhcnJvdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgdGhlIGhlYWRlciBmb3IgdGhlIE5BTkQgQkNIIEVDQyBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTVREX05BTkRfQkNIX0hfXworI2RlZmluZSBfX01URF9OQU5EX0JDSF9IX18KKworc3RydWN0IG10ZF9pbmZvOworc3RydWN0IG5hbmRfYmNoX2NvbnRyb2w7CisjZGVmaW5lIENPTkZJR19OQU5EX0VDQ19CQ0gKKworI2lmIGRlZmluZWQoQ09ORklHX05BTkRfRUNDX0JDSCkKKworc3RhdGljIGlubGluZSBpbnQgbXRkX25hbmRfaGFzX2JjaCh2b2lkKSB7IHJldHVybiAxOyB9CisKKy8qCisgKiBDYWxjdWxhdGUgQkNIIGVjYyBjb2RlCisgKi8KK2ludCBuYW5kX2JjaF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwKKwkJCSAgIHVfY2hhciAqZWNjX2NvZGUpOworCisvKgorICogRGV0ZWN0IGFuZCBjb3JyZWN0IGJpdCBlcnJvcnMKKyAqLworaW50IG5hbmRfYmNoX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsIHVfY2hhciAqcmVhZF9lY2MsCisJCQkgIHVfY2hhciAqY2FsY19lY2MpOworLyoKKyAqIEluaXRpYWxpemUgQkNIIGVuY29kZXIvZGVjb2RlcgorICovCitzdHJ1Y3QgbmFuZF9iY2hfY29udHJvbCAqCituYW5kX2JjaF9pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgZWNjc2l6ZSwKKwkgICAgICB1bnNpZ25lZCBpbnQgZWNjYnl0ZXMsIHN0cnVjdCBuYW5kX2VjY2xheW91dCAqKmVjY2xheW91dCk7CisvKgorICogUmVsZWFzZSBCQ0ggZW5jb2Rlci9kZWNvZGVyIHJlc291cmNlcworICovCit2b2lkIG5hbmRfYmNoX2ZyZWUoc3RydWN0IG5hbmRfYmNoX2NvbnRyb2wgKm5iYyk7CisKKyNlbHNlIC8qICFDT05GSUdfTkFORF9FQ0NfQkNIICovCisKK3N0YXRpYyBpbmxpbmUgaW50IG10ZF9uYW5kX2hhc19iY2godm9pZCkgeyByZXR1cm4gMDsgfQorCitzdGF0aWMgaW5saW5lIGludAorbmFuZF9iY2hfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsCisJCSAgICAgICB1X2NoYXIgKmVjY19jb2RlKQoreworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK25hbmRfYmNoX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICB1bnNpZ25lZCBjaGFyICpyZWFkX2VjYywgdW5zaWduZWQgY2hhciAqY2FsY19lY2MpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuYW5kX2JjaF9jb250cm9sICoKK25hbmRfYmNoX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGludCBlY2NzaXplLAorCSAgICAgIHVuc2lnbmVkIGludCBlY2NieXRlcywgc3RydWN0IG5hbmRfZWNjbGF5b3V0ICoqZWNjbGF5b3V0KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmFuZF9iY2hfZnJlZShzdHJ1Y3QgbmFuZF9iY2hfY29udHJvbCAqbmJjKSB7fQorCisjZW5kaWYgLyogQ09ORklHX05BTkRfRUNDX0JDSCAqLworCisjZW5kaWYgLyogX19NVERfTkFORF9CQ0hfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKaW5kZXggZGY0ODA4Zi4uZGNkYmExNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaApAQCAtMTE5LDYgKzExOSwzMCBAQAogICogQmVsb3cgYXJlIHRydWx5IExpbnV4LXNwZWNpZmljIHR5cGVzIHRoYXQgc2hvdWxkIG5ldmVyIGNvbGxpZGUgd2l0aAogICogYW55IGFwcGxpY2F0aW9uL2xpYnJhcnkgdGhhdCB3YW50cyBsaW51eC90eXBlcy5oLgogICovCisjaWZkZWYgX19DSEVDS0VSX18KKyNkZWZpbmUgX19iaXR3aXNlX18gX19hdHRyaWJ1dGVfXygoYml0d2lzZSkpCisjZWxzZQorI2RlZmluZSBfX2JpdHdpc2VfXworI2VuZGlmCisjaWZkZWYgX19DSEVDS19FTkRJQU5fXworI2RlZmluZSBfX2JpdHdpc2UgX19iaXR3aXNlX18KKyNlbHNlCisjZGVmaW5lIF9fYml0d2lzZQorI2VuZGlmCisKK3R5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fbGUxNjsKK3R5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fYmUxNjsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fbGUzMjsKK3R5cGVkZWYgX191MzIgX19iaXR3aXNlIF9fYmUzMjsKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQordHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19sZTY0OwordHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19iZTY0OworI2VuZGlmCit0eXBlZGVmIF9fdTE2IF9fYml0d2lzZSBfX3N1bTE2OwordHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UgX193c3VtOworCisKK3R5cGVkZWYgdW5zaWduZWQgX19iaXR3aXNlX18JZ2ZwX3Q7CiAKIHN0cnVjdCB1c3RhdCB7CiAJX19rZXJuZWxfZGFkZHJfdAlmX3RmcmVlOwpAQCAtMTI3LDQgKzE1MSw1IEBACiAJY2hhcgkJCWZfZnBhY2tbNl07CiB9OwogCisKICNlbmRpZiAvKiBfTElOVVhfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9taWlwaHkuaCBiL2luY2x1ZGUvbWlpcGh5LmgKaW5kZXggNzE3MTZiMC4uZDVhZDZhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9taWlwaHkuaAorKysgYi9pbmNsdWRlL21paXBoeS5oCkBAIC00Nyw4ICs0NywxNiBAQAogaW50ICBtaWlwaHlfaW5mbyhjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGludCAgKm91aSwKIAkJdW5zaWduZWQgY2hhciAqbW9kZWwsIHVuc2lnbmVkIGNoYXIgKnJldik7CiBpbnQgIG1paXBoeV9yZXNldChjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIpOworaW50IG1paXBoeV9zdXBwb3J0c18xMDAwYmFzZV90IChjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIpOworaW50IG1paXBoeV93YWl0X2F1dG9uZWdvdGlhdGlvbl9jb21wbGV0ZSAoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyKTsKK2ludCBtaWlwaHlfc3BlZWRfZHVwbGV4IChjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIsIGludCAqc3BlZWQsIGludCAqZHVwbGV4KTsKIGludCAgbWlpcGh5X3NwZWVkKGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgYWRkcik7CiBpbnQgIG1paXBoeV9kdXBsZXgoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyKTsKKworLyoqKioqKiBNU1BEIENoYW5nZSAqKioqKioqLwordm9pZCBtaWlwaHlfZW5hYmxlX3JnbWlpX3J4X2RlbGF5KGNoYXIgKmRldm5hbWUsIHVuc2lnbmVkIGNoYXIgYWRkcik7Cit2b2lkIG1paXBoeV9lbmFibGVfcmdtaWlfdHhfZGVsYXkoY2hhciAqZGV2bmFtZSwgdW5zaWduZWQgY2hhciBhZGRyKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmZGVmIENGR19GQVVMVF9FQ0hPX0xJTktfRE9XTgogaW50ICBtaWlwaHlfbGluayhjaGFyICpkZXZuYW1lLCB1bnNpZ25lZCBjaGFyIGFkZHIpOwogI2VuZGlmCkBAIC03NSw3ICs4Myw3IEBACiAKIC8qIHBoeSBzZWVkIHNldHVwICovCiAjZGVmaW5lIEFVVE8JCQk5OQotI2RlZmluZSBfMTAwMEJBU0VUICAgICAgICAgICAgICAxMDAwCisjZGVmaW5lIF8xMDAwQkFTRVQJCTEwMDAKICNkZWZpbmUgXzEwMEJBU0VUCQkxMDAKICNkZWZpbmUgXzEwQkFTRVQJCTEwCiAjZGVmaW5lIEhBTEYJCQkyMgpAQCAtOTAsOSArOTgsMTAgQEAKICNkZWZpbmUgUEhZX0FOTFBBUgkJMHgwNQogI2RlZmluZSBQSFlfQU5FUgkJMHgwNgogI2RlZmluZSBQSFlfQU5OUFRSCQkweDA3Ci0jZGVmaW5lIFBIWV9BTkxQTlAgICAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgUEhZXzEwMDBCVENSICAgICAgICAgICAgMHgwOQotI2RlZmluZSBQSFlfMTAwMEJUU1IgICAgICAgICAgICAweDBBCisjZGVmaW5lIFBIWV9BTkxQTlAJCTB4MDgKKyNkZWZpbmUgUEhZXzEwMDBCVENSCQkweDA5CisjZGVmaW5lIFBIWV8xMDAwQlRTUgkJMHgwQQorI2RlZmluZSBQSFlfRVhTUgkJMHgwRgogI2RlZmluZSBQSFlfUEhZU1RTCQkweDEwCiAjZGVmaW5lIFBIWV9NSVBTQ1IJCTB4MTEKICNkZWZpbmUgUEhZX01JUEdTUgkJMHgxMgpAQCAtMTA0LDYgKzExMywxMSBAQAogI2RlZmluZSBQSFlfMTBCVFNDUgkJMHgxOAogI2RlZmluZSBQSFlfUEhZQ1RSTAkJMHgxOQogCisvKioqKiBNU1BEIENoYW5nZSAqKioqKi8KKyNkZWZpbmUgUEhZX0RFQlVHX1BPUlRfQUREUkVTUyAgICAgICAgICAyOQorI2RlZmluZSBQSFlfREVCVUdfUE9SVF9EQVRBICAgICAgICAgICAgIDMwCisKKwogLyogUEhZIEJNQ1IgKi8KICNkZWZpbmUgUEhZX0JNQ1JfUkVTRVQJCTB4ODAwMAogI2RlZmluZSBQSFlfQk1DUl9MT09QCQkweDQwMDAKQEAgLTExNSwxMCArMTI5LDEwIEBACiAjZGVmaW5lIFBIWV9CTUNSX0RQTFgJCTB4MDEwMAogI2RlZmluZSBQSFlfQk1DUl9DT0xfVFNUCTB4MDA4MAogCi0jZGVmaW5lIFBIWV9CTUNSX1NQRUVEX01BU0sgICAgIDB4MjA0MAotI2RlZmluZSBQSFlfQk1DUl8xMDAwX01CUFMgICAgICAweDAwNDAKLSNkZWZpbmUgUEhZX0JNQ1JfMTAwX01CUFMgICAgICAgMHgyMDAwCi0jZGVmaW5lIFBIWV9CTUNSXzEwX01CUFMgICAgICAgIDB4MDAwMAorI2RlZmluZSBQSFlfQk1DUl9TUEVFRF9NQVNLCTB4MjA0MAorI2RlZmluZSBQSFlfQk1DUl8xMDAwX01CUFMJMHgwMDQwCisjZGVmaW5lIFBIWV9CTUNSXzEwMF9NQlBTCTB4MjAwMAorI2RlZmluZSBQSFlfQk1DUl8xMF9NQlBTCTB4MDAwMAogCiAvKiBwaHkgQk1TUiAqLwogI2RlZmluZSBQSFlfQk1TUl8xMDBUNAkJMHg4MDAwCkBAIC0xMjYsNiArMTQwLDcgQEAKICNkZWZpbmUgUEhZX0JNU1JfMTAwVFhICQkweDIwMDAKICNkZWZpbmUgUEhZX0JNU1JfMTBURgkJMHgxMDAwCiAjZGVmaW5lIFBIWV9CTVNSXzEwVEgJCTB4MDgwMAorI2RlZmluZSBQSFlfQk1TUl9FWFRfU1RBVAkweDAxMDAKICNkZWZpbmUgUEhZX0JNU1JfUFJFX1NVUAkweDAwNDAKICNkZWZpbmUgUEhZX0JNU1JfQVVUTl9DT01QCTB4MDAyMAogI2RlZmluZSBQSFlfQk1TUl9SRgkJMHgwMDEwCkBAIC0xMzQsMjcgKzE0OSw1NiBAQAogI2RlZmluZSBQSFlfQk1TUl9KRAkJMHgwMDAyCiAjZGVmaW5lIFBIWV9CTVNSX0VYVAkJMHgwMDAxCiAKKy8qcGh5IEFOQVIgKi8KKyNkZWZpbmUgUEhZX0FOQVJfTlAJCTB4ODAwMAorI2RlZmluZSBQSFlfQU5BUl9BQ0sJCTB4NDAwMAorI2RlZmluZSBQSFlfQU5BUl9SRgkJMHgyMDAwCisjZGVmaW5lIFBIWV9BTkFSX0FTWU1QCQkweDA4MDAKKyNkZWZpbmUgUEhZX0FOQVJfUEFVU0UJCTB4MDQwMAorI2RlZmluZSBQSFlfQU5BUl9UNAkJMHgwMjAwCisjZGVmaW5lIFBIWV9BTkFSX1RYRkQJCTB4MDEwMAorI2RlZmluZSBQSFlfQU5BUl9UWAkJMHgwMDgwCisjZGVmaW5lIFBIWV9BTkFSXzEwRkQJCTB4MDA0MAorI2RlZmluZSBQSFlfQU5BUl8xMAkJMHgwMDIwCisjZGVmaW5lIFBIWV9BTkFSXzEwMAkJMHgwMzgwCS8qIHdlIGNhbiBydW4gYXQgMTAwICovCisKKyNkZWZpbmUgUEhZX0FOQVJfUFNCX01BU0sJMHgwMDFmCisjZGVmaW5lIFBIWV9BTkFSX1BTQl84MDJfMwkweDAwMDEKKyNkZWZpbmUgUEhZX0FOQVJfUFNCXzgwMl85CTB4MDAwMgorCiAvKnBoeSBBTkxQQVIgKi8KICNkZWZpbmUgUEhZX0FOTFBBUl9OUAkJMHg4MDAwCiAjZGVmaW5lIFBIWV9BTkxQQVJfQUNLCQkweDQwMDAKICNkZWZpbmUgUEhZX0FOTFBBUl9SRgkJMHgyMDAwCisjZGVmaW5lIFBIWV9BTkxQQVJfQVNZTVAJMHgwODAwCisjZGVmaW5lIFBIWV9BTkxQQVJfUEFVU0UJMHgwNDAwCiAjZGVmaW5lIFBIWV9BTkxQQVJfVDQJCTB4MDIwMAogI2RlZmluZSBQSFlfQU5MUEFSX1RYRkQJCTB4MDEwMAogI2RlZmluZSBQSFlfQU5MUEFSX1RYCQkweDAwODAKICNkZWZpbmUgUEhZX0FOTFBBUl8xMEZECQkweDAwNDAKICNkZWZpbmUgUEhZX0FOTFBBUl8xMAkJMHgwMDIwCi0jZGVmaW5lIFBIWV9BTkxQQVJfMTAwCQkweDAzODAJICAgIC8qIHdlIGNhbiBydW4gYXQgMTAwICovCisjZGVmaW5lIFBIWV9BTkxQQVJfMTAwCQkweDAzODAJLyogd2UgY2FuIHJ1biBhdCAxMDAgKi8KIAotI2RlZmluZSBQSFlfQU5MUEFSX1BTQl9NQVNLICAgICAweDAwMWYKLSNkZWZpbmUgUEhZX0FOTFBBUl9QU0JfODAyXzMgICAgMHgwMDAxCi0jZGVmaW5lIFBIWV9BTkxQQVJfUFNCXzgwMl85ICAgIDB4MDAwMgorI2RlZmluZSBQSFlfQU5MUEFSX1BTQl9NQVNLCTB4MDAxZgorI2RlZmluZSBQSFlfQU5MUEFSX1BTQl84MDJfMwkweDAwMDEKKyNkZWZpbmUgUEhZX0FOTFBBUl9QU0JfODAyXzkJMHgwMDAyCiAKLS8qIFBIWV8xMDAwQlRTUiAqLwotI2RlZmluZSBQSFlfMTAwMEJUU1JfTVNDRiAgICAgICAweDgwMDAKLSNkZWZpbmUgUEhZXzEwMDBCVFNSX01TQ1IgICAgICAgMHg0MDAwCi0jZGVmaW5lIFBIWV8xMDAwQlRTUl9MUlMgICAgICAgIDB4MjAwMAotI2RlZmluZSBQSFlfMTAwMEJUU1JfUlJTICAgICAgICAweDEwMDAKLSNkZWZpbmUgUEhZXzEwMDBCVFNSXzEwMDBGRCAgICAgMHgwODAwCi0jZGVmaW5lIFBIWV8xMDAwQlRTUl8xMDAwSEQgICAgIDB4MDQwMAorLyogcGh5IDEwMDBCVENSICovCisjZGVmaW5lIFBIWV8xMDAwQlRDUl8xMDAwRkQJMHgwMjAwCisjZGVmaW5lIFBIWV8xMDAwQlRDUl8xMDAwSEQJMHgwMTAwCisKKy8qIHBoeSAxMDAwQlRTUiAqLworI2RlZmluZSBQSFlfMTAwMEJUU1JfTVNDRgkweDgwMDAKKyNkZWZpbmUgUEhZXzEwMDBCVFNSX01TQ1IJMHg0MDAwCisjZGVmaW5lIFBIWV8xMDAwQlRTUl9MUlMJMHgyMDAwCisjZGVmaW5lIFBIWV8xMDAwQlRTUl9SUlMJMHgxMDAwCisjZGVmaW5lIFBIWV8xMDAwQlRTUl8xMDAwRkQJMHgwODAwCisjZGVmaW5lIFBIWV8xMDAwQlRTUl8xMDAwSEQJMHgwNDAwCisKKy8qIHBoeSBFWFNSICovCisjZGVmaW5lIFBIWV9FWFNSXzEwMDBYRgkJMHg4MDAwCisjZGVmaW5lIFBIWV9FWFNSXzEwMDBYSAkJMHg0MDAwCisjZGVmaW5lIFBIWV9FWFNSXzEwMDBURgkJMHgyMDAwCisjZGVmaW5lIFBIWV9FWFNSXzEwMDBUSAkJMHgxMDAwCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uYW5kLmggYi9pbmNsdWRlL25hbmQuaAppbmRleCAyMzQ5M2Y3Li41YmNhNGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25hbmQuaAorKysgYi9pbmNsdWRlL25hbmQuaApAQCAtMjQsMzEgKzI0LDUyIEBACiAjaWZuZGVmIF9OQU5EX0hfCiAjZGVmaW5lIF9OQU5EX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0Lmg+CisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKy8qCisgKiBBbGwgYm9hcmRzIHVzaW5nIGEgZ2l2ZW4gZHJpdmVyIG11c3QgY29udmVydCB0byBzZWxmLWluaXQKKyAqIGF0IHRoZSBzYW1lIHRpbWUsIHNvIGRvIGl0IGhlcmUuICBXaGVuIGFsbCBkcml2ZXJzIGFyZQorICogY29udmVydGVkLCB0aGlzIHdpbGwgZ28gYXdheS4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX05BTkRfRlNMX0VMQkMpCisvLyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX1NFTEZfSU5JVAorI2VuZGlmCisKK2V4dGVybiB2b2lkIG5hbmRfaW5pdCh2b2lkKTsKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogCisjdW5kZWYgQ09ORklHX1NZU19OQU5EX1NFTEZfSU5JVAorI2lmZGVmIENPTkZJR19TWVNfTkFORF9TRUxGX0lOSVQKK3ZvaWQgYm9hcmRfbmFuZF9pbml0KHZvaWQpOworaW50IG5hbmRfcmVnaXN0ZXIoaW50IGRldm51bSk7CisjZWxzZQorZXh0ZXJuIGludCBib2FyZF9uYW5kX2luaXQoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCk7CisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgbXRkX2luZm8gbmFuZF9pbmZvX3Q7CiAKIGV4dGVybiBpbnQgbmFuZF9jdXJyX2RldmljZTsKIGV4dGVybiBuYW5kX2luZm9fdCBuYW5kX2luZm9bXTsKIAotc3RhdGljIGlubGluZSBpbnQgbmFuZF9yZWFkKG5hbmRfaW5mb190ICppbmZvLCB1bG9uZyBvZnMsIHVsb25nICpsZW4sIHVfY2hhciAqYnVmKQorc3RhdGljIGlubGluZSBpbnQgbmFuZF9yZWFkKG5hbmRfaW5mb190ICppbmZvLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgKmxlbiwgdV9jaGFyICpidWYpCiB7CiAJcmV0dXJuIGluZm8tPnJlYWQoaW5mbywgb2ZzLCAqbGVuLCAoc2l6ZV90ICopbGVuLCBidWYpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBuYW5kX3dyaXRlKG5hbmRfaW5mb190ICppbmZvLCB1bG9uZyBvZnMsIHVsb25nICpsZW4sIHVfY2hhciAqYnVmKQorc3RhdGljIGlubGluZSBpbnQgbmFuZF93cml0ZShuYW5kX2luZm9fdCAqaW5mbywgbG9mZl90IG9mcywgc2l6ZV90ICpsZW4sIHVfY2hhciAqYnVmKQogewogCXJldHVybiBpbmZvLT53cml0ZShpbmZvLCBvZnMsICpsZW4sIChzaXplX3QgKilsZW4sIGJ1Zik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5hbmRfYmxvY2tfaXNiYWQobmFuZF9pbmZvX3QgKmluZm8sIHVsb25nIG9mcykKK3N0YXRpYyBpbmxpbmUgaW50IG5hbmRfYmxvY2tfaXNiYWQobmFuZF9pbmZvX3QgKmluZm8sIGxvZmZfdCBvZnMpCiB7CiAJcmV0dXJuIGluZm8tPmJsb2NrX2lzYmFkKGluZm8sIG9mcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5hbmRfZXJhc2UobmFuZF9pbmZvX3QgKmluZm8sIHVsb25nIG9mZiwgdWxvbmcgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IG5hbmRfZXJhc2UobmFuZF9pbmZvX3QgKmluZm8sIGxvZmZfdCBvZmYsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBlcmFzZV9pbmZvIGluc3RyOwogCkBAIC04MSw2ICsxMDIsNyBAQAogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgbmFuZF93cml0ZV9vcHRpb25zIG5hbmRfd3JpdGVfb3B0aW9uc190OwordHlwZWRlZiBzdHJ1Y3QgbXRkX29vYl9vcHMgbXRkX29vYl9vcHNfdDsKIAogc3RydWN0IG5hbmRfcmVhZF9vcHRpb25zIHsKIAl1X2NoYXIgKmJ1ZmZlcjsJCS8qIG1lbW9yeSBibG9jayBpbiB3aGljaCByZWFkIGltYWdlIGlzIHdyaXR0ZW4qLwpAQCAtOTMsMjAgKzExNSwzMCBAQAogdHlwZWRlZiBzdHJ1Y3QgbmFuZF9yZWFkX29wdGlvbnMgbmFuZF9yZWFkX29wdGlvbnNfdDsKIAogc3RydWN0IG5hbmRfZXJhc2Vfb3B0aW9ucyB7Ci0JdWxvbmcgbGVuZ3RoOwkJLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGVyYXNlICovCi0JdWxvbmcgb2Zmc2V0OwkJLyogZmlyc3QgYWRkcmVzcyBpbiBOQU5EIHRvIGVyYXNlICovCisJbG9mZl90IGxlbmd0aDsJCS8qIG51bWJlciBvZiBieXRlcyB0byBlcmFzZSAqLworCWxvZmZfdCBvZmZzZXQ7CQkvKiBmaXJzdCBhZGRyZXNzIGluIE5BTkQgdG8gZXJhc2UgKi8KIAlpbnQgcXVpZXQ7CQkvKiBkb24ndCBkaXNwbGF5IHByb2dyZXNzIG1lc3NhZ2VzICovCiAJaW50IGpmZnMyOwkJLyogaWYgdHJ1ZTogZm9ybWF0IGZvciBqZmZzMiB1c2FnZQogCQkJCSAqICh3cml0ZSBhcHByb3ByaWF0ZSBjbGVhbm1hcmtlciBibG9ja3MpICovCiAJaW50IHNjcnViOwkJLyogaWYgdHJ1ZSwgcmVhbGx5IGNsZWFuIE5BTkQgYnkgZXJhc2luZwogCQkJCSAqIGJhZCBibG9ja3MgKFVOU0FGRSkgKi8KKworCS8qIERvbid0IGluY2x1ZGUgc2tpcHBlZCBiYWQgYmxvY2tzIGluIHNpemUgdG8gYmUgZXJhc2VkICovCisJaW50IHNwcmVhZDsKIH07CiAKIHR5cGVkZWYgc3RydWN0IG5hbmRfZXJhc2Vfb3B0aW9ucyBuYW5kX2VyYXNlX29wdGlvbnNfdDsKIAotaW50IG5hbmRfd3JpdGVfb3B0cyhuYW5kX2luZm9fdCAqbWVtaW5mbywgY29uc3QgbmFuZF93cml0ZV9vcHRpb25zX3QgKm9wdHMpOworaW50IG5hbmRfcmVhZF9za2lwX2JhZChuYW5kX2luZm9fdCAqbmFuZCwgbG9mZl90IG9mZnNldCwgc2l6ZV90ICpsZW5ndGgsCisJCSAgICAgICB1X2NoYXIgKmJ1ZmZlcik7CiAKLWludCBuYW5kX3JlYWRfb3B0cyhuYW5kX2luZm9fdCAqbWVtaW5mbywgY29uc3QgbmFuZF9yZWFkX29wdGlvbnNfdCAqb3B0cyk7CisjZGVmaW5lIFdJVEhfWUFGRlNfT09CCSgxIDw8IDApIC8qIHdoZXRoZXIgd3JpdGUgd2l0aCB5YWZmcyBmb3JtYXQuIFRoaXMgZmxhZworCQkJCSAgKiBpcyBhICdtb2RlJyBtZWFuaW5nIGl0IGNhbm5vdCBiZSBtaXhlZCB3aXRoCisJCQkJICAqIG90aGVyIGZsYWdzICovCisjZGVmaW5lIFdJVEhfRFJPUF9GRlMJKDEgPDwgMSkgLyogZHJvcCB0cmFpbGluZyBhbGwtMHhmZiBwYWdlcyAqLworCitpbnQgbmFuZF93cml0ZV9za2lwX2JhZChuYW5kX2luZm9fdCAqbmFuZCwgbG9mZl90IG9mZnNldCwgc2l6ZV90ICpsZW5ndGgsCisJCQl1X2NoYXIgKmJ1ZmZlciwgaW50IGZsYWdzKTsKIGludCBuYW5kX2VyYXNlX29wdHMobmFuZF9pbmZvX3QgKm1lbWluZm8sIGNvbnN0IG5hbmRfZXJhc2Vfb3B0aW9uc190ICpvcHRzKTsKIAogI2RlZmluZSBOQU5EX0xPQ0tfU1RBVFVTX1RJR0hUCTB4MDEKQEAgLTExNSwxMCArMTQ3LDI0IEBACiAKIGludCBuYW5kX2xvY2soIG5hbmRfaW5mb190ICptZW1pbmZvLCBpbnQgdGlnaHQgKTsKIGludCBuYW5kX3VubG9jayggbmFuZF9pbmZvX3QgKm1lbWluZm8sIHVsb25nIHN0YXJ0LCB1bG9uZyBsZW5ndGggKTsKLWludCBuYW5kX2dldF9sb2NrX3N0YXR1cyhuYW5kX2luZm9fdCAqbWVtaW5mbywgdWxvbmcgb2Zmc2V0KTsKK2ludCBuYW5kX2dldF9sb2NrX3N0YXR1cyhuYW5kX2luZm9fdCAqbWVtaW5mbywgbG9mZl90IG9mZnNldCk7CiAKLSNpZmRlZiBDRkdfTkFORF9TRUxFQ1RfREVWSUNFCitpbnQgbmFuZF9zcGxfbG9hZF9pbWFnZSh1aW50MzJfdCBvZmZzLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdm9pZCAqZHN0KTsKK3ZvaWQgbmFuZF9kZXNlbGVjdCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19TWVNfTkFORF9TRUxFQ1RfREVWSUNFCiB2b2lkIGJvYXJkX25hbmRfc2VsZWN0X2RldmljZShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLCBpbnQgY2hpcCk7CiAjZW5kaWYKIAorX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSB2b2lkIG5hbmRfYm9vdCh2b2lkKTsKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRU5WX09GRlNFVF9PT0IKKyNkZWZpbmUgRU5WX09PQl9NQVJLRVIgMHgzMDQyNTY0NSAvKiJFVkIwIiBpbiBsaXR0bGUtZW5kaWFuIC0tIG9mZnNldCBpcyBzdG9yZWQKKwkJCQkgICAgYXMgYmxvY2sgbnVtYmVyKi8KKyNkZWZpbmUgRU5WX09PQl9NQVJLRVJfT0xEIDB4MzA1NjRlNDUgLyoiRU5WMCIgaW4gbGl0dGxlLWVuZGlhbiAtLSBvZmZzZXQgaXMKKwkJCQkJc3RvcmVkIGFzIGJ5dGUgbnVtYmVyICovCisjZGVmaW5lIEVOVl9PRkZTRVRfU0laRSA4CitpbnQgZ2V0X25hbmRfZW52X29vYihuYW5kX2luZm9fdCAqbmFuZCwgdW5zaWduZWQgbG9uZyAqcmVzdWx0KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90eXBlcy5oIGIvaW5jbHVkZS90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZGMwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3R5cGVzLmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBfX0FTTV9BUk1fVFlQRVNfSAorI2RlZmluZSBfX0FTTV9BUk1fVFlQRVNfSAorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKKy8qCisgKiBfX3h4IGlzIG9rOiBpdCBkb2Vzbid0IHBvbGx1dGUgdGhlIFBPU0lYIG5hbWVzcGFjZS4gVXNlIHRoZXNlIGluIHRoZQorICogaGVhZGVyIGZpbGVzIGV4cG9ydGVkIHRvIHVzZXIgc3BhY2UKKyAqLworCit0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7CisKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CisKK3R5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKKworI2lmIGRlZmluZWQoX19HTlVDX18pCitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7CitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OworI2VuZGlmCisKKy8qCisgKiBUaGVzZSBhcmVuJ3QgZXhwb3J0ZWQgb3V0c2lkZSB0aGUga2VybmVsIHRvIGF2b2lkIG5hbWUgc3BhY2UgY2xhc2hlcworICovCisjaWZkZWYgX19LRVJORUxfXworCit0eXBlZGVmIHNpZ25lZCBjaGFyIHM4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OworCit0eXBlZGVmIHNpZ25lZCBzaG9ydCBzMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKKwordHlwZWRlZiBzaWduZWQgaW50IHMzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKKwordHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKKworI2RlZmluZSBCSVRTX1BFUl9MT05HIDMyCisKKy8qIERtYSBhZGRyZXNzZXMgYXJlIDMyLWJpdHMgd2lkZS4gICovCisKK3R5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwaHlzX3NpemVfdDsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJfYXJtL01ha2VmaWxlIGIvbGliX2FybS9NYWtlZmlsZQppbmRleCAwMzdjNDc1Li5mZjEwM2RlIDEwMDY0NAotLS0gYS9saWJfYXJtL01ha2VmaWxlCisrKyBiL2xpYl9hcm0vTWFrZWZpbGUKQEAgLTI1LDkgKzI1LDEwIEBACiAKIExJQgk9ICQob2JqKWxpYiQoQVJDSCkuYQogCi1TT0JKUwk9IF9hc2hsZGkzLm8gX2FzaHJkaTMubyBfZGl2c2kzLm8gX21vZHNpMy5vIF91ZGl2c2kzLm8gX3Vtb2RzaTMubworI1NPQkpTCT0gX2FzaGxkaTMubyBfYXNocmRpMy5vIF9kaXZzaTMubyBfbW9kc2kzLm8gX3VkaXZzaTMubyBfdW1vZHNpMy5vCitTT0JKUwk9IGxpYjFmdW5jcy5vIGFzaGxkaTMubyBhc2hyZGkzLm8gX2xzaHJkaTMubyAKIAotQ09CSlMJPSBhcm1saW51eC5vIGJvYXJkLm8gXAorQ09CSlMJPSBpbnRlcnJ1cHRzLm8gYXJtbGludXgubyBib2FyZC5vIFwKIAkgIGNhY2hlLm8gZGl2MC5vCiAKIFNSQ1MgCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCmRpZmYgLS1naXQgYS9saWJfYXJtL19kaXZzaTMuUyBiL2xpYl9hcm0vX2RpdnNpMy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGMxNWY2Li4wMDAwMDAwCi0tLSBhL2xpYl9hcm0vX2RpdnNpMy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLQotLm1hY3JvIEFSTV9ESVZfQk9EWSBkaXZpZGVuZCwgZGl2aXNvciwgcmVzdWx0LCBjdXJiaXQKLQotI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1Ci0KLQljbHoJXGN1cmJpdCwgXGRpdmlzb3IKLQljbHoJXHJlc3VsdCwgXGRpdmlkZW5kCi0Jc3ViCVxyZXN1bHQsIFxjdXJiaXQsIFxyZXN1bHQKLQltb3YJXGN1cmJpdCwgIzEKLQltb3YJXGRpdmlzb3IsIFxkaXZpc29yLCBsc2wgXHJlc3VsdAotCW1vdglcY3VyYml0LCBcY3VyYml0LCBsc2wgXHJlc3VsdAotCW1vdglccmVzdWx0LCAjMAotCi0jZWxzZQotCi0JQCBJbml0aWFsbHkgc2hpZnQgdGhlIGRpdmlzb3IgbGVmdCAzIGJpdHMgaWYgcG9zc2libGUsCi0JQCBzZXQgY3VyYml0IGFjY29yZGluZ2x5LiAgVGhpcyBhbGxvd3MgZm9yIGN1cmJpdCB0byBiZSBsb2NhdGVkCi0JQCBhdCB0aGUgbGVmdCBlbmQgb2YgZWFjaCA0IGJpdCBuaWJibGVzIGluIHRoZSBkaXZpc2lvbiBsb29wCi0JQCB0byBzYXZlIG9uZSBsb29wIGluIG1vc3QgY2FzZXMuCi0JdHN0CVxkaXZpc29yLCAjMHhlMDAwMDAwMAotCW1vdmVxCVxkaXZpc29yLCBcZGl2aXNvciwgbHNsICMzCi0JbW92ZXEJXGN1cmJpdCwgIzgKLQltb3ZuZQlcY3VyYml0LCAjMQotCi0JQCBVbmxlc3MgdGhlIGRpdmlzb3IgaXMgdmVyeSBiaWcsIHNoaWZ0IGl0IHVwIGluIG11bHRpcGxlcyBvZgotCUAgZm91ciBiaXRzLCBzaW5jZSB0aGlzIGlzIHRoZSBhbW91bnQgb2YgdW53aW5kaW5nIGluIHRoZSBtYWluCi0JQCBkaXZpc2lvbiBsb29wLiAgQ29udGludWUgc2hpZnRpbmcgdW50aWwgdGhlIGRpdmlzb3IgaXMKLQlAIGxhcmdlciB0aGFuIHRoZSBkaXZpZGVuZC4KLTE6CWNtcAlcZGl2aXNvciwgIzB4MTAwMDAwMDAKLQljbXBsbwlcZGl2aXNvciwgXGRpdmlkZW5kCi0JbW92bG8JXGRpdmlzb3IsIFxkaXZpc29yLCBsc2wgIzQKLQltb3ZsbwlcY3VyYml0LCBcY3VyYml0LCBsc2wgIzQKLQlibG8JMWIKLQotCUAgRm9yIHZlcnkgYmlnIGRpdmlzb3JzLCB3ZSBtdXN0IHNoaWZ0IGl0IGEgYml0IGF0IGEgdGltZSwgb3IKLQlAIHdlIHdpbGwgYmUgaW4gZGFuZ2VyIG9mIG92ZXJmbG93aW5nLgotMToJY21wCVxkaXZpc29yLCAjMHg4MDAwMDAwMAotCWNtcGxvCVxkaXZpc29yLCBcZGl2aWRlbmQKLQltb3ZsbwlcZGl2aXNvciwgXGRpdmlzb3IsIGxzbCAjMQotCW1vdmxvCVxjdXJiaXQsIFxjdXJiaXQsIGxzbCAjMQotCWJsbwkxYgotCi0JbW92CVxyZXN1bHQsICMwCi0KLSNlbmRpZgotCi0JQCBEaXZpc2lvbiBsb29wCi0xOgljbXAJXGRpdmlkZW5kLCBcZGl2aXNvcgotCXN1YmhzCVxkaXZpZGVuZCwgXGRpdmlkZW5kLCBcZGl2aXNvcgotCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0Ci0JY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzEKLQlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMQotCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0LCAgbHNyICMxCi0JY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzIKLQlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMgotCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0LCAgbHNyICMyCi0JY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzMKLQlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMwotCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0LCAgbHNyICMzCi0JY21wCVxkaXZpZGVuZCwgIzAJCQlAIEVhcmx5IHRlcm1pbmF0aW9uPwotCW1vdm5lcwlcY3VyYml0LCAgIFxjdXJiaXQsICBsc3IgIzQJQCBObywgYW55IG1vcmUgYml0cyB0byBkbz8KLQltb3ZuZQlcZGl2aXNvciwgIFxkaXZpc29yLCBsc3IgIzQKLQlibmUJMWIKLQotLmVuZG0KLQotLm1hY3JvIEFSTV9ESVYyX09SREVSIGRpdmlzb3IsIG9yZGVyCi0KLSNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNQotCi0JY2x6CVxvcmRlciwgXGRpdmlzb3IKLQlyc2IJXG9yZGVyLCBcb3JkZXIsICMzMQotCi0jZWxzZQotCi0JY21wCVxkaXZpc29yLCAjKDEgPDwgMTYpCi0JbW92aHMJXGRpdmlzb3IsIFxkaXZpc29yLCBsc3IgIzE2Ci0JbW92aHMJXG9yZGVyLCAjMTYKLQltb3Zsbwlcb3JkZXIsICMwCi0KLQljbXAJXGRpdmlzb3IsICMoMSA8PCA4KQotCW1vdmhzCVxkaXZpc29yLCBcZGl2aXNvciwgbHNyICM4Ci0JYWRkaHMJXG9yZGVyLCBcb3JkZXIsICM4Ci0KLQljbXAJXGRpdmlzb3IsICMoMSA8PCA0KQotCW1vdmhzCVxkaXZpc29yLCBcZGl2aXNvciwgbHNyICM0Ci0JYWRkaHMJXG9yZGVyLCBcb3JkZXIsICM0Ci0KLQljbXAJXGRpdmlzb3IsICMoMSA8PCAyKQotCWFkZGhpCVxvcmRlciwgXG9yZGVyLCAjMwotCWFkZGxzCVxvcmRlciwgXG9yZGVyLCBcZGl2aXNvciwgbHNyICMxCi0KLSNlbmRpZgotCi0uZW5kbQotCi0JLmFsaWduCTUKLS5nbG9ibCBfX2RpdnNpMwotX19kaXZzaTM6Ci0JY21wCXIxLCAjMAotCWVvcglpcCwgcjAsIHIxCQkJQCBzYXZlIHRoZSBzaWduIG9mIHRoZSByZXN1bHQuCi0JYmVxCUxkaXYwCi0JcnNibWkJcjEsIHIxLCAjMAkJCUAgbG9vcHMgYmVsb3cgdXNlIHVuc2lnbmVkLgotCXN1YnMJcjIsIHIxLCAjMQkJCUAgZGl2aXNpb24gYnkgMSBvciAtMSA/Ci0JYmVxCTEwZgotCW1vdnMJcjMsIHIwCi0JcnNibWkJcjMsIHIwLCAjMAkJCUAgcG9zaXRpdmUgZGl2aWRlbmQgdmFsdWUKLQljbXAJcjMsIHIxCi0JYmxzCTExZgotCXRzdAlyMSwgcjIJCQkJQCBkaXZpc29yIGlzIHBvd2VyIG9mIDIgPwotCWJlcQkxMmYKLQotCUFSTV9ESVZfQk9EWSByMywgcjEsIHIwLCByMgotCi0JY21wCWlwLCAjMAotCXJzYm1pCXIwLCByMCwgIzAKLQltb3YJcGMsIGxyCi0KLTEwOgl0ZXEJaXAsIHIwCQkJCUAgc2FtZSBzaWduID8KLQlyc2JtaQlyMCwgcjAsICMwCi0JbW92CXBjLCBscgotCi0xMToJbW92bG8JcjAsICMwCi0JbW92ZXEJcjAsIGlwLCBhc3IgIzMxCi0Jb3JyZXEJcjAsIHIwLCAjMQotCW1vdglwYywgbHIKLQotMTI6CUFSTV9ESVYyX09SREVSIHIxLCByMgotCi0JY21wCWlwLCAjMAotCW1vdglyMCwgcjMsIGxzciByMgotCXJzYm1pCXIwLCByMCwgIzAKLQltb3YJcGMsIGxyCi0KLUxkaXYwOgotCi0Jc3RyCWxyLCBbc3AsICMtNF0hCi0JYmwJX19kaXYwCi0JbW92CXIwLCAjMAkJCUAgQWJvdXQgYXMgd3JvbmcgYXMgaXQgY291bGQgYmUuCi0JbGRyCXBjLCBbc3BdLCAjNApkaWZmIC0tZ2l0IGEvbGliX2FybS9fYXNocmRpMy5TIGIvbGliX2FybS9fbHNocmRpMy5TCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGxpYl9hcm0vX2FzaHJkaTMuUwpyZW5hbWUgdG8gbGliX2FybS9fbHNocmRpMy5TCmluZGV4IDVlZGJjYjMuLmU3ZmE3OTkgMTAwNjQ0Ci0tLSBhL2xpYl9hcm0vX2FzaHJkaTMuUworKysgYi9saWJfYXJtL19sc2hyZGkzLlMKQEAgLTM0LDEzICszNCwxNSBAQAogI2RlZmluZSBhaCByMQogI2VuZGlmCiAKLS5nbG9ibCBfX2FzaHJkaTMKLV9fYXNocmRpMzoKKy5nbG9ibCBfX2xzaHJkaTMKKy5nbG9ibCBfX2FlYWJpX2xsc3IKK19fbHNocmRpMzoKK19fYWVhYmlfbGxzcjoKIAogCXN1YnMJcjMsIHIyLCAjMzIKIAlyc2IJaXAsIHIyLCAjMzIKIAltb3ZtaQlhbCwgYWwsIGxzciByMgotCW1vdnBsCWFsLCBhaCwgYXNyIHIzCisJbW92cGwJYWwsIGFoLCBsc3IgcjMKIAlvcnJtaQlhbCwgYWwsIGFoLCBsc2wgaXAKLQltb3YJYWgsIGFoLCBhc3IgcjIKKwltb3YJYWgsIGFoLCBsc3IgcjIKIAltb3YJcGMsIGxyCmRpZmYgLS1naXQgYS9saWJfYXJtL19tb2RzaTMuUyBiL2xpYl9hcm0vX21vZHNpMy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzljNTg0Li4wMDAwMDAwCi0tLSBhL2xpYl9hcm0vX21vZHNpMy5TCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotCi0ubWFjcm8gQVJNX01PRF9CT0RZIGRpdmlkZW5kLCBkaXZpc29yLCBvcmRlciwgc3BhcmUKLQotI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1Ci0KLQljbHoJXG9yZGVyLCBcZGl2aXNvcgotCWNseglcc3BhcmUsIFxkaXZpZGVuZAotCXN1Yglcb3JkZXIsIFxvcmRlciwgXHNwYXJlCi0JbW92CVxkaXZpc29yLCBcZGl2aXNvciwgbHNsIFxvcmRlcgotCi0jZWxzZQotCi0JbW92CVxvcmRlciwgIzAKLQotCUAgVW5sZXNzIHRoZSBkaXZpc29yIGlzIHZlcnkgYmlnLCBzaGlmdCBpdCB1cCBpbiBtdWx0aXBsZXMgb2YKLQlAIGZvdXIgYml0cywgc2luY2UgdGhpcyBpcyB0aGUgYW1vdW50IG9mIHVud2luZGluZyBpbiB0aGUgbWFpbgotCUAgZGl2aXNpb24gbG9vcC4gIENvbnRpbnVlIHNoaWZ0aW5nIHVudGlsIHRoZSBkaXZpc29yIGlzCi0JQCBsYXJnZXIgdGhhbiB0aGUgZGl2aWRlbmQuCi0xOgljbXAJXGRpdmlzb3IsICMweDEwMDAwMDAwCi0JY21wbG8JXGRpdmlzb3IsIFxkaXZpZGVuZAotCW1vdmxvCVxkaXZpc29yLCBcZGl2aXNvciwgbHNsICM0Ci0JYWRkbG8JXG9yZGVyLCBcb3JkZXIsICM0Ci0JYmxvCTFiCi0KLQlAIEZvciB2ZXJ5IGJpZyBkaXZpc29ycywgd2UgbXVzdCBzaGlmdCBpdCBhIGJpdCBhdCBhIHRpbWUsIG9yCi0JQCB3ZSB3aWxsIGJlIGluIGRhbmdlciBvZiBvdmVyZmxvd2luZy4KLTE6CWNtcAlcZGl2aXNvciwgIzB4ODAwMDAwMDAKLQljbXBsbwlcZGl2aXNvciwgXGRpdmlkZW5kCi0JbW92bG8JXGRpdmlzb3IsIFxkaXZpc29yLCBsc2wgIzEKLQlhZGRsbwlcb3JkZXIsIFxvcmRlciwgIzEKLQlibG8JMWIKLQotI2VuZGlmCi0KLQlAIFBlcmZvcm0gYWxsIG5lZWRlZCBzdWJzdHJhY3Rpb25zIHRvIGtlZXAgb25seSB0aGUgcmVtaW5kZXIuCi0JQCBEbyBjb21wYXJpc29ucyBpbiBiYXRjaCBvZiA0IGZpcnN0LgotCXN1YnMJXG9yZGVyLCBcb3JkZXIsICMzCQlAIHllcywgMyBpcyBpbnRlbmRlZCBoZXJlCi0JYmx0CTJmCi0KLTE6CWNtcAlcZGl2aWRlbmQsIFxkaXZpc29yCi0Jc3ViaHMJXGRpdmlkZW5kLCBcZGl2aWRlbmQsIFxkaXZpc29yCi0JY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzEKLQlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMQotCWNtcAlcZGl2aWRlbmQsIFxkaXZpc29yLCAgbHNyICMyCi0Jc3ViaHMJXGRpdmlkZW5kLCBcZGl2aWRlbmQsIFxkaXZpc29yLCBsc3IgIzIKLQljbXAJXGRpdmlkZW5kLCBcZGl2aXNvciwgIGxzciAjMwotCXN1YmhzCVxkaXZpZGVuZCwgXGRpdmlkZW5kLCBcZGl2aXNvciwgbHNyICMzCi0JY21wCVxkaXZpZGVuZCwgIzEKLQltb3YJXGRpdmlzb3IsIFxkaXZpc29yLCBsc3IgIzQKLQlzdWJnZXMJXG9yZGVyLCBcb3JkZXIsICM0Ci0JYmdlCTFiCi0KLQl0c3QJXG9yZGVyLCAjMwotCXRlcW5lCVxkaXZpZGVuZCwgIzAKLQliZXEJNWYKLQotCUAgRWl0aGVyIDEsIDIgb3IgMyBjb21wYXJpc29uL3N1YnN0cmFjdGlvbnMgYXJlIGxlZnQuCi0yOgljbW4JXG9yZGVyLCAjMgotCWJsdAk0ZgotCWJlcQkzZgotCWNtcAlcZGl2aWRlbmQsIFxkaXZpc29yCi0Jc3ViaHMJXGRpdmlkZW5kLCBcZGl2aWRlbmQsIFxkaXZpc29yCi0JbW92CVxkaXZpc29yLCAgXGRpdmlzb3IsICBsc3IgIzEKLTM6CWNtcAlcZGl2aWRlbmQsIFxkaXZpc29yCi0Jc3ViaHMJXGRpdmlkZW5kLCBcZGl2aWRlbmQsIFxkaXZpc29yCi0JbW92CVxkaXZpc29yLCAgXGRpdmlzb3IsICBsc3IgIzEKLTQ6CWNtcAlcZGl2aWRlbmQsIFxkaXZpc29yCi0Jc3ViaHMJXGRpdmlkZW5kLCBcZGl2aWRlbmQsIFxkaXZpc29yCi01OgotLmVuZG0KLQotCS5hbGlnbgk1Ci0uZ2xvYmwgX19tb2RzaTMKLV9fbW9kc2kzOgotCWNtcAlyMSwgIzAKLQliZXEJTGRpdjAKLQlyc2JtaQlyMSwgcjEsICMwCQkJQCBsb29wcyBiZWxvdyB1c2UgdW5zaWduZWQuCi0JbW92cwlpcCwgcjAJCQkJQCBwcmVzZXJ2ZSBzaWduIG9mIGRpdmlkZW5kCi0JcnNibWkJcjAsIHIwLCAjMAkJCUAgaWYgbmVnYXRpdmUgbWFrZSBwb3NpdGl2ZQotCXN1YnMJcjIsIHIxLCAjMQkJCUAgY29tcGFyZSBkaXZpc29yIHdpdGggMQotCWNtcG5lCXIwLCByMQkJCQlAIGNvbXBhcmUgZGl2aWRlbmQgd2l0aCBkaXZpc29yCi0JbW92ZXEJcjAsICMwCi0JdHN0aGkJcjEsIHIyCQkJCUAgc2VlIGlmIGRpdmlzb3IgaXMgcG93ZXIgb2YgMgotCWFuZGVxCXIwLCByMCwgcjIKLQlibHMJMTBmCi0KLQlBUk1fTU9EX0JPRFkgcjAsIHIxLCByMiwgcjMKLQotMTA6CWNtcAlpcCwgIzAKLQlyc2JtaQlyMCwgcjAsICMwCi0JbW92CXBjLCBscgotCi0KLUxkaXYwOgotCi0Jc3RyCWxyLCBbc3AsICMtNF0hCi0JYmwJX19kaXYwCi0JbW92CXIwLCAjMAkJCUAgQWJvdXQgYXMgd3JvbmcgYXMgaXQgY291bGQgYmUuCi0JbGRyCXBjLCBbc3BdLCAjNApkaWZmIC0tZ2l0IGEvbGliX2FybS9fdWRpdnNpMy5TIGIvbGliX2FybS9fdWRpdnNpMy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2RjZDQ4Li4wMDAwMDAwCi0tLSBhL2xpYl9hcm0vX3VkaXZzaTMuUworKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qICMgMSAibGliZ2NjMS5TIiAqLwotQCBsaWJnY2MxIHJvdXRpbmVzIGZvciBBUk0gY3B1LgotQCBEaXZpc2lvbiByb3V0aW5lcywgd3JpdHRlbiBieSBSaWNoYXJkIEVhcm5zaGF3LCAocmVhcm5zaGFAYXJtbHRkLmNvLnVrKQotZGl2aWRlbmQJLnJlcQlyMAotZGl2aXNvcgkJLnJlcQlyMQotcmVzdWx0CQkucmVxCXIyCi1jdXJiaXQJCS5yZXEJcjMKLS8qIGlwCQkucmVxCXIxMgkqLwotLyogc3AJCS5yZXEJcjEzCSovCi0vKiBscgkJLnJlcQlyMTQJKi8KLS8qIHBjCQkucmVxCXIxNQkqLwotCS50ZXh0Ci0JLmdsb2JsCSBfX3VkaXZzaTMKLQkudHlwZSAgX191ZGl2c2kzICAgICAgICxmdW5jdGlvbgotCS5hbGlnbgkwCi0gX191ZGl2c2kzICAgICAgOgotCWNtcAlkaXZpc29yLCAjMAotCWJlcQlMZGl2MAotCW1vdgljdXJiaXQsICMxCi0JbW92CXJlc3VsdCwgIzAKLQljbXAJZGl2aWRlbmQsIGRpdmlzb3IKLQliY2MJTGdvdF9yZXN1bHQKLUxvb3AxOgotCUAgVW5sZXNzIHRoZSBkaXZpc29yIGlzIHZlcnkgYmlnLCBzaGlmdCBpdCB1cCBpbiBtdWx0aXBsZXMgb2YKLQlAIGZvdXIgYml0cywgc2luY2UgdGhpcyBpcyB0aGUgYW1vdW50IG9mIHVud2luZGluZyBpbiB0aGUgbWFpbgotCUAgZGl2aXNpb24gbG9vcC4gIENvbnRpbnVlIHNoaWZ0aW5nIHVudGlsIHRoZSBkaXZpc29yIGlzCi0JQCBsYXJnZXIgdGhhbiB0aGUgZGl2aWRlbmQuCi0JY21wCWRpdmlzb3IsICMweDEwMDAwMDAwCi0JY21wY2MJZGl2aXNvciwgZGl2aWRlbmQKLQltb3ZjYwlkaXZpc29yLCBkaXZpc29yLCBsc2wgIzQKLQltb3ZjYwljdXJiaXQsIGN1cmJpdCwgbHNsICM0Ci0JYmNjCUxvb3AxCi1MYmlnbnVtOgotCUAgRm9yIHZlcnkgYmlnIGRpdmlzb3JzLCB3ZSBtdXN0IHNoaWZ0IGl0IGEgYml0IGF0IGEgdGltZSwgb3IKLQlAIHdlIHdpbGwgYmUgaW4gZGFuZ2VyIG9mIG92ZXJmbG93aW5nLgotCWNtcAlkaXZpc29yLCAjMHg4MDAwMDAwMAotCWNtcGNjCWRpdmlzb3IsIGRpdmlkZW5kCi0JbW92Y2MJZGl2aXNvciwgZGl2aXNvciwgbHNsICMxCi0JbW92Y2MJY3VyYml0LCBjdXJiaXQsIGxzbCAjMQotCWJjYwlMYmlnbnVtCi1Mb29wMzoKLQlAIFRlc3QgZm9yIHBvc3NpYmxlIHN1YnRyYWN0aW9ucywgYW5kIG5vdGUgd2hpY2ggYml0cwotCUAgYXJlIGRvbmUgaW4gdGhlIHJlc3VsdC4gIE9uIHRoZSBmaW5hbCBwYXNzLCB0aGlzIG1heSBzdWJ0cmFjdAotCUAgdG9vIG11Y2ggZnJvbSB0aGUgZGl2aWRlbmQsIGJ1dCB0aGUgcmVzdWx0IHdpbGwgYmUgb2ssIHNpbmNlIHRoZQotCUAgImJpdCIgd2lsbCBoYXZlIGJlZW4gc2hpZnRlZCBvdXQgYXQgdGhlIGJvdHRvbS4KLQljbXAJZGl2aWRlbmQsIGRpdmlzb3IKLQlzdWJjcwlkaXZpZGVuZCwgZGl2aWRlbmQsIGRpdmlzb3IKLQlvcnJjcwlyZXN1bHQsIHJlc3VsdCwgY3VyYml0Ci0JY21wCWRpdmlkZW5kLCBkaXZpc29yLCBsc3IgIzEKLQlzdWJjcwlkaXZpZGVuZCwgZGl2aWRlbmQsIGRpdmlzb3IsIGxzciAjMQotCW9ycmNzCXJlc3VsdCwgcmVzdWx0LCBjdXJiaXQsIGxzciAjMQotCWNtcAlkaXZpZGVuZCwgZGl2aXNvciwgbHNyICMyCi0Jc3ViY3MJZGl2aWRlbmQsIGRpdmlkZW5kLCBkaXZpc29yLCBsc3IgIzIKLQlvcnJjcwlyZXN1bHQsIHJlc3VsdCwgY3VyYml0LCBsc3IgIzIKLQljbXAJZGl2aWRlbmQsIGRpdmlzb3IsIGxzciAjMwotCXN1YmNzCWRpdmlkZW5kLCBkaXZpZGVuZCwgZGl2aXNvciwgbHNyICMzCi0Jb3JyY3MJcmVzdWx0LCByZXN1bHQsIGN1cmJpdCwgbHNyICMzCi0JY21wCWRpdmlkZW5kLCAjMAkJCUAgRWFybHkgdGVybWluYXRpb24/Ci0JbW92bmVzCWN1cmJpdCwgY3VyYml0LCBsc3IgIzQJCUAgTm8sIGFueSBtb3JlIGJpdHMgdG8gZG8/Ci0JbW92bmUJZGl2aXNvciwgZGl2aXNvciwgbHNyICM0Ci0JYm5lCUxvb3AzCi1MZ290X3Jlc3VsdDoKLQltb3YJcjAsIHJlc3VsdAotCW1vdiAJcGMsIGxyCi1MZGl2MDoKLQlzdHIJbHIsIFtzcCwgIy00XSEKLQlibAkgX19kaXYwICAgICAgIChQTFQpCi0JbW92CXIwLCAjMAkJCUAgYWJvdXQgYXMgd3JvbmcgYXMgaXQgY291bGQgYmUKLQlsZG1pYQlzcCEsIHtwY30KLQkuc2l6ZSAgX191ZGl2c2kzICAgICAgICwgLiAtICBfX3VkaXZzaTMKLS8qICMgMjM1ICJsaWJnY2MxLlMiICovCi0vKiAjIDMyMCAibGliZ2NjMS5TIiAqLwotLyogIyA0MjEgImxpYmdjYzEuUyIgKi8KLS8qICMgNDMzICJsaWJnY2MxLlMiICovCi0vKiAjIDQ1NiAibGliZ2NjMS5TIiAqLwotLyogIyA1MDAgImxpYmdjYzEuUyIgKi8KLS8qICMgNTgwICJsaWJnY2MxLlMiICovCmRpZmYgLS1naXQgYS9saWJfYXJtL191bW9kc2kzLlMgYi9saWJfYXJtL191bW9kc2kzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YWViZTguLjAwMDAwMDAKLS0tIGEvbGliX2FybS9fdW1vZHNpMy5TCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyogIyAxICJsaWJnY2MxLlMiICovCi1AIGxpYmdjYzEgcm91dGluZXMgZm9yIEFSTSBjcHUuCi1AIERpdmlzaW9uIHJvdXRpbmVzLCB3cml0dGVuIGJ5IFJpY2hhcmQgRWFybnNoYXcsIChyZWFybnNoYUBhcm1sdGQuY28udWspCi0vKiAjIDE0NSAibGliZ2NjMS5TIiAqLwotZGl2aWRlbmQJLnJlcQlyMAotZGl2aXNvcgkJLnJlcQlyMQotb3ZlcmRvbmUJLnJlcQlyMgotY3VyYml0CQkucmVxCXIzCi0vKiBpcAkJLnJlcQlyMTIJKi8KLS8qIHNwCQkucmVxCXIxMwkqLwotLyogbHIJCS5yZXEJcjE0CSovCi0vKiBwYwkJLnJlcQlyMTUJKi8KLQkudGV4dAotCS5nbG9ibAkgX191bW9kc2kzCi0JLnR5cGUgIF9fdW1vZHNpMyAgICAgICAsZnVuY3Rpb24KLQkuYWxpZ24gMAotIF9fdW1vZHNpMyAgICAgIDoKLQljbXAJZGl2aXNvciwgIzAKLQliZXEJTGRpdjAKLQltb3YJY3VyYml0LCAjMQotCWNtcAlkaXZpZGVuZCwgZGl2aXNvcgotCW1vdmNjICAJcGMsIGxyCi1Mb29wMToKLQlAIFVubGVzcyB0aGUgZGl2aXNvciBpcyB2ZXJ5IGJpZywgc2hpZnQgaXQgdXAgaW4gbXVsdGlwbGVzIG9mCi0JQCBmb3VyIGJpdHMsIHNpbmNlIHRoaXMgaXMgdGhlIGFtb3VudCBvZiB1bndpbmRpbmcgaW4gdGhlIG1haW4KLQlAIGRpdmlzaW9uIGxvb3AuICBDb250aW51ZSBzaGlmdGluZyB1bnRpbCB0aGUgZGl2aXNvciBpcwotCUAgbGFyZ2VyIHRoYW4gdGhlIGRpdmlkZW5kLgotCWNtcAlkaXZpc29yLCAjMHgxMDAwMDAwMAotCWNtcGNjCWRpdmlzb3IsIGRpdmlkZW5kCi0JbW92Y2MJZGl2aXNvciwgZGl2aXNvciwgbHNsICM0Ci0JbW92Y2MJY3VyYml0LCBjdXJiaXQsIGxzbCAjNAotCWJjYwlMb29wMQotTGJpZ251bToKLQlAIEZvciB2ZXJ5IGJpZyBkaXZpc29ycywgd2UgbXVzdCBzaGlmdCBpdCBhIGJpdCBhdCBhIHRpbWUsIG9yCi0JQCB3ZSB3aWxsIGJlIGluIGRhbmdlciBvZiBvdmVyZmxvd2luZy4KLQljbXAJZGl2aXNvciwgIzB4ODAwMDAwMDAKLQljbXBjYwlkaXZpc29yLCBkaXZpZGVuZAotCW1vdmNjCWRpdmlzb3IsIGRpdmlzb3IsIGxzbCAjMQotCW1vdmNjCWN1cmJpdCwgY3VyYml0LCBsc2wgIzEKLQliY2MJTGJpZ251bQotTG9vcDM6Ci0JQCBUZXN0IGZvciBwb3NzaWJsZSBzdWJ0cmFjdGlvbnMuICBPbiB0aGUgZmluYWwgcGFzcywgdGhpcyBtYXkKLQlAIHN1YnRyYWN0IHRvbyBtdWNoIGZyb20gdGhlIGRpdmlkZW5kLCBzbyBrZWVwIHRyYWNrIG9mIHdoaWNoCi0JQCBzdWJ0cmFjdGlvbnMgYXJlIGRvbmUsIHdlIGNhbiBmaXggdGhlbSB1cCBhZnRlcndhcmRzLi4uCi0JbW92CW92ZXJkb25lLCAjMAotCWNtcAlkaXZpZGVuZCwgZGl2aXNvcgotCXN1YmNzCWRpdmlkZW5kLCBkaXZpZGVuZCwgZGl2aXNvcgotCWNtcAlkaXZpZGVuZCwgZGl2aXNvciwgbHNyICMxCi0Jc3ViY3MJZGl2aWRlbmQsIGRpdmlkZW5kLCBkaXZpc29yLCBsc3IgIzEKLQlvcnJjcwlvdmVyZG9uZSwgb3ZlcmRvbmUsIGN1cmJpdCwgcm9yICMxCi0JY21wCWRpdmlkZW5kLCBkaXZpc29yLCBsc3IgIzIKLQlzdWJjcwlkaXZpZGVuZCwgZGl2aWRlbmQsIGRpdmlzb3IsIGxzciAjMgotCW9ycmNzCW92ZXJkb25lLCBvdmVyZG9uZSwgY3VyYml0LCByb3IgIzIKLQljbXAJZGl2aWRlbmQsIGRpdmlzb3IsIGxzciAjMwotCXN1YmNzCWRpdmlkZW5kLCBkaXZpZGVuZCwgZGl2aXNvciwgbHNyICMzCi0Jb3JyY3MJb3ZlcmRvbmUsIG92ZXJkb25lLCBjdXJiaXQsIHJvciAjMwotCW1vdglpcCwgY3VyYml0Ci0JY21wCWRpdmlkZW5kLCAjMAkJCUAgRWFybHkgdGVybWluYXRpb24/Ci0JbW92bmVzCWN1cmJpdCwgY3VyYml0LCBsc3IgIzQJCUAgTm8sIGFueSBtb3JlIGJpdHMgdG8gZG8/Ci0JbW92bmUJZGl2aXNvciwgZGl2aXNvciwgbHNyICM0Ci0JYm5lCUxvb3AzCi0JQCBBbnkgc3VidHJhY3Rpb25zIHRoYXQgd2Ugc2hvdWxkIG5vdCBoYXZlIGRvbmUgd2lsbCBiZSByZWNvcmRlZCBpbgotCUAgdGhlIHRvcCB0aHJlZSBiaXRzIG9mICJvdmVyZG9uZSIuICBFeGFjdGx5IHdoaWNoIHdlcmUgbm90IG5lZWRlZAotCUAgYXJlIGdvdmVybmVkIGJ5IHRoZSBwb3NpdGlvbiBvZiB0aGUgYml0LCBzdG9yZWQgaW4gaXAuCi0JQCBJZiB3ZSB0ZXJtaW5hdGVkIGVhcmx5LCBiZWNhdXNlIGRpdmlkZW5kIGJlY2FtZSB6ZXJvLAotCUAgdGhlbiBub25lIG9mIHRoZSBiZWxvdyB3aWxsIG1hdGNoLCBzaW5jZSB0aGUgYml0IGluIGlwIHdpbGwgbm90IGJlCi0JQCBpbiB0aGUgYm90dG9tIG5pYmJsZS4KLQlhbmRzCW92ZXJkb25lLCBvdmVyZG9uZSwgIzB4ZTAwMDAwMDAKLQltb3ZlcSAgCXBjLCBscgkJCQlAIE5vIGZpeHVwcyBuZWVkZWQKLQl0c3QJb3ZlcmRvbmUsIGlwLCByb3IgIzMKLQlhZGRuZQlkaXZpZGVuZCwgZGl2aWRlbmQsIGRpdmlzb3IsIGxzciAjMwotCXRzdAlvdmVyZG9uZSwgaXAsIHJvciAjMgotCWFkZG5lCWRpdmlkZW5kLCBkaXZpZGVuZCwgZGl2aXNvciwgbHNyICMyCi0JdHN0CW92ZXJkb25lLCBpcCwgcm9yICMxCi0JYWRkbmUJZGl2aWRlbmQsIGRpdmlkZW5kLCBkaXZpc29yLCBsc3IgIzEKLQltb3YgCXBjLCBscgotTGRpdjA6Ci0Jc3RyCWxyLCBbc3AsICMtNF0hCi0JYmwJIF9fZGl2MCAgICAgICAoUExUKQotCW1vdglyMCwgIzAJCQlAIGFib3V0IGFzIHdyb25nIGFzIGl0IGNvdWxkIGJlCi0JbGRtaWEJc3AhLCB7cGN9Ci0JLnNpemUgIF9fdW1vZHNpMyAgICAgICAsIC4gLSAgX191bW9kc2kzCi0vKiAjIDMyMCAibGliZ2NjMS5TIiAqLwotLyogIyA0MjEgImxpYmdjYzEuUyIgKi8KLS8qICMgNDMzICJsaWJnY2MxLlMiICovCi0vKiAjIDQ1NiAibGliZ2NjMS5TIiAqLwotLyogIyA1MDAgImxpYmdjYzEuUyIgKi8KLS8qICMgNTgwICJsaWJnY2MxLlMiICovCmRpZmYgLS1naXQgYS9saWJfYXJtL2FybWxpbnV4LmMgYi9saWJfYXJtL2FybWxpbnV4LmMKaW5kZXggNTZiN2ZjYS4uNDM1NDdiOSAxMDA2NDQKLS0tIGEvbGliX2FybS9hcm1saW51eC5jCisrKyBiL2xpYl9hcm0vYXJtbGludXguYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJfQogI2VuZGlmCiAKLQljbGVhbnVwX2JlZm9yZV9saW51eCAoKTsKKwkvL2NsZWFudXBfYmVmb3JlX2xpbnV4ICgpOwogCiAJdGhlS2VybmVsICgwLCBiZC0+YmlfYXJjaF9udW1iZXIsIGJkLT5iaV9ib290X3BhcmFtcyk7CiB9CmRpZmYgLS1naXQgYS9saWJfYXJtL19hc2hsZGkzLlMgYi9saWJfYXJtL2FzaGxkaTMuUwpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBsaWJfYXJtL19hc2hsZGkzLlMKcmVuYW1lIHRvIGxpYl9hcm0vYXNobGRpMy5TCmluZGV4IGRlNDQwM2QuLjE0MTBhZGYgMTAwNjQ0Ci0tLSBhL2xpYl9hcm0vX2FzaGxkaTMuUworKysgYi9saWJfYXJtL2FzaGxkaTMuUwpAQCAtMjUsNiArMjUsNyBAQAogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAogI2lmZGVmIF9fQVJNRUJfXwogI2RlZmluZSBhbCByMQpAQCAtMzQsOCArMzUsOCBAQAogI2RlZmluZSBhaCByMQogI2VuZGlmCiAKLS5nbG9ibCBfX2FzaGxkaTMKLV9fYXNobGRpMzoKK0VOVFJZKF9fYXNobGRpMykKK0VOVFJZKF9fYWVhYmlfbGxzbCkKIAogCXN1YnMJcjMsIHIyLCAjMzIKIAlyc2IJaXAsIHIyLCAjMzIKQEAgLTQ0LDMgKzQ1LDYgQEAKIAlvcnJtaQlhaCwgYWgsIGFsLCBsc3IgaXAKIAltb3YJYWwsIGFsLCBsc2wgcjIKIAltb3YJcGMsIGxyCisKK0VORFBST0MoX19hc2hsZGkzKQorRU5EUFJPQyhfX2FlYWJpX2xsc2wpCmRpZmYgLS1naXQgYS9saWJfYXJtL19hc2hyZGkzLlMgYi9saWJfYXJtL2FzaHJkaTMuUwpzaW1pbGFyaXR5IGluZGV4IDkzJQpjb3B5IGZyb20gbGliX2FybS9fYXNocmRpMy5TCmNvcHkgdG8gbGliX2FybS9hc2hyZGkzLlMKaW5kZXggNWVkYmNiMy4uNmU5NjI4MCAxMDA2NDQKLS0tIGEvbGliX2FybS9fYXNocmRpMy5TCisrKyBiL2xpYl9hcm0vYXNocmRpMy5TCkBAIC0yNSw2ICsyNSw3IEBACiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLwogCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAjaWZkZWYgX19BUk1FQl9fCiAjZGVmaW5lIGFsIHIxCkBAIC0zNCw4ICszNSw4IEBACiAjZGVmaW5lIGFoIHIxCiAjZW5kaWYKIAotLmdsb2JsIF9fYXNocmRpMwotX19hc2hyZGkzOgorRU5UUlkoX19hc2hyZGkzKQorRU5UUlkoX19hZWFiaV9sYXNyKQogCiAJc3VicwlyMywgcjIsICMzMgogCXJzYglpcCwgcjIsICMzMgpAQCAtNDQsMyArNDUsNiBAQAogCW9ycm1pCWFsLCBhbCwgYWgsIGxzbCBpcAogCW1vdglhaCwgYWgsIGFzciByMgogCW1vdglwYywgbHIKKworRU5EUFJPQyhfX2FzaHJkaTMpCitFTkRQUk9DKF9fYWVhYmlfbGFzcikKZGlmZiAtLWdpdCBhL2xpYl9hcm0vYm9hcmQuYyBiL2xpYl9hcm0vYm9hcmQuYwppbmRleCBiYWJjMjU0Li4wMTBlOGNjIDEwMDY0NAotLS0gYS9saWJfYXJtL2JvYXJkLmMKKysrIGIvbGliX2FybS9ib2FyZC5jCkBAIC0yMTQsMTIgKzIxNCwxNiBAQAogaW50IHByaW50X2NwdWluZm8gKHZvaWQpOyAvKiB0ZXN0LW9ubHkgKi8KIAogaW5pdF9mbmNfdCAqaW5pdF9zZXF1ZW5jZVtdID0geworI2lmIDAKIAljcHVfaW5pdCwJCS8qIGJhc2ljIGNwdSBkZXBlbmRlbnQgc2V0dXAgKi8KKyNlbmRpZgogCWJvYXJkX2luaXQsCQkvKiBiYXNpYyBib2FyZCBkZXBlbmRlbnQgc2V0dXAgKi8KIAlpbnRlcnJ1cHRfaW5pdCwJCS8qIHNldCB1cCBleGNlcHRpb25zICovCiAJZW52X2luaXQsCQkvKiBpbml0aWFsaXplIGVudmlyb25tZW50ICovCisjaWYgMAogCWluaXRfYmF1ZHJhdGUsCQkvKiBpbml0aWFsemUgYmF1ZHJhdGUgc2V0dGluZ3MgKi8KIAlzZXJpYWxfaW5pdCwJCS8qIHNlcmlhbCBjb21tdW5pY2F0aW9ucyBzZXR1cCAqLworI2VuZGlmCiAJY29uc29sZV9pbml0X2YsCQkvKiBzdGFnZSAxIGluaXQgb2YgY29uc29sZSAqLwogCWRpc3BsYXlfYmFubmVyLAkJLyogc2F5IHRoYXQgd2UgYXJlIGhlcmUgKi8KICNpZiBkZWZpbmVkKENPTkZJR19ESVNQTEFZX0NQVUlORk8pCkBAIC0yMjgsMTEgKzIzMiwxOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX0RJU1BMQVlfQk9BUkRJTkZPKQogCWNoZWNrYm9hcmQsCQkvKiBkaXNwbGF5IGJvYXJkIGluZm8gKi8KICNlbmRpZgorI2lmIDAKIAlkcmFtX2luaXQsCQkvKiBjb25maWd1cmUgYXZhaWxhYmxlIFJBTSBiYW5rcyAqLwogCWRpc3BsYXlfZHJhbV9jb25maWcsCisjZW5kaWYKIAlOVUxMLAogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX004MzI0WEcpIHx8IGRlZmluZWQoQ09ORklHX004MzI1WEcpIHx8IGRlZmluZWQoQ09ORklHX004MzI2WEcpCit1bnNpZ25lZCBjaGFyIGNvbWNlcnRvX3BhcnRfbm9bOF07CisjZGVmaW5lIENPTUNFUlRPX1BBUlRfTUFHSUMgMHg0RDUzNTA0NAorI2VuZGlmCisKIHZvaWQgc3RhcnRfYXJtYm9vdCAodm9pZCkKIHsKIAlpbml0X2ZuY190ICoqaW5pdF9mbmNfcHRyOwpAQCAtMjUzLDcgKzI2NCw3IEBACiAJZ2QtPmJkID0gKGJkX3QqKSgoY2hhciopZ2QgLSBzaXplb2YoYmRfdCkpOwogCW1lbXNldCAoZ2QtPmJkLCAwLCBzaXplb2YgKGJkX3QpKTsKIAotCW1vbml0b3JfZmxhc2hfbGVuID0gX2Jzc19zdGFydCAtIF9hcm1ib290X3N0YXJ0OworCS8vbW9uaXRvcl9mbGFzaF9sZW4gPSBfYnNzX3N0YXJ0IC0gX2FybWJvb3Rfc3RhcnQ7CiAKIAlmb3IgKGluaXRfZm5jX3B0ciA9IGluaXRfc2VxdWVuY2U7ICppbml0X2ZuY19wdHI7ICsraW5pdF9mbmNfcHRyKSB7CiAJCWlmICgoKmluaXRfZm5jX3B0cikoKSAhPSAwKSB7CkBAIC0yNjEsNiArMjcyLDE4IEBACiAJCX0KIAl9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NODMyNFhHKSB8fCBkZWZpbmVkKENPTkZJR19NODMyNVhHKSB8fCBkZWZpbmVkKENPTkZJR19NODMyNlhHKQorICAgICAgICAvKiBDaGVjayBmb3IgdGhlIG1hZ2ljIG51bWJlciBpZiBDb21jZXJ0byBQYXJ0IE5vIGlzIHByb2dyYW1tZWQgYnkKKyAJICogZWVwcm9tIG9yIG5vdCAqLworCWlmKF9fbGU2NF90b19jcHUoKih1NjQqKShBUkFNX0JBU0VBRERSKzB4MTAwMDApKSAgPT0gQ09NQ0VSVE9fUEFSVF9NQUdJQykKKwl7CisJCW1lbWNweShjb21jZXJ0b19wYXJ0X25vLCh1bnNpZ25lZCBjaGFyKikoQVJBTV9CQVNFQUREUisweDEwMTAwKSwgOCk7CisJfQorCWVsc2UgeworCQlzdHJjcHkoY29tY2VydG9fcGFydF9ubyxDT01DRVJUT19QQVJUX05PKTsKKwl9CisjZW5kaWYKKwogI2lmbmRlZiBDRkdfTk9fRkxBU0gKIAkvKiBjb25maWd1cmUgYXZhaWxhYmxlIEZMQVNIIGJhbmtzICovCiAJc2l6ZSA9IGZsYXNoX2luaXQgKCk7CkBAIC0zMTMsNyArMzM2LDcgQEAKIAkvKiBtdXN0IGRvIHRoaXMgYWZ0ZXIgdGhlIGZyYW1lYnVmZmVyIGlzIGFsbG9jYXRlZCAqLwogCWRydl92ZmRfaW5pdCgpOwogI2VuZGlmIC8qIENPTkZJR19WRkQgKi8KLQorI2lmIDAKIAkvKiBJUCBBZGRyZXNzICovCiAJZ2QtPmJkLT5iaV9pcF9hZGRyID0gZ2V0ZW52X0lQYWRkciAoImlwYWRkciIpOwogCkBAIC0zNDQsNyArMzY3LDcgQEAKIAkJfQogI2VuZGlmCiAJfQotCisjZW5kaWYKIAlkZXZpY2VzX2luaXQgKCk7CS8qIGdldCB0aGUgZGV2aWNlcyBsaXN0IGdvaW5nLiAqLwogCiAjaWZkZWYgQ09ORklHX0NNQ19QVTIKQEAgLTM2Nyw3ICszOTAsNyBAQAogI2lmZGVmIENPTkZJR19EUklWRVJfQ1M4OTAwCiAJY3M4OTAwX2dldF9lbmV0YWRkciAoZ2QtPmJkLT5iaV9lbmV0YWRkcik7CiAjZW5kaWYKLQorI2lmIDAKICNpZiBkZWZpbmVkKENPTkZJR19EUklWRVJfU01DOTExMTEpIHx8IGRlZmluZWQgKENPTkZJR19EUklWRVJfTEFOOTFDOTYpCiAJaWYgKGdldGVudiAoImV0aGFkZHIiKSkgewogCQlzbWNfc2V0X21hY19hZGRyKGdkLT5iZC0+YmlfZW5ldGFkZHIpOwpAQCAtMzgzLDcgKzQwNiw3IEBACiAJCWNvcHlfZmlsZW5hbWUgKEJvb3RGaWxlLCBzLCBzaXplb2YgKEJvb3RGaWxlKSk7CiAJfQogI2VuZGlmCS8qIENGR19DTURfTkVUICovCi0KKyNlbmRpZgogI2lmZGVmIEJPQVJEX0xBVEVfSU5JVAogCWJvYXJkX2xhdGVfaW5pdCAoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliX2FybS9pbnRlcnJ1cHRzLmMgYi9saWJfYXJtL2ludGVycnVwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ2ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliX2FybS9pbnRlcnJ1cHRzLmMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIFRleGFzIEluc3RydW1lbnRzIDx3d3cudGkuY29tPgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMgorICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CisgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIEFsZXggWnVlcGtlIDxhenVAc3lzZ28uZGU+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAyLTIwMDQKKyAqIEdhcnkgSmVubmVqb2huLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8Z2FyeWpAZGVueC5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFBoaWxpcHBlIFJvYmluLCBBUk0gTHRkLiA8cGhpbGlwcGUucm9iaW5AYXJtLmNvbT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3Byb2MtYXJtdi9wdHJhY2UuaD4KKworI2lmZGVmIENPTkZJR19VU0VfSVJRCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworaW50IGludGVycnVwdF9pbml0ICh2b2lkKQoreworCS8qCisJICogc2V0dXAgdXAgc3RhY2tzIGlmIG5lY2Vzc2FyeQorCSAqLworCUlSUV9TVEFDS19TVEFSVCA9IF9hcm1ib290X3N0YXJ0IC0gQ09ORklHX1NZU19NQUxMT0NfTEVOIC0gQ09ORklHX1NZU19HQkxfREFUQV9TSVpFIC0gNDsKKwlGSVFfU1RBQ0tfU1RBUlQgPSBJUlFfU1RBQ0tfU1RBUlQgLSBDT05GSUdfU1RBQ0tTSVpFX0lSUTsKKworCXJldHVybiBhcmNoX2ludGVycnVwdF9pbml0KCk7Cit9CisKKy8qIGVuYWJsZSBJUlEgaW50ZXJydXB0cyAqLwordm9pZCBlbmFibGVfaW50ZXJydXB0cyAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1ycyAlMCwgY3BzclxuIgorCQkJICAgICAiYmljICUwLCAlMCwgIzB4ODBcbiIKKwkJCSAgICAgIm1zciBjcHNyX2MsICUwIgorCQkJICAgICA6ICI9ciIgKHRlbXApCisJCQkgICAgIDoKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKKworLyoKKyAqIGRpc2FibGUgSVJRL0ZJUSBpbnRlcnJ1cHRzCisgKiByZXR1cm5zIHRydWUgaWYgaW50ZXJydXB0cyBoYWQgYmVlbiBlbmFibGVkIGJlZm9yZSB3ZSBkaXNhYmxlZCB0aGVtCisgKi8KK2ludCBkaXNhYmxlX2ludGVycnVwdHMgKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBvbGQsdGVtcDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXJzICUwLCBjcHNyXG4iCisJCQkgICAgICJvcnIgJTEsICUwLCAjMHhjMFxuIgorCQkJICAgICAibXNyIGNwc3JfYywgJTEiCisJCQkgICAgIDogIj1yIiAob2xkKSwgIj1yIiAodGVtcCkKKwkJCSAgICAgOgorCQkJICAgICA6ICJtZW1vcnkiKTsKKwlyZXR1cm4gKG9sZCAmIDB4ODApID09IDA7Cit9CisjZWxzZQordm9pZCBlbmFibGVfaW50ZXJydXB0cyAodm9pZCkKK3sKKwlyZXR1cm47Cit9CitpbnQgZGlzYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKwordm9pZCBiYWRfbW9kZSAodm9pZCkKK3sKKwlwYW5pYyAoIlJlc2V0dGluZyBDUFUgLi4uXG4iKTsKKwkvL3Jlc2V0X2NwdSAoMCk7Cit9CisKK3ZvaWQgc2hvd19yZWdzIChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbnN0IGNoYXIgKnByb2Nlc3Nvcl9tb2Rlc1tdID0geworCSJVU0VSXzI2IiwJIkZJUV8yNiIsCSJJUlFfMjYiLAkiU1ZDXzI2IiwKKwkiVUs0XzI2IiwJIlVLNV8yNiIsCSJVSzZfMjYiLAkiVUs3XzI2IiwKKwkiVUs4XzI2IiwJIlVLOV8yNiIsCSJVSzEwXzI2IiwJIlVLMTFfMjYiLAorCSJVSzEyXzI2IiwJIlVLMTNfMjYiLAkiVUsxNF8yNiIsCSJVSzE1XzI2IiwKKwkiVVNFUl8zMiIsCSJGSVFfMzIiLAkiSVJRXzMyIiwJIlNWQ18zMiIsCisJIlVLNF8zMiIsCSJVSzVfMzIiLAkiVUs2XzMyIiwJIkFCVF8zMiIsCisJIlVLOF8zMiIsCSJVSzlfMzIiLAkiVUsxMF8zMiIsCSJVTkRfMzIiLAorCSJVSzEyXzMyIiwJIlVLMTNfMzIiLAkiVUsxNF8zMiIsCSJTWVNfMzIiLAorCX07CisKKwlmbGFncyA9IGNvbmRpdGlvbl9jb2RlcyAocmVncyk7CisjaWYgMSAvLyBDSEFORFUKKwlwcmludGYgKCJwYyA6IFs8JTA4bHg+XQkgICBsciA6IFs8JTA4bHg+XVxuIgorCQkic3AgOiAlMDhseCAgaXAgOiAlMDhseAkgZnAgOiAlMDhseFxuIiwKKwkJaW5zdHJ1Y3Rpb25fcG9pbnRlciAocmVncyksCisJCXJlZ3MtPkFSTV9sciwgcmVncy0+QVJNX3NwLCByZWdzLT5BUk1faXAsIHJlZ3MtPkFSTV9mcCk7CisJcHJpbnRmICgicjEwOiAlMDhseCAgcjkgOiAlMDhseAkgcjggOiAlMDhseFxuIiwKKwkJcmVncy0+QVJNX3IxMCwgcmVncy0+QVJNX3I5LCByZWdzLT5BUk1fcjgpOworCXByaW50ZiAoInI3IDogJTA4bHggIHI2IDogJTA4bHgJIHI1IDogJTA4bHggIHI0IDogJTA4bHhcbiIsCisJCXJlZ3MtPkFSTV9yNywgcmVncy0+QVJNX3I2LCByZWdzLT5BUk1fcjUsIHJlZ3MtPkFSTV9yNCk7CisJcHJpbnRmICgicjMgOiAlMDhseCAgcjIgOiAlMDhseAkgcjEgOiAlMDhseCAgcjAgOiAlMDhseFxuIiwKKwkJcmVncy0+QVJNX3IzLCByZWdzLT5BUk1fcjIsIHJlZ3MtPkFSTV9yMSwgcmVncy0+QVJNX3IwKTsKKwlwcmludGYgKCJGbGFnczogJWMlYyVjJWMiLAorCQlmbGFncyAmIENDX05fQklUID8gJ04nIDogJ24nLAorCQlmbGFncyAmIENDX1pfQklUID8gJ1onIDogJ3onLAorCQlmbGFncyAmIENDX0NfQklUID8gJ0MnIDogJ2MnLCBmbGFncyAmIENDX1ZfQklUID8gJ1YnIDogJ3YnKTsKKwlwcmludGYgKCIgIElSUXMgJXMgIEZJUXMgJXMgIE1vZGUgJXMlc1xuIiwKKwkJaW50ZXJydXB0c19lbmFibGVkIChyZWdzKSA/ICJvbiIgOiAib2ZmIiwKKwkJZmFzdF9pbnRlcnJ1cHRzX2VuYWJsZWQgKHJlZ3MpID8gIm9uIiA6ICJvZmYiLAorCQlwcm9jZXNzb3JfbW9kZXNbcHJvY2Vzc29yX21vZGUgKHJlZ3MpXSwKKwkJdGh1bWJfbW9kZSAocmVncykgPyAiIChUKSIgOiAiIik7CisjZW5kaWYKK30KKwordm9pZCBkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24gKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50ZiAoInVuZGVmaW5lZCBpbnN0cnVjdGlvblxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKwordm9pZCBkb19zb2Z0d2FyZV9pbnRlcnJ1cHQgKHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCXByaW50ZiAoInNvZnR3YXJlIGludGVycnVwdFxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKwordm9pZCBkb19wcmVmZXRjaF9hYm9ydCAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgicHJlZmV0Y2ggYWJvcnRcbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisKK3ZvaWQgZG9fZGF0YV9hYm9ydCAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgiZGF0YSBhYm9ydFxuIik7CisJc2hvd19yZWdzIChwdF9yZWdzKTsKKwliYWRfbW9kZSAoKTsKK30KKwordm9pZCBkb19ub3RfdXNlZCAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgibm90IHVzZWRcbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisKK3ZvaWQgZG9fZmlxIChzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlwcmludGYgKCJmYXN0IGludGVycnVwdCByZXF1ZXN0XG4iKTsKKwlzaG93X3JlZ3MgKHB0X3JlZ3MpOworCWJhZF9tb2RlICgpOworfQorCisjaWZuZGVmIENPTkZJR19VU0VfSVJRCit2b2lkIGRvX2lycSAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJcHJpbnRmICgiaW50ZXJydXB0IHJlcXVlc3RcbiIpOworCXNob3dfcmVncyAocHRfcmVncyk7CisJYmFkX21vZGUgKCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYl9hcm0vbGliMWZ1bmNzLlMgYi9saWJfYXJtL2xpYjFmdW5jcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxN2IyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJfYXJtL2xpYjFmdW5jcy5TCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbGliL2xpYjFmdW5jcy5TOiBPcHRpbWl6ZWQgQVJNIGRpdmlzaW9uIHJvdXRpbmVzCisgKgorICogQXV0aG9yOiBOaWNvbGFzIFBpdHJlIDxuaWNvIGF0IGNhbS5vcmc+CisgKiAgIC0gY29udHJpYnV0ZWQgdG8gZ2NjLTMuNCBvbiBTZXAgMzAsIDIwMDMKKyAqICAgLSBhZGFwdGVkIGZvciB0aGUgTGludXgga2VybmVsIG9uIE9jdCAyLCAyMDAzCisgKi8KKworLyogQ29weXJpZ2h0IDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKK2xhdGVyIHZlcnNpb24uCisKK0luIGFkZGl0aW9uIHRvIHRoZSBwZXJtaXNzaW9ucyBpbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzIHlvdSB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBsaW5rIHRoZQorY29tcGlsZWQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaW50byBjb21iaW5hdGlvbnMgd2l0aCBvdGhlciBwcm9ncmFtcywKK2FuZCB0byBkaXN0cmlidXRlIHRob3NlIGNvbWJpbmF0aW9ucyB3aXRob3V0IGFueSByZXN0cmljdGlvbiBjb21pbmcKK2Zyb20gdGhlIHVzZSBvZiB0aGlzIGZpbGUuICAoVGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcmVzdHJpY3Rpb25zCitkbyBhcHBseSBpbiBvdGhlciByZXNwZWN0czsgZm9yIGV4YW1wbGUsIHRoZXkgY292ZXIgbW9kaWZpY2F0aW9uIG9mCit0aGUgZmlsZSwgYW5kIGRpc3RyaWJ1dGlvbiB3aGVuIG5vdCBsaW5rZWQgaW50byBhIGNvbWJpbmUKK2V4ZWN1dGFibGUuKQorCitUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisKKy5tYWNybyBBUk1fRElWX0JPRFkgZGl2aWRlbmQsIGRpdmlzb3IsIHJlc3VsdCwgY3VyYml0CisKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNQorCisJY2x6CVxjdXJiaXQsIFxkaXZpc29yCisJY2x6CVxyZXN1bHQsIFxkaXZpZGVuZAorCXN1YglccmVzdWx0LCBcY3VyYml0LCBccmVzdWx0CisJbW92CVxjdXJiaXQsICMxCisJbW92CVxkaXZpc29yLCBcZGl2aXNvciwgbHNsIFxyZXN1bHQKKwltb3YJXGN1cmJpdCwgXGN1cmJpdCwgbHNsIFxyZXN1bHQKKwltb3YJXHJlc3VsdCwgIzAKKwkKKyNlbHNlCisKKwlAIEluaXRpYWxseSBzaGlmdCB0aGUgZGl2aXNvciBsZWZ0IDMgYml0cyBpZiBwb3NzaWJsZSwKKwlAIHNldCBjdXJiaXQgYWNjb3JkaW5nbHkuICBUaGlzIGFsbG93cyBmb3IgY3VyYml0IHRvIGJlIGxvY2F0ZWQKKwlAIGF0IHRoZSBsZWZ0IGVuZCBvZiBlYWNoIDQgYml0IG5pYmJsZXMgaW4gdGhlIGRpdmlzaW9uIGxvb3AKKwlAIHRvIHNhdmUgb25lIGxvb3AgaW4gbW9zdCBjYXNlcy4KKwl0c3QJXGRpdmlzb3IsICMweGUwMDAwMDAwCisJbW92ZXEJXGRpdmlzb3IsIFxkaXZpc29yLCBsc2wgIzMKKwltb3ZlcQlcY3VyYml0LCAjOAorCW1vdm5lCVxjdXJiaXQsICMxCisKKwlAIFVubGVzcyB0aGUgZGl2aXNvciBpcyB2ZXJ5IGJpZywgc2hpZnQgaXQgdXAgaW4gbXVsdGlwbGVzIG9mCisJQCBmb3VyIGJpdHMsIHNpbmNlIHRoaXMgaXMgdGhlIGFtb3VudCBvZiB1bndpbmRpbmcgaW4gdGhlIG1haW4KKwlAIGRpdmlzaW9uIGxvb3AuICBDb250aW51ZSBzaGlmdGluZyB1bnRpbCB0aGUgZGl2aXNvciBpcyAKKwlAIGxhcmdlciB0aGFuIHRoZSBkaXZpZGVuZC4KKzE6CWNtcAlcZGl2aXNvciwgIzB4MTAwMDAwMDAKKwljbXBsbwlcZGl2aXNvciwgXGRpdmlkZW5kCisJbW92bG8JXGRpdmlzb3IsIFxkaXZpc29yLCBsc2wgIzQKKwltb3ZsbwlcY3VyYml0LCBcY3VyYml0LCBsc2wgIzQKKwlibG8JMWIKKworCUAgRm9yIHZlcnkgYmlnIGRpdmlzb3JzLCB3ZSBtdXN0IHNoaWZ0IGl0IGEgYml0IGF0IGEgdGltZSwgb3IKKwlAIHdlIHdpbGwgYmUgaW4gZGFuZ2VyIG9mIG92ZXJmbG93aW5nLgorMToJY21wCVxkaXZpc29yLCAjMHg4MDAwMDAwMAorCWNtcGxvCVxkaXZpc29yLCBcZGl2aWRlbmQKKwltb3ZsbwlcZGl2aXNvciwgXGRpdmlzb3IsIGxzbCAjMQorCW1vdmxvCVxjdXJiaXQsIFxjdXJiaXQsIGxzbCAjMQorCWJsbwkxYgorCisJbW92CVxyZXN1bHQsICMwCisKKyNlbmRpZgorCisJQCBEaXZpc2lvbiBsb29wCisxOgljbXAJXGRpdmlkZW5kLCBcZGl2aXNvcgorCXN1YmhzCVxkaXZpZGVuZCwgXGRpdmlkZW5kLCBcZGl2aXNvcgorCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0CisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzEKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMQorCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0LCAgbHNyICMxCisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzIKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMgorCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0LCAgbHNyICMyCisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzMKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMworCW9ycmhzCVxyZXN1bHQsICAgXHJlc3VsdCwgICBcY3VyYml0LCAgbHNyICMzCisJY21wCVxkaXZpZGVuZCwgIzAJCQlAIEVhcmx5IHRlcm1pbmF0aW9uPworCW1vdm5lcwlcY3VyYml0LCAgIFxjdXJiaXQsICBsc3IgIzQJQCBObywgYW55IG1vcmUgYml0cyB0byBkbz8KKwltb3ZuZQlcZGl2aXNvciwgIFxkaXZpc29yLCBsc3IgIzQKKwlibmUJMWIKKworLmVuZG0KKworCisubWFjcm8gQVJNX0RJVjJfT1JERVIgZGl2aXNvciwgb3JkZXIKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CisKKwljbHoJXG9yZGVyLCBcZGl2aXNvcgorCXJzYglcb3JkZXIsIFxvcmRlciwgIzMxCisKKyNlbHNlCisKKwljbXAJXGRpdmlzb3IsICMoMSA8PCAxNikKKwltb3ZocwlcZGl2aXNvciwgXGRpdmlzb3IsIGxzciAjMTYKKwltb3Zocwlcb3JkZXIsICMxNgorCW1vdmxvCVxvcmRlciwgIzAKKworCWNtcAlcZGl2aXNvciwgIygxIDw8IDgpCisJbW92aHMJXGRpdmlzb3IsIFxkaXZpc29yLCBsc3IgIzgKKwlhZGRocwlcb3JkZXIsIFxvcmRlciwgIzgKKworCWNtcAlcZGl2aXNvciwgIygxIDw8IDQpCisJbW92aHMJXGRpdmlzb3IsIFxkaXZpc29yLCBsc3IgIzQKKwlhZGRocwlcb3JkZXIsIFxvcmRlciwgIzQKKworCWNtcAlcZGl2aXNvciwgIygxIDw8IDIpCisJYWRkaGkJXG9yZGVyLCBcb3JkZXIsICMzCisJYWRkbHMJXG9yZGVyLCBcb3JkZXIsIFxkaXZpc29yLCBsc3IgIzEKKworI2VuZGlmCisKKy5lbmRtCisKKworLm1hY3JvIEFSTV9NT0RfQk9EWSBkaXZpZGVuZCwgZGl2aXNvciwgb3JkZXIsIHNwYXJlCisKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNQorCisJY2x6CVxvcmRlciwgXGRpdmlzb3IKKwljbHoJXHNwYXJlLCBcZGl2aWRlbmQKKwlzdWIJXG9yZGVyLCBcb3JkZXIsIFxzcGFyZQorCW1vdglcZGl2aXNvciwgXGRpdmlzb3IsIGxzbCBcb3JkZXIKKworI2Vsc2UKKworCW1vdglcb3JkZXIsICMwCisKKwlAIFVubGVzcyB0aGUgZGl2aXNvciBpcyB2ZXJ5IGJpZywgc2hpZnQgaXQgdXAgaW4gbXVsdGlwbGVzIG9mCisJQCBmb3VyIGJpdHMsIHNpbmNlIHRoaXMgaXMgdGhlIGFtb3VudCBvZiB1bndpbmRpbmcgaW4gdGhlIG1haW4KKwlAIGRpdmlzaW9uIGxvb3AuICBDb250aW51ZSBzaGlmdGluZyB1bnRpbCB0aGUgZGl2aXNvciBpcyAKKwlAIGxhcmdlciB0aGFuIHRoZSBkaXZpZGVuZC4KKzE6CWNtcAlcZGl2aXNvciwgIzB4MTAwMDAwMDAKKwljbXBsbwlcZGl2aXNvciwgXGRpdmlkZW5kCisJbW92bG8JXGRpdmlzb3IsIFxkaXZpc29yLCBsc2wgIzQKKwlhZGRsbwlcb3JkZXIsIFxvcmRlciwgIzQKKwlibG8JMWIKKworCUAgRm9yIHZlcnkgYmlnIGRpdmlzb3JzLCB3ZSBtdXN0IHNoaWZ0IGl0IGEgYml0IGF0IGEgdGltZSwgb3IKKwlAIHdlIHdpbGwgYmUgaW4gZGFuZ2VyIG9mIG92ZXJmbG93aW5nLgorMToJY21wCVxkaXZpc29yLCAjMHg4MDAwMDAwMAorCWNtcGxvCVxkaXZpc29yLCBcZGl2aWRlbmQKKwltb3ZsbwlcZGl2aXNvciwgXGRpdmlzb3IsIGxzbCAjMQorCWFkZGxvCVxvcmRlciwgXG9yZGVyLCAjMQorCWJsbwkxYgorCisjZW5kaWYKKworCUAgUGVyZm9ybSBhbGwgbmVlZGVkIHN1YnN0cmFjdGlvbnMgdG8ga2VlcCBvbmx5IHRoZSByZW1pbmRlci4KKwlAIERvIGNvbXBhcmlzb25zIGluIGJhdGNoIG9mIDQgZmlyc3QuCisJc3Vicwlcb3JkZXIsIFxvcmRlciwgIzMJCUAgeWVzLCAzIGlzIGludGVuZGVkIGhlcmUKKwlibHQJMmYKKworMToJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IKKwljbXAJXGRpdmlkZW5kLCBcZGl2aXNvciwgIGxzciAjMQorCXN1YmhzCVxkaXZpZGVuZCwgXGRpdmlkZW5kLCBcZGl2aXNvciwgbHNyICMxCisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IsICBsc3IgIzIKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IsIGxzciAjMgorCWNtcAlcZGl2aWRlbmQsIFxkaXZpc29yLCAgbHNyICMzCisJc3ViaHMJXGRpdmlkZW5kLCBcZGl2aWRlbmQsIFxkaXZpc29yLCBsc3IgIzMKKwljbXAJXGRpdmlkZW5kLCAjMQorCW1vdglcZGl2aXNvciwgXGRpdmlzb3IsIGxzciAjNAorCXN1Ymdlcwlcb3JkZXIsIFxvcmRlciwgIzQKKwliZ2UJMWIKKworCXRzdAlcb3JkZXIsICMzCisJdGVxbmUJXGRpdmlkZW5kLCAjMAorCWJlcQk1ZgorCisJQCBFaXRoZXIgMSwgMiBvciAzIGNvbXBhcmlzb24vc3Vic3RyYWN0aW9ucyBhcmUgbGVmdC4KKzI6CWNtbglcb3JkZXIsICMyCisJYmx0CTRmCisJYmVxCTNmCisJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IKKwltb3YJXGRpdmlzb3IsICBcZGl2aXNvciwgIGxzciAjMQorMzoJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IKKwltb3YJXGRpdmlzb3IsICBcZGl2aXNvciwgIGxzciAjMQorNDoJY21wCVxkaXZpZGVuZCwgXGRpdmlzb3IKKwlzdWJocwlcZGl2aWRlbmQsIFxkaXZpZGVuZCwgXGRpdmlzb3IKKzU6CisuZW5kbQorCisKK0VOVFJZKF9fdWRpdnNpMykKK0VOVFJZKF9fYWVhYmlfdWlkaXYpCisKKwlzdWJzCXIyLCByMSwgIzEKKwltb3ZlcQlwYywgbHIKKwliY2MJTGRpdjAKKwljbXAJcjAsIHIxCisJYmxzCTExZgorCXRzdAlyMSwgcjIKKwliZXEJMTJmCisKKwlBUk1fRElWX0JPRFkgcjAsIHIxLCByMiwgcjMKKworCW1vdglyMCwgcjIKKwltb3YJcGMsIGxyCisKKzExOgltb3ZlcQlyMCwgIzEKKwltb3ZuZQlyMCwgIzAKKwltb3YJcGMsIGxyCisKKzEyOglBUk1fRElWMl9PUkRFUiByMSwgcjIKKworCW1vdglyMCwgcjAsIGxzciByMgorCW1vdglwYywgbHIKKworRU5EUFJPQyhfX3VkaXZzaTMpCitFTkRQUk9DKF9fYWVhYmlfdWlkaXYpCisKK0VOVFJZKF9fdW1vZHNpMykKKworCXN1YnMJcjIsIHIxLCAjMQkJCUAgY29tcGFyZSBkaXZpc29yIHdpdGggMQorCWJjYwlMZGl2MAorCWNtcG5lCXIwLCByMQkJCQlAIGNvbXBhcmUgZGl2aWRlbmQgd2l0aCBkaXZpc29yCisJbW92ZXEgICByMCwgIzAKKwl0c3RoaQlyMSwgcjIJCQkJQCBzZWUgaWYgZGl2aXNvciBpcyBwb3dlciBvZiAyCisJYW5kZXEJcjAsIHIwLCByMgorCW1vdmxzCXBjLCBscgorCisJQVJNX01PRF9CT0RZIHIwLCByMSwgcjIsIHIzCisKKwltb3YJcGMsIGxyCisKK0VORFBST0MoX191bW9kc2kzKQorCitFTlRSWShfX2RpdnNpMykKK0VOVFJZKF9fYWVhYmlfaWRpdikKKworCWNtcAlyMSwgIzAKKwllb3IJaXAsIHIwLCByMQkJCUAgc2F2ZSB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0LgorCWJlcQlMZGl2MAorCXJzYm1pCXIxLCByMSwgIzAJCQlAIGxvb3BzIGJlbG93IHVzZSB1bnNpZ25lZC4KKwlzdWJzCXIyLCByMSwgIzEJCQlAIGRpdmlzaW9uIGJ5IDEgb3IgLTEgPworCWJlcQkxMGYKKwltb3ZzCXIzLCByMAorCXJzYm1pCXIzLCByMCwgIzAJCQlAIHBvc2l0aXZlIGRpdmlkZW5kIHZhbHVlCisJY21wCXIzLCByMQorCWJscwkxMWYKKwl0c3QJcjEsIHIyCQkJCUAgZGl2aXNvciBpcyBwb3dlciBvZiAyID8KKwliZXEJMTJmCisKKwlBUk1fRElWX0JPRFkgcjMsIHIxLCByMCwgcjIKKworCWNtcAlpcCwgIzAKKwlyc2JtaQlyMCwgcjAsICMwCisJbW92CXBjLCBscgorCisxMDoJdGVxCWlwLCByMAkJCQlAIHNhbWUgc2lnbiA/CisJcnNibWkJcjAsIHIwLCAjMAorCW1vdglwYywgbHIKKworMTE6CW1vdmxvCXIwLCAjMAorCW1vdmVxCXIwLCBpcCwgYXNyICMzMQorCW9ycmVxCXIwLCByMCwgIzEKKwltb3YJcGMsIGxyCisKKzEyOglBUk1fRElWMl9PUkRFUiByMSwgcjIKKworCWNtcAlpcCwgIzAKKwltb3YJcjAsIHIzLCBsc3IgcjIKKwlyc2JtaQlyMCwgcjAsICMwCisJbW92CXBjLCBscgorCitFTkRQUk9DKF9fZGl2c2kzKQorRU5EUFJPQyhfX2FlYWJpX2lkaXYpCisKK0VOVFJZKF9fbW9kc2kzKQorCisJY21wCXIxLCAjMAorCWJlcQlMZGl2MAorCXJzYm1pCXIxLCByMSwgIzAJCQlAIGxvb3BzIGJlbG93IHVzZSB1bnNpZ25lZC4KKwltb3ZzCWlwLCByMAkJCQlAIHByZXNlcnZlIHNpZ24gb2YgZGl2aWRlbmQKKwlyc2JtaQlyMCwgcjAsICMwCQkJQCBpZiBuZWdhdGl2ZSBtYWtlIHBvc2l0aXZlCisJc3VicwlyMiwgcjEsICMxCQkJQCBjb21wYXJlIGRpdmlzb3Igd2l0aCAxCisJY21wbmUJcjAsIHIxCQkJCUAgY29tcGFyZSBkaXZpZGVuZCB3aXRoIGRpdmlzb3IKKwltb3ZlcQlyMCwgIzAKKwl0c3RoaQlyMSwgcjIJCQkJQCBzZWUgaWYgZGl2aXNvciBpcyBwb3dlciBvZiAyCisJYW5kZXEJcjAsIHIwLCByMgorCWJscwkxMGYKKworCUFSTV9NT0RfQk9EWSByMCwgcjEsIHIyLCByMworCisxMDoJY21wCWlwLCAjMAorCXJzYm1pCXIwLCByMCwgIzAKKwltb3YJcGMsIGxyCisKK0VORFBST0MoX19tb2RzaTMpCisKK0VOVFJZKF9fYWVhYmlfdWlkaXZtb2QpCisKKwlzdG1mZAlzcCEsIHtyMCwgcjEsIGlwLCBscn0KKwlibAlfX2FlYWJpX3VpZGl2CisJbGRtZmQJc3AhLCB7cjEsIHIyLCBpcCwgbHJ9CisJbXVsCXIzLCByMCwgcjIKKwlzdWIJcjEsIHIxLCByMworCW1vdglwYywgbHIKKworRU5EUFJPQyhfX2FlYWJpX3VpZGl2bW9kKQorCitFTlRSWShfX2FlYWJpX2lkaXZtb2QpCisKKwlzdG1mZAlzcCEsIHtyMCwgcjEsIGlwLCBscn0KKwlibAlfX2FlYWJpX2lkaXYKKwlsZG1mZAlzcCEsIHtyMSwgcjIsIGlwLCBscn0KKwltdWwJcjMsIHIwLCByMgorCXN1YglyMSwgcjEsIHIzCisJbW92CXBjLCBscgorCitFTkRQUk9DKF9fYWVhYmlfaWRpdm1vZCkKKworTGRpdjA6CisKKwlzdHIJbHIsIFtzcCwgIy04XSEKKwlibAlfX2RpdjAKKwltb3YJcjAsICMwCQkJQCBBYm91dCBhcyB3cm9uZyBhcyBpdCBjb3VsZCBiZS4KKwlsZHIJcGMsIFtzcF0sICM4CisKKwpkaWZmIC0tZ2l0IGEvbGliX2dlbmVyaWMvTWFrZWZpbGUgYi9saWJfZ2VuZXJpYy9NYWtlZmlsZQppbmRleCBmMDEyY2FiLi4yODVlOTlhIDEwMDY0NAotLS0gYS9saWJfZ2VuZXJpYy9NYWtlZmlsZQorKysgYi9saWJfZ2VuZXJpYy9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogQ09CSlMJPSBiemxpYi5vIGJ6bGliX2NyY3RhYmxlLm8gYnpsaWJfZGVjb21wcmVzcy5vIFwKIAkgIGJ6bGliX3JhbmR0YWJsZS5vIGJ6bGliX2h1ZmZtYW4ubyBcCiAJICBjcmMzMi5vIGN0eXBlLm8gZGlzcGxheV9vcHRpb25zLm8gbGRpdi5vIFwKLQkgIHN0cmluZy5vIHZzcHJpbnRmLm8gemxpYi5vCisJICBzdHJpbmcubyB2c3ByaW50Zi5vIHpsaWIubyBkaXY2NC5vCiAKIFNSQ1MgCTo9ICQoQ09CSlM6Lm89LmMpCiBPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKZGlmZiAtLWdpdCBhL2xpYl9nZW5lcmljL2NyYzMyLmMgYi9saWJfZ2VuZXJpYy9jcmMzMi5jCmluZGV4IDNkOTliNjkuLmJkZWU4ZTggMTAwNjQ0Ci0tLSBhL2xpYl9nZW5lcmljL2NyYzMyLmMKKysrIGIvbGliX2dlbmVyaWMvY3JjMzIuYwpAQCAtMTk1LDQgKzE5NSwzMiBAQAogICAgIHJldHVybiBjcmM7CiB9CiAKKy8qCisgKiBDYWxjdWxhdGUgdGhlIGNyYzMyIGNoZWNrc3VtIHRyaWdnZXJpbmcgdGhlIHdhdGNoZG9nIGV2ZXJ5ICdjaHVua19zeicgYnl0ZXMKKyAqIG9mIGlucHV0LgorICovCit1aW50MzJfdCBaRVhQT1JUIGNyYzMyX3dkICh1aW50MzJfdCBjcmMsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgICB1SW50IGxlbiwgdUludCBjaHVua19zeikKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19IV19XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCisJY29uc3QgdW5zaWduZWQgY2hhciAqZW5kLCAqY3VycjsKKwlpbnQgY2h1bms7CisKKwljdXJyID0gYnVmOworCWVuZCA9IGJ1ZiArIGxlbjsKKwl3aGlsZSAoY3VyciA8IGVuZCkgeworCQljaHVuayA9IGVuZCAtIGN1cnI7CisJCWlmIChjaHVuayA+IGNodW5rX3N6KQorCQkJY2h1bmsgPSBjaHVua19zejsKKwkJY3JjID0gY3JjMzIgKGNyYywgY3VyciwgY2h1bmspOworCQljdXJyICs9IGNodW5rOworCQlXQVRDSERPR19SRVNFVCAoKTsKKwl9CisjZWxzZQorCWNyYyA9IGNyYzMyIChjcmMsIGJ1ZiwgbGVuKTsKKyNlbmRpZgorCisJcmV0dXJuIGNyYzsKK30KICNlbmRpZgkvKiBDRkdfQ01EX0pGRlMyICovCmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9kaXY2NC5jIGIvbGliX2dlbmVyaWMvZGl2NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjg4YTkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliX2dlbmVyaWMvZGl2NjQuYwpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIEJlcm5hcmRvIElubm9jZW50aSA8YmVybmllQGRldmVsZXIuY29tPgorICoKKyAqIEJhc2VkIG9uIGZvcm1lciBkb19kaXYoKSBpbXBsZW1lbnRhdGlvbiBmcm9tIGFzbS1wYXJpc2MvZGl2NjQuaDoKKyAqCUNvcHlyaWdodCAoQykgMTk5OSBIZXdsZXR0LVBhY2thcmQgQ28KKyAqCUNvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisgKgorICoKKyAqIEdlbmVyaWMgQyB2ZXJzaW9uIG9mIDY0Yml0LzMyYml0IGRpdmlzaW9uIGFuZCBtb2R1bG8sIHdpdGgKKyAqIDY0Yml0IHJlc3VsdCBhbmQgMzJiaXQgcmVtYWluZGVyLgorICoKKyAqIFRoZSBmYXN0IGNhc2UgZm9yIChuPj4zMiA9PSAwKSBpcyBoYW5kbGVkIGlubGluZSBieSBkb19kaXYoKS4KKyAqCisgKiBDb2RlIGdlbmVyYXRlZCBmb3IgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSB2ZXJ5IGluZWZmaWNpZW50CisgKiBmb3Igc29tZSBDUFVzLiBfX2RpdjY0XzMyKCkgY2FuIGJlIG92ZXJyaWRkZW4gYnkgbGlua2luZyBhcmNoLXNwZWNpZmljCisgKiBhc3NlbWJseSB2ZXJzaW9ucyBzdWNoIGFzIGFyY2gvcG93ZXJwYy9saWIvZGl2NjQuUyBhbmQgYXJjaC9zaC9saWIvZGl2NjQuUy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordWludDMyX3QgX19kaXY2NF8zMih1aW50NjRfdCAqbiwgdWludDMyX3QgYmFzZSkKK3sKKwl1aW50NjRfdCByZW0gPSAqbjsKKwl1aW50NjRfdCBiID0gYmFzZTsKKwl1aW50NjRfdCByZXMsIGQgPSAxOworCXVpbnQzMl90IGhpZ2ggPSByZW0gPj4gMzI7CisKKwkvKiBSZWR1Y2UgdGhlIHRoaW5nIGEgYml0IGZpcnN0ICovCisJcmVzID0gMDsKKwlpZiAoaGlnaCA+PSBiYXNlKSB7CisJCWhpZ2ggLz0gYmFzZTsKKwkJcmVzID0gKHVpbnQ2NF90KSBoaWdoIDw8IDMyOworCQlyZW0gLT0gKHVpbnQ2NF90KSAoaGlnaCpiYXNlKSA8PCAzMjsKKwl9CisKKwl3aGlsZSAoKGludDY0X3QpYiA+IDAgJiYgYiA8IHJlbSkgeworCQliID0gYitiOworCQlkID0gZCtkOworCX0KKworCWRvIHsKKwkJaWYgKHJlbSA+PSBiKSB7CisJCQlyZW0gLT0gYjsKKwkJCXJlcyArPSBkOworCQl9CisJCWIgPj49IDE7CisJCWQgPj49IDE7CisJfSB3aGlsZSAoZCk7CisKKwkqbiA9IHJlczsKKwlyZXR1cm4gcmVtOworfQpkaWZmIC0tZ2l0IGEvbGliX2dlbmVyaWMvc3RyaW5nLmMgYi9saWJfZ2VuZXJpYy9zdHJpbmcuYwppbmRleCBlMGI3OTNhLi40NDRjMmVhIDEwMDY0NAotLS0gYS9saWJfZ2VuZXJpYy9zdHJpbmcuYworKysgYi9saWJfZ2VuZXJpYy9zdHJpbmcuYwpAQCAtMjE0LDYgKzIxNCw0NSBAQAogfQogI2VuZGlmCiAKKworLyoqCisgKiBza2lwX3NwYWNlcyAtIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIGZyb20gQHN0ci4KKyAqIEBzdHI6IFRoZSBzdHJpbmcgdG8gYmUgc3RyaXBwZWQuCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpbiBAc3RyLgorICovCitjaGFyICpza2lwX3NwYWNlcyhjb25zdCBjaGFyICpzdHIpCit7CisJd2hpbGUgKGlzc3BhY2UoKnN0cikpCisJCSsrc3RyOworCXJldHVybiAoY2hhciAqKXN0cjsKK30KKworLyoqCisgKiBzdHJpbSAtIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIEBzLgorICogQHM6IFRoZSBzdHJpbmcgdG8gYmUgc3RyaXBwZWQuCisgKgorICogTm90ZSB0aGF0IHRoZSBmaXJzdCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJlcGxhY2VkIHdpdGggYSAlTlVMLXRlcm1pbmF0b3IKKyAqIGluIHRoZSBnaXZlbiBzdHJpbmcgQHMuIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBub24td2hpdGVzcGFjZQorICogY2hhcmFjdGVyIGluIEBzLgorICovCitjaGFyICpzdHJpbShjaGFyICpzKQoreworCXNpemVfdCBzaXplOworCWNoYXIgKmVuZDsKKworCXMgPSBza2lwX3NwYWNlcyhzKTsKKwlzaXplID0gc3RybGVuKHMpOworCWlmICghc2l6ZSkKKwkJcmV0dXJuIHM7CisKKwllbmQgPSBzICsgc2l6ZSAtIDE7CisJd2hpbGUgKGVuZCA+PSBzICYmIGlzc3BhY2UoKmVuZCkpCisJCWVuZC0tOworCSooZW5kICsgMSkgPSAnXDAnOworCisJcmV0dXJuIHM7Cit9CiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUkxFTgogLyoqCiAgKiBzdHJsZW4gLSBGaW5kIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcKZGlmZiAtLWdpdCBhL21ha2VfcmVsZWFzZS5zaCBiL21ha2VfcmVsZWFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGVkZWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWFrZV9yZWxlYXNlLnNoCkBAIC0wLDAgKzEsOTcgQEAKKyMhL2Jpbi9iYXNoCisKK1VCT09UX0JBU0VfVkVSU0lPTj0xLjEuNgorVUJPT1RfTUFKT1JfVkVSU0lPTj0wLjA0CitVQk9PVF9NSU5PUl9WRVJTSU9OPTAKKworQ09ORklHUz0ndHNhdm81MzAgdHNhdm81MTUgdHNhdm81MTVfbm9yIG1lZ2Ftb21iYXNhNTE1IGlwb3RzNDgtODAwIG1hbGluZGknCisjQ09ORklHUz0nc3VwZXJtb21iYXNhOTEwIG1hdGlzc2UnCisKK0RJRkZfRklMRVNfRElSUz0nTWFrZWZpbGUgZHJpdmVycyBuZXQgYm9hcmQvbWluZHNwZWVkIGNwdS9hcm05MjB0IGluY2x1ZGUvY29uZmlncyBpbmNsdWRlL2FzbS1hcm0vYXJjaC1jb21jZXJ0bycKKyNESUZGX0ZJTEVTX0RJUlM9J01ha2VmaWxlIGRyaXZlcnMgbmV0IGJvYXJkL21pbmRzcGVlZCBjcHUvYXJtMTEzNiBpbmNsdWRlL2NvbmZpZ3MgaW5jbHVkZS9hc20tYXJtL2FyY2gtY29tY2VydG8nCisKK0NWU19VU0VSPXJ1aS5zb3VzYQorCitVQk9PVF9DVlNfVEFHPXUtYm9vdF9gZWNobyAke1VCT09UX01BSk9SX1ZFUlNJT059IHwgc2VkIHMvXFxcLi9fL2cgLWBfJHtVQk9PVF9NSU5PUl9WRVJTSU9OfQorVUJPT1RfQkFTRV9DVlNfVEFHPXUtYm9vdF9gZWNobyAke1VCT09UX0JBU0VfVkVSU0lPTn0gfCBzZWQgcy9cXFwuL18vZyAtYAorVUJPT1RfVkVSU0lPTj0ke1VCT09UX0JBU0VfVkVSU0lPTn0tJHtVQk9PVF9NQUpPUl9WRVJTSU9OfS4ke1VCT09UX01JTk9SX1ZFUlNJT059CitVQk9PVF9QQUNLQUdFPXUtYm9vdC0ke1VCT09UX1ZFUlNJT059CisKK1VCT09UX0NWU19ESVI9dS1ib290LSR7VUJPT1RfQ1ZTX1RBR30tY3ZzCitDVlNfUk9PVD0vcHJqL21zYWN2cy9lbnRlcnByaXNlCitDVlNfUkVQT1NJVE9SWT11LWJvb3QKK0NWU19TRVJWRVI9Y3ZzaG9zdC5uYi1lbmdyLm1pbmRzcGVlZC5jb20KK0tFUk5FTF9GVFBfRElSPXBsYXRmb3JtX2dyb3VwL2VudGVycHJpc2UvdS1ib290L3JlbGVhc2VzLyR7VUJPT1RfTUFKT1JfVkVSU0lPTn0KKworRlRQX1NFUlZFUj1mdHA6Ly9zb3BoaWFsMS5uaWNlLm1pbmRzcGVlZC5jb20KK0ZUUF9VU0VSPXVzZXIKK0ZUUF9QQVNTV0Q9JzEyMzQ1NicKKworVE9PTENIQUlOX1BBVEg9L3Vzci9sb2NhbC9nY2MtMy40LjUtZ2xpYmMtMi4zLjYvYXJtLXNvZnRmbG9hdC1saW51eC1nbnUvYmluCisKK3NldCAtZQorCitUT1BfRElSPWBwd2RgCisKK2V4cG9ydCBQQVRIPSRQQVRIOiRUT09MQ0hBSU5fUEFUSAorCitlY2hvICJSZXRyaWV2aW5nIHUtYm9vdCAke1VCT09UX1ZFUlNJT059IGZyb20gQ1ZTICh0YWcgJHtVQk9PVF9DVlNfVEFHfSkiCisKK3JtIC1mciAkVUJPT1RfQ1ZTX0RJUgorY3ZzIC16NiAtZDpwc2VydmVyOiR7Q1ZTX1VTRVJ9QCR7Q1ZTX1NFUlZFUn06JHtDVlNfUk9PVH0gY28gLWQgJHtVQk9PVF9DVlNfRElSfSAtciAke1VCT09UX0NWU19UQUd9ICR7Q1ZTX1JFUE9TSVRPUll9ID4gbWFrZV9yZWxlYXNlLmxvZyAyPiYxCisKK3JtIC1mICR7VUJPT1RfUEFDS0FHRX0ubWQ1c3VtCisKK2ZvciBjb25maWcgaW4gJENPTkZJR1M7IGRvCisKKwljZCAke1RPUF9ESVJ9LyR7VUJPT1RfQ1ZTX0RJUn0KKwllY2hvICJDbGVhbmluZyB1LWJvb3Qgc291cmNlIgorCW1ha2UgZGlzdGNsZWFuID4+ICR7VE9QX0RJUn0vbWFrZV9yZWxlYXNlLmxvZyAyPiYxCisKKwllY2hvICJDb25maWd1cmluZyBmb3IgJHtjb25maWd9IgorCW1ha2UgJHtjb25maWd9X2NvbmZpZyA+PiAke1RPUF9ESVJ9L21ha2VfcmVsZWFzZS5sb2cgMj4mMQorCisJZWNobyAiQnVpbGRpbmcgYmluYXJ5IgorCW1ha2UgPj4gJHtUT1BfRElSfS9tYWtlX3JlbGVhc2UubG9nIDI+JjEKKworCWNkICR7VE9QX0RJUn0KKworCWV4dHJhPWBlY2hvICR7Y29uZmlnfWAKKworCXBhY2thZ2U9JHtVQk9PVF9QQUNLQUdFfSR7ZXh0cmF9LmJpbgorCWVjaG8gIlByZXBhcmluZyAke3BhY2thZ2V9IgorCXJtIC1mICR7cGFja2FnZX0KKwljcCAke1VCT09UX0NWU19ESVJ9L3UtYm9vdC5iaW4gJHtwYWNrYWdlfQorCW1kNXN1bSAke3BhY2thZ2V9ID4+ICR7VUJPT1RfUEFDS0FHRX0ubWQ1c3VtIAorCisJcGFja2FnZT0ke1VCT09UX1BBQ0tBR0V9JHtleHRyYX0uZWxmCisJZWNobyAiUHJlcGFyaW5nICR7cGFja2FnZX0iCisJcm0gLWYgJHtwYWNrYWdlfQorCWNwICR7VUJPT1RfQ1ZTX0RJUn0vdS1ib290ICR7cGFja2FnZX0KKwltZDVzdW0gJHtwYWNrYWdlfSA+PiAke1VCT09UX1BBQ0tBR0V9Lm1kNXN1bSAKKworZG9uZQorCitjZCAke1RPUF9ESVJ9CitwYWNrYWdlPSR7VUJPT1RfUEFDS0FHRX0ucGF0Y2guYnoyCitlY2hvICJQcmVwYXJpbmcgJHtwYWNrYWdlfSIKK3JtIC1mciAke3BhY2thZ2V9IAorY2QgJHtUT1BfRElSfS8ke1VCT09UX0NWU19ESVJ9CitzZXQgK2UKK2N2cyAtejYgZGlmZiAtdU4gLXIgJHtVQk9PVF9CQVNFX0NWU19UQUd9ICR7RElGRl9GSUxFU19ESVJTfSA+ICR7VE9QX0RJUn0vJHtVQk9PVF9QQUNLQUdFfS5wYXRjaCAyPj4gJHtUT1BfRElSfS9tYWtlX3JlbGVhc2UubG9nCitzZXQgLWUKK2NkICR7VE9QX0RJUn0gCitiemlwMiAtOSAke1VCT09UX1BBQ0tBR0V9LnBhdGNoCittZDVzdW0gJHtwYWNrYWdlfSA+PiAke1VCT09UX1BBQ0tBR0V9Lm1kNXN1bQorCitlY2hvICJQcmVwYXJpbmcgJHtVQk9PVF9QQUNLQUdFfS50YXIuYnoyIgorcm0gLWZyICRVQk9PVF9QQUNLQUdFCitjcCAtYSAkVUJPT1RfQ1ZTX0RJUiAkVUJPT1RfUEFDS0FHRQorY2QgJFVCT09UX1BBQ0tBR0UKK3JtIC1mciBgZmluZCAuLyAtbmFtZSBDVlNgCittYWtlIGRpc3RjbGVhbiA+PiAke1RPUF9ESVJ9L21ha2VfcmVsZWFzZS5sb2cgMj4mMQorCitjZCAke1RPUF9ESVJ9CitybSAtZiAke1VCT09UX1BBQ0tBR0V9LnRhci5iejIKK3RhciAtdmNqZiAke1VCT09UX1BBQ0tBR0V9LnRhci5iejIgJFVCT09UX1BBQ0tBR0UgPj4gJHtUT1BfRElSfS9tYWtlX3JlbGVhc2UubG9nIDI+JjEKK21kNXN1bSAke1VCT09UX1BBQ0tBR0V9LnRhci5iejIgPj4gJHtVQk9PVF9QQUNLQUdFfS5tZDVzdW0KZGlmZiAtLWdpdCBhL25ldC9ldGguYyBiL25ldC9ldGguYwppbmRleCBlOGFjMjUxLi41ZDE1NDU1IDEwMDY0NAotLS0gYS9uZXQvZXRoLmMKKysrIGIvbmV0L2V0aC5jCkBAIC01NCw2ICs1NCw4IEBACiBleHRlcm4gaW50IHNrZ2VfaW5pdGlhbGl6ZShiZF90Kik7CiBleHRlcm4gaW50IHRzZWNfaW5pdGlhbGl6ZShiZF90KiwgaW50LCBjaGFyICopOwogZXh0ZXJuIGludCBucGVfaW5pdGlhbGl6ZShiZF90ICopOworZXh0ZXJuIGludCBjb21jZXJ0b19nZW1hY19pbml0aWFsaXplKGJkX3QgKmJpcywgaW50IGluZGV4LCBjaGFyICpkZXZuYW1lKTsKK2V4dGVybiBpbnQgYzIwMDBfZ2VtYWNfaW5pdGlhbGl6ZShiZF90ICpiaXMsIGludCBpbmRleCwgY2hhciAqZGV2bmFtZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZXRoX2RldmljZSAqZXRoX2RldmljZXMsICpldGhfY3VycmVudDsKIApAQCAtMTQxLDcgKzE0MywxNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX01JSSkgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKQogCW1paXBoeV9pbml0KCk7CiAjZW5kaWYKLQorI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzkwMCkKKwljb21jZXJ0b19nZW1hY19pbml0aWFsaXplKGJpcywgMCwgImNvbWNlcnRvX2dlbWFjMCIpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fMTAwKSB8fCBkZWZpbmVkKENPTkZJR19DT01DRVJUT18xMDAwKQorCWNvbWNlcnRvX2dlbWFjX2luaXRpYWxpemUoYmlzLCAwLCAiY29tY2VydG9fZ2VtYWMwIik7CisJY29tY2VydG9fZ2VtYWNfaW5pdGlhbGl6ZShiaXMsIDEsICJjb21jZXJ0b19nZW1hYzEiKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzIwMDApCisJYzIwMDBfZ2VtYWNfaW5pdGlhbGl6ZShiaXMsIDAsICJjMjAwMF9nZW1hYzAiKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19EQjY0MzYwCiAJbXY2NDM2eF9ldGhfaW5pdGlhbGl6ZShiaXMpOwogI2VuZGlmCkBAIC00NjQsNyArNDc1LDcgQEAKIGV4dGVybiBpbnQgZW1hYzR4eF9taWlwaHlfaW5pdGlhbGl6ZShiZF90ICpiaXMpOwogZXh0ZXJuIGludCBtY2Y1MngyX21paXBoeV9pbml0aWFsaXplKGJkX3QgKmJpcyk7CiBleHRlcm4gaW50IG5zNzUyMF9taWlwaHlfaW5pdGlhbGl6ZShiZF90ICpiaXMpOwotCitleHRlcm4gaW50IGNvbWNlcnRvX21paXBoeV9pbml0aWFsaXplKGJkX3QgKmJpcyk7CiBpbnQgZXRoX2luaXRpYWxpemUoYmRfdCAqYmlzKQogewogI2lmIGRlZmluZWQoQ09ORklHX01JSSkgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKQpAQCAtNDc0LDYgKzQ4NSwxMCBAQAogI2lmIGRlZmluZWQoQ09ORklHX0FUOTFSTTkyMDApCiAJYXQ5MXJtOTIwMF9taWlwaHlfaW5pdGlhbGl6ZShiaXMpOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fNTMwKSB8fCBkZWZpbmVkKENPTkZJR19DT01DRVJUT181MTUpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19DT01DRVJUT184MDApIHx8IGRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzkwMCkKKwljb21jZXJ0b19taWlwaHlfaW5pdGlhbGl6ZShiaXMpOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfNHh4KSAmJiAhZGVmaW5lZChDT05GSUdfSU9QNDgwKSBcCiAJJiYgIWRlZmluZWQoQ09ORklHX0FQMTAwMCkgJiYgIWRlZmluZWQoQ09ORklHXzQwNSkKIAllbWFjNHh4X21paXBoeV9pbml0aWFsaXplKGJpcyk7CmRpZmYgLS1naXQgYS90b29scy9ta2ltYWdlLmMgYi90b29scy9ta2ltYWdlLmMKaW5kZXggNDE2ZTY1OC4uMTY0M2E2NyAxMDA2NDQKLS0tIGEvdG9vbHMvbWtpbWFnZS5jCisrKyBiL3Rvb2xzL21raW1hZ2UuYwpAQCAtNjksMTIgKzY5LDEzIEBACiBjaGFyICpjbWRuYW1lOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBjcmMzMiAodW5zaWduZWQgbG9uZyBjcmMsIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7Ci0KKyNpZiAwCiB0eXBlZGVmIHN0cnVjdCB0YWJsZV9lbnRyeSB7CiAJaW50CXZhbDsJCS8qIGFzIGRlZmluZWQgaW4gaW1hZ2UuaAkqLwogCWNoYXIJKnNuYW1lOwkJLyogc2hvcnQgKGlucHV0KSBuYW1lCQkqLwogCWNoYXIJKmxuYW1lOwkJLyogbG9uZyAob3V0cHV0KSBuYW1lCQkqLwogfSB0YWJsZV9lbnRyeV90OworI2VuZGlmCiAKIHRhYmxlX2VudHJ5X3QgYXJjaF9uYW1lW10gPSB7CiAgICAgewlJSF9DUFVfSU5WQUxJRCwJCU5VTEwsCQkiSW52YWxpZCBDUFUiLAl9LAo=