ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCA2YjU0ZThmLi40Y2Q2MmY2IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0yLDcgKzIsMTMgQEAKIENoYW5nZXMgc2luY2UgVS1Cb290IDEuMS4xOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCA1IE1heSAyMDA0OgorKiBQYXRjaCBieSBSaXNoaSBCaGF0dGFjaGFyeWEsIDA4IE1heSAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDU5MTIgT1NLIEJvYXJkCisKKyogUGF0Y2ggYnkgU2FtIFNvbmcgTWF5LCAwNyBNYXkgMjAwNDoKKyAgRml4IHR5cG8gb2YgVVBNIHRhYmxlIGZvciBybXUgYm9hcmQKKworKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDUgTWF5IDIwMDQ6CiAgIC0gSW50cmFjb20gYm9hcmQgdXBkYXRlLgogICAtIEFkZCBDb2RlYyBQT1NULgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDQzMGYwODI2Li45ZGUyMzgyIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMzQ3LDYgKzM0NywxMCBAQAogCiAJb21hcDE2MTBoMgkJQVJNOTI2RUpTCiAKK1Jpc2hpIEJoYXR0YWNoYXJ5YSA8cmlzaGlAdGkuY29tPgorCisJb21hcDU5MTJvc2sJCUFSTTkyNkVKUworCiBEYXZpZCBN/GxsZXIgPGQubXVlbGxlckBlbHNvZnQuY2g+CiAKIAlzbWRrMjQxMAkJQVJNOTIwVApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA0NTMxOTU2Li5kMTdmMjE1IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMTAyOSw2ICsxMDI5LDkgQEAKIG9tYXAxNTEwaW5uX2NvbmZpZyA6CXVuY29uZmlnCiAJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gYXJtOTI1dCBvbWFwMTUxMGlubgogCitvbWFwNTkxMm9za19jb25maWcgOgl1bmNvbmZpZworCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNmVqcyBvbWFwNTkxMm9zaworCiBvbWFwMTYxMGlubl9jb25maWcgXAogb21hcDE2MTBpbm5fY3MwYm9vdF9jb25maWcgXAogb21hcDE2MTBpbm5fY3MzYm9vdF9jb25maWcgXApkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDU2NDJjMjcuLmRiM2U0ZjUgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTI5NCw5ICsyOTQsOSBAQAogCQlDT05GSUdfQVQ5MVJNOTIwMERLLAkJQ09ORklHX0ROUDExMTAsCQlDT05GSUdfRVA3MzEyLAogCQlDT05GSUdfSDJfT01BUDE2MTAsCQlDT05GSUdfSEhQX0NSQURMRSwJQ09ORklHX0lNUEE3LAogCQlDT05GSUdfSU5OT1ZBVE9ST01BUDE1MTAsICAgQ09ORklHX0lOTk9WQVRPUk9NQVAxNjEwLAlDT05GSUdfTEFSVCwKLQkJQ09ORklHX0xVQkJPQ0ssCQkJQ09ORklHX1NIQU5OT04sCQlDT05GSUdfUDJfT01BUDczMCwKLQkJQ09ORklHX1NNREsyNDAwLAkJQ09ORklHX1NNREsyNDEwLAlDT05GSUdfVFJBQiwKLQkJQ09ORklHX1ZDTUE5CisJCUNPTkZJR19MVUJCT0NLLAkJCUNPTkZJR19PU0tfT01BUDU5MTIsCUNPTkZJR19TSEFOTk9OLAorCQlDT05GSUdfUDJfT01BUDczMCwJCUNPTkZJR19TTURLMjQwMCwJQ09ORklHX1NNREsyNDEwLAorCQlDT05GSUdfVFJBQiwJCQlDT05GSUdfVkNNQTkKIAogCQlNaWNyb0JsYXplIGJhc2VkIGJvYXJkczoKIAkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDU0LDI4ICsyMDU0LDI4IEBACiB3aGVyZSAiTkFNRV9jb25maWciIGlzIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgZXhpc3RpbmcKIGNvbmZpZ3VyYXRpb25zOyB0aGUgZm9sbG93aW5nIG5hbWVzIGFyZSBzdXBwb3J0ZWQ6CiAKLQlBRENJT1BfY29uZmlnCQlGUFM4NTBMX2NvbmZpZwkJb21hcDE2MTBpbm5fY29uZmlnCi0JQURTODYwX2NvbmZpZwkJRlBTODYwTF9jb25maWcJCXBjdV9lX2NvbmZpZwotCUFSNDA1X2NvbmZpZwkJR0VOODYwVF9jb25maWcJCVBJUDQwNV9jb25maWcKLQlhdDkxcm05MjAwZGtfY29uZmlnCUdFTklFVFZfY29uZmlnCQlRUzgyM19jb25maWcKLQlDQU5CVF9jb25maWcJCUdUSF9jb25maWcJCVFTODUwX2NvbmZpZwotCWNtaV9tcGM1eHhfY29uZmlnCWhlcm1lc19jb25maWcJCVFTODYwVF9jb25maWcKLQljb2dlbnRfY29tbW9uX2NvbmZpZwloeW1vZF9jb25maWcJCVJQWGxpdGVfY29uZmlnCi0JY29nZW50X21wYzgyNjBfY29uZmlnCUlQODYwX2NvbmZpZwkJUlBYc3VwZXJfY29uZmlnCi0JY29nZW50X21wYzh4eF9jb25maWcJSVZNTDI0X2NvbmZpZwkJcnNkcHJvdG9fY29uZmlnCi0JQ1BDSTQwNV9jb25maWcJCUlWTVM4X2NvbmZpZwkJU2FuZHBvaW50ODI0MF9jb25maWcKLQlDUENJSVNFUjRfY29uZmlnCUpTRV9jb25maWcJCXNiYzgyNjBfY29uZmlnCi0JY3NiMjcyX2NvbmZpZwkJTEFOVEVDX2NvbmZpZwkJU004NTBfY29uZmlnCi0JQ1U4MjRfY29uZmlnCQlsd21vbl9jb25maWcJCVNQRDgyM1RTX2NvbmZpZwotCURVRVRfQURTX2NvbmZpZwkJTUJYODYwVF9jb25maWcJCXN0eGdwM19jb25maWcKLQlFQk9OWV9jb25maWcJCU1CWF9jb25maWcJCVNYTkk4NTVUX2NvbmZpZwotCUVMUFQ4NjBfY29uZmlnCQlNUEM4MjYwQURTX2NvbmZpZwlUUU04MjNMX2NvbmZpZwotCUVTVEVFTTE5MkVfY29uZmlnCU1QQzg1NDBBRFNfY29uZmlnCVRRTTg1MExfY29uZmlnCi0JRVRYMDk0X2NvbmZpZwkJTVBDODU2MEFEU19jb25maWcJVFFNODU1TF9jb25maWcKLQlGQURTODIzX2NvbmZpZwkJTkVUVklBX2NvbmZpZwkJVFFNODYwTF9jb25maWcKLQlGQURTODUwU0FSX2NvbmZpZwlvbWFwMTUxMGlubl9jb25maWcJV0FMTlVUNDA1X2NvbmZpZwotCUZBRFM4NjBUX2NvbmZpZwkJb21hcDE2MTBoMl9jb25maWcJWlBDMTkwMF9jb25maWcKLQkJCQlvbWFwNzMwcDJfY29uZmlnCisJQURDSU9QX2NvbmZpZwkJRlBTODYwTF9jb25maWcJCW9tYXA3MzBwMl9jb25maWcKKwlBRFM4NjBfY29uZmlnCQlHRU44NjBUX2NvbmZpZwkJcGN1X2VfY29uZmlnCisJQVI0MDVfY29uZmlnCQlHRU5JRVRWX2NvbmZpZwkJUElQNDA1X2NvbmZpZworCWF0OTFybTkyMDBka19jb25maWcJR1RIX2NvbmZpZwkJUVM4MjNfY29uZmlnCisJQ0FOQlRfY29uZmlnCQloZXJtZXNfY29uZmlnCQlRUzg1MF9jb25maWcKKwljbWlfbXBjNXh4X2NvbmZpZwloeW1vZF9jb25maWcJCVFTODYwVF9jb25maWcKKwljb2dlbnRfY29tbW9uX2NvbmZpZwlJUDg2MF9jb25maWcJCVJQWGxpdGVfY29uZmlnCisJY29nZW50X21wYzgyNjBfY29uZmlnCUlWTUwyNF9jb25maWcJCVJQWHN1cGVyX2NvbmZpZworCWNvZ2VudF9tcGM4eHhfY29uZmlnCUlWTVM4X2NvbmZpZwkJcnNkcHJvdG9fY29uZmlnCisJQ1BDSTQwNV9jb25maWcJCUpTRV9jb25maWcJCVNhbmRwb2ludDgyNDBfY29uZmlnCisJQ1BDSUlTRVI0X2NvbmZpZwlMQU5URUNfY29uZmlnCQlzYmM4MjYwX2NvbmZpZworCWNzYjI3Ml9jb25maWcJCWx3bW9uX2NvbmZpZwkJU004NTBfY29uZmlnCisJQ1U4MjRfY29uZmlnCQlNQlg4NjBUX2NvbmZpZwkJU1BEODIzVFNfY29uZmlnCisJRFVFVF9BRFNfY29uZmlnCQlNQlhfY29uZmlnCQlzdHhncDNfY29uZmlnCisJRUJPTllfY29uZmlnCQlNUEM4MjYwQURTX2NvbmZpZwlTWE5JODU1VF9jb25maWcKKwlFTFBUODYwX2NvbmZpZwkJTVBDODU0MEFEU19jb25maWcJVFFNODIzTF9jb25maWcKKwlFU1RFRU0xOTJFX2NvbmZpZwlNUEM4NTYwQURTX2NvbmZpZwlUUU04NTBMX2NvbmZpZworCUVUWDA5NF9jb25maWcJCU5FVFZJQV9jb25maWcJCVRRTTg1NUxfY29uZmlnCisJRkFEUzgyM19jb25maWcJCW9tYXAxNTEwaW5uX2NvbmZpZwlUUU04NjBMX2NvbmZpZworCUZBRFM4NTBTQVJfY29uZmlnCW9tYXAxNjEwaDJfY29uZmlnCVdBTE5VVDQwNV9jb25maWcKKwlGQURTODYwVF9jb25maWcJCW9tYXAxNjEwaW5uX2NvbmZpZwlaUEMxOTAwX2NvbmZpZworCUZQUzg1MExfY29uZmlnCQlvbWFwNTkxMm9za19jb25maWcKIAogTm90ZTogZm9yIHNvbWUgYm9hcmQgc3BlY2lhbCBjb25maWd1cmF0aW9uIG5hbWVzIG1heSBleGlzdDsgY2hlY2sgaWYKICAgICAgIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGZyb20gdGhlIGJvYXJkIHZlbmRvcjsgZm9yCmRpZmYgLS1naXQgYS9ib2FyZC9uZXR0YS9jb2RlYy5jIGIvYm9hcmQvbmV0dGEvY29kZWMuYwppbmRleCBmYjJkYWI4Li4wMWFiMTRiIDEwMDY0NAotLS0gYS9ib2FyZC9uZXR0YS9jb2RlYy5jCisrKyBiL2JvYXJkL25ldHRhL2NvZGVjLmMKQEAgLTM4LDggKzM4LDggQEAKICNkZWZpbmUgUENNX1JFU1lOQ19DTURfQ0hfQQkweDQyCiAjZGVmaW5lIFBDTV9SRVNZTkNfQ01EX0NIX0IJMHg0QQogCi0jZGVmaW5lIEFDVElWRV9IT09LX0xFVl80ICAgICAgIDAKLSNkZWZpbmUgQUNUSVZFX0hPT0tfTEVWXzEyICAgICAgMQorI2RlZmluZSBBQ1RJVkVfSE9PS19MRVZfNAkwCisjZGVmaW5lIEFDVElWRV9IT09LX0xFVl8xMgkxCiAKICNkZWZpbmUgU0xJQ19QX05PUk1BTAkJMHgwMQogCkBAIC0xNDAsMTcgKzE0MCwxNyBAQAogCiAjZGVmaW5lIENJU19EQVRfQUREUgkJMHgwMAogCi0jZGVmaW5lCUxFQ19MRU5fQUREUgkJMHgzQQotI2RlZmluZQlMRUNfUE9XUl9BRERSCQkweDNCCi0jZGVmaW5lCUxFQ19ERUxQX0FERFIJCTB4M0MKLSNkZWZpbmUJTEVDX0RFTFFfQUREUgkJMHgzRAotI2RlZmluZQlMRUNfR0FJTl9YSV9BRERSCTB4M0UKLSNkZWZpbmUJTEVDX0dBSU5fUklfQUREUgkweDNGCi0jZGVmaW5lCUxFQ19HQUlOX1hPX0FERFIJMHg0MAotI2RlZmluZQlMRUNfUkVTXzFfQUREUgkJMHg0MQorI2RlZmluZSBMRUNfTEVOX0FERFIJCTB4M0EKKyNkZWZpbmUgTEVDX1BPV1JfQUREUgkJMHgzQgorI2RlZmluZSBMRUNfREVMUF9BRERSCQkweDNDCisjZGVmaW5lIExFQ19ERUxRX0FERFIJCTB4M0QKKyNkZWZpbmUgTEVDX0dBSU5fWElfQUREUgkweDNFCisjZGVmaW5lIExFQ19HQUlOX1JJX0FERFIJMHgzRgorI2RlZmluZSBMRUNfR0FJTl9YT19BRERSCTB4NDAKKyNkZWZpbmUgTEVDX1JFU18xX0FERFIJCTB4NDEKICNkZWZpbmUgTEVDX1JFU18yX0FERFIJCTB4NDIKIAotI2RlZmluZSBOTFBfUE9XX0xQRl9BRERSICAgIAkweDMwCisjZGVmaW5lIE5MUF9QT1dfTFBGX0FERFIJMHgzMAogI2RlZmluZSBOTFBfUE9XX0xQU19BRERSCTB4MzEKICNkZWZpbmUgTkxQX0JOX0xFVl9YX0FERFIJMHgzMgogI2RlZmluZSBOTFBfQk5fTEVWX1JfQUREUgkweDMzCkBAIC0xNzAsMTggKzE3MCwxOCBAQAogI2RlZmluZSBOTFBfQ1RfTEVWX1JFX0FERFIJMHg0MQogI2RlZmluZSBOTFBfQ1RSTF9BRERSCQkweDQyCiAKLSNkZWZpbmUgVVREX0NGX0hfQUREUiAgICAgICAgICAgMHg0QgotI2RlZmluZSBVVERfQ0ZfTF9BRERSICAgICAgICAgICAweDRDCi0jZGVmaW5lIFVURF9CV19IX0FERFIgICAgICAgICAgIDB4NEQKLSNkZWZpbmUgVVREX0JXX0xfQUREUiAgICAgICAgICAgMHg0RQotI2RlZmluZSBVVERfTkxFVl9BRERSICAgICAgICAgICAweDRGCi0jZGVmaW5lIFVURF9TTEVWX0hfQUREUiAgICAgICAgIDB4NTAKLSNkZWZpbmUgVVREX1NMRVZfTF9BRERSICAgICAgICAgMHg1MQotI2RlZmluZSBVVERfREVMVF9BRERSICAgICAgICAgICAweDUyCi0jZGVmaW5lIFVURF9SQlJLX0FERFIgICAgICAgICAgIDB4NTMKLSNkZWZpbmUgVVREX1JUSU1FX0FERFIgICAgICAgICAgMHg1NAotI2RlZmluZSBVVERfRUJSS19BRERSICAgICAgICAgICAweDU1Ci0jZGVmaW5lIFVURF9FVElNRV9BRERSICAgICAgICAgIDB4NTYKKyNkZWZpbmUgVVREX0NGX0hfQUREUgkJMHg0QgorI2RlZmluZSBVVERfQ0ZfTF9BRERSCQkweDRDCisjZGVmaW5lIFVURF9CV19IX0FERFIJCTB4NEQKKyNkZWZpbmUgVVREX0JXX0xfQUREUgkJMHg0RQorI2RlZmluZSBVVERfTkxFVl9BRERSCQkweDRGCisjZGVmaW5lIFVURF9TTEVWX0hfQUREUgkJMHg1MAorI2RlZmluZSBVVERfU0xFVl9MX0FERFIJCTB4NTEKKyNkZWZpbmUgVVREX0RFTFRfQUREUgkJMHg1MgorI2RlZmluZSBVVERfUkJSS19BRERSCQkweDUzCisjZGVmaW5lIFVURF9SVElNRV9BRERSCQkweDU0CisjZGVmaW5lIFVURF9FQlJLX0FERFIJCTB4NTUKKyNkZWZpbmUgVVREX0VUSU1FX0FERFIJCTB4NTYKIAogI2RlZmluZSBEVE1GX0xFVl9BRERSCQkweDMwCiAjZGVmaW5lIERUTUZfVFdJX0FERFIJCTB4MzEKQEAgLTIwNSw0NSArMjA1LDQ1IEBACiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNkZWZpbmUgSE9PS19MRVZfQUNUX1NUQVJUX0FERFIJMHg4OQorI2RlZmluZSBIT09LX0xFVl9BQ1RfU1RBUlRfQUREUiAweDg5CiAjZGVmaW5lIFJPMV9TVEFSVF9BRERSCQkweDcwCiAjZGVmaW5lIFJPMl9TVEFSVF9BRERSCQkweDk1CiAjZGVmaW5lIFJPM19TVEFSVF9BRERSCQkweDk2CiAKICNkZWZpbmUgVEcxX0ZSRVFfU1RBUlRfQUREUgkweDM4CiAjZGVmaW5lIFRHMV9HQUlOX1NUQVJUX0FERFIJMHgzOQotI2RlZmluZSBURzFfQkFORFBBU1NfU1RBUlRfQUREUgkweDNCCisjZGVmaW5lIFRHMV9CQU5EUEFTU19TVEFSVF9BRERSIDB4M0IKICNkZWZpbmUgVEcxX0JBTkRQQVNTX0VORF9BRERSCTB4M0QKIAogI2RlZmluZSBURzJfRlJFUV9TVEFSVF9BRERSCTB4NDAKICNkZWZpbmUgVEcyX0dBSU5fU1RBUlRfQUREUgkweDQxCi0jZGVmaW5lIFRHMl9CQU5EUEFTU19TVEFSVF9BRERSCTB4NDMKKyNkZWZpbmUgVEcyX0JBTkRQQVNTX1NUQVJUX0FERFIgMHg0MwogI2RlZmluZSBURzJfQkFORFBBU1NfRU5EX0FERFIJMHg0NQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNkZWZpbmUgUENNX0hXX0IgICAgICAgICAJMHg4MAorI2RlZmluZSBQQ01fSFdfQgkJMHg4MAogI2RlZmluZSBQQ01fSFdfQQkJMHgwMAotI2RlZmluZSBQQ01fVElNRV9TTE9UXzAgIAkweDAwICAgLyogIEJ5dGUgMCBvZiBQQ00gRnJhbWUgKGJ5IGRlZmF1bHQgaXMgYXNzaWduZWQgdG8gY2hhbm5lbCBBICkgKi8KLSNkZWZpbmUgUENNX1RJTUVfU0xPVF8xICAJMHgwMSAgIC8qICBCeXRlIDEgb2YgUENNIEZyYW1lIChieSBkZWZhdWx0IGlzIGFzc2lnbmVkIHRvIGNoYW5uZWwgQiApICovCi0jZGVmaW5lIFBDTV9USU1FX1NMT1RfNCAgCTB4MDQgICAvKiAgQnl0ZSA0IG9mIFBDTSBGcmFtZSAoQ29ycmVzcG9uZHMgdG8gQjEgb2YgdGhlIFNlY29uZCBHQ0kgKSAqLworI2RlZmluZSBQQ01fVElNRV9TTE9UXzAJCTB4MDAgICAvKiAgQnl0ZSAwIG9mIFBDTSBGcmFtZSAoYnkgZGVmYXVsdCBpcyBhc3NpZ25lZCB0byBjaGFubmVsIEEgKSAqLworI2RlZmluZSBQQ01fVElNRV9TTE9UXzEJCTB4MDEgICAvKiAgQnl0ZSAxIG9mIFBDTSBGcmFtZSAoYnkgZGVmYXVsdCBpcyBhc3NpZ25lZCB0byBjaGFubmVsIEIgKSAqLworI2RlZmluZSBQQ01fVElNRV9TTE9UXzQJCTB4MDQgICAvKiAgQnl0ZSA0IG9mIFBDTSBGcmFtZSAoQ29ycmVzcG9uZHMgdG8gQjEgb2YgdGhlIFNlY29uZCBHQ0kgKSAqLwogCiAjZGVmaW5lCSBSWF9MRVZfQUREUgkweDI4CiAjZGVmaW5lCSBUWF9MRVZfQUREUgkweDMwCi0jZGVmaW5lICBJazFfQUREUgkweDgzCisjZGVmaW5lCSBJazFfQUREUgkweDgzCiAKLSNkZWZpbmUgIEFSX1JPVwkJMyAvKiBJcyB0aGUgcm93IChBUiBQYXJhbXMpIG9mIHRoZSBhY19Db2VmZiBhcnJheSBpbiBTTVNfQ09ERUNfRGVmYXVsdHMgc3RydWN0ICAqLwotI2RlZmluZSAgQVhfUk9XCQk2IC8qIElzIHRoZSByb3cgKEFYIFBhcmFtcykgb2YgdGhlIGFjX0NvZWZmIGFycmF5IGluIFNNU19DT0RFQ19EZWZhdWx0cyBzdHJ1Y3QgICovCi0jZGVmaW5lICBEQ0ZfUk9XCTAgLyogSXMgdGhlIHJvdyAoRENGIFBhcmFtcykgb2YgdGhlIGRjX0NvZWZmIGFycmF5IGluIFNNU19DT0RFQ19EZWZhdWx0cyBzdHJ1Y3QgKi8KKyNkZWZpbmUJIEFSX1JPVwkJMyAvKiBJcyB0aGUgcm93IChBUiBQYXJhbXMpIG9mIHRoZSBhY19Db2VmZiBhcnJheSBpbiBTTVNfQ09ERUNfRGVmYXVsdHMgc3RydWN0CSovCisjZGVmaW5lCSBBWF9ST1cJCTYgLyogSXMgdGhlIHJvdyAoQVggUGFyYW1zKSBvZiB0aGUgYWNfQ29lZmYgYXJyYXkgaW4gU01TX0NPREVDX0RlZmF1bHRzIHN0cnVjdAkqLworI2RlZmluZQkgRENGX1JPVwkwIC8qIElzIHRoZSByb3cgKERDRiBQYXJhbXMpIG9mIHRoZSBkY19Db2VmZiBhcnJheSBpbiBTTVNfQ09ERUNfRGVmYXVsdHMgc3RydWN0ICovCiAKIC8qIE1hcmsgdGhlIHN0YXJ0IGJ5dGUgb2YgRHVzbGljIHBhcmFtZXRlcnMgdGhhdCB3ZSB1c2Ugd2l0aCBjb25maWd1cmF0b3IgKi8KLSNkZWZpbmUgIElrMV9TVEFSVF9CWVRFCQkzCisjZGVmaW5lCSBJazFfU1RBUlRfQllURQkJMwogI2RlZmluZQkgUlhfTEVWX1NUQVJUX0JZVEUJMAogI2RlZmluZQkgVFhfTEVWX1NUQVJUX0JZVEUJMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIElOVFJFRzRfQ0lTX0FDVCAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIElOVFJFRzRfQ0lTX0FDVAkJKDEgPDwgMCkKIAogI2RlZmluZSBCQ1IxX1NMRUVQCQkweDIwCiAjZGVmaW5lIEJDUjFfUkVWUE9MCQkweDEwCkBAIC0yNTcsMzAgKzI1NywzMCBAQAogI2RlZmluZSBCQ1IyX0hJTUFOCQkweDA4CiAjZGVmaW5lIEJDUjJfUERPVAkJMHgwMQogCi0jZGVmaW5lIEJDUjNfUENNWF9FTiAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIEJDUjNfUENNWF9FTgkJKDEgPDwgNCkKIAotI2RlZmluZSBCQ1I1X0RUTUZfRU4gICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBCQ1I1X0RUTUZfU1JDICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBCQ1I1X0xFQ19FTiAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBCQ1I1X0xFQ19PVVQgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBCQ1I1X0NJU19FTiAgICAgICAgICAgICAoMSA8PCA0KQotI2RlZmluZSBCQ1I1X0NJU19BVVRPICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBCQ1I1X1VURFhfRU4gICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBCQ1I1X1VURFJfRU4gICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBCQ1I1X0RUTUZfRU4JCSgxIDw8IDApCisjZGVmaW5lIEJDUjVfRFRNRl9TUkMJCSgxIDw8IDEpCisjZGVmaW5lIEJDUjVfTEVDX0VOCQkoMSA8PCAyKQorI2RlZmluZSBCQ1I1X0xFQ19PVVQJCSgxIDw8IDMpCisjZGVmaW5lIEJDUjVfQ0lTX0VOCQkoMSA8PCA0KQorI2RlZmluZSBCQ1I1X0NJU19BVVRPCQkoMSA8PCA1KQorI2RlZmluZSBCQ1I1X1VURFhfRU4JCSgxIDw8IDYpCisjZGVmaW5lIEJDUjVfVVREUl9FTgkJKDEgPDwgNykKIAotI2RlZmluZSBEU0NSX1RHMV9FTiAgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBEU0NSX1RHMl9FTiAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBEU0NSX1BURyAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBEU0NSX0NPUjggICAgICAgICAgICAgICAoMSA8PCAzKQotI2RlZmluZSBEU0NSX0RHX0tFWSh4KSAgICAgICAgICAoKCh4KSAmIDB4MEYpIDw8IDQpCisjZGVmaW5lIERTQ1JfVEcxX0VOCQkoMSA8PCAwKQorI2RlZmluZSBEU0NSX1RHMl9FTgkJKDEgPDwgMSkKKyNkZWZpbmUgRFNDUl9QVEcJCSgxIDw8IDIpCisjZGVmaW5lIERTQ1JfQ09SOAkJKDEgPDwgMykKKyNkZWZpbmUgRFNDUl9ER19LRVkoeCkJCSgoKHgpICYgMHgwRikgPDwgNCkKIAotI2RlZmluZSBDSVNfTEVDX01PREVfQ0lTX1YyMyAgICAoMSA8PCAwKQotI2RlZmluZSBDSVNfTEVDX01PREVfQ0lTX0ZSTSAgICAoMSA8PCAxKQotI2RlZmluZSBDSVNfTEVDX01PREVfTkxQX0VOICAgICAoMSA8PCAyKQotI2RlZmluZSBDSVNfTEVDX01PREVfVVREUl9TVU0gICAoMSA8PCA0KQotI2RlZmluZSBDSVNfTEVDX01PREVfVVREWF9TVU0gICAoMSA8PCA1KQorI2RlZmluZSBDSVNfTEVDX01PREVfQ0lTX1YyMwkoMSA8PCAwKQorI2RlZmluZSBDSVNfTEVDX01PREVfQ0lTX0ZSTQkoMSA8PCAxKQorI2RlZmluZSBDSVNfTEVDX01PREVfTkxQX0VOCSgxIDw8IDIpCisjZGVmaW5lIENJU19MRUNfTU9ERV9VVERSX1NVTQkoMSA8PCA0KQorI2RlZmluZSBDSVNfTEVDX01PREVfVVREWF9TVU0JKDEgPDwgNSkKICNkZWZpbmUgQ0lTX0xFQ19NT0RFX0xFQ19GUkVFWkUgKDEgPDwgNikKLSNkZWZpbmUgQ0lTX0xFQ19NT0RFX0xFQ19BREFQVCAgKDEgPDwgNykKKyNkZWZpbmUgQ0lTX0xFQ19NT0RFX0xFQ19BREFQVAkoMSA8PCA3KQogCiAjZGVmaW5lIFRTVFI0X0NPUl82NAkJKDEgPDwgNSkKIApAQCAtMjkwLDEyICsyOTAsMTIgQEAKIAogCiAjZGVmaW5lIExNQ1IxX1RFU1RfRU4JCSgxIDw8IDcpCi0jZGVmaW5lCUxNQ1IxX0xNX0VOCQkoMSA8PCA2KQorI2RlZmluZSBMTUNSMV9MTV9FTgkJKDEgPDwgNikKICNkZWZpbmUgTE1DUjFfTE1fVEhNCQkoMSA8PCA1KQotI2RlZmluZQlMTUNSMV9MTV9PTkNFCQkoMSA8PCAyKQorI2RlZmluZSBMTUNSMV9MTV9PTkNFCQkoMSA8PCAyKQogI2RlZmluZSBMTUNSMV9MTV9NQVNLCQkoMSA8PCAxKQogCi0jZGVmaW5lIExNQ1IyX0xNX1JFQ1QgICAgICAgICAgIAkoMSA8PCA1KQorI2RlZmluZSBMTUNSMl9MTV9SRUNUCQkJKDEgPDwgNSkKICNkZWZpbmUgTE1DUjJfTE1fU0VMX1ZERAkJMHgwRAogI2RlZmluZSBMTUNSMl9MTV9TRUxfSU8zCQkweDBBCiAjZGVmaW5lIExNQ1IyX0xNX1NFTF9JTzQJCTB4MEIKQEAgLTMxMywyNyArMzEzLDI3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFRBUkdFVF9PTkhPT0tfQkFUSF94MTAwCQk0NjAwCS8qIDQ2LjAgVm9sdCAqLwotI2RlZmluZSBUQVJHRVRfT05IT09LX0JBVExfeDEwMAkJMjUwMCAgICAvKiAyNS4wIFZvbHQgKi8KKyNkZWZpbmUgVEFSR0VUX09OSE9PS19CQVRMX3gxMDAJCTI1MDAJLyogMjUuMCBWb2x0ICovCiAjZGVmaW5lIFRBUkdFVF9WX0RJVklERVJfUkFUSU9feDEwMAkyMTM3NkwJLyogKFIxK1IyKS9SMiA9IDIxMy43NiAqLwogI2RlZmluZSBESVZJREVSX1JBVElPX0FDQ1VSeDEwMAkJKDIyICogMTAwKQogI2RlZmluZSBWX0FEX3gxMDAwMAkJCTEwODM0TAkvKiBWQUQgPSAxLjA4MzQgKi8KICNkZWZpbmUgVEFSR0VUX1ZERHgxMDAJCQkzMzAJLyogVkREID0gMy4zICogMTAgKi8KICNkZWZpbmUgVkREX01BWF9ESUZGeDEwMAkJMjAJLyogVkREIEFjY3VyID0gMC4yKjEwMCAqLwogCi0jZGVmaW5lIFJNU19NVUxUSVBMSUVSeDEwMCAgICAgICAgICAgICAgMTExICAgICAvKiBwaS8oMnhzcXJ0KDIpKSA9IDEuMTEqLwotI2RlZmluZSBLX0lOVERDX1JFQ1RfT04gICAgICAgICAgICAgICAgIDQgICAgICAgLyogV2hlbiBSZWN0aWZpZXIgaXMgT04gdGhpcyB2YWx1ZSBpcyBuZWNlc3NhcnkoMl40KSAqLwotI2RlZmluZSBLX0lOVERDX1JFQ1RfT0ZGICAgICAgICAgICAgICAgIDIgICAgICAgLyogMl4yICovCi0jZGVmaW5lIFJOR19GUkVRICAgICAgICAgICAgICAgICAgICAgICAgMjUKLSNkZWZpbmUgU0FNUExJTkdfRlJFUSAgICAgICAgICAgICAgICAgICAoMjAwMEwpCi0jZGVmaW5lIE5fU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAgKFNBTVBMSU5HX0ZSRVEvUk5HX0ZSRVEpICAgICAvKiBmb3IgUmluZyBGcmVxID0yNUh6ICg0MG1zIEludGVncmF0aW9uIFBlcmlvZClbU2FtcGxpbmcgcmF0ZSAyS0h6IC0tPjEgU2FtcGxlIGV2ZXJ5IDUwMHVzXSAqLwotI2RlZmluZSBIT09LX1RIUkVTSF9SSU5HX1NUQVJUX0FERFIgICAgIDB4OEIKLSNkZWZpbmUgUklOR19QQVJBTVNfU1RBUlRfQUREUiAgICAgICAgICAweDcwCisjZGVmaW5lIFJNU19NVUxUSVBMSUVSeDEwMAkJMTExCS8qIHBpLygyeHNxcnQoMikpID0gMS4xMSovCisjZGVmaW5lIEtfSU5URENfUkVDVF9PTgkJCTQJLyogV2hlbiBSZWN0aWZpZXIgaXMgT04gdGhpcyB2YWx1ZSBpcyBuZWNlc3NhcnkoMl40KSAqLworI2RlZmluZSBLX0lOVERDX1JFQ1RfT0ZGCQkyCS8qIDJeMiAqLworI2RlZmluZSBSTkdfRlJFUQkJCTI1CisjZGVmaW5lIFNBTVBMSU5HX0ZSRVEJCQkoMjAwMEwpCisjZGVmaW5lIE5fU0FNUExFUwkJCShTQU1QTElOR19GUkVRL1JOR19GUkVRKSAgICAgLyogZm9yIFJpbmcgRnJlcSA9MjVIeiAoNDBtcyBJbnRlZ3JhdGlvbiBQZXJpb2QpW1NhbXBsaW5nIHJhdGUgMktIeiAtLT4xIFNhbXBsZSBldmVyeSA1MDB1c10gKi8KKyNkZWZpbmUgSE9PS19USFJFU0hfUklOR19TVEFSVF9BRERSCTB4OEIKKyNkZWZpbmUgUklOR19QQVJBTVNfU1RBUlRfQUREUgkJMHg3MAogCiAjZGVmaW5lIFZfT1VUX0JBVEhfTUFYX0RJRkZ4MTAwCQkzMDAJLyogMy4wIHgxMDAgKi8KICNkZWZpbmUgVl9PVVRfQkFUTF9NQVhfRElGRngxMDAJCTQwMAkvKiA0LjAgeDEwMCAqLwotI2RlZmluZSBNQVhfVl9SSU5HX01FQU54MTAwICAgICAgICAgICAgIDUwCi0jZGVmaW5lIFRBUkdFVF9WX1JJTkdfUk1TeDEwMCAgICAgICAgICAgMjcyMAotI2RlZmluZSBWX1JNU19SSU5HX01BWF9ESUZGeDEwMCAgICAgICAgIDI1MAorI2RlZmluZSBNQVhfVl9SSU5HX01FQU54MTAwCQk1MAorI2RlZmluZSBUQVJHRVRfVl9SSU5HX1JNU3gxMDAJCTI3MjAKKyNkZWZpbmUgVl9STVNfUklOR19NQVhfRElGRngxMDAJCTI1MAogCiAjZGVmaW5lIExNX09LX1NSQ19JUkdfMgkJCSgxIDw8IDQpCiAKQEAgLTYyNCw5NyArNjI0LDEwNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBNQVhfUE9QX0JMT0NLICAgNTAKKyNkZWZpbmUgTUFYX1BPUF9CTE9DSwk1MAogCi12b2lkIGNvZHNwX3dyaXRlX3BvcF9ibG9jayhpbnQgZHVzbGljX2lkLCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBhZGRyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpibG9jaywgaW50IGxlbikKK3ZvaWQgY29kc3Bfd3JpdGVfcG9wX2Jsb2NrIChpbnQgZHVzbGljX2lkLCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJsb2NrLCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGNoYXIgY21kWzIgKyBNQVhfUE9QX0JMT0NLXTsKIAotICAgIGlmIChsZW4gPiBNQVhfUE9QX0JMT0NLKSAvKiB0cnVuY2F0ZSAqLwotICAgICAgICAgICAgbGVuID0gTUFYX1BPUF9CTE9DSzsKKwlpZiAobGVuID4gTUFYX1BPUF9CTE9DSykJLyogdHJ1bmNhdGUgKi8KKwkJbGVuID0gTUFYX1BPUF9CTE9DSzsKIAotCWNtZFswXSA9IENPRFNQX1dSIHwgQ09EU1BfT1AgfCBDT0RTUF9BRFIoY2hhbm5lbCkgfCBDT0RTUF9DTURfUE9QOworCWNtZFswXSA9IENPRFNQX1dSIHwgQ09EU1BfT1AgfCBDT0RTUF9BRFIgKGNoYW5uZWwpIHwgQ09EU1BfQ01EX1BPUDsKIAljbWRbMV0gPSBhZGRyOwotCW1lbWNweShjbWQgKyAyLCBibG9jaywgbGVuKTsKLQljb2RzcF9zZW5kKGR1c2xpY19pZCwgY21kLCAyICsgbGVuLCAwLCAwKTsKKwltZW1jcHkgKGNtZCArIDIsIGJsb2NrLCBsZW4pOworCWNvZHNwX3NlbmQgKGR1c2xpY19pZCwgY21kLCAyICsgbGVuLCAwLCAwKTsKIH0KIAotdm9pZCBjb2RzcF93cml0ZV9wb3BfY2hhcihpbnQgZHVzbGljX2lkLCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciByZWdubywgdW5zaWduZWQgY2hhciB2YWwpCit2b2lkIGNvZHNwX3dyaXRlX3BvcF9jaGFyIChpbnQgZHVzbGljX2lkLCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciByZWdubywKKwkJCSAgIHVuc2lnbmVkIGNoYXIgdmFsKQogewogCXVuc2lnbmVkIGNoYXIgY21kWzNdOwogCi0JY21kWzBdID0gQ09EU1BfV1IgfCBDT0RTUF9PUCB8IENPRFNQX0FEUihjaGFubmVsKSB8IENPRFNQX0NNRF9QT1A7CisJY21kWzBdID0gQ09EU1BfV1IgfCBDT0RTUF9PUCB8IENPRFNQX0FEUiAoY2hhbm5lbCkgfCBDT0RTUF9DTURfUE9QOwogCWNtZFsxXSA9IHJlZ25vOwogCWNtZFsyXSA9IHZhbDsKIAotCWNvZHNwX3NlbmQoZHVzbGljX2lkLCBjbWQsIDMsIDAsIDApOworCWNvZHNwX3NlbmQgKGR1c2xpY19pZCwgY21kLCAzLCAwLCAwKTsKIH0KIAotdm9pZCBjb2RzcF93cml0ZV9wb3Bfc2hvcnQoaW50IGR1c2xpY19pZCwgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgcmVnbm8sIHVuc2lnbmVkIHNob3J0IHZhbCkKK3ZvaWQgY29kc3Bfd3JpdGVfcG9wX3Nob3J0IChpbnQgZHVzbGljX2lkLCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciByZWdubywKKwkJCSAgICB1bnNpZ25lZCBzaG9ydCB2YWwpCiB7CiAJdW5zaWduZWQgY2hhciBjbWRbNF07CiAKLQljbWRbMF0gPSBDT0RTUF9XUiB8IENPRFNQX09QIHwgQ09EU1BfQURSKGNoYW5uZWwpIHwgQ09EU1BfQ01EX1BPUDsKKwljbWRbMF0gPSBDT0RTUF9XUiB8IENPRFNQX09QIHwgQ09EU1BfQURSIChjaGFubmVsKSB8IENPRFNQX0NNRF9QT1A7CiAJY21kWzFdID0gcmVnbm87Ci0JY21kWzJdID0gKHVuc2lnbmVkIGNoYXIpKHZhbCA+PiA4KTsKLQljbWRbM10gPSAodW5zaWduZWQgY2hhcil2YWw7CisJY21kWzJdID0gKHVuc2lnbmVkIGNoYXIpICh2YWwgPj4gOCk7CisJY21kWzNdID0gKHVuc2lnbmVkIGNoYXIpIHZhbDsKIAotCWNvZHNwX3NlbmQoZHVzbGljX2lkLCBjbWQsIDQsIDAsIDApOworCWNvZHNwX3NlbmQgKGR1c2xpY19pZCwgY21kLCA0LCAwLCAwKTsKIH0KIAotdm9pZCBjb2RzcF93cml0ZV9wb3BfaW50KGludCBkdXNsaWNfaWQsIGludCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIHJlZ25vLCB1bnNpZ25lZCBpbnQgdmFsKQordm9pZCBjb2RzcF93cml0ZV9wb3BfaW50IChpbnQgZHVzbGljX2lkLCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciByZWdubywKKwkJCSAgdW5zaWduZWQgaW50IHZhbCkKIHsKIAl1bnNpZ25lZCBjaGFyIGNtZFs1XTsKIAotCWNtZFswXSA9IENPRFNQX1dSIHwgQ09EU1BfQURSKGNoYW5uZWwpIHwgQ09EU1BfQ01EX1BPUDsKKwljbWRbMF0gPSBDT0RTUF9XUiB8IENPRFNQX0FEUiAoY2hhbm5lbCkgfCBDT0RTUF9DTURfUE9QOwogCWNtZFsxXSA9IHJlZ25vOwotCWNtZFsyXSA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgPj4gMjQpOwotCWNtZFszXSA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgPj4gMTYpOwotCWNtZFs0XSA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgPj4gOCk7Ci0JY21kWzVdID0gKHVuc2lnbmVkIGNoYXIpdmFsOworCWNtZFsyXSA9ICh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDI0KTsKKwljbWRbM10gPSAodW5zaWduZWQgY2hhcikgKHZhbCA+PiAxNik7CisJY21kWzRdID0gKHVuc2lnbmVkIGNoYXIpICh2YWwgPj4gOCk7CisJY21kWzVdID0gKHVuc2lnbmVkIGNoYXIpIHZhbDsKIAotCWNvZHNwX3NlbmQoZHVzbGljX2lkLCBjbWQsIDYsIDAsIDApOworCWNvZHNwX3NlbmQgKGR1c2xpY19pZCwgY21kLCA2LCAwLCAwKTsKIH0KIAotdW5zaWduZWQgY2hhciBjb2RzcF9yZWFkX3BvcF9jaGFyKGludCBkdXNsaWNfaWQsIGludCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIHJlZ25vKQordW5zaWduZWQgY2hhciBjb2RzcF9yZWFkX3BvcF9jaGFyIChpbnQgZHVzbGljX2lkLCBpbnQgY2hhbm5lbCwKKwkJCQkgICB1bnNpZ25lZCBjaGFyIHJlZ25vKQogewogCXVuc2lnbmVkIGNoYXIgY21kWzNdOwogCXVuc2lnbmVkIGNoYXIgcmVzWzJdOwogCi0JY21kWzBdID0gQ09EU1BfUkQgfCBDT0RTUF9PUCB8IENPRFNQX0FEUihjaGFubmVsKSB8IENPRFNQX0NNRF9QT1A7CisJY21kWzBdID0gQ09EU1BfUkQgfCBDT0RTUF9PUCB8IENPRFNQX0FEUiAoY2hhbm5lbCkgfCBDT0RTUF9DTURfUE9QOwogCWNtZFsxXSA9IHJlZ25vOwogCi0JY29kc3Bfc2VuZChkdXNsaWNfaWQsIGNtZCwgMiwgcmVzLCAyKTsKKwljb2RzcF9zZW5kIChkdXNsaWNfaWQsIGNtZCwgMiwgcmVzLCAyKTsKIAogCXJldHVybiByZXNbMV07CiB9CiAKLXVuc2lnbmVkIHNob3J0IGNvZHNwX3JlYWRfcG9wX3Nob3J0KGludCBkdXNsaWNfaWQsIGludCBjaGFubmVsLCB1bnNpZ25lZCBjaGFyIHJlZ25vKQordW5zaWduZWQgc2hvcnQgY29kc3BfcmVhZF9wb3Bfc2hvcnQgKGludCBkdXNsaWNfaWQsIGludCBjaGFubmVsLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciByZWdubykKIHsKIAl1bnNpZ25lZCBjaGFyIGNtZFsyXTsKIAl1bnNpZ25lZCBjaGFyIHJlc1szXTsKIAotCWNtZFswXSA9IENPRFNQX1JEIHwgQ09EU1BfT1AgfCBDT0RTUF9BRFIoY2hhbm5lbCkgfCBDT0RTUF9DTURfUE9QOworCWNtZFswXSA9IENPRFNQX1JEIHwgQ09EU1BfT1AgfCBDT0RTUF9BRFIgKGNoYW5uZWwpIHwgQ09EU1BfQ01EX1BPUDsKIAljbWRbMV0gPSByZWdubzsKIAotCWNvZHNwX3NlbmQoZHVzbGljX2lkLCBjbWQsIDIsIHJlcywgMyk7CisJY29kc3Bfc2VuZCAoZHVzbGljX2lkLCBjbWQsIDIsIHJlcywgMyk7CiAKLQlyZXR1cm4gKCh1bnNpZ25lZCBzaG9ydClyZXNbMV0gPDwgOCkgfCByZXNbMl07CisJcmV0dXJuICgodW5zaWduZWQgc2hvcnQpIHJlc1sxXSA8PCA4KSB8IHJlc1syXTsKIH0KIAotdW5zaWduZWQgaW50IGNvZHNwX3JlYWRfcG9wX2ludChpbnQgZHVzbGljX2lkLCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgY2hhciByZWdubykKK3Vuc2lnbmVkIGludCBjb2RzcF9yZWFkX3BvcF9pbnQgKGludCBkdXNsaWNfaWQsIGludCBjaGFubmVsLAorCQkJCSB1bnNpZ25lZCBjaGFyIHJlZ25vKQogewogCXVuc2lnbmVkIGNoYXIgY21kWzJdOwogCXVuc2lnbmVkIGNoYXIgcmVzWzVdOwogCi0JY21kWzBdID0gQ09EU1BfUkQgfCBDT0RTUF9PUCB8IENPRFNQX0FEUihjaGFubmVsKSB8IENPRFNQX0NNRF9QT1A7CisJY21kWzBdID0gQ09EU1BfUkQgfCBDT0RTUF9PUCB8IENPRFNQX0FEUiAoY2hhbm5lbCkgfCBDT0RTUF9DTURfUE9QOwogCWNtZFsxXSA9IHJlZ25vOwogCi0JY29kc3Bfc2VuZChkdXNsaWNfaWQsIGNtZCwgMiwgcmVzLCA1KTsKKwljb2RzcF9zZW5kIChkdXNsaWNfaWQsIGNtZCwgMiwgcmVzLCA1KTsKIAotCXJldHVybiAoKHVuc2lnbmVkIGludClyZXNbMV0gPDwgMjQpIHwgKCh1bnNpZ25lZCBpbnQpcmVzWzJdIDw8IDE2KSB8ICgodW5zaWduZWQgaW50KXJlc1szXSA8PCA4KSB8IHJlc1s0XTsKKwlyZXR1cm4gKCgodW5zaWduZWQgaW50KSByZXNbMV0gPDwgMjQpIHwKKwkJKCh1bnNpZ25lZCBpbnQpIHJlc1syXSA8PCAxNikgfAorCQkoKHVuc2lnbmVkIGludCkgcmVzWzNdIDw8ICA4KSB8CisJCXJlc1s0XSApOwogfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IF9jb2VmZnMgewpAQCAtNzI1LDEyICs3MzQsMTIgQEAKIHN0cnVjdCBfY29lZmZzIGFjX2NvZWZmc1sxMV0gPSB7CiAJeyAweDYwLCB7MHhBRCwweERBLDB4QjUsMHg5QiwweEM3LDB4MkEsMHg5RCwweDAwfSB9LCAvKiAweDYwIElNLUZpbHRlciBwYXJ0IDEgKi8KIAl7IDB4NjgsIHsweDEwLDB4MDAsMHhBOSwweDgyLDB4MEQsMHg3NywweDBBLDB4MDB9IH0sIC8qIDB4NjggSU0tRmlsdGVyIHBhcnQgMiAqLwotCXsgMHgxOCwgezB4MDgsMHhDMCwweEQyLDB4QUIsMHhBNSwweEUyLDB4QUIsMHgwN30gfSwgLyogMHgxOCBGUlItRmlsdGVyICAgICAgICovCi0JeyAweDI4LCB7MHg0NCwweDkzLDB4RjUsMHg5MiwweDg4LDB4MDAsMHgwMCwweDAwfSB9LCAvKiAweDI4IEFSLUZpbHRlciAgICAgICAgKi8KLQl7IDB4NDgsIHsweDk2LDB4MzgsMHgyOSwweDk2LDB4QzksMHgyQiwweDhCLDB4MDB9IH0sIC8qIDB4NDggTFBSLUZpbHRlciAgICAgICAqLwotCXsgMHgyMCwgezB4MDgsMHhCMCwweERBLDB4OUQsMHhBNywweEZBLDB4OTMsMHgwNn0gfSwgLyogMHgyMCBGUlgtRmlsdGVyICAgICAgICovCi0JeyAweDMwLCB7MHhCQSwweEFDLDB4MDAsMHgwMSwweDg1LDB4NTAsMHhDMCwweDFBfSB9LCAvKiAweDMwIEFYLUZpbHRlciAgICAgICAgKi8KLQl7IDB4NTAsIHsweDk2LDB4MzgsMHgyOSwweEY1LDB4RkEsMHgyQiwweDhCLDB4MDB9IH0sIC8qIDB4NTAgTFBYLUZpbHRlciAgICAgICAqLworCXsgMHgxOCwgezB4MDgsMHhDMCwweEQyLDB4QUIsMHhBNSwweEUyLDB4QUIsMHgwN30gfSwgLyogMHgxOCBGUlItRmlsdGVyCSAgICAgICovCisJeyAweDI4LCB7MHg0NCwweDkzLDB4RjUsMHg5MiwweDg4LDB4MDAsMHgwMCwweDAwfSB9LCAvKiAweDI4IEFSLUZpbHRlcgkgICAgICAqLworCXsgMHg0OCwgezB4OTYsMHgzOCwweDI5LDB4OTYsMHhDOSwweDJCLDB4OEIsMHgwMH0gfSwgLyogMHg0OCBMUFItRmlsdGVyCSAgICAgICovCisJeyAweDIwLCB7MHgwOCwweEIwLDB4REEsMHg5RCwweEE3LDB4RkEsMHg5MywweDA2fSB9LCAvKiAweDIwIEZSWC1GaWx0ZXIJICAgICAgKi8KKwl7IDB4MzAsIHsweEJBLDB4QUMsMHgwMCwweDAxLDB4ODUsMHg1MCwweEMwLDB4MUF9IH0sIC8qIDB4MzAgQVgtRmlsdGVyCSAgICAgICovCisJeyAweDUwLCB7MHg5NiwweDM4LDB4MjksMHhGNSwweEZBLDB4MkIsMHg4QiwweDAwfSB9LCAvKiAweDUwIExQWC1GaWx0ZXIJICAgICAgKi8KIAl7IDB4MDAsIHsweDAwLDB4MDgsMHgwOCwweDgxLDB4MDAsMHg4MCwweDAwLDB4MDh9IH0sIC8qIDB4MDAgVEgtRmlsdGVyIHBhcnQgMSAqLwogCXsgMHgwOCwgezB4ODEsMHgwMCwweDgwLDB4MDAsMHhENywweDMzLDB4QkEsMHgwMX0gfSwgLyogMHgwOCBUSC1GaWx0ZXIgcGFydCAyICovCiAJeyAweDEwLCB7MHhCMywweDZDLDB4REMsMHhBMywweEE0LDB4RTUsMHg4OCwweDAwfSB9ICAvKiAweDEwIFRILUZpbHRlciBwYXJ0IDMgKi8KQEAgLTc1MiwxNCArNzYxLDE0IEBACiAKIHN0cnVjdCBfY29lZmZzIGRjX2NvZWZmc1s5XSA9IHsKIAl7IDB4ODAsIHsweDI1LDB4NTksMHg5QywweDIzLDB4MjQsMHgyMywweDMyLDB4MUN9IH0sIC8qIDB4ODAgREMtUGFyYW1ldGVyICAgICAqLwotCXsgMHg3MCwgezB4OTAsMHgzMCwweDFCLDB4QzAsMHgzMywweDQzLDB4QUMsMHgwMn0gfSwgLyogMHg3MCBSaW5naW5nICAgICAgICAgICovCi0JeyAweDkwLCB7MHgzRiwweEMzLDB4MkUsMHgzQSwweDgwLDB4OTAsMHgwMCwweDA5fSB9LCAvKiAweDkwIExQLUZpbHRlcnMgICAgICAgKi8KKwl7IDB4NzAsIHsweDkwLDB4MzAsMHgxQiwweEMwLDB4MzMsMHg0MywweEFDLDB4MDJ9IH0sIC8qIDB4NzAgUmluZ2luZwkgICAgICAqLworCXsgMHg5MCwgezB4M0YsMHhDMywweDJFLDB4M0EsMHg4MCwweDkwLDB4MDAsMHgwOX0gfSwgLyogMHg5MCBMUC1GaWx0ZXJzCSAgICAgICovCiAJeyAweDg4LCB7MHhBRiwweDgwLDB4MjcsMHg3QiwweDAxLDB4NEMsMHg3QiwweDAyfSB9LCAvKiAweDg4IEhvb2sgTGV2ZWxzICAgICAgKi8KIAl7IDB4NzgsIHsweDAwLDB4QzAsMHg2RCwweDdBLDB4QjMsMHg3OCwweDg5LDB4MDB9IH0sIC8qIDB4NzggUmFtcCBHZW5lcmF0b3IgICAqLwotCXsgMHg1OCwgezB4QTUsMHg0NCwweDM0LDB4REIsMHgwRSwweEEyLDB4MkEsMHgwMH0gfSwgLyogMHg1OCBUVFggICAgICAgICAgICAgICovCi0JeyAweDM4LCB7MHgzMywweDQ5LDB4OUEsMHg2NSwweEJCLDB4MDAsMHgwMCwweDAwfSB9LCAvKiAweDM4IFRHMSAgICAgICAgICAgICAgKi8KLQl7IDB4NDAsIHsweDMzLDB4NDksMHg5QSwweDY1LDB4QkIsMHgwMCwweDAwLDB4MDB9IH0sIC8qIDB4NDAgVEcyICAgICAgICAgICAgICAqLwotCXsgMHg5OCwgezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0gfSAgLyogMHg5OCBSZXNlcnZlZCAgICAgICAgICovCisJeyAweDU4LCB7MHhBNSwweDQ0LDB4MzQsMHhEQiwweDBFLDB4QTIsMHgyQSwweDAwfSB9LCAvKiAweDU4IFRUWAkgICAgICAqLworCXsgMHgzOCwgezB4MzMsMHg0OSwweDlBLDB4NjUsMHhCQiwweDAwLDB4MDAsMHgwMH0gfSwgLyogMHgzOCBURzEJICAgICAgKi8KKwl7IDB4NDAsIHsweDMzLDB4NDksMHg5QSwweDY1LDB4QkIsMHgwMCwweDAwLDB4MDB9IH0sIC8qIDB4NDAgVEcyCSAgICAgICovCisJeyAweDk4LCB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSB9ICAvKiAweDk4IFJlc2VydmVkCSAgICAgICovCiB9OwogCiB2b2lkIHByb2dyYW1fY29lZmZzKGludCBkdXNsaWNfaWQsIGludCBjaGFubmVsLCBzdHJ1Y3QgX2NvZWZmcyAqY29lZmZzLCBpbnQgdGFiX3NpemUpCkBAIC03NjcsNyArNzc2LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCB0YWJfc2l6ZTsgaSsrKQotICAgIAljb2RzcF93cml0ZV9jb3BfYmxvY2soZHVzbGljX2lkLCBjaGFubmVsLCBjb2VmZnNbaV0uYWRkciwgY29lZmZzW2ldLnZhbHVlcyk7CisJY29kc3Bfd3JpdGVfY29wX2Jsb2NrKGR1c2xpY19pZCwgY2hhbm5lbCwgY29lZmZzW2ldLmFkZHIsIGNvZWZmc1tpXS52YWx1ZXMpOwogfQogCiAjZGVmaW5lIFNTX09QRU5fQ0lSQ1VJVAkJCTAKQEAgLTgwMCw3ICs4MDksNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBTU19BQ1RJVkVfUklORzoKLSAgICAgICAgCWNhc2UgU1NfT05IT09LVFJOU006CisJCWNhc2UgU1NfT05IT09LVFJOU006CiAJCQljb2RzcF93cml0ZV9zb3BfY2hhcihkdXNsaWNfaWQsIGNoYW5uZWwsIEJDUjFfQUREUiwgKHYgJiB+QkNSMV9BQ1RMKSB8IEJDUjFfQUNUUik7CiAJCQljb2RzcF9zZXRfY2lvcF9tKGR1c2xpY19pZCwgY2hhbm5lbCwgQ09EU1BfTV9BTllfQUNUKTsKIAkJCWJyZWFrOwpAQCAtODY0LDcgKzg3Myw3IEBACiB9CiAKIGludCBtZWFzdXJlX29uX2hvb2tfdm9sdGFnZXMoaW50IHNsaWNfaWQsIGxvbmcgKnZkZCwKLSAgICAgICAgCWxvbmcgKnZfb2hfSCwgbG9uZyAqdl9vaF9MLCBsb25nICpyaW5nX21lYW5fdiwgbG9uZyAqcmluZ19ybXNfdikKKwkJbG9uZyAqdl9vaF9ILCBsb25nICp2X29oX0wsIGxvbmcgKnJpbmdfbWVhbl92LCBsb25nICpyaW5nX3Jtc192KQogewogCXNob3J0IExNX1Jlc3VsdCwgT2Zmc2V0X0NvbXBlbnNhdGlvbjsJLyogU2lnbmVkIDE2IGJpdCAqLwogCWxvbmcgaW50IFZERCwgVkREX2RpZmYsIFZfaW4sIFZfb3V0LCBEaXZpZGVyX1JhdGlvLCBWb3V0X2RpZmYgOwpAQCAtMTAyOSw3ICsxMDM4LDcgQEAKIAkJCXVkZWxheSgxMDAwMCk7IC8qIHdhaXQgYXQgbGVhc3QgNTAwdXMgdG8gYmUgc3VyZSB0aGF0IHRoZSBJbnRlZ3JhdGlvbiBSZXN1bHQgYXJlIHZhbGlkICEhISAqLwogCiAJCQkvKiBOb3cgUmVhZCB0aGUgTE0gUmVzdWx0IFJlZ2lzdGVycyAoVGhleSB3aWxsIGhvbGQgdGhlaXIgdmFsdWUgdW50aWwgTE1fRU4gYmVjb21lIHplcm8gYWdhaW4gKi8KLQkJCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PkFmdGVyIHRoYXQgUmVzdWx0IFJlZ3Mgd2lsbCBiZSB1cGRhdGVkIGV2ZXJ5IDUwMHVzICEhISkgKi8KKwkJCS8qCQkJCSAgICA9PT5BZnRlciB0aGF0IFJlc3VsdCBSZWdzIHdpbGwgYmUgdXBkYXRlZCBldmVyeSA1MDB1cyAhISEpICovCiAJCQlMTV9SZXN1bHQgPSBjb2RzcF9yZWFkX3NvcF9zaG9ydChkdXNsaWNfaWQsIGNoYW5uZWwsIExNUkVTMV9BRERSKTsKIAkJCVZfaW4gPSAoLTEpICogKCAoICgoKGxvbmcgaW50KUxNX1Jlc3VsdCkgKiBWX0FEX3gxMDAwMCkgLyBOX1NBTVBMRVMpID4+ICgxNSAtIEtfSU5URENfUkVDVF9PRkYpKSA7ICAvKiBWaW4geCAxMDAwMCovCiAKQEAgLTEwODAsNyArMTA4OSw3IEBACiAJCXVkZWxheSgxMDAwMCk7CiAKIAkJLyogTm93IFJlYWQgdGhlIExNIFJlc3VsdCBSZWdpc3RlcnMgKFRoZXkgd2lsbCBob2xkIHRoZWlyIHZhbHVlIHVudGlsIExNX0VOIGJlY29tZSB6ZXJvIGFnYWluICovCi0JCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PkFmdGVyIHRoYXQgUmVzdWx0IFJlZ3Mgd2lsbCBiZSB1cGRhdGVkIGV2ZXJ5IDUwMHVzICEhISkgKi8KKwkJLyoJCQkJICAgID09PkFmdGVyIHRoYXQgUmVzdWx0IFJlZ3Mgd2lsbCBiZSB1cGRhdGVkIGV2ZXJ5IDUwMHVzICEhISkgKi8KIAkJT2Zmc2V0X0NvbXBlbnNhdGlvbiA9IGNvZHNwX3JlYWRfc29wX3Nob3J0KGR1c2xpY19pZCwgY2hhbm5lbCwgTE1SRVMxX0FERFIpOwogCQlPZmZzZXRfQ29tcGVuc2F0aW9uID0gKC0xKSAqICgoT2Zmc2V0X0NvbXBlbnNhdGlvbiAqICgxIDw8IEtfSU5URENfUkVDVF9PTikpIC8gTl9TQU1QTEVTKTsKIApAQCAtMTEwNyw3ICsxMTE2LDcgQEAKIAkJCXVkZWxheSgxMDAwMCk7CiAKIAkJCS8qIE5vdyBSZWFkIHRoZSBMTSBSZXN1bHQgUmVnaXN0ZXJzIChUaGV5IHdpbGwgaG9sZCB0aGVpciB2YWx1ZSB1bnRpbCBMTV9FTiBiZWNvbWUgemVybyBhZ2FpbiAqLwotCQkJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0+QWZ0ZXIgdGhhdCBSZXN1bHQgUmVncyB3aWxsIGJlIHVwZGF0ZWQgZXZlcnkgNTAwdXMgISEhKSAqLworCQkJLyoJCQkJICAgID09PkFmdGVyIHRoYXQgUmVzdWx0IFJlZ3Mgd2lsbCBiZSB1cGRhdGVkIGV2ZXJ5IDUwMHVzICEhISkgKi8KIAkJCUxNX1Jlc3VsdCA9IGNvZHNwX3JlYWRfc29wX3Nob3J0KGR1c2xpY19pZCwgY2hhbm5lbCwgTE1SRVMxX0FERFIpOwogCQkJVl9pbiA9ICgtMSkgKiAgKCAoICgoKGxvbmcgaW50KUxNX1Jlc3VsdCkgKiBWX0FEX3gxMDAwMCkgLyBOX1NBTVBMRVMpID4+ICgxNSAtIEtfSU5URENfUkVDVF9PTikgKSA7ICAvKiBWaW4geCAxMDAwMCovCiAKQEAgLTExNDksMjIgKzExNTgsMjIgQEAKIAlpbnQgY2hhbm5lbCA9IHNsaWNfaWQgJiAxOwogCiAJZm9yIChjb2RlID0gMDsgY29kZSA8IDE2OyBjb2RlKyspIHsKLSAgICAJCWIgPSBjb2RzcF9yZWFkX3NvcF9jaGFyKGR1c2xpY19pZCwgY2hhbm5lbCwgRFNDUl9BRERSKTsKLSAgICAJCWNvZHNwX3dyaXRlX3NvcF9jaGFyKGR1c2xpY19pZCwgY2hhbm5lbCwgRFNDUl9BRERSLAotICAgICAgICAgICAgCQkoYiAmIH4oRFNDUl9QVEcgfCBEU0NSX0RHX0tFWSgxNSkpKSB8IERTQ1JfREdfS0VZKGNvZGUpIHwgRFNDUl9URzFfRU4gfCBEU0NSX1RHMl9FTik7Ci0gICAgICAgIAl1ZGVsYXkoODAwMDApOworCQliID0gY29kc3BfcmVhZF9zb3BfY2hhcihkdXNsaWNfaWQsIGNoYW5uZWwsIERTQ1JfQUREUik7CisJCWNvZHNwX3dyaXRlX3NvcF9jaGFyKGR1c2xpY19pZCwgY2hhbm5lbCwgRFNDUl9BRERSLAorCQkJKGIgJiB+KERTQ1JfUFRHIHwgRFNDUl9ER19LRVkoMTUpKSkgfCBEU0NSX0RHX0tFWShjb2RlKSB8IERTQ1JfVEcxX0VOIHwgRFNDUl9URzJfRU4pOworCQl1ZGVsYXkoODAwMDApOwogCiAJCWludHJlZyA9IGNvZHNwX3JlYWRfc29wX2ludChkdXNsaWNfaWQsIGNoYW5uZWwsIElOVFJFRzFfQUREUik7Ci0gICAgCQlpZiAoKGludHJlZyAmIENPRFNQX0lOVFJFR19JTlRfQ0gpID09IDApCisJCWlmICgoaW50cmVnICYgQ09EU1BfSU5UUkVHX0lOVF9DSCkgPT0gMCkKIAkJCWJyZWFrOwogCiAJCWlmICgoaW50cmVnICYgQ09EU1BfSU5UUkVHX0RUTUZfT0spID09IDAgfHwKIAkJCQljb2RzcF9kdG1mX21hcFsoaW50cmVnID4+IDEwKSAmIDE1XSAhPSBjb2RzcF9kdG1mX21hcFtjb2RlXSkKIAkJCWJyZWFrOwogCi0gICAgICAgIAliID0gY29kc3BfcmVhZF9zb3BfY2hhcihkdXNsaWNfaWQsIGNoYW5uZWwsIERTQ1JfQUREUik7Ci0gICAgICAgIAljb2RzcF93cml0ZV9zb3BfY2hhcihkdXNsaWNfaWQsIGNoYW5uZWwsIERTQ1JfQUREUiwKLQkgICAgICAgICAgICAgICAgCWIgJiB+KERTQ1JfQ09SOCB8IERTQ1JfVEcxX0VOIHwgRFNDUl9URzJfRU4pKTsKKwkJYiA9IGNvZHNwX3JlYWRfc29wX2NoYXIoZHVzbGljX2lkLCBjaGFubmVsLCBEU0NSX0FERFIpOworCQljb2RzcF93cml0ZV9zb3BfY2hhcihkdXNsaWNfaWQsIGNoYW5uZWwsIERTQ1JfQUREUiwKKwkJCQliICYgfihEU0NSX0NPUjggfCBEU0NSX1RHMV9FTiB8IERTQ1JfVEcyX0VOKSk7CiAKIAkJdWRlbGF5KDgwMDAwKTsKIApAQCAtMTE3Miw5ICsxMTgxLDkgQEAKIAl9CiAKIAlpZiAoY29kZSAhPSAxNikgewotICAgIAkJYiA9IGNvZHNwX3JlYWRfc29wX2NoYXIoZHVzbGljX2lkLCBjaGFubmVsLCBEU0NSX0FERFIpOyAvKiBzdG9wIGR0bWYgKi8KLSAgICAJCWNvZHNwX3dyaXRlX3NvcF9jaGFyKGR1c2xpY19pZCwgY2hhbm5lbCwgRFNDUl9BRERSLAotCSAgICAgICAgICAgIAkJYiAmIH4oRFNDUl9DT1I4IHwgRFNDUl9URzFfRU4gfCBEU0NSX1RHMl9FTikpOworCQliID0gY29kc3BfcmVhZF9zb3BfY2hhcihkdXNsaWNfaWQsIGNoYW5uZWwsIERTQ1JfQUREUik7IC8qIHN0b3AgZHRtZiAqLworCQljb2RzcF93cml0ZV9zb3BfY2hhcihkdXNsaWNfaWQsIGNoYW5uZWwsIERTQ1JfQUREUiwKKwkJCQliICYgfihEU0NSX0NPUjggfCBEU0NSX1RHMV9FTiB8IERTQ1JfVEcyX0VOKSk7CiAJCXJldHVybigxKTsKIAl9CiAKQEAgLTEyNzYsNyArMTI4NSw3IEBACiAJfQogCiAJaWYgKGNudCA9PSA1KSB7Ci0JICAgICAgICBwcmludGYoIlBDTV9SZXN5bmMoJXUpIG5vdCBjb21wbGV0ZWRcbiIsIGR1c2xpY19pZCk7CisJCXByaW50ZigiUENNX1Jlc3luYygldSkgbm90IGNvbXBsZXRlZFxuIiwgZHVzbGljX2lkKTsKIAkJcmV0dXJuIC0yOwogCX0KIApAQCAtMTMwNSwxMSArMTMxNCwxMSBAQAogCWZvciAoc2xpYyA9IDA7IHNsaWMgPCBNQVhfU0xJQ1M7IHNsaWMrKykgeyAvKiB2b2x0YWdlcyBzZWxmIHRlc3QgKi8KIAkJaWYgKGR1c2xpY19tYXNrICYgKDEgPDwgKHNsaWMgPj4gMSkpKSB7CiAJCQlyID0gbWVhc3VyZV9vbl9ob29rX3ZvbHRhZ2VzKHNsaWMsICZ2ZGQsCi0gICAgICAgIAkJCSZ2X29oX0gsICZ2X29oX0wsICZyaW5nX21lYW5fdiwgJnJpbmdfcm1zX3YpOworCQkJCSZ2X29oX0gsICZ2X29oX0wsICZyaW5nX21lYW5fdiwgJnJpbmdfcm1zX3YpOwogCiAJCQlwcmludGYoIlNMSUMgJXUgbWVhc3VyZWQgdm9sdGFnZXMgKHgxMDApOlxuXHQiCi0gICAgICAgIAkJCSAgICAiVkREID0gJWxkXHRWX09IX0ggPSAlbGRcdFZfT0hfTCA9ICVsZFx0Vl9SSU5HX01FQU4gPSAlbGRcdFZfUklOR19STVMgPSAlbGRcbiIsCi0gICAgICAgIAkJCSAgICBzbGljLCB2ZGQsIHZfb2hfSCwgdl9vaF9MLCByaW5nX21lYW5fdiwgcmluZ19ybXNfdik7CisJCQkJICAgICJWREQgPSAlbGRcdFZfT0hfSCA9ICVsZFx0Vl9PSF9MID0gJWxkXHRWX1JJTkdfTUVBTiA9ICVsZFx0Vl9SSU5HX1JNUyA9ICVsZFxuIiwKKwkJCQkgICAgc2xpYywgdmRkLCB2X29oX0gsIHZfb2hfTCwgcmluZ19tZWFuX3YsIHJpbmdfcm1zX3YpOwogCiAJCQlpZiAociAhPSAwKQogCQkJCWVycm9yIHw9IDEgPDwgc2xpYzsKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXA1OTEyb3NrL01ha2VmaWxlIGIvYm9hcmQvb21hcDU5MTJvc2svTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2MGRkMgotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL29tYXA1OTEyb3NrL01ha2VmaWxlCkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9IGxpYiQoQk9BUkQpLmEKKworT0JKUwk6PSBvbWFwNTkxMm9zay5vIGZsYXNoLm8KK1NPQkpTCTo9IHBsYXRmb3JtLm8KKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICReCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrIC5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpICQoU09CSlM6Lm89LlMpICQoT0JKUzoubz0uYykgPiAkQAorCistaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXA1OTEyb3NrL2NvbmZpZy5tayBiL2JvYXJkL29tYXA1OTEyb3NrL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzc1Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvb21hcDU5MTJvc2svY29uZmlnLm1rCkBAIC0wLDAgKzEsMzAgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAyLTIwMDQKKyMgR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorIyBEYXZpZCBNdWVsbGVyLCBFTFNPRlQgQUcsIDxkLm11ZWxsZXJAZWxzb2Z0LmNoPgorIworIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorIyBLc2hpdGlqIEd1cHRhIDxLc2hpdGlqQHRpLmNvbT4KKyMKKyMgKEMpIENvcHlyaWdodCAyMDA0CisjIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyMgUmlzaGkgQmhhdHRhY2hhcnlhIDxyaXNoaUB0aS5jb20+CisjCisjIFRJIE9TSyBib2FyZCB3aXRoIE9NQVA1OTEyIChBUk05MjVFSlMpIGNwdQorIyBzZWUgaHR0cDovL3d3dy50aS5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFRleGFzIEluc3RydW1lbnRzCisjCisjIE9TSyBoYXMgMSBiYW5rIG9mIDI1NiBNQiBTRFJBTQorIyBQaHlzaWNhbCBBZGRyZXNzOgorIyAxMDAwJzAwMDAgdG8gMjAwMCcwMDAwCisjCisjCisjIExpbnV4LUtlcm5lbCBpcyBleHBlY3RlZCB0byBiZSBhdCAxMDAwJzgwMDAsIGVudHJ5IDEwMDAnODAwMAorIyAobWVtIGJhc2UgKyByZXNlcnZlZCkKKyMKKyMgd2UgbG9hZCBvdXJzZWxmIHRvIDExMDgnMDAwMAorIworIworCisKK1RFWFRfQkFTRSA9IDB4MTEwODAwMDAKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXA1OTEyb3NrL2ZsYXNoLmMgYi9ib2FyZC9vbWFwNTkxMm9zay9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZDg4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwNTkxMm9zay9mbGFzaC5jCkBAIC0wLDAgKzEsNTA3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAxCisgKiBLeWxlIEhhcnJpcywgTmV4dXMgVGVjaG5vbG9naWVzLCBJbmMuIGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDEtMjAwNAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIEtzaGl0aWogR3VwdGEgPEtzaGl0aWpAdGkuY29tPgorCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFRleGFzIEluc3RydW1lbnRzIDx3d3cudGkuY29tPgorICogUmlzaGkgQmhhdHRhY2hhcnlhCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisKKyNkZWZpbmUgUEhZU19GTEFTSF9TRUNUX1NJWkUJMHgwMDAyMDAwMAkvKiAyNTYgS0Igc2VjdG9ycyAoeDIpICovCitmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsJLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMJICAgKi8KKworLyogQm9hcmQgc3VwcG9ydCBmb3IgMSBvciAyIGZsYXNoIGRldmljZXMgKi8KKyN1bmRlZiBGTEFTSF9QT1JUX1dJRFRIMzIKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSDE2CisKKyNpZmRlZiBGTEFTSF9QT1JUX1dJRFRIMTYKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSAl1c2hvcnQKKyNkZWZpbmUgRkxBU0hfUE9SVF9XSURUSFYJdnVfc2hvcnQKKyNkZWZpbmUgU1dBUCh4KQkJCV9fc3dhYjE2KHgpCisjZWxzZQorI2RlZmluZSBGTEFTSF9QT1JUX1dJRFRICXVsb25nCisjZGVmaW5lIEZMQVNIX1BPUlRfV0lEVEhWCXZ1X2xvbmcKKyNkZWZpbmUgU1dBUCh4KQkJCV9fc3dhYjMyKHgpCisjZW5kaWYKKworI2RlZmluZSBGUFcJRkxBU0hfUE9SVF9XSURUSAorI2RlZmluZSBGUFdWCUZMQVNIX1BPUlRfV0lEVEhWCisKKyNkZWZpbmUgbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCisKKworLyogRmxhc2ggT3JnYW5pemF0aW9uIFN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgT3JnRGVmIHsKKwl1bnNpZ25lZCBpbnQgc2VjdG9yX251bWJlcjsKKwl1bnNpZ25lZCBpbnQgc2VjdG9yX3NpemU7Cit9IE9yZ0RlZjsKKworCisvKiBGbGFzaCBPcmdhbml6YXRpb25zICovCitPcmdEZWYgT3JnSW50ZWxfMjhGMjU2TDE4VFtdID0geworCXs0LCAzMiAqIDEwMjR9LAkJCQkvKiA0ICogMzJrQnl0ZXMgc2VjdG9ycyAqLworCXsyNTUsIDEyOCAqIDEwMjR9LAkJCS8qIDI1NSAqIDEyOGtCeXRlcyBzZWN0b3JzICovCit9OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZ1bmN0aW9ucworICovCit1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpOworc3RhdGljIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFcgKiBhZGRyLCBmbGFzaF9pbmZvX3QgKiBpbmZvKTsKK3N0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgRlBXIGRhdGEpOworc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqIGluZm8pOwordm9pZCBpbmxpbmUgc3Bpbl93aGVlbCAodm9pZCk7Cit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pOwordm9pZCBmbGFzaF91bnByb3RlY3Rfc2VjdG9ycyAoRlBXViAqIGFkZHIpOworaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCk7CitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCit1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCit7CisJaW50IGk7CisJdWxvbmcgc2l6ZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJZmxhc2hfZ2V0X3NpemUgKChGUFcgKikgUEhZU19GTEFTSF8xLCAmZmxhc2hfaW5mb1tpXSk7CisJCQlmbGFzaF9nZXRfb2Zmc2V0cyAoUEhZU19GTEFTSF8xLCAmZmxhc2hfaW5mb1tpXSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXBhbmljICgiY29uZmlndXJlZCB0b28gbWFueSBmbGFzaCBiYW5rcyFcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJc2l6ZSArPSBmbGFzaF9pbmZvW2ldLnNpemU7CisJfQorCisJLyogUHJvdGVjdCBtb25pdG9yIGFuZCBlbnZpcm9ubWVudCBzZWN0b3JzCisJICovCisJZmxhc2hfcHJvdGVjdCAoRkxBR19QUk9URUNUX1NFVCwKKwkJCUNGR19GTEFTSF9CQVNFLAorCQkJQ0ZHX0ZMQVNIX0JBU0UgKyBtb25pdG9yX2ZsYXNoX2xlbiAtIDEsICZmbGFzaF9pbmZvWzBdKTsKKworCWZsYXNoX3Byb3RlY3QgKEZMQUdfUFJPVEVDVF9TRVQsCisJCQlDRkdfRU5WX0FERFIsCisJCQlDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLCAmZmxhc2hfaW5mb1swXSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICogaW5mbykKK3sKKwlpbnQgaTsKKwlPcmdEZWYgKnBPcmdEZWY7CisKKwlwT3JnRGVmID0gT3JnSW50ZWxfMjhGMjU2TDE4VDsKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQlyZXR1cm47CisJfQorCisJaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwpIHsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJCQlpZiAoaSA+IDI1NSkgeworCQkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHg4MDAwKTsKKwkJCQlpbmZvLT5wcm90ZWN0W2ldID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsKKwkJCQkJCShpICogUEhZU19GTEFTSF9TRUNUX1NJWkUpOworCQkJCWluZm8tPnByb3RlY3RbaV0gPSAwOworCQkJfQorCQl9CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICogaW5mbykKK3sKKwlpbnQgaTsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgeworCWNhc2UgRkxBU0hfTUFOX0lOVEVMOgorCQlwcmludGYgKCJJTlRFTCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgeworCWNhc2UgRkxBU0hfMjhGMjU2TDE4VDoKKwkJcHJpbnRmICgiRkxBU0ggMjhGMjU2TDE4VFxuIik7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfMjhGMTI4SjNBOgorCQlwcmludGYgKCJGTEFTSCAyOEYxMjhKM0FcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7CisJCWJyZWFrOworCX0KKworCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCisJCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgeworCQlpZiAoKGkgJSA1KSA9PSAwKQorCQkJcHJpbnRmICgiXG4gICAiKTsKKwkJcHJpbnRmICgiICUwOGxYJXMiLAorCQkJaW5mby0+c3RhcnRbaV0sIGluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIgkgICAiKTsKKwl9CisJcHJpbnRmICgiXG4iKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvZGUgY2Fubm90IGJlIHJ1biBmcm9tIEZMQVNIIQorICovCitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKEZQVyAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJdm9sYXRpbGUgRlBXIHZhbHVlOworCisJLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KKwlhZGRyWzB4NTU1NV0gPSAoRlBXKSAweDAwQUEwMEFBOworCWFkZHJbMHgyQUFBXSA9IChGUFcpIDB4MDA1NTAwNTU7CisJYWRkclsweDU1NTVdID0gKEZQVykgMHgwMDkwMDA5MDsKKworCW1iICgpOworCXZhbHVlID0gYWRkclswXTsKKworCXN3aXRjaCAodmFsdWUpIHsKKworCWNhc2UgKEZQVykgSU5URUxfTUFOVUZBQ1Q6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0lOVEVMOworCQlicmVhazsKKwkgICAgICBjYXNlIChGUFcpIE1UMl9NQU5VRkFDVDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fSU5URUw7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSAwOworCQlpbmZvLT5zaXplID0gMDsKKwkJYWRkclswXSA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisJCXJldHVybiAoMCk7CQkvKiBubyBvciB1bmtub3duIGZsYXNoCSovCisJfQorCisJbWIgKCk7CisJdmFsdWUgPSBhZGRyWzFdOwkvKiBkZXZpY2UgSUQJICAgICovCisJc3dpdGNoICh2YWx1ZSkgeworCisJY2FzZSAoRlBXKSAoSU5URUxfSURfMjhGMjU2TDE4VCk6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjI1NkwxOFQ7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDI1OTsKKwkJaW5mby0+c2l6ZSA9IDB4MDIwMDAwMDA7CisJCWJyZWFrOwkJCS8qID0+IDMyIE1CCSovCisKKwkgICAgICBjYXNlIChGUFcpIChJTlRFTF9JRF8yOEYyNTZLMyk6CisJCWluZm8tPmZsYXNoX2lkICs9RkxBU0hfMjhGMjU2SzM7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDI1OTsKKwkJaW5mby0+c2l6ZSA9IDB4MDIwMDAwMDA7CisJCQkgICAgcHJpbnRmICgiXEludGVsIFN0cmF0YUZsYXNoIDI4RjI1NkszQyBkZXZpY2UgaW5pdGlhbGl6ZWRcbiIpOworCQlicmVhazsJCQkvKiA9PiAzMiBNQgkqLworCisJY2FzZSAoRlBXKSAoSU5URUxfSURfMjhGMTI4SjNBKToKKwkJaW5mby0+Zmxhc2hfaWQgKz1GTEFTSF8yOEYxMjhKM0E7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDI1OTsKKwkJaW5mby0+c2l6ZSA9IDB4MDIwMDAwMDA7CisJCQkgICAgcHJpbnRmICgiXE1pY3JvbiBTdHJhdGFGbGFzaCBNVDI4RjEyOEozIGRldmljZSBpbml0aWFsaXplZFxuIik7CisJCWJyZWFrOwkJCS8qID0+IDMyIE1CCSovCisKKwlkZWZhdWx0OgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJCWJyZWFrOworCX0KKworCWlmIChpbmZvLT5zZWN0b3JfY291bnQgPiBDRkdfTUFYX0ZMQVNIX1NFQ1QpIHsKKwkJcHJpbnRmICgiKiogRVJST1I6IHNlY3RvciBjb3VudCAlZCA+IG1heCAoJWQpICoqXG4iLAorCQkJCWluZm8tPnNlY3Rvcl9jb3VudCwgQ0ZHX01BWF9GTEFTSF9TRUNUKTsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gQ0ZHX01BWF9GTEFTSF9TRUNUOworCX0KKworCWFkZHJbMF0gPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCisJcmV0dXJuIChpbmZvLT5zaXplKTsKK30KKworCisvKiB1bnByb3RlY3RzIGEgc2VjdG9yIGZvciB3cml0ZSBhbmQgZXJhc2UKKyAqIG9uIHNvbWUgaW50ZWwgcGFydHMsIHRoaXMgdW5wcm90ZWN0cyB0aGUgZW50aXJlIGNoaXAsIGJ1dCBpdAorICogd29udCBodXJ0IHRvIGNhbGwgdGhpcyBhZGRpdGlvbmFsIHRpbWVzIHBlciBzZWN0b3IuLi4KKyAqLwordm9pZCBmbGFzaF91bnByb3RlY3Rfc2VjdG9ycyAoRlBXViAqIGFkZHIpCit7CisjZGVmaW5lIFBEX0ZJTlRFTF9XU01TX1JFQURZX01BU0sgICAgMHgwMDgwCisKK0ZQVyBzdGF0dXM7CisKKwkqYWRkciA9IChGUFcpIDB4MDA1MDAwNTA7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCisJLyogdGhpcyBzZW5kcyB0aGUgY2xlYXIgbG9jayBiaXQgY29tbWFuZCAqLworCSphZGRyID0gKEZQVykgMHgwMDYwMDA2MDsKKwkqYWRkciA9IChGUFcpIDB4MDBEMDAwRDA7CisKKwkgICAgICB3aGlsZSAoKChzdGF0dXMgPSphZGRyKSAmIChGUFcpIDB4MDA4MDAwODApICE9IChGUFcpIDB4MDA4MDAwODApOworCisJICAgICAgKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOworCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK2ludCBmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCit7CisJaW50IGZsYWcsIHByb3QsIHNlY3Q7CisJdWxvbmcgdHlwZSwgc3RhcnQsIGxhc3Q7CisJaW50IHJjb2RlID0gMDsKKworCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgeworCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJdHlwZSA9IChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKTsKKwlpZiAoKHR5cGUgIT0gRkxBU0hfTUFOX0lOVEVMKSkgeworCQlwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgJTA4bHggLSBhYm9ydGVkXG4iLAorCQkJCWluZm8tPmZsYXNoX2lkKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJvdCA9IDA7CisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7ICsrc2VjdCkgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgeworCQkJcHJvdCsrOworCQl9CisJfQorCisJaWYgKHByb3QpIHsKKwkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAorCQkJCXByb3QpOworCX0gZWxzZSB7CisJCXByaW50ZiAoIlxuIik7CisJfQorCisKKwlzdGFydCA9IGdldF90aW1lciAoMCk7CisJbGFzdCA9IHN0YXJ0OworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKworCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7CisJCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgLyogbm90IHByb3RlY3RlZCAqLworCQkJRlBXViAqYWRkciA9IChGUFdWICopIChpbmZvLT5zdGFydFtzZWN0XSk7CisJCQlGUFcgc3RhdHVzOworCisJCQlwcmludGYgKCJFcmFzaW5nIHNlY3RvciAlMmQgLi4uICIsIHNlY3QpOworCisJCQlmbGFzaF91bnByb3RlY3Rfc2VjdG9ycyAoYWRkcik7CisKKwkJCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCisJCQlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisKKwkJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsvKiBjbGVhciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCSphZGRyID0gKEZQVykgMHgwMDIwMDAyMDsvKiBlcmFzZSBzZXR1cCAqLworCQkJKmFkZHIgPSAoRlBXKSAweDAwRDAwMEQwOy8qIGVyYXNlIGNvbmZpcm0gKi8KKworCQkJd2hpbGUgKCgoc3RhdHVzID0KKwkJCQkqYWRkcikgJiAoRlBXKSAweDAwODAwMDgwKSAhPQorCQkJCShGUFcpIDB4MDA4MDAwODApIHsKKwkJCQkJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPgorCQkJCQlDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJCQlwcmludGYgKCJUaW1lb3V0XG4iKTsKKwkJCQkJLyogc3VzcGVuZCBlcmFzZSAgICAgKi8KKwkJCQkJKmFkZHIgPSAoRlBXKSAweDAwQjAwMEIwOworCQkJCQkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwkJCQkJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOworCQkJCQlyY29kZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGNtZC4JKi8KKwkJCSphZGRyID0gKEZQVykgMHgwMDUwMDA1MDsKKwkJCSphZGRyID0gKEZQVykgMHgwMEZGMDBGRjsvKiByZXNlc3QgdG8gcmVhZCBtb2RlICovCisJCQlwcmludGYgKCIgZG9uZVxuIik7CisJCX0KKwl9CisJcmV0dXJuIHJjb2RlOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb3B5IG1lbW9yeSB0byBmbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKiA0IC0gRmxhc2ggbm90IGlkZW50aWZpZWQKKyAqLworCitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgKiBzcmMsIHVsb25nIGFkZHIsIHVsb25nIGNudCkKK3sKKwl1bG9uZyBjcCwgd3A7CisJRlBXIGRhdGE7CisJaW50IGNvdW50LCBpLCBsLCByYywgcG9ydF93aWR0aDsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXJldHVybiA0OworCX0KKy8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLworI2lmZGVmIEZMQVNIX1BPUlRfV0lEVEgxNgorCXdwID0gKGFkZHIgJiB+MSk7CisJcG9ydF93aWR0aCA9IDI7CisjZWxzZQorCXdwID0gKGFkZHIgJiB+Myk7CisJcG9ydF93aWR0aCA9IDQ7CisjZW5kaWYKKworCS8qCisJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcworCSAqLworCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgeworCQlkYXRhID0gMDsKKwkJZm9yIChpID0gMCwgY3AgPSB3cDsgaSA8IGw7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCQl9CisJCWZvciAoOyBpIDwgcG9ydF93aWR0aCAmJiBjbnQgPiAwOyArK2kpIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJCS0tY250OworCQkJKytjcDsKKwkJfQorCQlmb3IgKDsgY250ID09IDAgJiYgaSA8IHBvcnRfd2lkdGg7ICsraSwgKytjcCkgeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCQl9CisKKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICs9IHBvcnRfd2lkdGg7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKKwkgKi8KKwljb3VudCA9IDA7CisJd2hpbGUgKGNudCA+PSBwb3J0X3dpZHRoKSB7CisJCWRhdGEgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgcG9ydF93aWR0aDsgKytpKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCX0KKwkJaWYgKChyYyA9IHdyaXRlX2RhdGEgKGluZm8sIHdwLCBTV0FQIChkYXRhKSkpICE9IDApIHsKKwkJCXJldHVybiAocmMpOworCQl9CisJCXdwICs9IHBvcnRfd2lkdGg7CisJCWNudCAtPSBwb3J0X3dpZHRoOworCQlpZiAoY291bnQrKyA+IDB4ODAwKSB7CisJCQlzcGluX3doZWVsICgpOworCQkJY291bnQgPSAwOworCQl9CisJfQorCisJaWYgKGNudCA9PSAwKSB7CisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKKwkgKi8KKwlkYXRhID0gMDsKKwlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgcG9ydF93aWR0aCAmJiBjbnQgPiAwOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCQktLWNudDsKKwl9CisJZm9yICg7IGkgPCBwb3J0X3dpZHRoOyArK2ksICsrY3ApIHsKKwkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCX0KKworCXJldHVybiAod3JpdGVfZGF0YSAoaW5mbywgd3AsIFNXQVAgKGRhdGEpKSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFdyaXRlIGEgd29yZCBvciBoYWxmd29yZCB0byBGbGFzaCwgcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfZGF0YSAoZmxhc2hfaW5mb190ICogaW5mbywgdWxvbmcgZGVzdCwgRlBXIGRhdGEpCit7CisJRlBXViAqYWRkciA9IChGUFdWICopIGRlc3Q7CisJdWxvbmcgc3RhdHVzOworCWludCBmbGFnOworCisJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCisJaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHsKKwkJcHJpbnRmICgibm90IGVyYXNlZCBhdCAlMDhseCAoJXgpXG4iLCAodWxvbmcpIGFkZHIsICphZGRyKTsKKwkJcmV0dXJuICgyKTsKKwl9CisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKwkqYWRkciA9IChGUFcpIDB4MDA0MDAwNDA7CS8qIHdyaXRlIHNldHVwICovCisJKmFkZHIgPSBkYXRhOworCisJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KKwlyZXNldF90aW1lcl9tYXNrZWQgKCk7CisKKwkvKiB3YWl0IHdoaWxlIHBvbGxpbmcgdGhlIHN0YXR1cyByZWdpc3RlciAqLworCXdoaWxlICgoKHN0YXR1cyA9ICphZGRyKSAmIChGUFcpIDB4MDA4MDAwODApICE9IChGUFcpIDB4MDA4MDAwODApIHsKKwkJaWYgKGdldF90aW1lcl9tYXNrZWQgKCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQkJKmFkZHIgPSAoRlBXKSAweDAwRkYwMEZGOwkvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwkqYWRkciA9IChGUFcpIDB4MDBGRjAwRkY7CS8qIHJlc3RvcmUgcmVhZCBtb2RlICovCisJcmV0dXJuICgwKTsKK30KKwordm9pZCBpbmxpbmUgc3Bpbl93aGVlbCAodm9pZCkKK3sKKwlzdGF0aWMgaW50IHAgPSAwOworCXN0YXRpYyBjaGFyIHdbXSA9ICJcXC8tIjsKKworCXByaW50ZiAoIlwwMTAlYyIsIHdbcF0pOworCSgrK3AgPT0gMykgPyAocCA9IDApIDogMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL29tYXA1OTEyb3NrL29tYXA1OTEyb3NrLmMgYi9ib2FyZC9vbWFwNTkxMm9zay9vbWFwNTkxMm9zay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NDU3YTEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwNTkxMm9zay9vbWFwNTkxMm9zay5jCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAyCisgKiBTeXNnbyBSZWFsLVRpbWUgU29sdXRpb25zLCBHbWJIIDx3d3cuZWxpbm9zLmNvbT4KKyAqIE1hcml1cyBHcm9lZ2VyIDxtZ3JvZWdlckBzeXNnby5kZT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhdmlkIE11ZWxsZXIsIEVMU09GVCBBRywgPGQubXVlbGxlckBlbHNvZnQuY2g+CisgKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBLc2hpdGlqIEd1cHRhIDxLc2hpdGlqQHRpLmNvbT4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJpc2hpIEJoYXR0YWNoYXJ5YSA8cmlzaGlAdGkuY29tPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQMTYxMCkKKyNpbmNsdWRlIDwuL2NvbmZpZ3Mvb21hcDE1MTAuaD4KKyNlbmRpZgorCit2b2lkIGZsYXNoX19pbml0ICh2b2lkKTsKK3ZvaWQgZXRoZXJfX2luaXQgKHZvaWQpOwordm9pZCBzZXRfbXV4Y29uZl9yZWdzICh2b2lkKTsKK3ZvaWQgcGVyaXBoZXJhbF9wb3dlcl9lbmFibGUgKHZvaWQpOworCisjZGVmaW5lIENPTVBfTU9ERV9FTkFCTEUgKCh1bnNpZ25lZCBpbnQpMHgwMDAwRUFFRikKKworc3RhdGljIGlubGluZSB2b2lkIGRlbGF5ICh1bnNpZ25lZCBsb25nIGxvb3BzKQoreworCV9fYXNtX18gdm9sYXRpbGUgKCIxOlxuIgorCQkic3VicyAlMCwgJTEsICMxXG4iCisJCSJibmUgMWIiOiI9ciIgKGxvb3BzKToiMCIgKGxvb3BzKSk7Cit9CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIHBsYXRmb3JtIGRlcGVuZGVudCBpbml0aWFsaXNhdGlvbnMKKyAqLworCitpbnQgYm9hcmRfaW5pdCAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCS8qIGFyY2ggbnVtYmVyIG9mIE9NQVAgMTUxMC1Cb2FyZCAqLworCS8qIHRvIGJlIGNoYW5nZWQgZm9yIE9NQVAgMTYxMCBCb2FyZCAqLworCWdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSAyMzQ7CisKKwkvKiBhZHJlc3Mgb2YgYm9vdCBwYXJhbWV0ZXJzICovCisJZ2QtPmJkLT5iaV9ib290X3BhcmFtcyA9IDB4MTAwMDAxMDA7CisKKwkvKiBDb25maWd1cmUgTVVYIHNldHRpbmdzICovCisJc2V0X211eGNvbmZfcmVncyAoKTsKKwlwZXJpcGhlcmFsX3Bvd2VyX2VuYWJsZSAoKTsKKworLyogdGhpcyBzcGVlZHMgdXAgeW91ciBib290IGEgcXVpdGUgYSBiaXQuICBIb3dldmVyIHRvIG1ha2UgaXQKKyAqICB3b3JrLCB5b3UgbmVlZCBtYWtlIHN1cmUgeW91ciBrZXJuZWwgc3RhcnR1cCBmbHVzaCBidWcgaXMgZml4ZWQuCisgKiAgLi4uIHJrdyAuLi4KKyAqLworCWljYWNoZV9lbmFibGUgKCk7CisKKwlmbGFzaF9faW5pdCAoKTsKKwlldGhlcl9faW5pdCAoKTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgbWlzY19pbml0X3IgKHZvaWQpCit7CisJLyogY3VycmVudGx5IGVtcHR5ICovCisJcmV0dXJuICgwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJvdXRpbmU6CisgRGVzY3JpcHRpb246CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGZsYXNoX19pbml0ICh2b2lkKQoreworI2RlZmluZSBFTUlGU19HbEJfQ29uZmlnX1JFRyAweGZmZmVjYzBjCisJdW5zaWduZWQgaW50IHJlZ3ZhbDsKKwlyZWd2YWwgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgRU1JRlNfR2xCX0NvbmZpZ19SRUcpOworCS8qIFR1cm4gb2ZmIHdyaXRlIHByb3RlY3Rpb24gZm9yIGZsYXNoIGRldmljZXMuICovCisJcmVndmFsID0gcmVndmFsIHwgMHgwMDAxOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSBFTUlGU19HbEJfQ29uZmlnX1JFRykgPSByZWd2YWw7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJvdXRpbmU6ZXRoZXJfX2luaXQKKyBEZXNjcmlwdGlvbjogdGFrZSB0aGUgRXRoZXJuZXQgY29udHJvbGxlciBvdXQgb2YgcmVzZXQgYW5kIHdhaXQKKwkJCSAgIGZvciB0aGUgRUVQUk9NIGxvYWQgdG8gY29tcGxldGUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBldGhlcl9faW5pdCAodm9pZCkKK3sKKyNkZWZpbmUgRVRIX0NPTlRST0xfUkVHIDB4MDQ4MDAwMGIKKwlpbnQgaTsKKworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIDB4ZmZmZWNlMDgpID0gMHgwM0ZGOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIDB4ZmZmYjM4MjQpID0gMHg4MDAwOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIDB4ZmZmYjM4MzApID0gMHgwMDAwOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIDB4ZmZmYjM4MzQpID0gMHgwMDA5OworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIDB4ZmZmYjM4MzgpID0gMHgwMDA5OworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIDB4ZmZmYjM4MTgpID0gMHgwMDAyOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIDB4ZmZmYjM4MkMpID0gMHgwMDQ4OworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIDB4ZmZmYjM4MjQpID0gMHg4NjAzOworCXVkZWxheSAoMyk7CisJZm9yIChpPTA7aTwyMDAwO2krKyk7CisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgMHhmZmZiMzgxQykgPSAweDY2MTA7CisJdWRlbGF5ICgzMCk7CisJZm9yIChpPTA7aTwxMDAwMDtpKyspOworCisJKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBFVEhfQ09OVFJPTF9SRUcpICY9IH4weDAxOworCXVkZWxheSAoMyk7CisKKworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUm91dGluZToKKyBEZXNjcmlwdGlvbjoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkcmFtX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc3RhcnQgPSBQSFlTX1NEUkFNXzE7CisJZ2QtPmJkLT5iaV9kcmFtWzBdLnNpemUgPSBQSFlTX1NEUkFNXzFfU0laRTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUm91dGluZTogc2V0X211eGNvbmZfcmVncworIERlc2NyaXB0aW9uOiBTZXR0aW5nIHVwIHRoZSBjb25maWd1cmF0aW9uIE11eCByZWdpc3RlcnMKKwkJCSAgc3BlY2lmaWMgdG8gdGhlIGhhcmR3YXJlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzZXRfbXV4Y29uZl9yZWdzICh2b2lkKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqTXV4Q29uZlJlZzsKKwkvKiBzZXQgZWFjaCByZWdpc3RlcnMgdG8gaXRzIHJlc2V0IHZhbHVlOyAqLworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBGVU5DX01VWF9DVFJMXzApOworCS8qIHNldHVwIGZvciBVQVJUMSAqLworCSpNdXhDb25mUmVnICY9IH4oMHgwMjAwMDAwMCk7CS8qIGJpdCAyNSAqLworCS8qIHNldHVwIGZvciBVQVJUMiAqLworCSpNdXhDb25mUmVnICY9IH4oMHgwMTAwMDAwMCk7CS8qIGJpdCAyNCAqLworCS8qIERpc2FibGUgVXdpcmUgQ1MgSGktWiAqLworCSpNdXhDb25mUmVnIHw9IDB4MDgwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIEZVTkNfTVVYX0NUUkxfMyk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBGVU5DX01VWF9DVFJMXzQpOworCSpNdXhDb25mUmVnID0gMHgwMDAwMDAwMDsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgRlVOQ19NVVhfQ1RSTF81KTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIEZVTkNfTVVYX0NUUkxfNik7CisJLypzZXR1cCBtdXggZm9yIFVBUlQzICovCisJKk11eENvbmZSZWcgfD0gMHgwMDAwMDAwMTsJLyogYml0MywgMSwgMCAobXV4MCA1LDUsMjYpICovCisJKk11eENvbmZSZWcgJj0gfjB4MDAwMDAwM2U7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIEZVTkNfTVVYX0NUUkxfNyk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBGVU5DX01VWF9DVFJMXzgpOworCS8qIERpc2FibGUgVXdpcmUgQ1MgSGktWiAqLworCSpNdXhDb25mUmVnIHw9IDB4MDAwMDEyMDA7CS8qYml0IDkgZm9yIENTMCAxMiBmb3IgQ1MzICovCisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIEZVTkNfTVVYX0NUUkxfOSk7CisJLyogIE5lZWQgdG8gdHVybiBvbiBiaXRzIDIxIGFuZCAxMiBpbiBGVU5DX01VWF9DVFJMXzkgc28gdGhlICAqLworCS8qICBoYXJkd2FyZSB3aWxsIGFjdHVhbGx5IHVzZSBUWCBhbmQgUlRTIGJhc2VkIG9uIGJpdCAyNSBpbiAgKi8KKwkvKiAgRlVOQ19NVVhfQ1RSTF8wLiAgSSB0b2xkIHlvdSB0aGlzIHRoaW5nIHdhcyBzY3Jld3khCSAqLworCSpNdXhDb25mUmVnIHw9IDB4MDAyMDEwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIEZVTkNfTVVYX0NUUkxfQSk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBGVU5DX01VWF9DVFJMX0IpOworCSpNdXhDb25mUmVnID0gMHgwMDAwMDAwMDsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgRlVOQ19NVVhfQ1RSTF9DKTsKKwkvKiBzZXR1cCBmb3IgVUFSVDIgKi8KKwkvKiAgTmVlZCB0byB0dXJuIG9uIGJpdHMgMjcgYW5kIDI0IGluIEZVTkNfTVVYX0NUUkxfQyBzbyB0aGUgICovCisJLyogIGhhcmR3YXJlIHdpbGwgYWN0dWFsbHkgdXNlIFRYIGFuZCBSVFMgYmFzZWQgb24gYml0IDI0IGluICAqLworCS8qICBGVU5DX01VWF9DVFJMXzAuICovCisJKk11eENvbmZSZWcgfD0gMHgwOTAwMDAwMDsKKwlNdXhDb25mUmVnID0KKwkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBGVU5DX01VWF9DVFJMX0QpOworCSpNdXhDb25mUmVnIHw9IDB4MDAwMDAwMjA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFBVTExfRFdOX0NUUkxfMCk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVUxMX0RXTl9DVFJMXzEpOworCSpNdXhDb25mUmVnID0gMHgwMDAwMDAwMDsKKwkvKiBtdXggc2V0dXAgZm9yIFNEL01NQyBkcml2ZXIgKi8KKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgUFVMTF9EV05fQ1RSTF8yKTsKKwkqTXV4Q29uZlJlZyAmPSAweEZGRkUwRkZGOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBQVUxMX0RXTl9DVFJMXzMpOworCSpNdXhDb25mUmVnID0gMHgwMDAwMDAwMDsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgTU9EX0NPTkZfQ1RSTF8wKTsKKwkvKiBiaXQgMTMgZm9yIE1NQzIgWE9SX0NMSyAqLworCSpNdXhDb25mUmVnICY9IH4oMHgwMDAwMjAwMCk7CisJLyogYml0IDI5IGZvciBVQVJUIDEgKi8KKwkqTXV4Q29uZlJlZyAmPSB+KDB4MDAwMDIwMDApOworCU11eENvbmZSZWcgPQorCQkodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBGVU5DX01VWF9DVFJMXzApOworCS8qIENvbmZpZ3VyZSBmb3IgVVNCLiBUdXJuIG9uIFZCVVNfQ1RSTCBhbmQgVkJVU19NT0RFLiAqLworCSpNdXhDb25mUmVnIHw9IDB4MDAwQzAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOworCSpNdXhDb25mUmVnICY9IH4oMHgwMDAwMDA3MCk7CisJKk11eENvbmZSZWcgJj0gfigweDAwMDAwMDA4KTsKKwkqTXV4Q29uZlJlZyB8PSAweDAwMDAwMDAzOworCSpNdXhDb25mUmVnIHw9IDB4MDAwMDAxODA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIE1PRF9DT05GX0NUUkxfMCk7CisJLyogYml0IDE3LCBzb2Z0d2FyZSBjb250cm9scyBWQlVTICovCisJKk11eENvbmZSZWcgJj0gfigweDAwMDIwMDAwKTsKKwkvKiBFbmFibGUgVVNCIDQ4IGFuZCAxMk0gY2xvY2tzICovCisJKk11eENvbmZSZWcgfD0gMHgwMDAwMDIwMDsKKwkqTXV4Q29uZlJlZyAmPSB+KDB4MDAwMDAxODApOworCS8qMi43NVYgZm9yIE1NQ1NESU8xICovCisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFZPTFRBR0VfQ1RSTF8wKTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDFGRTc7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFBVX1BEX1NFTF8wKTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFBVX1BEX1NFTF8xKTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFBVX1BEX1NFTF8yKTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFBVX1BEX1NFTF8zKTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFBVX1BEX1NFTF80KTsKKwkqTXV4Q29uZlJlZyA9IDB4MDAwMDAwMDA7CisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFBVTExfRFdOX0NUUkxfNCk7CisJKk11eENvbmZSZWcgPSAweDAwMDAwMDAwOworCS8qIFR1cm4gb24gVUFSVDIgNDggTUhaIGNsb2NrICovCisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIE1PRF9DT05GX0NUUkxfMCk7CisJKk11eENvbmZSZWcgfD0gMHg0MDAwMDAwMDsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgVVNCX09UR19DVFJMKTsKKwkvKiBzZXR1cCBmb3IgVVNCIFZCdXMgZGV0ZWN0aW9uIE9NQVAxNjF4ICovCisJKk11eENvbmZSZWcgfD0gMHgwMDA0MDAwMDsJLyogYml0IDE4ICovCisJTXV4Q29uZlJlZyA9CisJCSh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIFBVX1BEX1NFTF8yKTsKKwkvKiBQdWxsVXBzIGZvciBTRC9NTUMgZHJpdmVyICovCisJKk11eENvbmZSZWcgfD0gfigweEZGRkUwRkZGKTsKKwlNdXhDb25mUmVnID0KKwkJKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludClDT01QX01PREVfQ1RSTF8wKTsKKwkqTXV4Q29uZlJlZyA9IENPTVBfTU9ERV9FTkFCTEU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSb3V0aW5lOiBwZXJpcGhlcmFsX3Bvd2VyX2VuYWJsZQorIERlc2NyaXB0aW9uOiBFbmFibGUgdGhlIHBvd2VyIGZvciBVQVJUMQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgcGVyaXBoZXJhbF9wb3dlcl9lbmFibGUgKHZvaWQpCit7CisjZGVmaW5lIFVBUlQxXzQ4TUhaX0VOQUJMRQkoKHVuc2lnbmVkIHNob3J0KTB4MDIwMCkKKyNkZWZpbmUgU1dfQ0xPQ0tfUkVRVUVTVAkoKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopMHhGRkZFMDgzNCkKKworCSpTV19DTE9DS19SRVFVRVNUIHw9IFVBUlQxXzQ4TUhaX0VOQUJMRTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL29tYXA1OTEyb3NrL3BsYXRmb3JtLlMgYi9ib2FyZC9vbWFwNTkxMm9zay9wbGF0Zm9ybS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYzcyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwNTkxMm9zay9wbGF0Zm9ybS5TCkBAIC0wLDAgKzEsNDQyIEBACisvKgorICogQm9hcmQgc3BlY2lmaWMgc2V0dXAgaW5mbworICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogVGV4YXMgSW5zdHJ1bWVudHMsIDx3d3cudGkuY29tPgorICogS3NoaXRpaiBHdXB0YSA8S3NoaXRpakB0aS5jb20+CisgKgorICogTW9kaWZpZWQgZm9yIE9NQVAgMTYxMCBIMiBib2FyZCBieSBOaXNoYW50IEthbWF0LCBKYW4gMjAwNAorICoKKyAqIE1vZGlmaWVkIGZvciBPTUFQIDU5MTIgT1NLIGJvYXJkIGJ5IFJpc2hpIEJoYXR0YWNoYXJ5YSwgQXByIDIwMDQKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQMTYxMCkKKyNpbmNsdWRlIDwuL2NvbmZpZ3Mvb21hcDE1MTAuaD4KKyNlbmRpZgorCisKK19URVhUX0JBU0U6CisJLndvcmQJVEVYVF9CQVNFCS8qIHNkcmFtIGxvYWQgYWRkciBmcm9tIGNvbmZpZy5tayAqLworCisuZ2xvYmwgcGxhdGZvcm1zZXR1cAorcGxhdGZvcm1zZXR1cDoKKworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisJICptYXNrIGFsbCBJUlFzIGJ5IHNldHRpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1SIGRlZmF1bHQqCisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCW1vdglyMSwgIzB4ZmZmZmZmZmYKKwlsZHIJcjAsID1SRUdfSUhMMV9NSVIKKwlzdHIJcjEsIFtyMF0KKwlsZHIJcjAsID1SRUdfSUhMMl9NSVIKKwlzdHIJcjEsIFtyMF0KKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorCSAqIFNldCB1cCBBUk0gQ0xNIHJlZ2lzdGVycyAoSURMRUNUMSkgICAgICAgICAgICAgICAgICAgKgorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlsZHIJcjAsCVJFR19BUk1fSURMRUNUMQorCWxkcglyMSwJVkFMX0FSTV9JRExFQ1QxCisJc3RyCXIxLAlbcjBdCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKwkgKiBTZXQgdXAgQVJNIENMTSByZWdpc3RlcnMgKElETEVDVDIpICAJCSAgICAgICAgKgorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlsZHIJcjAsCVJFR19BUk1fSURMRUNUMgorCWxkcglyMSwJVkFMX0FSTV9JRExFQ1QyCisJc3RyCXIxLAlbcjBdCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKwkgKiBTZXQgdXAgQVJNIENMTSByZWdpc3RlcnMgKElETEVDVDMpCQkgICAgICAgICoKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbGRyCXIwLAlSRUdfQVJNX0lETEVDVDMKKwlsZHIJcjEsCVZBTF9BUk1fSURMRUNUMworCXN0cglyMSwJW3IwXQorCisKKwltb3YJcjEsCSMweDAxCQkvKiBQRVJfRU4gYml0ICovCisJbGRyCXIwLAlSRUdfQVJNX1JTVENUMgorCXN0cmgJcjEsCVtyMF0JCS8qIENMS007IFBlcmlwaGVyYWwgcmVzZXQuICovCisKKwkvKiBTZXQgQ0xLTSB0byBTeW5jLVNjYWxhYmxlCSovCisJLyogSSBzdXBwb3NlZGx5IG5lZWQgdG8gZW5hYmxlIHRoZSBkc3AgY2xvY2sgYmVmb3JlIHN3aXRjaGluZyAqLworCW1vdglyMSwJIzB4MDAwMAorCWxkcglyMCwJUkVHX0FSTV9TWVNTVAorCXN0cmgJcjEsCVtyMF0KKwltb3YJcjAsCSMweDQwMAorMToKKwlzdWJzCXIwLAlyMCwJIzB4MQkvKiB3YWl0IGZvciBhbnkgYnViYmxlcyB0byBmaW5pc2ggKi8KKwlibmUJMWIKKwlsZHIJcjEsCVZBTF9BUk1fQ0tDVEwKKwlsZHIJcjAsCVJFR19BUk1fQ0tDVEwKKwlzdHJoCXIxLAlbcjBdCisKKwkvKiBhIGZldyBub3BzIHRvIGxldCBzZXR0bGUgKi8KKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKworCS8qIHNldHVwIERQTEwgMSAqLworCS8qIFJhbXAgdXAgdGhlIGNsb2NrIHRvIDk2TWh6ICovCisJbGRyCXIxLAlWQUxfRFBMTDFfQ1RMCisJbGRyCXIwLAlSRUdfRFBMTDFfQ1RMCisJc3RyaAlyMSwJW3IwXQorCWFuZHMJcjEsCXIxLAkjMHgxMAkvKiBDaGVjayBpZiBQTEwgaXMgZW5hYmxlZC4gKi8KKwliZXEJbG9ja19lbmQJLyogRG8gbm90IGxvb2sgZm9yIGxvY2sgaWYgQllQQVNTIHNlbGVjdGVkICovCisyOgorCWxkcmgJcjEsCVtyMF0KKwlhbmRzCXIxLAlyMSwJIzB4MDEJLyoJQ2hlY2sgdGhlIExPQ0sgYml0LiovCisJYmVxIDJiCQkJLyoJbG9vcCB1bnRpbCBiaXQgZ29lcyBoaS4gKi8KK2xvY2tfZW5kOgorCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKwkgKiBUdXJuIG9mZiB0aGUgd2F0Y2hkb2cgZHVyaW5nIGluaXQuLi4JCQkqCisgCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlsZHIJcjAsCVJFR19XQVRDSERPRworCWxkcglyMSwJV0FUQ0hET0dfVkFMMQorCXN0cglyMSwJW3IwXQorCWxkcglyMSwJV0FUQ0hET0dfVkFMMgorCXN0cglyMSwJW3IwXQorCWxkcglyMCwJUkVHX1dTUFJET0cKKwlsZHIJcjEsCVdTUFJET0dfVkFMMQorCXN0cglyMSwJW3IwXQorCWxkcglyMCwJUkVHX1dXUFNET0cKKword2F0Y2gxV2FpdDoKKwlsZHIJcjEsCVtyMF0KKwl0c3QJcjEsCSMweDEwCisJYm5lCXdhdGNoMVdhaXQKKworCWxkcglyMCwJUkVHX1dTUFJET0cKKwlsZHIJcjEsCVdTUFJET0dfVkFMMgorCXN0cglyMSwJW3IwXQorCWxkcglyMCwJUkVHX1dXUFNET0cKK3dhdGNoMldhaXQ6CisJbGRyCXIxLAlbcjBdCisJdHN0CXIxLAkjMHgxMAorCWJuZQl3YXRjaDJXYWl0CisKKworCS8qIFNldCBtZW1vcnkgdGltaW5ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBuZXcgY2xvY2sgc3BlZWQgKi8KKworCS8qIENoZWNrIGV4ZWN1dGlvbiBsb2NhdGlvbiB0byBkZXRlcm1pbmUgY3VycmVudCBleGVjdXRpb24gbG9jYXRpb24KKwkgKiBhbmQgYnJhbmNoIHRvIGFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIGNvZGUuCisJICovCisJLyogTG9hZCBwaHlzaWNhbCBTRFJBTSBiYXNlLiAqLworCW1vdiAJcjAsIAkjMHgxMDAwMDAwMAorCS8qIEdldCBjdXJyZW50IGV4ZWN1dGlvbiBsb2NhdGlvbi4gKi8KKwltb3YgCXIxLCAJcGMKKwkvKiBDb21wYXJlLiAqLworCWNtcCAJcjEsIAlyMAorCS8qIFNraXAgb3ZlciBFTUlGLWZhc3QgaW5pdGlhbGl6YXRpb24gaWYgcnVubmluZyBmcm9tIFNEUkFNLiAqLworCWJnZSAJc2tpcF9zZHJhbQorCisJLyoKKwkqIERlbGF5IGZvciBTRFJBTSBpbml0aWFsaXphdGlvbi4KKwkqLworCW1vdglyMywJIzB4MTgwMAkJLyogdmFsdWUgc2hvdWxkIGJlIGNoZWNrZWQgKi8KKzM6CisJc3VicwlyMywJcjMsCSMweDEJLyogRGVjcmVtZW50IGNvdW50ICovCisJYm5lIAkzYgorCisKKwkvKgorCSAqIFNldCBTRFJBTSBjb250cm9sIHZhbHVlcy4gRGlzYWJsZSByZWZyZXNoIGJlZm9yZSBNUlMgY29tbWFuZC4KKwkgKi8KKworCS8qIG1vYmlsZSBkZHIgb3BlcmF0aW9uICovCisJbGRyCXIwLAlSRUdfU0RSQU1fT1BFUkFUSU9OCisJbW92CXIyLAkjMDcKKwlzdHIJcjIsCVtyMF0KKworCS8qIGNvbmZpZyByZWdpc3RlciAqLworCWxkcglyMCwJUkVHX1NEUkFNX0NPTkZJRworCWxkcglyMSwJU0RSQU1fQ09ORklHX1ZBTAorCXN0cglyMSwJW3IwXQorCisJLyogbWFudWFsIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKwlsZHIJcjAsCVJFR19TRFJBTV9NQU5VQUxfQ01ECisJLyogaXNzdWUgc2V0IGNrZSBoaWdoICovCisJbW92CXIxLAkjQ01EX1NEUkFNX0NLRV9TRVRfSElHSAorCXN0cglyMSwJW3IwXQorCS8qIGlzc3VlIG5vcCAqLworCW1vdglyMSwJI0NNRF9TRFJBTV9OT1AKKwlzdHIJcjEsCVtyMF0KKworCW1vdglyMiwJIzB4MDEwMAord2FpdE1ERFIxOgorCXN1YnMJcjIsCXIyLAkgIzEKKwlibmUJd2FpdE1ERFIxCS8qIGRlbGF5IGxvb3AgKi8KKworCS8qIGlzc3VlIHByZWNoYXJnZSAqLworCW1vdglyMSwJI0NNRF9TRFJBTV9QUkVDSEFSR0UKKwlzdHIJcjEsCVtyMF0KKworCS8qIGlzc3VlIGF1dG9yZWZyZXNoIHggMiAqLworCW1vdglyMSwJI0NNRF9TRFJBTV9BVVRPUkVGUkVTSAorCXN0cglyMSwJW3IwXQorCXN0cglyMSwJW3IwXQorCisJLyogbXJzIHJlZ2lzdGVyIGRkciBtb2JpbGUgKi8KKwlsZHIJcjAsCVJFR19TRFJBTV9NUlMKKwltb3YJcjEsCSMweDMzCisJc3RyCXIxLAlbcjBdCisKKwkvKiBlbXJzMSBsb3ctcG93ZXIgcmVnaXN0ZXIgKi8KKwlsZHIJcjAsCVJFR19TRFJBTV9FTVJTMQorCS8qIHNlbGYgcmVmcmVzaCBvbiBhbGwgYmFua3MgKi8KKwltb3YJcjEsCSMwCisJc3RyCXIxLAlbcjBdCisKKwlsZHIJcjAsCVJFR19ETExfVVJEX0NPTlRST0wKKwlsZHIJcjEsCURMTF9VUkRfQ09OVFJPTF9WQUwKKwlzdHIJcjEsCVtyMF0KKworCWxkcglyMCwJUkVHX0RMTF9MUkRfQ09OVFJPTAorCWxkcglyMSwJRExMX0xSRF9DT05UUk9MX1ZBTAorCXN0cglyMSwJW3IwXQorCisJbGRyCXIwLAlSRUdfRExMX1dSVF9DT05UUk9MCisJbGRyCXIxLAlETExfV1JUX0NPTlRST0xfVkFMCisJc3RyCXIxLAlbcjBdCisKKwkvKiBkZWxheSBsb29wICovCisJbW92CXIyLAkjMHgwMTAwCit3YWl0TUREUjI6CisJc3VicwlyMiwJcjIsCSMxCisJYm5lCXdhaXRNRERSMgorCisJLyoKKwkgKiBEZWxheSBmb3IgU0RSQU0gaW5pdGlhbGl6YXRpb24uCisJICovCisJbW92CXIzLAkjMHgxODAwCis0OgorCXN1YnMJcjMsCXIzLAkjMQkvKiBEZWNyZW1lbnQgY291bnQuICovCisJYm5lCTRiCisJYgljb21tb25fdGMKKworc2tpcF9zZHJhbToKKworCWxkcglyMCwJUkVHX1NEUkFNX0NPTkZJRworCWxkcglyMSwJU0RSQU1fQ09ORklHX1ZBTAorCXN0cglyMSwJW3IwXQorCitjb21tb25fdGM6CisJLyogc2xvdyBpbnRlcmZhY2UgKi8KKwlsZHIJcjEsCVZBTF9UQ19FTUlGU19DUzBfQ09ORklHCisJbGRyCXIwLAlSRUdfVENfRU1JRlNfQ1MwX0NPTkZJRworCXN0cglyMSwJW3IwXSAvKiBDaGlwIFNlbGVjdCAwICovCisKKwlsZHIJcjEsCVZBTF9UQ19FTUlGU19DUzFfQ09ORklHCisJbGRyCXIwLAlSRUdfVENfRU1JRlNfQ1MxX0NPTkZJRworCXN0cglyMSwJW3IwXSAvKiBDaGlwIFNlbGVjdCAxICovCisJbGRyCXIxLAlWQUxfVENfRU1JRlNfQ1MzX0NPTkZJRworCWxkcglyMCwJUkVHX1RDX0VNSUZTX0NTM19DT05GSUcKKwlzdHIJcjEsCVtyMF0gLyogQ2hpcCBTZWxlY3QgMyAqLworCisjaWZkZWYgQ09ORklHX0gyX09NQVAxNjEwCisJLyogaW5zZXJ0aW5nIGFkZGl0aW9uYWwgMiBjbG9jayBjeWNsZSBob2xkIHRpbWUgZm9yIExBTiAqLworCWxkciAgICAgcjAsICAgICBSRUdfVENfRU1JRlNfQ1MxX0FEVkFOQ0VECisJbGRyICAgIAlyMSwgICAgIFZBTF9UQ19FTUlGU19DUzFfQURWQU5DRUQKKwlzdHIgICAgIHIxLCAgICAgW3IwXQorI2VuZGlmCisJLyogU3RhcnQgTVBVIFRpbWVyIDEgKi8KKwlsZHIJcjAsCVJFR19NUFVfTE9BRF9USU1FUgorCWxkcglyMSwJVkFMX01QVV9MT0FEX1RJTUVSCisJc3RyCXIxLAlbcjBdCisKKwlsZHIJcjAsCVJFR19NUFVfQ05UTF9USU1FUgorCWxkcglyMSwJVkFMX01QVV9DTlRMX1RJTUVSCisJc3RyCXIxLAlbcjBdCisKKwkvKiBiYWNrIHRvIGFyY2ggY2FsbGluZyBjb2RlICovCisJbW92CXBjLAlscgorCisJLyogdGhlIGxpdGVyYWwgcG9vbHMgb3JpZ2luICovCisJLmx0b3JnCisKKworUkVHX1RDX0VNSUZTX0NPTkZJRzoJCS8qIDMyIGJpdHMgKi8KKwkud29yZCAweGZmZmVjYzBjCitSRUdfVENfRU1JRlNfQ1MwX0NPTkZJRzoJLyogMzIgYml0cyAqLworCS53b3JkIDB4ZmZmZWNjMTAKK1JFR19UQ19FTUlGU19DUzFfQ09ORklHOgkvKiAzMiBiaXRzICovCisJLndvcmQgMHhmZmZlY2MxNAorUkVHX1RDX0VNSUZTX0NTMl9DT05GSUc6CS8qIDMyIGJpdHMgKi8KKwkud29yZCAweGZmZmVjYzE4CitSRUdfVENfRU1JRlNfQ1MzX0NPTkZJRzoJLyogMzIgYml0cyAqLworCS53b3JkIDB4ZmZmZWNjMWMKKworI2lmZGVmIENPTkZJR19IMl9PTUFQMTYxMAorUkVHX1RDX0VNSUZTX0NTMV9BRFZBTkNFRDoJLyogMzIgYml0cyAqLworCS53b3JkIDB4ZmZmZWNjNTQKKyNlbmRpZgorCisvKiBNUFUgY2xvY2svcmVzZXQvcG93ZXIgbW9kZSBjb250cm9sIHJlZ2lzdGVycyAqLworUkVHX0FSTV9DS0NUTDoJCQkvKiAxNiBiaXRzICovCisJLndvcmQgMHhmZmZlY2UwMAorCitSRUdfQVJNX0lETEVDVDM6CQkvKiAxNiBiaXRzICovCisJLndvcmQgMHhmZmZlY2UyNAorUkVHX0FSTV9JRExFQ1QyOgkJLyogMTYgYml0cyAqLworCS53b3JkIDB4ZmZmZWNlMDgKK1JFR19BUk1fSURMRUNUMToJCS8qIDE2IGJpdHMgKi8KKwkud29yZCAweGZmZmVjZTA0CisKK1JFR19BUk1fUlNUQ1QyOgkJCS8qIDE2IGJpdHMgKi8KKwkud29yZCAweGZmZmVjZTE0CitSRUdfQVJNX1NZU1NUOgkJCS8qIDE2IGJpdHMgKi8KKwkud29yZCAweGZmZmVjZTE4CisvKiBEUExMIGNvbnRyb2wgcmVnaXN0ZXJzICovCitSRUdfRFBMTDFfQ1RMOgkJCS8qIDE2IGJpdHMgKi8KKwkud29yZCAweGZmZmVjZjAwCisKKy8qIFdhdGNoIERvZyByZWdpc3RlciAqLworLyogc2VjdXJlIHdhdGNoZG9nIHN0b3AgKi8KK1JFR19XU1BSRE9HOgorCS53b3JkIDB4ZmZmZWIwNDgKKy8qIHdhdGNoZG9nIHdyaXRlIHBlbmRpbmcgKi8KK1JFR19XV1BTRE9HOgorCS53b3JkIDB4ZmZmZWIwMzQKKworV1NQUkRPR19WQUwxOgorCS53b3JkIDB4MDAwMGFhYWEKK1dTUFJET0dfVkFMMjoKKwkud29yZCAweDAwMDA1NTU1CisKKy8qIFNEUkFNIGNvbmZpZyBpczogYXV0byByZWZyZXNoIGVuYWJsZWQsIDE2IGJpdCA0IGJhbmssCisgY291bnRlciBAODE5MiByb3dzLCAxMCBucywgOCBidXJzdCAqLworUkVHX1NEUkFNX0NPTkZJRzoKKwkud29yZCAweGZmZmVjYzIwCisKKy8qIE9wZXJhdGlvbiByZWdpc3RlciAqLworUkVHX1NEUkFNX09QRVJBVElPTjoKKwkud29yZCAweGZmZmVjYzgwCisKKy8qIE1hbnVhbCBjb21tYW5kIHJlZ2lzdGVyICovCitSRUdfU0RSQU1fTUFOVUFMX0NNRDoKKwkud29yZCAweGZmZmVjYzg0CisKKy8qIFNEUkFNIE1SUyAoTmV3KSBjb25maWcgaXM6IENBUyBsYXRlbmN5IGlzIDIsIGJ1cnN0IGxlbmd0aCA4ICovCitSRUdfU0RSQU1fTVJTOgorCS53b3JkIDB4ZmZmZWNjNzAKKworLyogU0RSQU0gTVJTIChOZXcpIGNvbmZpZyBpczogQ0FTIGxhdGVuY3kgaXMgMiwgYnVyc3QgbGVuZ3RoIDggKi8KK1JFR19TRFJBTV9FTVJTMToKKwkud29yZCAweGZmZmVjYzc4CisKKy8qIFdSVCBETEwgcmVnaXN0ZXIgKi8KK1JFR19ETExfV1JUX0NPTlRST0w6CisJLndvcmQgMHhmZmZlY2M2OAorRExMX1dSVF9DT05UUk9MX1ZBTDoKKwkud29yZCAweDAzZjAwMDAyCisKKy8qIFVSRCBETEwgcmVnaXN0ZXIgKi8KK1JFR19ETExfVVJEX0NPTlRST0w6CisJLndvcmQgMHhmZmZlY2NjMAorRExMX1VSRF9DT05UUk9MX1ZBTDoKKwkud29yZCAweDAwODAwMDAyCisKKy8qIExSRCBETEwgcmVnaXN0ZXIgKi8KK1JFR19ETExfTFJEX0NPTlRST0w6CisJLndvcmQgMHhmZmZlY2NjYworCitSRUdfV0FUQ0hET0c6CisJLndvcmQgMHhmZmZlYzgwOAorCitSRUdfTVBVX0xPQURfVElNRVI6CisJLndvcmQgMHhmZmZlYzYwMAorUkVHX01QVV9DTlRMX1RJTUVSOgorCS53b3JkIDB4ZmZmZWM1MDAKKworLyogOTYgTUh6IFNhbXN1bmcgTW9iaWxlIEREUiAqLworU0RSQU1fQ09ORklHX1ZBTDoKKwkud29yZCAweDAwMTIwMGY0CisKK0RMTF9MUkRfQ09OVFJPTF9WQUw6CisJLndvcmQgMHgwMDgwMDAwMgorCitWQUxfQVJNX0NLQ1RMOgorCS53b3JkIDB4MzAwMAorVkFMX0RQTEwxX0NUTDoKKwkud29yZCAweDI4MzAKKworI2lmZGVmIENPTkZJR19PU0tfT01BUDU5MTIKK1ZBTF9UQ19FTUlGU19DUzBfQ09ORklHOgorCS53b3JkIDB4MDAyMTMwYjAKK1ZBTF9UQ19FTUlGU19DUzFfQ09ORklHOgorCS53b3JkIDB4MDAwMDExMzEKK1ZBTF9UQ19FTUlGU19DUzJfQ09ORklHOgorCS53b3JkIDB4MDAwMDU1ZjAKK1ZBTF9UQ19FTUlGU19DUzNfQ09ORklHOgorCS53b3JkIDB4ODgwMTExMzEKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0gyX09NQVAxNjEwCitWQUxfVENfRU1JRlNfQ1MwX0NPTkZJRzoKKwkud29yZCAweDAwMjAzMzMxCitWQUxfVENfRU1JRlNfQ1MxX0NPTkZJRzoKKwkud29yZCAweDgxODBmZmYzCitWQUxfVENfRU1JRlNfQ1MyX0NPTkZJRzoKKwkud29yZCAweGY4MDBmMjJhCitWQUxfVENfRU1JRlNfQ1MzX0NPTkZJRzoKKwkud29yZCAweDg4MDExMTMxCitWQUxfVENfRU1JRlNfQ1MxX0FEVkFOQ0VEOgorCS53b3JkIDB4MDAwMDAwMjIKKyNlbmRpZgorCitWQUxfVENfRU1JRkZfU0RSQU1fQ09ORklHOgorCS53b3JkIDB4MDEwMjkwZmMKK1ZBTF9UQ19FTUlGRl9NUlM6CisJLndvcmQgMHgwMDAwMDAyNworCitWQUxfQVJNX0lETEVDVDE6CisJLndvcmQgMHgwMDAwMDQwMAorCitWQUxfQVJNX0lETEVDVDI6CisJLndvcmQgMHgwMDAwMDg4NgorVkFMX0FSTV9JRExFQ1QzOgorCS53b3JkIDB4MDAwMDAwMTUKKworV0FUQ0hET0dfVkFMMToKKwkud29yZCAweDAwMDAwMGY1CitXQVRDSERPR19WQUwyOgorCS53b3JkIDB4MDAwMDAwYTAKKworVkFMX01QVV9MT0FEX1RJTUVSOgorCS53b3JkIDB4ZmZmZmZmZmYKK1ZBTF9NUFVfQ05UTF9USU1FUjoKKwkud29yZCAweGZmZmZmZmExCisKKy8qIGNvbW1hbmQgdmFsdWVzICovCisuZXF1IENNRF9TRFJBTV9OT1AsCQkweDAwMDAwMDAwCisuZXF1IENNRF9TRFJBTV9QUkVDSEFSR0UsCTB4MDAwMDAwMDEKKy5lcXUgQ01EX1NEUkFNX0FVVE9SRUZSRVNILAkweDAwMDAwMDAyCisuZXF1IENNRF9TRFJBTV9DS0VfU0VUX0hJR0gsCTB4MDAwMDAwMDcKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXA1OTEyb3NrL3UtYm9vdC5sZHMgYi9ib2FyZC9vbWFwNTkxMm9zay91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMWYwODAKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9vbWFwNTkxMm9zay91LWJvb3QubGRzCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDItMjAwNAorICogR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKK09VVFBVVF9GT1JNQVQoImVsZjMyLWxpdHRsZWFybSIsICJlbGYzMi1saXR0bGVhcm0iLCAiZWxmMzItbGl0dGxlYXJtIikKK09VVFBVVF9BUkNIKGFybSkKK0VOVFJZKF9zdGFydCkKK1NFQ1RJT05TCit7CisJLiA9IDB4MDAwMDAwMDA7CisJLiA9IEFMSUdOKDQpOworCS50ZXh0CToKKwl7CisJICBjcHUvYXJtOTI2ZWpzL3N0YXJ0Lm8JKC50ZXh0KQorCSAgKigudGV4dCkKKwl9CisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworCV9fdV9ib290X2NtZF9zdGFydCA9IC47CisJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwlfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCS4gPSBBTElHTig0KTsKKwlfX2Jzc19zdGFydCA9IC47CisJLmJzcyA6IHsgKiguYnNzKSB9CisJX2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9vbWFwNzMwcDIvb21hcDczMHAyLmMgYi9ib2FyZC9vbWFwNzMwcDIvb21hcDczMHAyLmMKaW5kZXggNWUyZmEzYi4uNTg1YjZlZSAxMDA2NDQKLS0tIGEvYm9hcmQvb21hcDczMHAyL29tYXA3MzBwMi5jCisrKyBiL2JvYXJkL29tYXA3MzBwMi9vbWFwNzMwcDIuYwpAQCAtMjAsNyArMjAsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTQxLDEyICs0MSwxMiBAQAogdm9pZCBzZXRfbXV4Y29uZl9yZWdzICh2b2lkKTsKIHZvaWQgcGVyaXBoZXJhbF9wb3dlcl9lbmFibGUgKHZvaWQpOwogCi0jZGVmaW5lIEZMQVNIX09OX0NTMCAgICAxCi0jZGVmaW5lIEZMQVNIX09OX0NTMyAgICAwCisjZGVmaW5lIEZMQVNIX09OX0NTMAkxCisjZGVmaW5lIEZMQVNIX09OX0NTMwkwCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSAodW5zaWduZWQgbG9uZyBsb29wcykKIHsKLSAgICAgICAgX19hc21fXyB2b2xhdGlsZSAoIjE6XG4iCisJX19hc21fXyB2b2xhdGlsZSAoIjE6XG4iCiAJCQkgICJzdWJzICUwLCAlMSwgIzFcbiIKIAkJCSAgImJuZSAxYiI6Ij1yIiAobG9vcHMpOiIwIiAobG9vcHMpKTsKIH0KQEAgLTYzLDcgKzYzLDcgQEAKIC8qIFRvZ2dsZSBiYWNrdXAgTEVEIGluZGljYXRpb24gKi8KIHZvaWQgdG9nZ2xlX2JhY2t1cF9sZWQodm9pZCkKIHsKLQlzdGF0aWMgaW50ICBiYWNrdXBMRURTdGF0ZSA9IDA7ICAvKiBJbml0IHZhcmlhYmxlIHNvIHRoYXQgdGhlIExFRCB3aWxsIGJlIE9OIHRoZSBmaXJzdCB0aW1lICovCisJc3RhdGljIGludCAgYmFja3VwTEVEU3RhdGUgPSAwOwkgLyogSW5pdCB2YXJpYWJsZSBzbyB0aGF0IHRoZSBMRUQgd2lsbCBiZSBPTiB0aGUgZmlyc3QgdGltZSAqLwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqSU9Db25mUmVnOwogCiAKQEAgLTE0NSwxOCArMTQ1LDE4IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGZsYXNoX19pbml0ICh2b2lkKQogewotICAgICAgICB1bnNpZ25lZCBpbnQgcmVndmFsOworCXVuc2lnbmVkIGludCByZWd2YWw7CiAKLSAgICAgICAgcmVndmFsID0gKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIEVNSUZTX0NPTkZJRyk7Ci0gICAgICAgIC8qIFR1cm4gb2ZmIHdyaXRlIHByb3RlY3Rpb24gZm9yIGZsYXNoIGRldmljZXMuICovCi0gICAgICAgIHJlZ3ZhbCA9IHJlZ3ZhbCB8IDB4MDAwMTsKLSAgICAgICAgKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIEVNSUZTX0NPTkZJRykgPSByZWd2YWw7CisJcmVndmFsID0gKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIEVNSUZTX0NPTkZJRyk7CisJLyogVHVybiBvZmYgd3JpdGUgcHJvdGVjdGlvbiBmb3IgZmxhc2ggZGV2aWNlcy4gKi8KKwlyZWd2YWwgPSByZWd2YWwgfCAweDAwMDE7CisJKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIEVNSUZTX0NPTkZJRykgPSByZWd2YWw7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgUm91dGluZTpldGhlcl9faW5pdAogIERlc2NyaXB0aW9uOiB0YWtlIHRoZSBFdGhlcm5ldCBjb250cm9sbGVyIG91dCBvZiByZXNldCBhbmQgd2FpdAotCSAgCQkgICBmb3IgdGhlIEVFUFJPTSBsb2FkIHRvIGNvbXBsZXRlLgorCQkJICAgZm9yIHRoZSBFRVBST00gbG9hZCB0byBjb21wbGV0ZS4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGV0aGVyX19pbml0ICh2b2lkKQogewpAQCAtMTk2LDcgKzE5Niw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgUm91dGluZTogc2V0X211eGNvbmZfcmVncwogIERlc2NyaXB0aW9uOiBTZXR0aW5nIHVwIHRoZSBjb25maWd1cmF0aW9uIE11eCByZWdpc3RlcnMKLSAJCQkgIHNwZWNpZmljIHRvIHRoZSBoYXJkd2FyZQorCQkJICBzcGVjaWZpYyB0byB0aGUgaGFyZHdhcmUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIHNldF9tdXhjb25mX3JlZ3MgKHZvaWQpCiB7CkBAIC0yMDksMTIgKzIwOSwxMiBAQAogCiAJLyogQ29uZmlndXJlIE1VWGVkIHBpbi4gTW9kZSA2OiBHUElPXzE0MCAqLwogCU11eENvbmZSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChQRVJTRVVTMl9JT19DT05GMTApOwotCSpNdXhDb25mUmVnICY9ICgweEZGRkZGRjFGKTsgICAgICAgICAvKiBDbGVhciBEX01QVV9MUEcxICovCi0JKk11eENvbmZSZWcgfD0gMHgwMDAwMDBDMDsgICAgICAgICAgIC8qIFNldCBEX01QVV9MUEcxIHRvIDB4NiAqLworCSpNdXhDb25mUmVnICY9ICgweEZGRkZGRjFGKTsJICAgICAvKiBDbGVhciBEX01QVV9MUEcxICovCisJKk11eENvbmZSZWcgfD0gMHgwMDAwMDBDMDsJICAgICAvKiBTZXQgRF9NUFVfTFBHMSB0byAweDYgKi8KIAogCS8qIENvbmZpZ3VyZSBHUElPXzE0MCBhcyBvdXRwdXQgKi8KIAlNdXhDb25mUmVnID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHVuc2lnbmVkIGludCkgT01BUDczMF9HUElPX0JBU0VfNSArIEdQSU9fRElSRUNUSU9OX0NPTlRST0wpOwotCSpNdXhDb25mUmVnICY9ICgweEZGRkZFRkZGKTsgICAgICAgICAvKiBDbGVhciBkaXJlY3Rpb24gKG91dHB1dCkgZm9yIEdQSU8gMTQwICovCisJKk11eENvbmZSZWcgJj0gKDB4RkZGRkVGRkYpOwkgICAgIC8qIENsZWFyIGRpcmVjdGlvbiAob3V0cHV0KSBmb3IgR1BJTyAxNDAgKi8KIAogCS8qCiAJICogQ29uZmlndXJlIEdQSU9zIGZvciBiYXR0ZXJ5IGNoYXJnZSAmIGZlZWRiYWNrCkBAIC0yMjIsMjQgKzIyMiwyNCBAQAogCiAJLyogQ29uZmlndXJlIE1VWGVkIHBpbi4gTW9kZSA2OiBHUElPXzM1ICovCiAJTXV4Q29uZlJlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKFBFUlNFVVMyX0lPX0NPTkYzKTsKLQkqTXV4Q29uZlJlZyAmPSAweEZGRkZGRkYxOyAgICAgICAgICAgLyogQ2xlYXIgTV9DTEtfT1VUICovCi0JKk11eENvbmZSZWcgfD0gMHgwMDAwMDAwQzsgICAgICAgICAgIC8qIFNldCBNX0NMS19PVVQgPSAweDYgKEdQSU9zKSAqLworCSpNdXhDb25mUmVnICY9IDB4RkZGRkZGRjE7CSAgICAgLyogQ2xlYXIgTV9DTEtfT1VUICovCisJKk11eENvbmZSZWcgfD0gMHgwMDAwMDAwQzsJICAgICAvKiBTZXQgTV9DTEtfT1VUID0gMHg2IChHUElPcykgKi8KIAogCS8qIENvbmZpZ3VyZSBNVVhlZCBwaW4uIE1vZGUgNjogR1BJT183Miw3Myw3NCAqLwogCU11eENvbmZSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChQRVJTRVVTMl9JT19DT05GNSk7Ci0JKk11eENvbmZSZWcgJj0gMHhGRkZGMUZGRjsgICAgICAgICAgIC8qIENsZWFyIERfRERSICovCi0JKk11eENvbmZSZWcgfD0gMHgwMDAwQzAwMDsgICAgICAgICAgIC8qIFNldCBEX0REUiA9IDB4NiAoR1BJT3MpICovCisJKk11eENvbmZSZWcgJj0gMHhGRkZGMUZGRjsJICAgICAvKiBDbGVhciBEX0REUiAqLworCSpNdXhDb25mUmVnIHw9IDB4MDAwMEMwMDA7CSAgICAgLyogU2V0IERfRERSID0gMHg2IChHUElPcykgKi8KIAogCU11eENvbmZSZWcgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodW5zaWduZWQgaW50KSBPTUFQNzMwX0dQSU9fQkFTRV8zICsgR1BJT19ESVJFQ1RJT05fQ09OVFJPTCk7Ci0JKk11eENvbmZSZWcgfD0gMHgwMDAwMDEwMDsgICAgICAgICAgIC8qIENvbmZpZ3VyZSBHUElPXzcyIGFzIGlucHV0ICovCi0JKk11eENvbmZSZWcgJj0gMHhGRkZGRkRGRjsgICAgICAgICAgIC8qIENvbmZpZ3VyZSBHUElPXzczIGFzIG91dHB1dAkqLworCSpNdXhDb25mUmVnIHw9IDB4MDAwMDAxMDA7CSAgICAgLyogQ29uZmlndXJlIEdQSU9fNzIgYXMgaW5wdXQgKi8KKwkqTXV4Q29uZlJlZyAmPSAweEZGRkZGREZGOwkgICAgIC8qIENvbmZpZ3VyZSBHUElPXzczIGFzIG91dHB1dAkqLwogCiAJLyoKIAkgKiBBbGxvdyBiYXR0ZXJ5IGNoYXJnZQogCSAqLwogCiAJTXV4Q29uZlJlZyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh1bnNpZ25lZCBpbnQpIE9NQVA3MzBfR1BJT19CQVNFXzMgKyBHUElPX0RBVEFfT1VUUFVUKTsKLQkqTXV4Q29uZlJlZyAmPSAoMHhGRkZGRkRGRik7ICAgICAgICAgLyogQ2xlYXIgR1BJT183MyBwaW4gKi8KKwkqTXV4Q29uZlJlZyAmPSAoMHhGRkZGRkRGRik7CSAgICAgLyogQ2xlYXIgR1BJT183MyBwaW4gKi8KIAogCS8qCiAJICogQ29uZmlndXJlIE1QVV9FWFRfTklSUSBJTyBpbiBJT19DT05GOSByZWdpc3RlciwKZGlmZiAtLWdpdCBhL2JvYXJkL29tYXA3MzBwMi9wbGF0Zm9ybS5TIGIvYm9hcmQvb21hcDczMHAyL3BsYXRmb3JtLlMKaW5kZXggMWYxYzk1YS4uZjMwYzI0MiAxMDA2NDQKLS0tIGEvYm9hcmQvb21hcDczMHAyL3BsYXRmb3JtLlMKKysrIGIvYm9hcmQvb21hcDczMHAyL3BsYXRmb3JtLlMKQEAgLTM5MSw1ICszOTEsNSBAQAogLmVxdQlDT05GX01PRF9VQVJUMV9DTEtfTU9ERV9SLAkweDBBCiAKIC8qIG1pc2MgdmFsdWVzICovCi0uZXF1CUlSUV9NQVNLLAkJMHg4MCAgICAgICAgICAgLy8gSVJRIG1hc2sgdmFsdWUKLS5lcXUJRklRX01BU0ssCQkweDQwICAgICAgICAgICAvLyBGSVEgbWFzayB2YWx1ZQorLmVxdQlJUlFfTUFTSywJCTB4ODAgICAgICAgICAgIC8qIElSUSBtYXNrIHZhbHVlICovCisuZXF1CUZJUV9NQVNLLAkJMHg0MCAgICAgICAgICAgLyogRklRIG1hc2sgdmFsdWUgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3JtdS9ybXUuYyBiL2JvYXJkL3JtdS9ybXUuYwppbmRleCBlMTFiNWI4Li5jZjAwZWZjIDEwMDY0NAotLS0gYS9ib2FyZC9ybXUvcm11LmMKKysrIGIvYm9hcmQvcm11L3JtdS5jCkBAIC02OSw3ICs2OSw3IEBACiAJICovCiAJMHgwRkYwQ0MyNCwgMHhGRkZGQ0MyNCwgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCAweEVGRkI4QzM0LCAweDBGRjc0QzM0LAotCTB4MEZGQUNDQjQsIDB4MEZGNUNDMzQsIDB4MEZGQ0MzNCwgMHgwRkZGQ0NCNCwKKwkweDBGRkFDQ0I0LCAweDBGRjVDQzM0LCAweDBGRkZDQzM0LCAweDBGRkZDQ0I0LAogCiAJLyoKIAkgKiBFeGNlcHRpb24uIChPZmZzZXQgM0NoIGluIFVQTUEgUkFNKQpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5vbWFwNzMwcDIgYi9kb2MvUkVBRE1FLm9tYXA3MzBwMgppbmRleCA1MDUyMzRmLi43YzcwOTE2IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLm9tYXA3MzBwMgorKysgYi9kb2MvUkVBRE1FLm9tYXA3MzBwMgpAQCAtMSwxMyArMSwxMyBAQAogCi0gICAgICAgICAgICAgICAgICAgICB1LWJvb3QgZm9yIHRoZSBUSSBPTUFQNzMwIFBlcnNldXMyCisJCSAgICAgdS1ib290IGZvciB0aGUgVEkgT01BUDczMCBQZXJzZXVzMgogCi0gICAgICAgICAgICAgICAgICAgICAgRGF2ZSBQZXZlcmxleSwgTVBDLURhdGEgTGltaXRlZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1wYy1kYXRhLmNvLnVrCisJCSAgICAgIERhdmUgUGV2ZXJsZXksIE1QQy1EYXRhIExpbWl0ZWQKKwkJCSBodHRwOi8vd3d3Lm1wYy1kYXRhLmNvLnVrCiAKIAogT3ZlcnZpZXcgOgogCi0gQXMgdGhlIE9NQVA3MzAgaXMgc2ltaWxhciB0byB0aGUgT01BUDE2MTAgaW4gbWFueSB3YXlzLCB0aGlzIHBvcnQgd2FzIGJhc2VkIAorIEFzIHRoZSBPTUFQNzMwIGlzIHNpbWlsYXIgdG8gdGhlIE9NQVAxNjEwIGluIG1hbnkgd2F5cywgdGhpcyBwb3J0IHdhcyBiYXNlZAogb24gdGhlIHUtYm9vdCBwb3J0IHRvIHRoZSBPTUFQMTYxMCBJbm5vdmF0b3IuIFN1cHBvcnRlZCBmZWF0dXJlcyBhcmUgOgogCiAgIC0gU2VyaWFsIHRlcm1pbmFsIHN1cHBvcnQKQEAgLTE5LDE5ICsxOSwxNyBAQAogMy4yLjEgY3Jvc3MtY29tcGlsZXIgYXMgd2VsbCBhcyBNb250YXZpc3RhIExpbnV4IENFRSAzLjEncyB0b29sY2hhaW4uCiAKIAotCiBIYXJkd2FyZSBDb25maWd1cmF0aW9uIDoKIAotIFRoZSBtYWluIGRpcHMgb24gdGhlIFAyIGJvYXJkIHNob3VsZCBiZSBzZXQgdG8gMiwzLDcgYW5kIDkgb24gd2l0aCBhbGwgCisgVGhlIG1haW4gZGlwcyBvbiB0aGUgUDIgYm9hcmQgc2hvdWxkIGJlIHNldCB0byAyLDMsNyBhbmQgOSBvbiB3aXRoIGFsbAogb3RoZXJzIG9mZi4gT24gdGhlIGRlYnVnIGJvYXJkLCBkaXBzIDEgYW5kIDcgc2hvdWxkIGJlIG9uIHdpdGggdGhlIHJlc3Qgb2ZmLgotVGhlIHNlcmlhbCBjb25zb2xlIGhhcyBiZWVuIHNldCB1cCB0byBydW4gZnJvbSB0aGUgREI5IGNvbm5lY3RvciBvbiB0aGUgCi1QMiBib2FyZCBhdCAxMTUyMDAgYmF1ZCwgOCBkYXRhIGJpdHMsIG5vIHN0b3AgYml0cywgMSBwYXJpdHkgYml0LiAKK1RoZSBzZXJpYWwgY29uc29sZSBoYXMgYmVlbiBzZXQgdXAgdG8gcnVuIGZyb20gdGhlIERCOSBjb25uZWN0b3Igb24gdGhlCitQMiBib2FyZCBhdCAxMTUyMDAgYmF1ZCwgOCBkYXRhIGJpdHMsIG5vIHN0b3AgYml0cywgMSBwYXJpdHkgYml0LgogCiAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIFAyIGJvYXJkIGhhcyBOT1IgZmxhc2ggdGhhdCBpcyBhZGRyZXNzYWJsZSB2aWEKLWVpdGhlciBDUzAgb3IgQ1MzLiBUaGlzIG1vZGUgY2FuIGJlIGNoYW5nZWQgdmlhIERJUDkgb24gdGhlIFAyIGJvYXJkLiAKK2VpdGhlciBDUzAgb3IgQ1MzLiBUaGlzIG1vZGUgY2FuIGJlIGNoYW5nZWQgdmlhIERJUDkgb24gdGhlIFAyIGJvYXJkLgogCiAKLQogSW5zdGFsbGluZyB1LWJvb3QgZm9yIHRoZSBQMiA6CiAKICBZb3UgY2FuIHNpbXBseSBidWlsZCB1LWJvb3QgZm9yIHRoZSBQZXJzZXVzIGJ5IGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zCkBAIC00MSw0MSArMzksNDAgQEAKICAgJCBjcCB1LWJvb3QgdS1ib290Lm91dAogICAkIGFybS1saW51eC1zdHJpcCB1LWJvb3Qub3V0CiAKLSBUaGUgbWV0aG9kIHdlJ3ZlIHVzZWQgZm9yIGluc3RhbGxpbmcgdS1ib290IHRoZSBmaXJzdCB0aW1lIG9uIGEgUDIgaXMgCisgVGhlIG1ldGhvZCB3ZSd2ZSB1c2VkIGZvciBpbnN0YWxsaW5nIHUtYm9vdCB0aGUgZmlyc3QgdGltZSBvbiBhIFAyIGlzCiBhcyBmb2xsb3dzIDoKIAotMSkgQ29uZmlndXJlIFRJIENvZGUgQ29tcG9zZXIgU3R1ZGlvIHRvIGNvbm5lY3QgdG8gdGhlIFAyIGJvYXJkIHZpYSBKVEFHIAorMSkgQ29uZmlndXJlIFRJIENvZGUgQ29tcG9zZXIgU3R1ZGlvIHRvIGNvbm5lY3QgdG8gdGhlIFAyIGJvYXJkIHZpYSBKVEFHCiAgICBhcyBkZXNjcmliZWQgaW4gdGhlIFVzZXJzIEd1aWRlLgogCi0yKSBTZXQgdXAgdGhlIFAyIHRvIGJvb3QgZnJvbSBDUzMsIGFuZCBjb25uZWN0IHdpdGggQ0NTLiBSZXNldCB0aGUgQ1BVIAotICAgYW5kIHJ1biB0aGUgImluaXRfbW11IiBHRUwgc2NyaXB0LiAKKzIpIFNldCB1cCB0aGUgUDIgdG8gYm9vdCBmcm9tIENTMywgYW5kIGNvbm5lY3Qgd2l0aCBDQ1MuIFJlc2V0IHRoZSBDUFUKKyAgIGFuZCBydW4gdGhlICJpbml0X21tdSIgR0VMIHNjcmlwdC4KIAogMykgVXNlIHRoZSAiTG9hZCBQcm9ncmFtIiBvcHRpb24gdG8gc2VuZCB0aGUgdS1ib290Lm91dCBmaWxlIHRvIHRoZSBQMiBhbmQKLSAgIHJ1bi4gCisgICBydW4uCiAKICBBdCB0aGlzIHBvaW50LCB1LWJvb3Qgc2hvdWxkIHJ1biBhbmQgeW91IHdpbGwgc2VlIHRoZSBib290IG1lbnUgb24geW91cgogc2VyaWFsIHRlcm1pbmFsLiBZb3UgY2FuIHRoZW4gbG9hZCB0aGUgdS1ib290IGltYWdlIHRvIG1lbW9yeSA6CiAKICAgIyBsb2FkYiAweDEwMDAwMDAwCiAKLSBTZW5kIHRoZSAidS1ib290LmJpbiIgYmluYXJ5IHZpYSB0aGUgc2VyaWFsIHVzaW5nIEtlcm1pdC4gT25jZSBsb2FkZWQgCisgU2VuZCB0aGUgInUtYm9vdC5iaW4iIGJpbmFyeSB2aWEgdGhlIHNlcmlhbCB1c2luZyBLZXJtaXQuIE9uY2UgbG9hZGVkCiB5b3UgY2FuIHNlbGYtZmxhc2ggdS1ib290IDoKIAogICAjIHByb3RlY3Qgb2ZmIDE6MAogICAjIGVyYXNlIDE6MAogICAjIGNwLmIgMHgxMDAwMDAwMCAweDAgMHgyMDAwMAotIAotIFlvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gcmVzZXQgdGhlIGJvYXJkIGFuZCBydW4gdS1ib290IGZyb20gZmxhc2guCiAKKyBZb3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIHJlc2V0IHRoZSBib2FyZCBhbmQgcnVuIHUtYm9vdCBmcm9tIGZsYXNoLgogCiAKIEFsdGVybmF0aXZlIGZsYXNoIG9wdGlvbiA6CiAKICBTb21ldGltZXMsIGlmIHlvdSd2ZSBiZWVuIHNpbGx5LCB5b3UgY2FuIGdldCB0aGUgYm9hcmQgaW50byBhIHN0YXRlIHdoZXJlCiB3aGF0cyBpbiBmbGFzaCBoYXMgdXBzZXQgdGhlIGJvYXJkIHNvIG11Y2ggdGhhdCB5b3UgY2FuIG5vIGxvbmdlciBjb25uZWN0Ci10byB0aGUgUDIgdmlhIEpUQUcuIEhvd2V2ZXIsIHlvdSBjYW4gc2V0IERJUDkgdG8gb2ZmIHRvIHN3YXAgdGhlIGJvb3QgbW9kZSAKK3RvIHRoZSBQMiB2aWEgSlRBRy4gSG93ZXZlciwgeW91IGNhbiBzZXQgRElQOSB0byBvZmYgdG8gc3dhcCB0aGUgYm9vdCBtb2RlCiBvZiB0aGUgUDIgc28gdGhhdCB5b3UgYm9vdCBmcm9tIFJBTSBpbnN0ZWFkIG9mIE5PUiBmbGFzaC4gVGhpcyBtb3ZlcyBOT1IKLWZsYXNoIHVwIHRvIDB4MEMwMDAwMDAuIFlvdSBjYW4gYnVpbGQgYSBzcGVjaWFsIHZlcnNpb24gb2YgdS1ib290IHRvIAorZmxhc2ggdXAgdG8gMHgwQzAwMDAwMC4gWW91IGNhbiBidWlsZCBhIHNwZWNpYWwgdmVyc2lvbiBvZiB1LWJvb3QgdG8KIHV0aWxpc2UgdGhpcyBieSB0aGUgZm9sbG93aW5nIGNvbmZpZyA6CiAKICAgJCBtYWtlIG9tYXA3MzBwMl9jczBib290X2NvbmZpZwpAQCAtODYsMTAgKzgzLDkgQEAKIGZpbmUgYWdhaW4uCiAKIAotCiBFcnJhdGEgOgogCiAxKSBJdCdzIGJlZW4gb2JzZXJ2ZWQgdGhhdCBzb21ldGltZXMgdGhlIHRmdHAgdHJhbnNmZXIgb2Yga2VybmVscyB0byB0aGUKLSAgIGJvYXJkIGNhbiBoYXZlIGNoZWNrc3VtIGVycm9ycyBvciBzdGFsbC4gVGhpcyBhcHBlYXJzIHRvIGJlIGFuIGlzc3VlIAotICAgd2l0aCB0aGUgbGFuOTFjOTYuYyBkcml2ZXIsIGFuZCBjYW4gbm9ybWFsbHkgYmUgd29ya2VkIGFyb3VuZCBieSAKKyAgIGJvYXJkIGNhbiBoYXZlIGNoZWNrc3VtIGVycm9ycyBvciBzdGFsbC4gVGhpcyBhcHBlYXJzIHRvIGJlIGFuIGlzc3VlCisgICB3aXRoIHRoZSBsYW45MWM5Ni5jIGRyaXZlciwgYW5kIGNhbiBub3JtYWxseSBiZSB3b3JrZWQgYXJvdW5kIGJ5CiAgICByZXNldHRpbmcgdGhlIGJvYXJkIGFuZCB0cnlpbmcgYWdhaW4uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvaDJfcDJfZGJnX2JvYXJkLmggYi9pbmNsdWRlL2NvbmZpZ3MvaDJfcDJfZGJnX2JvYXJkLmgKaW5kZXggOGE1ZWMzNC4uNjA4MmQyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2gyX3AyX2RiZ19ib2FyZC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9oMl9wMl9kYmdfYm9hcmQuaApAQCAtMzEsMTMgKzMxLDExIEBACiAjaWZuZGVmIF9fSU5DTFVERURfSDJfUDJfREJIX0JPQVJEX0gKICNkZWZpbmUgX19JTkNMVURFRF9IMl9QMl9EQkhfQk9BUkRfSAogCi0KICNpbmNsdWRlIDxhc20vYXJjaC9zaXplcy5oPgogCi0KIC8qCiAgKiBUaGUgRGVidWcgYm9hcmQgaXMgZGVzaWduZWQgdG8gZnVuY3Rpb24gd2l0aCB0aGUgUDIgU2FtcGxlLCBIMgotICogU2FtcGxlIGFuZCAxNjEwIElubm92YXRvciBib2FyZHMuIFRoZSBtYWluIGRpZmZlcmVuY2UgQUZBSUNUIGlzIAorICogU2FtcGxlIGFuZCAxNjEwIElubm92YXRvciBib2FyZHMuIFRoZSBtYWluIGRpZmZlcmVuY2UgQUZBSUNUIGlzCiAgKiB0aGUgY2hpcCBzZWxlY3RzIHVzZWQgd2l0aCBlYWNoIHN5c3RlbSA7CiAgKgogICogICBQMiBTYW1wbGUgOiBDUzEgb2YgT01BUDczMCBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgQ1BMRCAmIExBTiByZWdzCkBAIC00NSw4ICs0Myw2IEBACiAgKgogICovCiAKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDUExEIFJlZ2lzdGVycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjAsOCArNTYsNiBAQAogI2RlZmluZSBIMkRCR19MQU5fUkVTRVQgICAgICAgICAgICAweDA0MDAwMDFDCiAjZGVmaW5lIEgyREJHX0VUSF9SRUdfQkFTRSAgICAgICAgIDB4MDQwMDAzMDAKIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEV0aGVybmV0IENvbnRyb2wgUmVnaXN0ZXJzCiAgKiBUaGVzZSBhcmUgZm9yIHRoZSBMQU45MUM5NiBvbiB0aGUgZGVidWcgYm9hcmQKQEAgLTEwNyw3ICsxMDEsNyBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogLyoKLSAqIEEgY291cGxlIG9mIHV0aWxpdHkgaW5saW5lcyB0byBhaWQgZGVidWdnaW5nIHVzaW5nIHRoZSBMRUQncyBvbiB0aGUgCisgKiBBIGNvdXBsZSBvZiB1dGlsaXR5IGlubGluZXMgdG8gYWlkIGRlYnVnZ2luZyB1c2luZyB0aGUgTEVEJ3Mgb24gdGhlCiAgKiBkZWJ1ZyBib2FyZC4KICAqLwogCkBAIC0xMjIsNyArMTE2LDcgQEAKIAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl91cF9sZWRzKCkKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCit7CiAJdm9sYXRpbGUgaW50IGksIGosIGs7CiAKIAlmb3IgKGsgPSAwOyBrIDwgMjsgaysrKSB7CkBAIC0xNDIsNCArMTM2LDMgQEAKICNlbmRpZiAgICAvKiAhICBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmICAgIC8qICEgIF9fSU5DTFVERURfSDJfUDJfREJIX0JPQVJEX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXA1OTEyb3NrLmggYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDU5MTJvc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2JlODA3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXA1OTEyb3NrLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMKKyAqIFRleGFzIEluc3RydW1lbnRzLgorICogS3NoaXRpaiBHdXB0YSA8a3NoaXRpakB0aS5jb20+CisgKiBDb25maWd1YXRpb24gc2V0dGluZ3MgZm9yIHRoZSBUSSBPTUFQIElubm92YXRvciBib2FyZC4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogSWYgd2UgYXJlIGRldmVsb3BpbmcsIHdlIG1pZ2h0IHdhbnQgdG8gc3RhcnQgYXJtYm9vdCBmcm9tIHJhbQorICogc28gd2UgTVVTVCBOT1QgaW5pdGlhbGl6ZSBjcml0aWNhbCByZWdzIGxpa2UgbWVtLXRpbWluZyAuLi4KKyAqLworCisjZGVmaW5lIENPTkZJR19JTklUX0NSSVRJQ0FMCQkvKnVuZGVmIGZvciBkZXZlbG9waW5nICovCisKKy8qCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICogKGVhc3kgdG8gY2hhbmdlKQorICovCisjZGVmaW5lIENPTkZJR19BUk05MjZFSlMJMQkvKiBUaGlzIGlzIGFuIGFybTkyNmVqcyBDUFUgY29yZSAgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAJMQkJCS8qIGluIGEgVEkgT01BUCBjb3JlICAgICovCisjZGVmaW5lIENPTkZJR19PTUFQMTYxMAkxCQkvKiA1OTEyIGlzIHNhbWUgYXMgMTYxMCAgKi8KKyNkZWZpbmUgQ09ORklHX09TS19PTUFQNTkxMgkxCS8qICBhIE9TSyBCb2FyZCAgKi8KKworLyogaW5wdXQgY2xvY2sgb2YgUExMICovCisvKiB0aGUgT01BUDU5MTIgT1NLIGhhcyAxMk1IeiBpbnB1dCBjbG9jayAqLworI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTEyMDAwMDAwCisKKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgKi8KKworI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKKworI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcJMQkvKiBlbmFibGUgcGFzc2luZyBvZiBBVEFHcyAgKi8KKyNkZWZpbmUgQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTCTEKKworLyoKKyAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAorICovCisjZGVmaW5lIENGR19NQUxMT0NfTEVOCShDRkdfRU5WX1NJWkUgKyAxMjgqMTAyNCkKKworLyoKKyAqIEhhcmR3YXJlIGRyaXZlcnMKKyAqLworLyoKKyovCisjZGVmaW5lIENPTkZJR19EUklWRVJfTEFOOTFDOTYKKyNkZWZpbmUgQ09ORklHX0xBTjkxQzk2X0JBU0UgMHgwNDgwMDMwMAorI2RlZmluZSBDT05GSUdfTEFOOTFDOTZfRVhUX1BIWQorCisvKgorICogTlMxNjU1MCBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX05TMTY1NTAKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfU0VSSUFMCisjZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFCSgtNCkKKyNkZWZpbmUgQ0ZHX05TMTY1NTBfQ0xLCSg0ODAwMDAwMCkJLyogY2FuIGJlIDEyTS8zMktoeiBvciA0OE1oeiAqLworI2RlZmluZSBDRkdfTlMxNjU1MF9DT00xCTB4ZmZmYjAwMDAJLyogdWFydDEsIGJsdWV0b290aCB1YXJ0CisJCQkJCQlvbiBoZWxlbiAqLworCisvKgorICogc2VsZWN0IHNlcmlhbCBjb25zb2xlIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfU0VSSUFMMQkxCS8qIHdlIHVzZSBTRVJJQUwgMSBvbiBPTUFQNTkxMiBPU0sgKi8KKworLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLworI2RlZmluZSBDT05GSUdfRU5WX09WRVJXUklURQorI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkxCisjZGVmaW5lIENPTkZJR19CQVVEUkFURQkxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KKworI2RlZmluZSBDT05GSUdfQ09NTUFORFMJKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9ESENQKQorI2RlZmluZSBDT05GSUdfQk9PVFBfTUFTSwlDT05GSUdfQk9PVFBfREVGQVVMVAorCisvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisjaW5jbHVkZSA8Y29uZmlncy9vbWFwMTUxMC5oPgorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworI2RlZmluZSBDT05GSUdfQk9PVEFSR1MJIm1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDBuOCBub2luaXRyZCBcCisJCQkJcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE1Ny44Ny44Mi40ODpcCisJCQkJL2hvbWUvbXdkL215ZnMvdGFyZ2V0IGlwPWRoY3AiCisjZGVmaW5lIENPTkZJR19ORVRNQVNLCTI1NS4yNTUuMjU0LjAJLyogdGFsayBvbiBNWSBsb2NhbCBuZXQgKi8KKyNkZWZpbmUgQ09ORklHX0lQQUREUgkxNTYuMTE3Ljk3LjE1NgkvKiBzdGF0aWMgSVAgSSBjdXJyZW50bHkgb3duICovCisjZGVmaW5lIENPTkZJR19TRVJWRVJJUAkxNTYuMTE3Ljk3LjEzOQkvKiBjdXJyZW50IElQIG9mIG15IGRldiBwYyAqLworI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJInVJbWFnZSIJLyogZmlsZSB0byBsb2FkICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkxMTUyMDAJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTEJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIG9wdGlvbnMKKyAqLworI2RlZmluZSBDRkdfTE9OR0hFTFAJLyogdW5kZWYgdG8gc2F2ZSBtZW1vcnkgICAgICovCisjZGVmaW5lIENGR19QUk9NUFQJIk9NQVA1OTEyIE9TSyAjICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAgICovCisjZGVmaW5lIENGR19DQlNJWkUJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgKi8KKy8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19QQlNJWkUJKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KQorI2RlZmluZSBDRkdfTUFYQVJHUwkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgICAqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICAgICovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgxMDAwMDAwMAkvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkweDEyMDAwMDAwCS8qIDMyIE1CIGluIERSQU0gICAgKi8KKworI3VuZGVmCUNGR19DTEtTX0lOX0haCQkvKiBldmVyeXRoaW5nLCBpbmNsIGJvYXJkIGluZm8sIGluIEh6ICovCisKKyNkZWZpbmUgQ0ZHX0xPQURfQUREUgkweDEwMDAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKy8qIFRoZSAxNjEwIGhhcyA2IHRpbWVycywgdGhleSBjYW4gYmUgZHJpdmVuIGJ5IHRoZSBSZWZDbGsgKDEyTWh6KSBvciBieQorICogRFBMTDEuIFRoaXMgdGltZSBpcyBmdXJ0aGVyIHN1YmRpdmlkZWQgYnkgYSBsb2NhbCBkaXZpc29yLgorICovCisjZGVmaW5lIENGR19USU1FUkJBU0UJMHhGRkZFQzUwMAkvKiB1c2UgdGltZXIgMSAqLworI2RlZmluZSBDRkdfUFZUCTcJLyogMl4ocHZ0KzEpLCBkaXZpZGUgYnkgMjU2ICovCisjZGVmaW5lIENGR19IWgkoKENPTkZJR19TWVNfQ0xLX0ZSRVEpLygyIDw8IENGR19QVlQpKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGFjayBzaXplcworICoKKyAqIFRoZSBzdGFjayBzaXplcyBhcmUgc2V0IHVwIGluIHN0YXJ0LlMgdXNpbmcgdGhlIHNldHRpbmdzIGJlbG93CisgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMTI4KjEwMjQpCS8qIHJlZ3VsYXIgc3RhY2sgKi8KKyNpZmRlZiBDT05GSUdfVVNFX0lSUQorI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0lSUQkoNCoxMDI0KQkvKiBJUlEgc3RhY2sgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9GSVEJKDQqMTAyNCkJLyogRklRIHN0YWNrICovCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUGh5c2ljYWwgTWVtb3J5IE1hcAorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEJLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAqLworI2RlZmluZSBQSFlTX1NEUkFNXzEJMHgxMDAwMDAwMAkvKiBTRFJBTSBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCTB4MDIwMDAwMDAJLyogMzIgTUIgKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIXzEJMHgwMDAwMDAwMAkvKiBGbGFzaCBCYW5rICMxICovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJUEhZU19GTEFTSF8xCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KKyAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MgKi8KKyNkZWZpbmUgUEhZU19GTEFTSF9TSVpFCTB4MDIwMDAwMDAJLyogMzJNQiAqLworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX1NFQ1QJKDI1OSkJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisvKiBhZGRyIG9mIGVudmlyb25tZW50ICovCisjZGVmaW5lIENGR19FTlZfQUREUgkoQ0ZHX0ZMQVNIX0JBU0UgKyAweDAyMDAwMCkKKworLyogdGltZW91dCB2YWx1ZXMgYXJlIGluIHRpY2tzICovCisjZGVmaW5lIENGR19GTEFTSF9FUkFTRV9UT1VUCSgyMCpDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlICovCisjZGVmaW5lIENGR19GTEFTSF9XUklURV9UT1VUCSgyMCpDRkdfSFopCS8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisjZGVmaW5lIENGR19FTlZfU0laRQkweDIwMDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCTB4MjAwMDAJLyogZW52aXJvbm1lbnQgc3RhcnRzIGhlcmUgICovCisKKyNlbmRpZgkJCQkJCQkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDczMC5oIGIvaW5jbHVkZS9jb25maWdzL29tYXA3MzAuaAppbmRleCA1ZmJiZWIwLi4wM2FiY2IzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDczMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9vbWFwNzMwLmgKQEAgLTI4LDE1ICsyOCwxMSBAQAogICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLQogI2lmbmRlZiBfX0lOQ0xVREVEX09NQVA3MzBfSAogI2RlZmluZSBfX0lOQ0xVREVEX09NQVA3MzBfSAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvc2l6ZXMuaD4KIAotCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogT01BUDczMCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODcsOSArODMsNiBAQAogI2RlZmluZSBERUJVRzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpKDB4RkZGRTEwRTQpKQogI2RlZmluZSBERUJVR19ETUFfSVJRICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpKDB4RkZGRTEwRTgpKQogCi0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBPTUFQNzMwIEVNSUZTIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUUk0gMi41LjcpCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMTQsOCArMTA3LDYgQEAKICNkZWZpbmUgRkxBU0hfQUNGR18yXzEgICAgICAgICAgICAgKFRDTUlGX0JBU0UgKyAweDU4KQogI2RlZmluZSBGTEFTSF9BQ0ZHXzNfMSAgICAgICAgICAgICAoVENNSUZfQkFTRSArIDB4NUMpCiAKLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBPTUFQNzMwIEludGVycnVwdCBoYW5kbGVycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTIzLDEyICsxMTQsMTAgQEAKICNkZWZpbmUgT01BUF9JSDFfQkFTRQkJMHhGRkZFQ0IwMCAgICAgLyogTVBVIExldmVsIDEgSVJRIGhhbmRsZXIgKi8KICNkZWZpbmUgT01BUF9JSDJfQkFTRSAgICAgICAgICAgMHhmZmZlMDAwMAogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogT01BUDczMCBUaW1lcnMKICAqCi0gKiBUaGVyZSBhcmUgdGhyZWUgZ2VuZXJhbCBwdXJwb3NlIE9TIHRpbWVycyBpbiB0aGUgNzMwIHRoYXQgY2FuIGJlIAorICogVGhlcmUgYXJlIHRocmVlIGdlbmVyYWwgcHVycG9zZSBPUyB0aW1lcnMgaW4gdGhlIDczMCB0aGF0IGNhbiBiZQogICogY29uZmlndXJlZCBpbiBhdXRvcmVsb2FkIG9yIG9uZS1zaG90IG1vZGVzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xNjYsOCArMTU1LDYgQEAKICNkZWZpbmUgTVBVVElNX0FSICAgICAgICAgICAgICAgICAoMTw8MSkKICNkZWZpbmUgTVBVVElNX1NUICAgICAgICAgICAgICAgICAoMTw8MCkKIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE9NQVA3MzAgR1BJTwogICoKQEAgLTIzMSw5ICsyMTgsNiBAQAogI2RlZmluZSBHUElPX0lOVEVSUlVQVF9NQVNLXzYgICAgICAgICgodW5zaWduZWQgaW50KShPTUFQNzMwX0dQSU9fQkFTRV82ICsgR1BJT19JTlRFUlJVUFRfTUFTSykpCiAjZGVmaW5lIEdQSU9fSU5URVJSVVBUX1NUQVRVU182ICAgICAgKCh1bnNpZ25lZCBpbnQpKE9NQVA3MzBfR1BJT19CQVNFXzYgKyBHUElPX0lOVEVSUlVQVF9TVEFUVVMpKQogCi0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBPTUFQNzMwIFdhdGNoZG9nIHRpbWVycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjQ0LDE2ICsyMjgsMTMgQEAKICNkZWZpbmUgV0RUSU1fUkVBRCAgICAgICAgICAgICAgICAgKFdEVElNX0JBU0UgKyAweDA0KSAgICAvKiBNUFVfUkVBRF9USU1FUiAqLwogI2RlZmluZSBXRFRJTV9NT0RFICAgICAgICAgICAgICAgICAoV0RUSU1fQkFTRSArIDB4MDgpICAgIC8qIE1QVV9USU1FUl9NT0RFICovCiAKLQotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE9NQVA3MzAgSW50ZXJydXB0IFJlZ2lzdGVycwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBJbnRlcnJ1cHQgUmVnaXN0ZXIgb2Zmc2V0cyAqLwogCi0jZGVmaW5lIElSUV9JVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAgCisjZGVmaW5lIElSUV9JVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAogI2RlZmluZSBJUlFfTUlSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKICNkZWZpbmUgSVJRX1NJUl9JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwCiAjZGVmaW5lIElSUV9TSVJfRklRICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNApAQCAtMjY1LDE0ICsyNDYsMTIgQEAKICNkZWZpbmUgUkVHX0lITDFfTUlSICAoT01BUF9JSDFfQkFTRSArIElSUV9NSVIpCiAjZGVmaW5lIFJFR19JSEwyX01JUiAgKE9NQVBfSUgyX0JBU0UgKyBJUlFfTUlSKQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE9NQVA3MzAgSW50ZXJzeXN0ZW0gQ29tbXVuaWNhdGlvbiBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAoVFJNIDQuNSkKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAKLSAKKwogI2RlZmluZSBJQ1JfQkFTRSAgICAgICAgICAgICAgICAgICAweEZGRkJCODAwCi0gCisKICNkZWZpbmUgTV9JQ1IgICAgICAgICAgICAgICAgICAgICAgKElDUl9CQVNFICsgMHgwMCkKICNkZWZpbmUgR19JQ1IgICAgICAgICAgICAgICAgICAgICAgKElDUl9CQVNFICsgMHgwMikKICNkZWZpbmUgTV9DVEwgICAgICAgICAgICAgICAgICAgICAgKElDUl9CQVNFICsgMHgwNCkKQEAgLTI4Miw2ICsyNjEsNCBAQAogI2RlZmluZSBSTV9CQSAgICAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDBFKQogI2RlZmluZSBTU1BJX1RBUyAgICAgICAgICAgICAgICAgICAoSUNSX0JBU0UgKyAweDEyKQogCi0KLQogI2VuZGlmIC8qICEgX19JTkNMVURFRF9PTUFQNzMwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwNzMwcDIuaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwNzMwcDIuaAppbmRleCBmZTIwMGMxLi5hY2UzODBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDczMHAyLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXA3MzBwMi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMy0yMDA0IAorICogKEMpIENvcHlyaWdodCAyMDAzLTIwMDQKICAqIE1QQyBEYXRhIExpbWl0ZWQgKGh0dHA6Ly93d3cubXBjLWRhdGEuY28udWspCiAgKiBEYXZlIFBldmVybGV5IDxkcGV2ZXJsZXkgYXQgbXBjLWRhdGEuY28udWs+CiAgKgpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gICAgICAgICBTZWUgdGhlCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCQlTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yNywxNDEgKzI3LDEzMCBAQAogI2lmbmRlZiBfX0NPTkZJR19ICiAjZGVmaW5lIF9fQ09ORklHX0gKIAotCiAvKgogICogSWYgd2UgYXJlIGRldmVsb3BpbmcsIHdlIG1pZ2h0IHdhbnQgdG8gc3RhcnQgYXJtYm9vdCBmcm9tIHJhbQogICogc28gd2UgTVVTVCBOT1QgaW5pdGlhbGl6ZSBjcml0aWNhbCByZWdzIGxpa2UgbWVtLXRpbWluZyAuLi4KICAqLwogCi0jZGVmaW5lIENPTkZJR19JTklUX0NSSVRJQ0FMICAgICAgICAgICAgICAgICAvKiB1bmRlZiBmb3IgZGV2ZWxvcGluZyAqLwotCisjZGVmaW5lIENPTkZJR19JTklUX0NSSVRJQ0FMCQkgICAgIC8qIHVuZGVmIGZvciBkZXZlbG9waW5nICovCiAKIC8qIGFsbG93IHRvIG92ZXJ3cml0ZSBzZXJpYWwgYW5kIGV0aGFkZHIgKi8KICNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUKIAotCiAvKgogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqIChlYXN5IHRvIGNoYW5nZSkKICAqLwogCi0jZGVmaW5lIENPTkZJR19BUk05MjZFSlMgICAgICAgICAgIDEgICAgICAgICAvKiBUaGlzIGlzIGFuIGFybTkyNmVqcyBDUFUgY29yZSAgKi8KLSNkZWZpbmUgQ09ORklHX09NQVAgICAgICAgICAgICAgICAgMSAgICAgICAgIC8qIGluIGEgVEkgT01BUCBjb3JlICAgICovCi0jZGVmaW5lIENPTkZJR19PTUFQNzMwICAgICAgICAgICAgIDEgICAgICAgICAvKiB3aGljaCBpcyBpbiBhIDczMCAgKi8KLSNkZWZpbmUgQ09ORklHX1AyX09NQVA3MzAgICAgICAgICAgMSAgICAgICAgIC8qICBhIFBlcnNldXMgMiBCb2FyZCAgKi8KKyNkZWZpbmUgQ09ORklHX0FSTTkyNkVKUwkgICAxCSAgICAgLyogVGhpcyBpcyBhbiBhcm05MjZlanMgQ1BVIGNvcmUgICovCisjZGVmaW5lIENPTkZJR19PTUFQCQkgICAxCSAgICAgLyogaW4gYSBUSSBPTUFQIGNvcmUgICAgKi8KKyNkZWZpbmUgQ09ORklHX09NQVA3MzAJCSAgIDEJICAgICAvKiB3aGljaCBpcyBpbiBhIDczMCAgKi8KKyNkZWZpbmUgQ09ORklHX1AyX09NQVA3MzAJICAgMQkgICAgIC8qCSBhIFBlcnNldXMgMiBCb2FyZCAgKi8KIAotCi0vKiAKLSAqIElucHV0IGNsb2NrIG9mIFBMTCAKLSAqIFRoZSBPTUFQNzMwIFBlcnNldXMgMiBoYXMgMTNNSHogaW5wdXQgY2xvY2sgCisvKgorICogSW5wdXQgY2xvY2sgb2YgUExMCisgKiBUaGUgT01BUDczMCBQZXJzZXVzIDIgaGFzIDEzTUh6IGlucHV0IGNsb2NrCiAgKi8KIAotI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRICAgICAgICAxMzAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCSAgIDEzMDAwMDAwCiAKLSN1bmRlZiBDT05GSUdfVVNFX0lSUSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdlIGRvbid0IG5lZWQgSVJRL0ZJUSBzdHVmZiAqLworI3VuZGVmIENPTkZJR19VU0VfSVJRCQkJICAgICAvKiB3ZSBkb24ndCBuZWVkIElSUS9GSVEgc3R1ZmYgKi8KIAogI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IKIAotI2RlZmluZSBDT05GSUdfQ01ETElORV9UQUcgICAgICAgICAxICAgICAgICAgLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MgICovCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRwkgICAxCSAgICAgLyogZW5hYmxlIHBhc3Npbmcgb2YgQVRBR3MJICovCiAjZGVmaW5lIENPTkZJR19TRVRVUF9NRU1PUllfVEFHUyAgIDEKIAotCiAvKgogICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAgKi8KIAotI2RlZmluZSBDRkdfTUFMTE9DX0xFTiAgICAgICAgICAgICAoQ0ZHX0VOVl9TSVpFICsgMTI4KjEwMjQpCi0jZGVmaW5lIENGR19HQkxfREFUQV9TSVpFICAgICAgICAgIDEyOCAgICAgICAvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KLQorI2RlZmluZSBDRkdfTUFMTE9DX0xFTgkJICAgKENGR19FTlZfU0laRSArIDEyOCoxMDI0KQorI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRQkgICAxMjgJICAgICAvKiBzaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KIAogLyoKICAqIEhhcmR3YXJlIGRyaXZlcnMKICAqLwogCiAjZGVmaW5lIENPTkZJR19EUklWRVJfTEFOOTFDOTYKLSNkZWZpbmUgQ09ORklHX0xBTjkxQzk2X0JBU0UgICAgICAgMHgwNDAwMDMwMAorI2RlZmluZSBDT05GSUdfTEFOOTFDOTZfQkFTRQkgICAweDA0MDAwMzAwCiAjZGVmaW5lIENPTkZJR19MQU45MUM5Nl9FWFRfUEhZCiAKLQogLyoKICAqIE5TMTY1NTAgQ29uZmlndXJhdGlvbgogICovCiAKICNkZWZpbmUgQ0ZHX05TMTY1NTAKICNkZWZpbmUgQ0ZHX05TMTY1NTBfU0VSSUFMCi0jZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFICAgICAgICgxKQotI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsgICAgICAgICAgICAoNDgwMDAwMDApICAgICAvKiBjYW4gYmUgMTJNLzMyS2h6IG9yIDQ4TWh6ICovCi0jZGVmaW5lIENGR19OUzE2NTUwX0NPTTEgICAgICAgICAgIDB4ZmZmYjAwMDAgICAgIC8qIHVhcnQxLCBibHVldG9vdGggdWFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvbiBwZXJzZXVzICovCisjZGVmaW5lIENGR19OUzE2NTUwX1JFR19TSVpFCSAgICgxKQorI2RlZmluZSBDRkdfTlMxNjU1MF9DTEsJCSAgICg0ODAwMDAwMCkJICAvKiBjYW4gYmUgMTJNLzMyS2h6IG9yIDQ4TWh6ICovCisjZGVmaW5lIENGR19OUzE2NTUwX0NPTTEJICAgMHhmZmZiMDAwMAkgIC8qIHVhcnQxLCBibHVldG9vdGggdWFydAorCQkJCQkJICAgKiBvbiBwZXJzZXVzICovCiAKIC8qCiAgKiBzZWxlY3Qgc2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgogICovCiAKLSNkZWZpbmUgQ09ORklHX1NFUklBTDEgICAgICAgICAgICAgMSAgICAgICAgIC8qIHdlIHVzZSBTRVJJQUwgMSBvbiBPTUFQNzMwIFBlcnNldXMgMiAqLworI2RlZmluZSBDT05GSUdfU0VSSUFMMQkJICAgMQkgICAgIC8qIHdlIHVzZSBTRVJJQUwgMSBvbiBPTUFQNzMwIFBlcnNldXMgMiAqLwogCisjZGVmaW5lIENPTkZJR19DT05TX0lOREVYCSAgIDEKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkgICAxMTUyMDAKKyNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFCSAgIHsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KIAotI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgICAgICAgICAxCi0jZGVmaW5lIENPTkZJR19CQVVEUkFURSAgICAgICAgICAgIDExNTIwMAotI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUgICAgICAgICB7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJICAgKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9ESENQKQorI2RlZmluZSBDT05GSUdfQk9PVFBfTUFTSwkgICBDT05GSUdfQk9PVFBfREVGQVVMVAogCi0jZGVmaW5lIENPTkZJR19DT01NQU5EUyAgICAgICAgICAgIChDT05GSUdfQ01EX0RGTCB8IENGR19DTURfREhDUCkKLSNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sgICAgICAgICAgQ09ORklHX0JPT1RQX0RFRkFVTFQKLQotLyogCi0gKiBUaGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpIAorLyoKKyAqIFRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkKICAqLwogCiAjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CiAjaW5jbHVkZSA8Y29uZmlncy9vbWFwNzMwLmg+CiAjaW5jbHVkZSA8Y29uZmlncy9oMl9wMl9kYmdfYm9hcmQuaD4KIAotI2RlZmluZSBDT05GSUdfQk9PVERFTEFZICAgICAgICAgICAzCi0jZGVmaW5lIENPTkZJR19CT09UQVJHUyAgICAgICAgICAgICJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjggbm9pbml0cmQgcm9vdD0vZGV2L25mcyBydyBpcD1ib290cCIKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQkgICAzCisjZGVmaW5lIENPTkZJR19CT09UQVJHUwkJICAgIm1lbT0zMk0gY29uc29sZT10dHlTMCwxMTUyMDBuOCBub2luaXRyZCByb290PS9kZXYvbmZzIHJ3IGlwPWJvb3RwIgogCi0jZGVmaW5lIENPTkZJR19MT0FEQUREUiAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX0xPQURBRERSCQkgICAweDEwMDAwMDAwCiAKICNkZWZpbmUgQ09ORklHX0VUSEFERFIKLSNkZWZpbmUgQ09ORklHX05FVE1BU0sgICAgICAgICAgICAgMjU1LjI1NS4yNTUuMAotI2RlZmluZSBDT05GSUdfSVBBRERSICAgICAgICAgICAgICAxOTIuMTY4LjAuMjMKLSNkZWZpbmUgQ09ORklHX1NFUlZFUklQICAgICAgICAgICAgMTkyLjE1MC4wLjEwMAotI2RlZmluZSBDT05GSUdfQk9PVEZJTEUgICAgICAgICAgICAidUltYWdlIiAgLyogRmlsZSB0byBsb2FkICovCisjZGVmaW5lIENPTkZJR19ORVRNQVNLCQkgICAyNTUuMjU1LjI1NS4wCisjZGVmaW5lIENPTkZJR19JUEFERFIJCSAgIDE5Mi4xNjguMC4yMworI2RlZmluZSBDT05GSUdfU0VSVkVSSVAJCSAgIDE5Mi4xNTAuMC4xMDAKKyNkZWZpbmUgQ09ORklHX0JPT1RGSUxFCQkgICAidUltYWdlIiAgLyogRmlsZSB0byBsb2FkICovCiAKICNpZiBkZWZpbmVkIChDT05GSUdfQ09NTUFORFMpICYmIGRlZmluZWQgKENGR19DTURfS0dEQikKLSNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUgICAgICAgMTE1MjAwICAgIC8qIFNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCi0jZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWCAgICAgIDEgICAgICAgICAvKiBXaGljaCBzZXJpYWwgcG9ydCB0byB1c2UgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfQkFVRFJBVEUJICAgMTE1MjAwICAgIC8qIFNwZWVkIHRvIHJ1biBrZ2RiIHNlcmlhbCBwb3J0ICovCisjZGVmaW5lIENPTkZJR19LR0RCX1NFUl9JTkRFWAkgICAxCSAgICAgLyogV2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCiAjZW5kaWYKIAotCiAvKgogICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCiAKLSNkZWZpbmUgQ0ZHX0xPTkdIRUxQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bmRlZiB0byBzYXZlIG1lbW9yeSAgICAgKi8KLSNkZWZpbmUgQ0ZHX1BST01QVCAgICAgICAgICAgICAgICAgIk9NQVA3MzAgUDIgIyAiICAgICAvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICAgKi8KLSNkZWZpbmUgQ0ZHX0NCU0laRSAgICAgICAgICAgICAgICAgMjU2ICAgICAgICAgICAgICAgICAvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgKi8KKyNkZWZpbmUgQ0ZHX0xPTkdIRUxQCQkJCSAgICAgICAvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkgICAqLworI2RlZmluZSBDRkdfUFJPTVBUCQkgICAiT01BUDczMCBQMiAjICIgICAgIC8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgICAqLworI2RlZmluZSBDRkdfQ0JTSVpFCQkgICAyNTYJCSAgICAgICAvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgKi8KIC8qIFByaW50IEJ1ZmZlciBTaXplICovCi0jZGVmaW5lIENGR19QQlNJWkUgICAgICAgICAgICAgICAgIChDRkdfQ0JTSVpFK3NpemVvZihDRkdfUFJPTVBUKSsxNikKLSNkZWZpbmUgQ0ZHX01BWEFSR1MgICAgICAgICAgICAgICAgMTYgICAgICAgICAgICAgICAgICAvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAgICovCi0jZGVmaW5lIENGR19CQVJHU0laRSAgICAgICAgICAgICAgIENGR19DQlNJWkUgICAgICAgICAgLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAgICAqLworI2RlZmluZSBDRkdfUEJTSVpFCQkgICAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpCisjZGVmaW5lIENGR19NQVhBUkdTCQkgICAxNgkJICAgICAgIC8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzICAgKi8KKyNkZWZpbmUgQ0ZHX0JBUkdTSVpFCQkgICBDRkdfQ0JTSVpFCSAgICAgICAvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplICAgICovCiAKLSNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQgICAgICAgICAgMHgxMDAwMDAwMCAgICAgICAgICAvKiBtZW10ZXN0IHdvcmtzIG9uICovCi0jZGVmaW5lIENGR19NRU1URVNUX0VORCAgICAgICAgICAgIDB4MTIwMDAwMDAgICAgICAgICAgLyogMzIgTUIgaW4gRFJBTSAgICAqLworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkgICAweDEwMDAwMDAwCSAgICAgICAvKiBtZW10ZXN0IHdvcmtzIG9uICovCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJICAgMHgxMjAwMDAwMAkgICAgICAgLyogMzIgTUIgaW4gRFJBTQkgICAqLwogCi0jdW5kZWYgQ0ZHX0NMS1NfSU5fSFogICAgICAgICAgICAgICAgLyogZXZlcnl0aGluZywgaW5jbCBib2FyZCBpbmZvLCBpbiBIeiAqLworI3VuZGVmIENGR19DTEtTX0lOX0haCQkgICAgIC8qIGV2ZXJ5dGhpbmcsIGluY2wgYm9hcmQgaW5mbywgaW4gSHogKi8KIAotI2RlZmluZSBDRkdfTE9BRF9BRERSICAgICAgICAgICAgICAweDEwMDAwMDAwICAgICAgICAgIC8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisjZGVmaW5lIENGR19MT0FEX0FERFIJCSAgIDB4MTAwMDAwMDAJICAgICAgIC8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiAKLQotLyogVGhlIE9NQVA3MzAgaGFzIDMgZ2VuZXJhbCBwdXJwb3NlIE1QVSB0aW1lcnMsIHRoZXkgY2FuIGJlIGRyaXZlbiBieSAKLSAqIHRoZSBSZWZDbGsgKDEyTWh6KSBvciBieSBEUExMMS4gVGhpcyB0aW1lIGlzIGZ1cnRoZXIgc3ViZGl2aWRlZCBieSBhIAorLyogVGhlIE9NQVA3MzAgaGFzIDMgZ2VuZXJhbCBwdXJwb3NlIE1QVSB0aW1lcnMsIHRoZXkgY2FuIGJlIGRyaXZlbiBieQorICogdGhlIFJlZkNsayAoMTJNaHopIG9yIGJ5IERQTEwxLiBUaGlzIHRpbWUgaXMgZnVydGhlciBzdWJkaXZpZGVkIGJ5IGEKICAqIGxvY2FsIGRpdmlzb3IuCiAgKi8KIAotI2RlZmluZSBDRkdfVElNRVJCQVNFICAgICAgICAgICAgICAweEZGRkVDNTAwICAgICAgICAgIC8qIHVzZSB0aW1lciAxICovCi0jZGVmaW5lIENGR19QVlQgICAgICAgICAgICAgICAgICAgIDcgICAgICAgICAgICAgICAgICAgLyogMl4ocHZ0KzEpLCBkaXZpZGUgYnkgMjU2ICovCi0jZGVmaW5lIENGR19IWiAgICAgICAgICAgICAgICAgICAgICgoQ09ORklHX1NZU19DTEtfRlJFUSkvKDIgPDwgQ0ZHX1BWVCkpCi0KKyNkZWZpbmUgQ0ZHX1RJTUVSQkFTRQkJICAgMHhGRkZFQzUwMAkgICAgICAgLyogdXNlIHRpbWVyIDEgKi8KKyNkZWZpbmUgQ0ZHX1BWVAkJCSAgIDcJCSAgICAgICAvKiAyXihwdnQrMSksIGRpdmlkZSBieSAyNTYgKi8KKyNkZWZpbmUgQ0ZHX0haCQkJICAgKChDT05GSUdfU1lTX0NMS19GUkVRKS8oMiA8PCBDRkdfUFZUKSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogU3RhY2sgc2l6ZXMKQEAgLTE2OSw1MiArMTU4LDQ2IEBACiAgKiBUaGUgc3RhY2sgc2l6ZXMgYXJlIHNldCB1cCBpbiBzdGFydC5TIHVzaW5nIHRoZSBzZXR0aW5ncyBiZWxvdwogICovCiAKLSNkZWZpbmUgQ09ORklHX1NUQUNLU0laRSAgICAgICAgICAgKDEyOCoxMDI0KSAgICAgLyogcmVndWxhciBzdGFjayAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSAgICgxMjgqMTAyNCkJICAvKiByZWd1bGFyIHN0YWNrICovCiAjaWZkZWYgQ09ORklHX1VTRV9JUlEKLSNkZWZpbmUgQ09ORklHX1NUQUNLU0laRV9JUlEgICAgICAgKDQqMTAyNCkgICAgICAgLyogSVJRIHN0YWNrICovCi0jZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRICAgICAgICg0KjEwMjQpICAgICAgIC8qIEZJUSBzdGFjayAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0lSUQkgICAoNCoxMDI0KQkgIC8qIElSUSBzdGFjayAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFX0ZJUQkgICAoNCoxMDI0KQkgIC8qIEZJUSBzdGFjayAqLwogI2VuZGlmCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogUGh5c2ljYWwgTWVtb3J5IE1hcAogICovCiAKLSNkZWZpbmUgQ09ORklHX05SX0RSQU1fQkFOS1MgICAgICAgMSAgICAgICAgICAgICAgLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAqLwotI2RlZmluZSBQSFlTX1NEUkFNXzEgICAgICAgICAgICAgICAweDEwMDAwMDAwICAgICAvKiBTRFJBTSBCYW5rICMxICovCi0jZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFICAgICAgICAgIDB4MDIwMDAwMDAgICAgIC8qIDMyIE1CICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCSAgIDEJCSAgLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAqLworI2RlZmluZSBQSFlTX1NEUkFNXzEJCSAgIDB4MTAwMDAwMDAJICAvKiBTRFJBTSBCYW5rICMxICovCisjZGVmaW5lIFBIWVNfU0RSQU1fMV9TSVpFCSAgIDB4MDIwMDAwMDAJICAvKiAzMiBNQiAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1MwX0JPT1QpCi0jZGVmaW5lIFBIWVNfRkxBU0hfMSAgICAgICAgICAgICAgIDB4MEMwMDAwMDAKKyNkZWZpbmUgUEhZU19GTEFTSF8xCQkgICAweDBDMDAwMDAwCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUzNfQk9PVCkKLSNkZWZpbmUgUEhZU19GTEFTSF8xICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQSFlTX0ZMQVNIXzEJCSAgIDB4MDAwMDAwMDAKICNlbHNlCiAjZXJyb3IgVW5rbm93biBCb290IENoaXAtU2VsZWN0IG51bWJlcgogI2VuZGlmCiAKLSNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UgICAgICAgICAgICAgUEhZU19GTEFTSF8xCi0KLQorI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJICAgUEhZU19GTEFTSF8xCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZMQVNIIGFuZCBlbnZpcm9ubWVudCBvcmdhbml6YXRpb24KICAqLwogCi0jZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MgICAgICAgIDEgICAgICAgICAgICAgIC8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICovCi0jZGVmaW5lIFBIWVNfRkxBU0hfU0laRSAgICAgICAgICAgIDB4MDIwMDAwMDAgICAgIC8qIDMyTUIgKi8KLSNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUICAgICAgICAgKDI1OSkgICAgICAgICAgLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MJICAgMQkJICAvKiBtYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcyAqLworI2RlZmluZSBQSFlTX0ZMQVNIX1NJWkUJCSAgIDB4MDIwMDAwMDAJICAvKiAzMk1CICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkgICAoMjU5KQkgIC8qIG1heCBudW1iZXIgb2Ygc2VjdG9ycyBvbiBvbmUgY2hpcCAqLwogLyogYWRkciBvZiBlbnZpcm9ubWVudCAqLwotI2RlZmluZSBDRkdfRU5WX0FERFIgICAgICAgICAgICAgICAoQ0ZHX0ZMQVNIX0JBU0UgKyAweDAyMDAwMCkKLQorI2RlZmluZSBDRkdfRU5WX0FERFIJCSAgIChDRkdfRkxBU0hfQkFTRSArIDB4MDIwMDAwKQogCiAvKiB0aW1lb3V0IHZhbHVlcyBhcmUgaW4gdGlja3MgKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQgICAgICAgICgyMCpDRkdfSFopICAgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KLSNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgICAgICAgICgyMCpDRkdfSFopICAgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJICAgICgyMCpDRkdfSFopCSAgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJICAgICgyMCpDRkdfSFopCSAgLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKi8KIAotI2RlZmluZSBDRkdfRU5WX0lTX0lOX0ZMQVNIICAgICAgICAxCi0jZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAgICAgIDB4MjAwMDAgICAgICAgIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCi0jZGVmaW5lIENGR19FTlZfT0ZGU0VUICAgICAgICAgICAgIDB4MjAwMDAgICAgICAgIC8qIGVudmlyb25tZW50IHN0YXJ0cyBoZXJlICAqLwotCi0KKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkgICAxCisjZGVmaW5lIENGR19FTlZfU0laRQkJICAgMHgyMDAwMAkgIC8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgU2VjdG9yICovCisjZGVmaW5lIENGR19FTlZfT0ZGU0VUCQkgICAweDIwMDAwCSAgLyogZW52aXJvbm1lbnQgc3RhcnRzIGhlcmUgICovCiAKLSNlbmRpZiAgICAvKiAhIF9fQ09ORklHX0ggKi8KKyNlbmRpZgkgIC8qICEgX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mbGFzaC5oIGIvaW5jbHVkZS9mbGFzaC5oCmluZGV4IDUyMjE5MDcuLjU1NzZlYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZmxhc2guaAorKysgYi9pbmNsdWRlL2ZsYXNoLmgKQEAgLTQyLDkgKzQyLDkgQEAKIAl1bG9uZwllcmFzZV9ibGtfdG91dDsJCS8qIG1heGltdW0gYmxvY2sgZXJhc2UgdGltZW91dAkJKi8KIAl1bG9uZwl3cml0ZV90b3V0OwkJLyogbWF4aW11bSB3cml0ZSB0aW1lb3V0CQkqLwogCXVsb25nCWJ1ZmZlcl93cml0ZV90b3V0OwkvKiBtYXhpbXVtIGJ1ZmZlciB3cml0ZSB0aW1lb3V0CQkqLwotCXVzaG9ydCAgdmVuZG9yOyAgICAgICAgICAgICAgICAgLyogdGhlIHByaW1hcnkgdmVuZG9yIGlkICAgICAgICAgICAgICAgICovCi0JdXNob3J0ICBjbWRfcmVzZXQ7ICAgICAgICAgICAgICAvKiBWZW5kb3Igc3BlY2lmaWMgcmVzZXQgY29tbWFuZCAgICAgICAgKi8KLQl1c2hvcnQgIGludGVyZmFjZTsgICAgICAgICAgICAgIC8qIHVzZWQgZm9yIHg4L3gxNiBhZGp1c3RtZW50cyAgICAgICAgICAqLworCXVzaG9ydAl2ZW5kb3I7CQkJLyogdGhlIHByaW1hcnkgdmVuZG9yIGlkCQkqLworCXVzaG9ydAljbWRfcmVzZXQ7CQkvKiBWZW5kb3Igc3BlY2lmaWMgcmVzZXQgY29tbWFuZAkqLworCXVzaG9ydAlpbnRlcmZhY2U7CQkvKiB1c2VkIGZvciB4OC94MTYgYWRqdXN0bWVudHMJCSovCiAjZW5kaWYKIH0gZmxhc2hfaW5mb190OwogCkBAIC02Myw3ICs2Myw3IEBACiAjZGVmaW5lIEZMQVNIX0NGSV9CWTMyCQkweDA0CiAjZGVmaW5lIEZMQVNIX0NGSV9CWTY0CQkweDA4CiAvKiBjb252ZXJ0IGJldHdlZW4gYml0IHZhbHVlIGFuZCBudW1lcmljIHZhbHVlICovCi0jZGVmaW5lIENGSV9GTEFTSF9TSElGVF9XSURUSCAgICAgIDMKKyNkZWZpbmUgQ0ZJX0ZMQVNIX1NISUZUX1dJRFRICTMKIC8qCiAgKiBWYWx1ZXMgZm9yIHRoZSBmbGFzaCBkZXZpY2UgaW50ZXJmYWNlCiAgKi8KQEAgLTcyLDcgKzcyLDcgQEAKICNkZWZpbmUgRkxBU0hfQ0ZJX1g4WDE2CQkweDAyCiAKIC8qIGNvbnZlcnQgYmV0d2VlbiBiaXQgdmFsdWUgYW5kIG51bWVyaWMgdmFsdWUgKi8KLSNkZWZpbmUgQ0ZJX0ZMQVNIX1NISUZUX1dJRFRIICAgICAgMworI2RlZmluZSBDRklfRkxBU0hfU0hJRlRfV0lEVEgJMwogLyogUHJvdG90eXBlcyAqLwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKTsKQEAgLTEyNyw2ICsxMjcsNyBAQAogI2RlZmluZSBJTlRFTF9BTFRfTUFOVQkweDAwQjAwMEIwCS8qIGFsdGVybmF0ZSBJTlRFTCBuYW11ZmFjdHVyZXIgSUQJKi8KICNkZWZpbmUgTVhfTUFOVUZBQ1QJMHgwMEMyMDBDMgkvKiBNWElDCSAgIG1hbnVmLiBJRCBpbiBEMjMuLkQxNiwgRDcuLkQwICovCiAjZGVmaW5lIFRPU0hfTUFOVUZBQ1QJMHgwMDk4MDA5OAkvKiBUT1NISUJBIG1hbnVmLiBJRCBpbiBEMjMuLkQxNiwgRDcuLkQwICovCisjZGVmaW5lIE1UMl9NQU5VRkFDVAkweDAwMkMwMDJDCS8qIGFsdGVybmF0ZSBNSUNST04gbWFudWZhY3R1cmVyIElEKi8KIAogCQkJCQkvKiBNaWNyb24gVGVjaG5vbG9naWVzIChJTlRFTCBjb21wYXQuKQkqLwogI2RlZmluZSBNVF9JRF8yOEY0MDBfVAkweDQ0NzA0NDcwCS8qIDI4RjQwMEIzIElEICggNCBNLCB0b3AgYm9vdCBzZWN0b3IpCSovCkBAIC0yNDEsNiArMjQyLDkgQEAKICNkZWZpbmUgSU5URUxfSURfMjhGNjQwSjNBICAweDAwMTcwMDE3CS8qICA2NE0gPSAxMjhLIHggIDY0CSovCiAjZGVmaW5lIElOVEVMX0lEXzI4RjEyOEozQSAgMHgwMDE4MDAxOAkvKiAxMjhNID0gMTI4SyB4IDEyOAkqLwogI2RlZmluZSBJTlRFTF9JRF8yOEYyNTZMMThUIDB4ODgwRDg4MEQJLyogMjU2TSA9IDEyOEsgeCAyNTUgKyAzMmsgeCA0ICovCisjZGVmaW5lIElOVEVMX0lEXzI4RjI1NkszIDB4ODgwMzg4MDMgICAgICAgICAgLyogMjU2TSA9IDEyOEsgeCAyNTUgKyAzMmsgeCA0ICovCisjZGVmaW5lIElOVEVMX0lEXzI4RjEyOEszIDB4ODgwMjg4MDIgICAgICAgICAgLyogMTI4TSA9IDY0SyB4IDI1NSArIDMyayB4IDQgKi8KKyNkZWZpbmUgSU5URUxfSURfMjhGNjRLMyAgMHg4ODAxODgwMSAgICAgICAgICAvKiAgNjRNID0gMzJLIHggMjU1ICsgMzJrIHggNCAqLwogCiAjZGVmaW5lIElOVEVMX0lEXzI4RjE2MFMzICAgMHgwMEQwMDBEMAkvKiAgMTZNID0gNTEySyB4ICAzMiAoNjRrQiB4IDMyKQkqLwogI2RlZmluZSBJTlRFTF9JRF8yOEYzMjBTMyAgIDB4MDBENDAwRDQJLyogIDMyTSA9IDUxMksgeCAgNjQgKDY0a0IgeCA2NCkJKi8KQEAgLTM1NCw2ICszNTgsNyBAQAogI2RlZmluZSBGTEFTSF9NWExWMzIwVAkweDAwQUMJCS8qIE1YICAyOUxWMzIwTVQgICAoIDMyTSA9IDJNIHggMTYgKQkqLwogLyogSW50ZWwgMjhGMjU2TDE4VCAyNTZNID0gMTI4SyB4IDI1NSArIDMyayB4IDQJKi8KICNkZWZpbmUgRkxBU0hfMjhGMjU2TDE4VCAweDAwQjAKKyNkZWZpbmUgRkxBU0hfMjhGMjU2SzMJMHgwMEE4CiAjZGVmaW5lIEZMQVNIX0FNREwxNjNUCTB4MDBCMgkJLyogQU1EIEFNMjlETDE2M1QgKDJNIHggMTYgKQkJCSovCiAjZGVmaW5lIEZMQVNIX0FNREwxNjNCCTB4MDBCMwogCg==